Browse Source

WIP: Allow casts to nullables in default expressions

kindlich 4 years ago
parent
commit
17dad43f4d
No known key found for this signature in database

+ 23
- 31
Validator/src/main/java/org/openzen/zenscript/validator/visitors/ValidationUtils.java View File

@@ -5,31 +5,21 @@
5 5
  */
6 6
 package org.openzen.zenscript.validator.visitors;
7 7
 
8
-import java.util.HashSet;
9
-import java.util.Set;
10
-import java.util.regex.Pattern;
11
-import org.openzen.zencode.shared.CodePosition;
12
-import org.openzen.zenscript.codemodel.AccessScope;
13
-import org.openzen.zenscript.codemodel.FunctionHeader;
14
-import org.openzen.zenscript.codemodel.FunctionParameter;
15
-import org.openzen.zenscript.codemodel.HighLevelDefinition;
16
-import org.openzen.zenscript.codemodel.Modifiers;
17
-import org.openzen.zenscript.codemodel.generic.TypeParameterBound;
18
-import org.openzen.zenscript.codemodel.generic.GenericParameterBoundVisitor;
19
-import org.openzen.zenscript.codemodel.generic.ParameterSuperBound;
20
-import org.openzen.zenscript.codemodel.generic.ParameterTypeBound;
21
-import org.openzen.zenscript.codemodel.generic.TypeParameter;
22
-import org.openzen.zenscript.codemodel.member.EnumConstantMember;
23
-import org.openzen.zenscript.codemodel.member.FieldMember;
24
-import org.openzen.zenscript.codemodel.scope.TypeScope;
25
-import org.openzen.zenscript.codemodel.statement.VarStatement;
26
-import org.openzen.zenscript.codemodel.type.ArrayTypeID;
27
-import org.openzen.zenscript.validator.ValidationLogEntry;
28
-import static org.openzen.zenscript.validator.ValidationLogEntry.Code.*;
29
-import org.openzen.zenscript.validator.Validator;
8
+import org.openzen.zencode.shared.*;
9
+import org.openzen.zenscript.codemodel.*;
10
+import org.openzen.zenscript.codemodel.expression.*;
11
+import org.openzen.zenscript.codemodel.generic.*;
12
+import org.openzen.zenscript.codemodel.member.*;
13
+import org.openzen.zenscript.codemodel.scope.*;
14
+import org.openzen.zenscript.codemodel.statement.*;
15
+import org.openzen.zenscript.codemodel.type.*;
16
+import org.openzen.zenscript.validator.*;
30 17
 import org.openzen.zenscript.validator.analysis.ExpressionScope;
31
-import org.openzen.zenscript.codemodel.type.TypeID;
32
-import org.openzen.zenscript.validator.TypeContext;
18
+
19
+import java.util.*;
20
+import java.util.regex.*;
21
+
22
+import static org.openzen.zenscript.validator.ValidationLogEntry.Code.*;
33 23
 
34 24
 /**
35 25
  *
@@ -64,13 +54,15 @@ public class ValidationUtils {
64 54
 			
65 55
 			parameterNames.add(parameter.name);
66 56
 			typeValidator.validate(TypeContext.PARAMETER_TYPE, parameter.type);
67
-			
68
-			if (parameter.defaultValue != null) {
69
-				parameter.defaultValue.accept(new ExpressionValidator(target, new DefaultParameterValueExpressionScope(access)));
70
-				if (!parameter.defaultValue.type.equals(parameter.type)) {
71
-					target.logError(INVALID_TYPE, position, "default value does not match parameter type");
72
-				}
73
-			}
57
+            
58
+            final Expression defaultValue = parameter.defaultValue;
59
+            if (defaultValue != null) {
60
+				defaultValue.accept(new ExpressionValidator(target, new DefaultParameterValueExpressionScope(access)));
61
+                if(!defaultValue.type.equals(parameter.type) && !defaultValue.type
62
+                        .canCastImplicit(parameter.type)) {
63
+                    target.logError(INVALID_TYPE, position, "default value does not match parameter type");
64
+                }
65
+            }
74 66
 			
75 67
 			if (parameter.variadic) {
76 68
 				if (i != header.parameters.length - 1) {

+ 1
- 1
settings.gradle View File

@@ -1,4 +1,4 @@
1
-rootProject.name = 'ZenScript2'
1
+rootProject.name = 'ZenCode'
2 2
 
3 3
 // Find the directories containing a "build.gradle" file in the root directory
4 4
 // of the project. That is, every directory containing a "build.gradle" will

Loading…
Cancel
Save