Kaynağa Gözat

Merge remote-tracking branch 'Stan/development' into development

kindlich 6 yıl önce
ebeveyn
işleme
46415f05df
Veri tabanında bu imza için bilinen anahtar bulunamadı
100 değiştirilmiş dosya ile 1013 ekleme ve 29 silme
  1. 4
    4
      CodeFormatter/src/main/java/org/openzen/zenscript/formatter/DefinitionFormatter.java
  2. 2
    2
      CodeFormatter/src/main/java/org/openzen/zenscript/formatter/TypeFormatter.java
  3. 2
    2
      CodeFormatterShared/src/main/java/org/openzen/zenscript/formattershared/StatementFormattingSubBlock.java
  4. 22
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/FunctionHeader.java
  5. 7
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java
  6. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/Annotation.java
  7. 11
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/AnnotationDefinition.java
  8. 6
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/DefinitionAnnotation.java
  9. 6
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/MemberAnnotation.java
  10. 25
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeAnnotationDefinition.java
  11. 12
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeDefinitionAnnotation.java
  12. 12
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeMemberAnnotation.java
  13. 28
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/PreconditionAnnotationDefinition.java
  14. 20
    2
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/PreconditionForMethod.java
  15. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/StatementAnnotation.java
  16. 35
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/ModuleContext.java
  17. 146
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/StatementContext.java
  18. 74
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/TypeContext.java
  19. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/AliasDefinition.java
  20. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ClassDefinition.java
  21. 28
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/DefinitionVisitorWithContext.java
  22. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/EnumDefinition.java
  23. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ExpansionDefinition.java
  24. 10
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/FunctionDefinition.java
  25. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/InterfaceDefinition.java
  26. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/StructDefinition.java
  27. 8
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/VariantDefinition.java
  28. 13
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ZSPackage.java
  29. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/AndAndExpression.java
  30. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ArrayExpression.java
  31. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallExpression.java
  32. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallStaticExpression.java
  33. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedClosureExpression.java
  34. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedDirectExpression.java
  35. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedLocalVariableExpression.java
  36. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedParameterExpression.java
  37. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedThisExpression.java
  38. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CastExpression.java
  39. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CheckNullExpression.java
  40. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CoalesceExpression.java
  41. 14
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CompareExpression.java
  42. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConditionalExpression.java
  43. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstExpression.java
  44. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantBoolExpression.java
  45. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantByteExpression.java
  46. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantCharExpression.java
  47. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantDoubleExpression.java
  48. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantFloatExpression.java
  49. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantIntExpression.java
  50. 6
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantLongExpression.java
  51. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantSByteExpression.java
  52. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantShortExpression.java
  53. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantStringExpression.java
  54. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUIntExpression.java
  55. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantULongExpression.java
  56. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUShortExpression.java
  57. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUSizeExpression.java
  58. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorSuperCallExpression.java
  59. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorThisCallExpression.java
  60. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/DummyExpression.java
  61. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/EnumConstantExpression.java
  62. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/Expression.java
  63. 148
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ExpressionVisitorWithContext.java
  64. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/FunctionExpression.java
  65. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFieldExpression.java
  66. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFunctionParameterExpression.java
  67. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetLocalVariableExpression.java
  68. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetMatchingVariantField.java
  69. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetStaticFieldExpression.java
  70. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java
  71. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalCallExpression.java
  72. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalExpression.java
  73. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java
  74. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/IsExpression.java
  75. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MakeConstExpression.java
  76. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MapExpression.java
  77. 8
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MatchExpression.java
  78. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NewExpression.java
  79. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NullExpression.java
  80. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/OrOrExpression.java
  81. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PanicExpression.java
  82. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PostCallExpression.java
  83. 5
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/RangeExpression.java
  84. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SameObjectExpression.java
  85. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFieldExpression.java
  86. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFunctionParameterExpression.java
  87. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetLocalVariableExpression.java
  88. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetStaticFieldExpression.java
  89. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetterExpression.java
  90. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java
  91. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticSetterExpression.java
  92. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SupertypeCastExpression.java
  93. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThisExpression.java
  94. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThrowExpression.java
  95. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryConvertExpression.java
  96. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsExceptionExpression.java
  97. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsResultExpression.java
  98. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/VariantValueExpression.java
  99. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/WrapOptionalExpression.java
  100. 0
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/CharSwitchValue.java

+ 4
- 4
CodeFormatter/src/main/java/org/openzen/zenscript/formatter/DefinitionFormatter.java Dosyayı Görüntüle

@@ -40,7 +40,7 @@ public class DefinitionFormatter implements DefinitionVisitor<Void> {
40 40
 		FormattingUtils.formatModifiers(output, definition.modifiers);
41 41
 		output.append("class ");
42 42
 		output.append(definition.name);
43
-		FormattingUtils.formatTypeParameters(output, definition.genericParameters, typeFormatter);
43
+		FormattingUtils.formatTypeParameters(output, definition.typeParameters, typeFormatter);
44 44
 		output.append(" ");
45 45
 		if (definition.getSuperType() != null) {
46 46
 			output.append("extends ");
@@ -69,7 +69,7 @@ public class DefinitionFormatter implements DefinitionVisitor<Void> {
69 69
 		FormattingUtils.formatModifiers(output, definition.modifiers);
70 70
 		output.append("class ");
71 71
 		output.append(definition.name);
72
-		FormattingUtils.formatTypeParameters(output, definition.genericParameters, typeFormatter);
72
+		FormattingUtils.formatTypeParameters(output, definition.typeParameters, typeFormatter);
73 73
 		output.append(" ");
74 74
 		
75 75
 		if (settings.classBracketOnSameLine) {
@@ -94,7 +94,7 @@ public class DefinitionFormatter implements DefinitionVisitor<Void> {
94 94
 		FormattingUtils.formatModifiers(output, definition.modifiers);
95 95
 		output.append("enum ");
96 96
 		output.append(definition.name);
97
-		FormattingUtils.formatTypeParameters(output, definition.genericParameters, typeFormatter);
97
+		FormattingUtils.formatTypeParameters(output, definition.typeParameters, typeFormatter);
98 98
 		output.append(" ");
99 99
 		
100 100
 		if (settings.classBracketOnSameLine) {
@@ -170,7 +170,7 @@ public class DefinitionFormatter implements DefinitionVisitor<Void> {
170 170
 		FormattingUtils.formatModifiers(output, variant.modifiers);
171 171
 		output.append("variant ");
172 172
 		output.append(variant.name);
173
-		FormattingUtils.formatTypeParameters(output, variant.genericParameters, typeFormatter);
173
+		FormattingUtils.formatTypeParameters(output, variant.typeParameters, typeFormatter);
174 174
 		output.append(" ");
175 175
 		
176 176
 		if (settings.classBracketOnSameLine) {

+ 2
- 2
CodeFormatter/src/main/java/org/openzen/zenscript/formatter/TypeFormatter.java Dosyayı Görüntüle

@@ -19,16 +19,16 @@ import org.openzen.zenscript.codemodel.type.FunctionTypeID;
19 19
 import org.openzen.zenscript.codemodel.type.GenericMapTypeID;
20 20
 import org.openzen.zenscript.codemodel.type.GenericTypeID;
21 21
 import org.openzen.zenscript.codemodel.type.ITypeID;
22
-import org.openzen.zenscript.codemodel.type.ITypeVisitor;
23 22
 import org.openzen.zenscript.codemodel.type.IteratorTypeID;
24 23
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
25 24
 import stdlib.Chars;
25
+import org.openzen.zenscript.codemodel.type.TypeVisitor;
26 26
 
27 27
 /**
28 28
  *
29 29
  * @author Hoofdgebruiker
30 30
  */
31
-public class TypeFormatter implements ITypeVisitor<String>, GenericParameterBoundVisitor<String> {
31
+public class TypeFormatter implements TypeVisitor<String>, GenericParameterBoundVisitor<String> {
32 32
 	private final ScriptFormattingSettings settings;
33 33
 	private final Importer importer;
34 34
 	

+ 2
- 2
CodeFormatterShared/src/main/java/org/openzen/zenscript/formattershared/StatementFormattingSubBlock.java Dosyayı Görüntüle

@@ -15,9 +15,9 @@ import org.openzen.zenscript.codemodel.statement.Statement;
15 15
 public class StatementFormattingSubBlock {
16 16
 	public final String header;
17 17
 	public final List<String> literalStatements;
18
-	public final List<Statement> statements;
18
+	public final Statement[] statements;
19 19
 	
20
-	public StatementFormattingSubBlock(String header, List<String> literalStatements, List<Statement> statements) {
20
+	public StatementFormattingSubBlock(String header, List<String> literalStatements, Statement[] statements) {
21 21
 		this.header = header;
22 22
 		this.literalStatements = literalStatements;
23 23
 		this.statements = statements;

+ 22
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/FunctionHeader.java Dosyayı Görüntüle

@@ -6,7 +6,6 @@
6 6
 package org.openzen.zenscript.codemodel;
7 7
 
8 8
 import java.util.Arrays;
9
-import java.util.Collections;
10 9
 import java.util.HashMap;
11 10
 import java.util.List;
12 11
 import java.util.Map;
@@ -131,6 +130,14 @@ public class FunctionHeader {
131 130
 		return typeParameters.length;
132 131
 	}
133 132
 	
133
+	public boolean hasAnyDefaultValues() {
134
+		for (FunctionParameter parameter : parameters)
135
+			if (parameter.defaultValue != null)
136
+				return true;
137
+		
138
+		return false;
139
+	}
140
+	
134 141
 	public FunctionHeader withReturnType(ITypeID returnType) {
135 142
 		return new FunctionHeader(typeParameters, returnType, thrownType, parameters);
136 143
 	}
@@ -332,6 +339,20 @@ public class FunctionHeader {
332 339
 		return true;
333 340
 	}
334 341
 	
342
+	public FunctionHeader instanceForCall(GlobalTypeRegistry registry, CallArguments arguments) {
343
+		if (arguments.getNumberOfTypeArguments() > 0) {
344
+			Map<TypeParameter, ITypeID> typeParameters = new HashMap<>();
345
+			for (int i = 0; i < this.typeParameters.length; i++) {
346
+				typeParameters.put(this.typeParameters[i], arguments.typeArguments[i]);
347
+			}
348
+			return withGenericArguments(
349
+					registry,
350
+					new GenericMapper(registry, typeParameters));
351
+		} else {
352
+			return this;
353
+		}
354
+	}
355
+	
335 356
 	public FunctionHeader withGenericArguments(GlobalTypeRegistry registry, GenericMapper mapper) {
336 357
 		if (typeParameters.length > 0) {
337 358
 			Map<TypeParameter, ITypeID> innerMap = new HashMap<>();

+ 7
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java Dosyayı Görüntüle

@@ -12,6 +12,7 @@ import org.openzen.zencode.shared.Taggable;
12 12
 import org.openzen.zenscript.codemodel.annotations.DefinitionAnnotation;
13 13
 import org.openzen.zenscript.codemodel.definition.AliasDefinition;
14 14
 import org.openzen.zenscript.codemodel.definition.DefinitionVisitor;
15
+import org.openzen.zenscript.codemodel.definition.DefinitionVisitorWithContext;
15 16
 import org.openzen.zenscript.codemodel.definition.ExpansionDefinition;
16 17
 import org.openzen.zenscript.codemodel.definition.InterfaceDefinition;
17 18
 import org.openzen.zenscript.codemodel.definition.MemberCollector;
@@ -37,7 +38,7 @@ public abstract class HighLevelDefinition extends Taggable {
37 38
 	public final String name;
38 39
 	public final int modifiers;
39 40
 	public final List<IDefinitionMember> members = new ArrayList<>();
40
-	public TypeParameter[] genericParameters = TypeParameter.NONE;
41
+	public TypeParameter[] typeParameters = TypeParameter.NONE;
41 42
 	public DefinitionAnnotation[] annotations = DefinitionAnnotation.NONE;
42 43
 	
43 44
 	public HighLevelDefinition outerDefinition;
@@ -82,7 +83,7 @@ public abstract class HighLevelDefinition extends Taggable {
82 83
 	}
83 84
 	
84 85
 	public int getNumberOfGenericParameters() {
85
-		return genericParameters == null ? 0 : genericParameters.length;
86
+		return typeParameters == null ? 0 : typeParameters.length;
86 87
 	}
87 88
 	
88 89
 	public void setOuterDefinition(HighLevelDefinition outerDefinition) {
@@ -125,7 +126,7 @@ public abstract class HighLevelDefinition extends Taggable {
125 126
 	}
126 127
 	
127 128
 	public void setTypeParameters(TypeParameter[] typeParameters) {
128
-		this.genericParameters = typeParameters;
129
+		this.typeParameters = typeParameters;
129 130
 	}
130 131
 	
131 132
 	public List<FieldMember> getFields() {
@@ -180,7 +181,9 @@ public abstract class HighLevelDefinition extends Taggable {
180 181
 	}
181 182
 	
182 183
 	public abstract <T> T accept(DefinitionVisitor<T> visitor);
183
-
184
+	
185
+	public abstract <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor);
186
+	
184 187
 	public HighLevelDefinition getInnerType(String name) {
185 188
 		for (IDefinitionMember member : members) {
186 189
 			if (member instanceof InnerDefinitionMember) {

+ 2
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/Annotation.java Dosyayı Görüntüle

@@ -12,5 +12,7 @@ package org.openzen.zenscript.codemodel.annotations;
12 12
 public interface Annotation {
13 13
 	public static final Annotation[] NONE = new Annotation[0];
14 14
 	
15
+	public AnnotationDefinition getDefinition();
16
+	
15 17
 	public void apply();
16 18
 }

+ 11
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/AnnotationDefinition.java Dosyayı Görüntüle

@@ -10,11 +10,14 @@ import org.openzen.zencode.shared.CodePosition;
10 10
 import org.openzen.zenscript.codemodel.FunctionHeader;
11 11
 import org.openzen.zenscript.codemodel.FunctionParameter;
12 12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
+import org.openzen.zenscript.codemodel.context.StatementContext;
14
+import org.openzen.zenscript.codemodel.context.TypeContext;
13 15
 import org.openzen.zenscript.codemodel.expression.CallArguments;
14 16
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
15 17
 import org.openzen.zenscript.codemodel.scope.BaseScope;
16 18
 import org.openzen.zenscript.codemodel.scope.ExpressionScope;
17 19
 import org.openzen.zenscript.codemodel.scope.StatementScope;
20
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationInput;
18 21
 import org.openzen.zenscript.codemodel.statement.Statement;
19 22
 
20 23
 /**
@@ -41,4 +44,12 @@ public interface AnnotationDefinition {
41 44
 	public StatementAnnotation createForStatement(CodePosition position, CallArguments arguments);
42 45
 	
43 46
 	public Annotation createForParameter(CodePosition position, CallArguments arguments);
47
+	
48
+	public MemberAnnotation deserializeForMember(CodeSerializationInput input, TypeContext context, IDefinitionMember member);
49
+	
50
+	public DefinitionAnnotation deserializeForDefinition(CodeSerializationInput input, TypeContext context);
51
+	
52
+	public StatementAnnotation deserializeForStatement(CodeSerializationInput input, StatementContext context);
53
+	
54
+	public Annotation deserializeForParameter(CodeSerializationInput input, TypeContext context);
44 55
 }

+ 6
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/DefinitionAnnotation.java Dosyayı Görüntüle

@@ -6,7 +6,9 @@
6 6
 package org.openzen.zenscript.codemodel.annotations;
7 7
 
8 8
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
+import org.openzen.zenscript.codemodel.context.TypeContext;
9 10
 import org.openzen.zenscript.codemodel.scope.BaseScope;
11
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationOutput;
10 12
 
11 13
 /**
12 14
  *
@@ -15,7 +17,11 @@ import org.openzen.zenscript.codemodel.scope.BaseScope;
15 17
 public interface DefinitionAnnotation {
16 18
 	public static final DefinitionAnnotation[] NONE = new DefinitionAnnotation[0];
17 19
 	
20
+	public AnnotationDefinition getDefinition();
21
+	
18 22
 	public void apply(HighLevelDefinition definition, BaseScope scope);
19 23
 	
20 24
 	public void applyOnSubtype(HighLevelDefinition definition, BaseScope scope);
25
+	
26
+	public void serialize(CodeSerializationOutput output, HighLevelDefinition definition, TypeContext context);
21 27
 }

+ 6
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/MemberAnnotation.java Dosyayı Görüntüle

@@ -5,11 +5,13 @@
5 5
  */
6 6
 package org.openzen.zenscript.codemodel.annotations;
7 7
 
8
+import org.openzen.zenscript.codemodel.context.TypeContext;
8 9
 import org.openzen.zenscript.codemodel.member.FunctionalMember;
9 10
 import org.openzen.zenscript.codemodel.member.GetterMember;
10 11
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
11 12
 import org.openzen.zenscript.codemodel.member.SetterMember;
12 13
 import org.openzen.zenscript.codemodel.scope.BaseScope;
14
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationOutput;
13 15
 
14 16
 /**
15 17
  *
@@ -18,6 +20,8 @@ import org.openzen.zenscript.codemodel.scope.BaseScope;
18 20
 public interface MemberAnnotation {
19 21
 	public static final MemberAnnotation[] NONE = new MemberAnnotation[0];
20 22
 	
23
+	public AnnotationDefinition getDefinition();
24
+	
21 25
 	public void apply(IDefinitionMember member, BaseScope scope);
22 26
 	
23 27
 	public void applyOnOverridingMethod(FunctionalMember member, BaseScope scope);
@@ -25,4 +29,6 @@ public interface MemberAnnotation {
25 29
 	public void applyOnOverridingGetter(GetterMember member, BaseScope scope);
26 30
 	
27 31
 	public void applyOnOverridingSetter(SetterMember member, BaseScope scope);
32
+	
33
+	public void serialize(CodeSerializationOutput output, IDefinitionMember member, TypeContext context);
28 34
 }

+ 25
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeAnnotationDefinition.java Dosyayı Görüntüle

@@ -11,12 +11,15 @@ import org.openzen.zencode.shared.CodePosition;
11 11
 import org.openzen.zenscript.codemodel.FunctionHeader;
12 12
 import org.openzen.zenscript.codemodel.FunctionParameter;
13 13
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
14
+import org.openzen.zenscript.codemodel.context.StatementContext;
15
+import org.openzen.zenscript.codemodel.context.TypeContext;
14 16
 import org.openzen.zenscript.codemodel.expression.CallArguments;
15 17
 import org.openzen.zenscript.codemodel.expression.Expression;
16 18
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
17 19
 import org.openzen.zenscript.codemodel.scope.BaseScope;
18 20
 import org.openzen.zenscript.codemodel.scope.ExpressionScope;
19 21
 import org.openzen.zenscript.codemodel.scope.StatementScope;
22
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationInput;
20 23
 import org.openzen.zenscript.codemodel.statement.Statement;
21 24
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
22 25
 
@@ -85,4 +88,26 @@ public class NativeAnnotationDefinition implements AnnotationDefinition {
85 88
 	public Annotation createForParameter(CodePosition position, CallArguments arguments) {
86 89
 		throw new UnsupportedOperationException("Not supported");
87 90
 	}
91
+
92
+	@Override
93
+	public MemberAnnotation deserializeForMember(CodeSerializationInput input, TypeContext context, IDefinitionMember member) {
94
+		String name = input.readString();
95
+		return new NativeMemberAnnotation(name);
96
+	}
97
+
98
+	@Override
99
+	public DefinitionAnnotation deserializeForDefinition(CodeSerializationInput input, TypeContext context) {
100
+		String name = input.readString();
101
+		return new NativeDefinitionAnnotation(name);
102
+	}
103
+
104
+	@Override
105
+	public StatementAnnotation deserializeForStatement(CodeSerializationInput input, StatementContext context) {
106
+		throw new UnsupportedOperationException("Not supported");
107
+	}
108
+
109
+	@Override
110
+	public Annotation deserializeForParameter(CodeSerializationInput input, TypeContext context) {
111
+		throw new UnsupportedOperationException("Not supported");
112
+	}
88 113
 }

+ 12
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeDefinitionAnnotation.java Dosyayı Görüntüle

@@ -6,7 +6,9 @@
6 6
 package org.openzen.zenscript.codemodel.annotations;
7 7
 
8 8
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
+import org.openzen.zenscript.codemodel.context.TypeContext;
9 10
 import org.openzen.zenscript.codemodel.scope.BaseScope;
11
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationOutput;
10 12
 
11 13
 /**
12 14
  *
@@ -18,6 +20,11 @@ public class NativeDefinitionAnnotation implements DefinitionAnnotation {
18 20
 	public NativeDefinitionAnnotation(String identifier) {
19 21
 		this.identifier = identifier;
20 22
 	}
23
+
24
+	@Override
25
+	public AnnotationDefinition getDefinition() {
26
+		return NativeAnnotationDefinition.INSTANCE;
27
+	}
21 28
 	
22 29
 	@Override
23 30
 	public void apply(HighLevelDefinition definition, BaseScope scope) {
@@ -28,4 +35,9 @@ public class NativeDefinitionAnnotation implements DefinitionAnnotation {
28 35
 	public void applyOnSubtype(HighLevelDefinition definition, BaseScope scope) {
29 36
 		// this annotation is not inherited
30 37
 	}
38
+
39
+	@Override
40
+	public void serialize(CodeSerializationOutput output, HighLevelDefinition definition, TypeContext context) {
41
+		output.writeString(identifier);
42
+	}
31 43
 }

+ 12
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/NativeMemberAnnotation.java Dosyayı Görüntüle

@@ -5,11 +5,13 @@
5 5
  */
6 6
 package org.openzen.zenscript.codemodel.annotations;
7 7
 
8
+import org.openzen.zenscript.codemodel.context.TypeContext;
8 9
 import org.openzen.zenscript.codemodel.member.FunctionalMember;
9 10
 import org.openzen.zenscript.codemodel.member.GetterMember;
10 11
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
11 12
 import org.openzen.zenscript.codemodel.member.SetterMember;
12 13
 import org.openzen.zenscript.codemodel.scope.BaseScope;
14
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationOutput;
13 15
 
14 16
 /**
15 17
  *
@@ -21,6 +23,11 @@ public class NativeMemberAnnotation implements MemberAnnotation {
21 23
 	public NativeMemberAnnotation(String identifier) {
22 24
 		this.identifier = identifier;
23 25
 	}
26
+
27
+	@Override
28
+	public AnnotationDefinition getDefinition() {
29
+		return NativeAnnotationDefinition.INSTANCE;
30
+	}
24 31
 	
25 32
 	@Override
26 33
 	public void apply(IDefinitionMember member, BaseScope scope) {
@@ -41,4 +48,9 @@ public class NativeMemberAnnotation implements MemberAnnotation {
41 48
 	public void applyOnOverridingSetter(SetterMember member, BaseScope scope) {
42 49
 		// not inherited
43 50
 	}
51
+
52
+	@Override
53
+	public void serialize(CodeSerializationOutput output, IDefinitionMember member, TypeContext context) {
54
+		output.writeString(identifier);
55
+	}
44 56
 }

+ 28
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/PreconditionAnnotationDefinition.java Dosyayı Görüntüle

@@ -12,6 +12,8 @@ import org.openzen.zencode.shared.CodePosition;
12 12
 import org.openzen.zenscript.codemodel.FunctionHeader;
13 13
 import org.openzen.zenscript.codemodel.FunctionParameter;
14 14
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
15
+import org.openzen.zenscript.codemodel.context.StatementContext;
16
+import org.openzen.zenscript.codemodel.context.TypeContext;
15 17
 import org.openzen.zenscript.codemodel.definition.FunctionDefinition;
16 18
 import org.openzen.zenscript.codemodel.expression.CallArguments;
17 19
 import org.openzen.zenscript.codemodel.expression.Expression;
@@ -21,6 +23,7 @@ import org.openzen.zenscript.codemodel.scope.BaseScope;
21 23
 import org.openzen.zenscript.codemodel.scope.ExpressionScope;
22 24
 import org.openzen.zenscript.codemodel.scope.FunctionScope;
23 25
 import org.openzen.zenscript.codemodel.scope.StatementScope;
26
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationInput;
24 27
 import org.openzen.zenscript.codemodel.statement.Statement;
25 28
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
26 29
 import org.openzen.zenscript.codemodel.type.GenericName;
@@ -104,4 +107,29 @@ public class PreconditionAnnotationDefinition implements AnnotationDefinition {
104 107
 	public Annotation createForParameter(CodePosition position, CallArguments arguments) {
105 108
 		throw new UnsupportedOperationException("Not supported");
106 109
 	}
110
+
111
+	@Override
112
+	public MemberAnnotation deserializeForMember(CodeSerializationInput input, TypeContext context, IDefinitionMember member) {
113
+		CodePosition position = input.deserializePosition();
114
+		String enforcement = input.readString();
115
+		StatementContext statementContext = new StatementContext(context, member.getHeader());
116
+		Expression condition = input.deserializeExpression(statementContext);
117
+		Expression message = input.deserializeExpression(statementContext);
118
+		return new PreconditionForMethod(position, enforcement, condition, message);
119
+	}
120
+
121
+	@Override
122
+	public DefinitionAnnotation deserializeForDefinition(CodeSerializationInput input, TypeContext context) {
123
+		throw new UnsupportedOperationException("Not supported");
124
+	}
125
+
126
+	@Override
127
+	public StatementAnnotation deserializeForStatement(CodeSerializationInput input, StatementContext context) {
128
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
129
+	}
130
+
131
+	@Override
132
+	public Annotation deserializeForParameter(CodeSerializationInput input, TypeContext context) {
133
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
134
+	}
107 135
 }

+ 20
- 2
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/PreconditionForMethod.java Dosyayı Görüntüle

@@ -6,8 +6,11 @@
6 6
 package org.openzen.zenscript.codemodel.annotations;
7 7
 
8 8
 import java.util.ArrayList;
9
+import java.util.Arrays;
9 10
 import java.util.List;
10 11
 import org.openzen.zencode.shared.CodePosition;
12
+import org.openzen.zenscript.codemodel.context.StatementContext;
13
+import org.openzen.zenscript.codemodel.context.TypeContext;
11 14
 import org.openzen.zenscript.codemodel.expression.Expression;
12 15
 import org.openzen.zenscript.codemodel.expression.ExpressionBuilder;
13 16
 import org.openzen.zenscript.codemodel.expression.PanicExpression;
@@ -17,6 +20,7 @@ import org.openzen.zenscript.codemodel.member.IDefinitionMember;
17 20
 import org.openzen.zenscript.codemodel.member.SetterMember;
18 21
 import org.openzen.zenscript.codemodel.scope.BaseScope;
19 22
 import org.openzen.zenscript.codemodel.scope.ExpressionScope;
23
+import org.openzen.zenscript.codemodel.serialization.CodeSerializationOutput;
20 24
 import org.openzen.zenscript.codemodel.statement.BlockStatement;
21 25
 import org.openzen.zenscript.codemodel.statement.ExpressionStatement;
22 26
 import org.openzen.zenscript.codemodel.statement.IfStatement;
@@ -43,6 +47,11 @@ public class PreconditionForMethod implements MemberAnnotation {
43 47
 		this.condition = condition;
44 48
 		this.message = message;
45 49
 	}
50
+	
51
+	@Override
52
+	public AnnotationDefinition getDefinition() {
53
+		return PreconditionAnnotationDefinition.INSTANCE;
54
+	}
46 55
 
47 56
 	@Override
48 57
 	public void apply(IDefinitionMember member, BaseScope scope) {
@@ -82,10 +91,19 @@ public class PreconditionForMethod implements MemberAnnotation {
82 91
 		statements.add(new IfStatement(position, inverseCondition, throwStatement, null));
83 92
 		
84 93
 		if (body instanceof BlockStatement) {
85
-			statements.addAll(((BlockStatement)body).statements);
94
+			statements.addAll(Arrays.asList(((BlockStatement)body).statements));
86 95
 		} else {
87 96
 			statements.add(body);
88 97
 		}
89
-		return new BlockStatement(position, statements);
98
+		return new BlockStatement(position, statements.toArray(new Statement[statements.size()]));
99
+	}
100
+
101
+	@Override
102
+	public void serialize(CodeSerializationOutput output, IDefinitionMember member, TypeContext context) {
103
+		output.serialize(position);
104
+		output.writeString(enforcement);
105
+		StatementContext statementContext = new StatementContext(context, member.getHeader());
106
+		output.serialize(statementContext, condition);
107
+		output.serialize(statementContext, message);
90 108
 	}
91 109
 }

+ 2
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/annotations/StatementAnnotation.java Dosyayı Görüntüle

@@ -15,5 +15,7 @@ import org.openzen.zenscript.codemodel.statement.Statement;
15 15
 public interface StatementAnnotation {
16 16
 	public static final StatementAnnotation[] NONE = new StatementAnnotation[0];
17 17
 	
18
+	public AnnotationDefinition getDefinition();
19
+	
18 20
 	public Statement apply(Statement statement, StatementScope scope);
19 21
 }

+ 35
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/ModuleContext.java Dosyayı Görüntüle

@@ -0,0 +1,35 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.codemodel.context;
7
+
8
+import java.util.List;
9
+import org.openzen.zenscript.codemodel.Module;
10
+import org.openzen.zenscript.codemodel.definition.ExpansionDefinition;
11
+import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
+import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
13
+
14
+/**
15
+ *
16
+ * @author Hoofdgebruiker
17
+ */
18
+public class ModuleContext {
19
+	public final GlobalTypeRegistry registry;
20
+	public final Module module;
21
+	public final List<ExpansionDefinition> expansions;
22
+	public final ZSPackage root;
23
+	
24
+	public ModuleContext(
25
+			GlobalTypeRegistry registry,
26
+			Module module,
27
+			List<ExpansionDefinition> expansions,
28
+			ZSPackage root)
29
+	{
30
+		this.registry = registry;
31
+		this.module = module;
32
+		this.expansions = expansions;
33
+		this.root = root;
34
+	}
35
+}

+ 146
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/StatementContext.java Dosyayı Görüntüle

@@ -0,0 +1,146 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.codemodel.context;
7
+
8
+import java.util.ArrayList;
9
+import java.util.Arrays;
10
+import java.util.List;
11
+import org.openzen.zenscript.codemodel.FunctionHeader;
12
+import org.openzen.zenscript.codemodel.FunctionParameter;
13
+import org.openzen.zenscript.codemodel.expression.LambdaClosure;
14
+import org.openzen.zenscript.codemodel.expression.switchvalue.VariantOptionSwitchValue;
15
+import org.openzen.zenscript.codemodel.generic.TypeParameter;
16
+import org.openzen.zenscript.codemodel.statement.LoopStatement;
17
+import org.openzen.zenscript.codemodel.statement.VarStatement;
18
+import org.openzen.zenscript.codemodel.type.ITypeID;
19
+
20
+/**
21
+ *
22
+ * @author Hoofdgebruiker
23
+ */
24
+public class StatementContext extends TypeContext {
25
+	private final List<VarStatement> variables = new ArrayList<>();
26
+	private final LoopStatement[] loops;
27
+	private final FunctionHeader header;
28
+	private final LambdaClosure closure;
29
+	private final StatementContext lambdaOuter;
30
+	
31
+	public VariantOptionSwitchValue variantOptionSwitchValue;
32
+	
33
+	public StatementContext(ModuleContext module, ITypeID thisType) {
34
+		super(module, TypeParameter.NONE, thisType);
35
+		
36
+		loops = LoopStatement.NONE;
37
+		header = null;
38
+		closure = null;
39
+		lambdaOuter = null;
40
+	}
41
+	
42
+	public StatementContext(ModuleContext module, ITypeID thisType, FunctionHeader header) {
43
+		super(module, header.typeParameters, thisType);
44
+		
45
+		loops = LoopStatement.NONE;
46
+		this.header = header;
47
+		this.closure = null;
48
+		lambdaOuter = null;
49
+	}
50
+	
51
+	public StatementContext(TypeContext outer) {
52
+		super(outer.moduleContext, outer.typeParameters, outer.thisType);
53
+		loops = LoopStatement.NONE;
54
+		header = null;
55
+		closure = null;
56
+		lambdaOuter = null;
57
+	}
58
+	
59
+	public StatementContext(TypeContext outer, FunctionHeader header) {
60
+		super(outer, outer.thisType, header == null ? TypeParameter.NONE : header.typeParameters);
61
+		loops = LoopStatement.NONE;
62
+		this.header = header;
63
+		closure = null;
64
+		lambdaOuter = null;
65
+	}
66
+	
67
+	public StatementContext(StatementContext outer) {
68
+		super(outer.moduleContext, outer.typeParameters, outer.thisType);
69
+		
70
+		variables.addAll(outer.variables);
71
+		loops = outer.loops;
72
+		header = outer.header;
73
+		closure = outer.closure;
74
+		lambdaOuter = outer.lambdaOuter;
75
+	}
76
+	
77
+	public StatementContext(StatementContext outer, LoopStatement loop) {
78
+		super(outer.moduleContext, outer.typeParameters, outer.thisType);
79
+		
80
+		variables.addAll(outer.variables);
81
+		loops = Arrays.copyOf(outer.loops, outer.loops.length + 1);
82
+		loops[loops.length - 1] = loop;
83
+		header = outer.header;
84
+		closure = outer.closure;
85
+		lambdaOuter = outer.lambdaOuter;
86
+	}
87
+	
88
+	public StatementContext(StatementContext outer, FunctionHeader lambdaHeader, LambdaClosure lambdaClosure) {
89
+		super(outer, outer.thisType, lambdaHeader.typeParameters);
90
+		
91
+		loops = LoopStatement.NONE;
92
+		header = lambdaHeader;
93
+		this.closure = lambdaClosure;
94
+		lambdaOuter = outer;
95
+	}
96
+	
97
+	public void add(VarStatement variable) {
98
+		variables.add(variable);
99
+	}
100
+	
101
+	public int getVariableId(VarStatement variable) {
102
+		int id = variables.indexOf(variable);
103
+		if (id < 0)
104
+			throw new IllegalArgumentException("Variable not in scope: " + variable.name);
105
+		return id;
106
+	}
107
+	
108
+	public int getLoopId(LoopStatement loop) {
109
+		for (int i = 0; i < loops.length; i++)
110
+			if (loops[i] == loop)
111
+				return i;
112
+		
113
+		throw new IllegalArgumentException("Loop@" + loop.position + " not in scope");
114
+	}
115
+	
116
+	public int getParameterIndex(FunctionParameter parameter) {
117
+		if (header == null)
118
+			throw new IllegalStateException("No parameters available");
119
+		
120
+		for (int i = 0; i < header.parameters.length; i++)
121
+			if (header.parameters[i] == parameter)
122
+				return i;
123
+		
124
+		throw new IllegalArgumentException("Parameter" + parameter.name + " not in scope");
125
+	}
126
+	
127
+	public VarStatement getVariable(int id) {
128
+		return variables.get(id);
129
+	}
130
+
131
+	public LoopStatement getLoop(int id) {
132
+		return loops[id];
133
+	}
134
+	
135
+	public FunctionParameter getParameter(int id) {
136
+		return header.parameters[id];
137
+	}
138
+	
139
+	public LambdaClosure getLambdaClosure() {
140
+		return closure;
141
+	}
142
+	
143
+	public StatementContext getLambdaOuter() {
144
+		return lambdaOuter;
145
+	}
146
+}

+ 74
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/TypeContext.java Dosyayı Görüntüle

@@ -0,0 +1,74 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.codemodel.context;
7
+
8
+import java.util.Arrays;
9
+import java.util.HashMap;
10
+import java.util.List;
11
+import java.util.Map;
12
+import org.openzen.zenscript.codemodel.GenericMapper;
13
+import org.openzen.zenscript.codemodel.generic.TypeParameter;
14
+import org.openzen.zenscript.codemodel.type.ITypeID;
15
+import org.openzen.zenscript.codemodel.type.member.LocalMemberCache;
16
+import org.openzen.zenscript.codemodel.type.member.TypeMembers;
17
+
18
+/**
19
+ *
20
+ * @author Hoofdgebruiker
21
+ */
22
+public class TypeContext {
23
+	protected final TypeParameter[] typeParameters;
24
+	public final ITypeID thisType;
25
+	private final LocalMemberCache memberCache;
26
+	public final ModuleContext moduleContext;
27
+	
28
+	public TypeContext(ModuleContext context, TypeParameter[] parameters, ITypeID thisType) {
29
+		this.typeParameters = parameters;
30
+		this.thisType = thisType;
31
+		memberCache = new LocalMemberCache(context.registry, context.expansions);
32
+		moduleContext = context;
33
+	}
34
+	
35
+	public TypeContext(TypeContext outer, ITypeID thisType, TypeParameter... inner) {
36
+		typeParameters = concat(outer.typeParameters, inner);
37
+		this.thisType = thisType;
38
+		moduleContext = outer.moduleContext;
39
+		memberCache = new LocalMemberCache(moduleContext.registry, moduleContext.expansions);
40
+	}
41
+	
42
+	public TypeContext(TypeContext outer, ITypeID thisType, List<TypeParameter> inner) {
43
+		this(outer, thisType, inner.toArray(new TypeParameter[inner.size()]));
44
+	}
45
+	
46
+	public int getId(TypeParameter parameter) {
47
+		for (int i = 0; i < typeParameters.length; i++)
48
+			if (typeParameters[i] == parameter)
49
+				return i;
50
+		
51
+		return -1;
52
+	}
53
+	
54
+	public TypeParameter getTypeParameter(int index) {
55
+		return typeParameters[index];
56
+	}
57
+	
58
+	public TypeMembers getTypeMembers(ITypeID type) {
59
+		return memberCache.get(type);
60
+	}
61
+	
62
+	public GenericMapper getMapper() {
63
+		Map<TypeParameter, ITypeID> mapper = new HashMap<>();
64
+		for (TypeParameter parameter : typeParameters)
65
+			mapper.put(parameter, moduleContext.registry.getGeneric(parameter));
66
+		return new GenericMapper(moduleContext.registry, mapper);
67
+	}
68
+	
69
+	public static <T> T[] concat(T[] first, T[] second) {
70
+		T[] result = Arrays.copyOf(first, first.length + second.length);
71
+		System.arraycopy(second, 0, result, first.length, second.length);
72
+		return result;
73
+	}
74
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/AliasDefinition.java Dosyayı Görüntüle

@@ -39,6 +39,11 @@ public class AliasDefinition extends HighLevelDefinition {
39 39
 		return visitor.visitAlias(this);
40 40
 	}
41 41
 
42
+	@Override
43
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
44
+		return visitor.visitAlias(context, this);
45
+	}
46
+
42 47
 	@Override
43 48
 	public void normalize(TypeScope scope) {
44 49
 		// nothing to do

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ClassDefinition.java Dosyayı Görüntüle

@@ -26,4 +26,9 @@ public class ClassDefinition extends HighLevelDefinition {
26 26
 	public <T> T accept(DefinitionVisitor<T> visitor) {
27 27
 		return visitor.visitClass(this);
28 28
 	}
29
+
30
+	@Override
31
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitClass(context, this);
33
+	}
29 34
 }

+ 28
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/DefinitionVisitorWithContext.java Dosyayı Görüntüle

@@ -0,0 +1,28 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.codemodel.definition;
7
+
8
+/**
9
+ *
10
+ * @author Hoofdgebruiker
11
+ */
12
+public interface DefinitionVisitorWithContext<C, R> {
13
+	R visitClass(C context, ClassDefinition definition);
14
+	
15
+	R visitInterface(C context, InterfaceDefinition definition);
16
+	
17
+	R visitEnum(C context, EnumDefinition definition);
18
+	
19
+	R visitStruct(C context, StructDefinition definition);
20
+	
21
+	R visitFunction(C context, FunctionDefinition definition);
22
+	
23
+	R visitExpansion(C context, ExpansionDefinition definition);
24
+	
25
+	R visitAlias(C context, AliasDefinition definition);
26
+	
27
+	R visitVariant(C context, VariantDefinition variant);
28
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/EnumDefinition.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class EnumDefinition extends HighLevelDefinition {
27 27
 	public <T> T accept(DefinitionVisitor<T> visitor) {
28 28
 		return visitor.visitEnum(this);
29 29
 	}
30
+
31
+	@Override
32
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitEnum(context, this);
34
+	}
30 35
 	
31 36
 	@Override
32 37
 	public void collectMembers(MemberCollector collector) {

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ExpansionDefinition.java Dosyayı Görüntüle

@@ -25,4 +25,9 @@ public class ExpansionDefinition extends HighLevelDefinition {
25 25
 	public <T> T accept(DefinitionVisitor<T> visitor) {
26 26
 		return visitor.visitExpansion(this);
27 27
 	}
28
+
29
+	@Override
30
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
31
+		return visitor.visitExpansion(context, this);
32
+	}
28 33
 }

+ 10
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/FunctionDefinition.java Dosyayı Görüntüle

@@ -14,6 +14,7 @@ import org.openzen.zenscript.codemodel.Module;
14 14
 import org.openzen.zenscript.codemodel.member.CallerMember;
15 15
 import org.openzen.zenscript.codemodel.member.ref.FunctionalMemberRef;
16 16
 import org.openzen.zenscript.codemodel.statement.Statement;
17
+import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
17 18
 import org.openzen.zenscript.codemodel.type.member.DefinitionMemberGroup;
18 19
 import org.openzen.zenscript.codemodel.type.member.TypeMemberPriority;
19 20
 
@@ -32,15 +33,15 @@ public class FunctionDefinition extends HighLevelDefinition {
32 33
 		callerGroup = new DefinitionMemberGroup(true, name);
33 34
 	}
34 35
 	
35
-	public FunctionDefinition(CodePosition position, Module module, ZSPackage pkg, String name, int modifiers, FunctionHeader header) {
36
+	public FunctionDefinition(CodePosition position, Module module, ZSPackage pkg, String name, int modifiers, FunctionHeader header, GlobalTypeRegistry registry) {
36 37
 		this(position, module, pkg, name, modifiers, (HighLevelDefinition) null);
37
-		setHeader(header);
38
+		setHeader(registry, header);
38 39
 	}
39 40
 	
40
-	public void setHeader(FunctionHeader header) {
41
+	public void setHeader(GlobalTypeRegistry registry, FunctionHeader header) {
41 42
 		this.header = header;
42 43
 		addMember(caller = new CallerMember(position, this, modifiers | Modifiers.STATIC, header, null));
43
-		callerGroup.addMethod(new FunctionalMemberRef(caller, GenericMapper.EMPTY), TypeMemberPriority.SPECIFIED);
44
+		callerGroup.addMethod(new FunctionalMemberRef(caller, registry.getFunction(header), GenericMapper.EMPTY), TypeMemberPriority.SPECIFIED);
44 45
 	}
45 46
 	
46 47
 	public void setCode(Statement statement) {
@@ -52,4 +53,9 @@ public class FunctionDefinition extends HighLevelDefinition {
52 53
 	public <T> T accept(DefinitionVisitor<T> visitor) {
53 54
 		return visitor.visitFunction(this);
54 55
 	}
56
+
57
+	@Override
58
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
59
+		return visitor.visitFunction(context, this);
60
+	}
55 61
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/InterfaceDefinition.java Dosyayı Görüntüle

@@ -45,4 +45,9 @@ public class InterfaceDefinition extends HighLevelDefinition {
45 45
 	public <T> T accept(DefinitionVisitor<T> visitor) {
46 46
 		return visitor.visitInterface(this);
47 47
 	}
48
+
49
+	@Override
50
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
51
+		return visitor.visitInterface(context, this);
52
+	}
48 53
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/StructDefinition.java Dosyayı Görüntüle

@@ -22,4 +22,9 @@ public class StructDefinition extends HighLevelDefinition {
22 22
 	public <T> T accept(DefinitionVisitor<T> visitor) {
23 23
 		return visitor.visitStruct(this);
24 24
 	}
25
+
26
+	@Override
27
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
28
+		return visitor.visitStruct(context, this);
29
+	}
25 30
 }

+ 8
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/VariantDefinition.java Dosyayı Görüntüle

@@ -30,6 +30,11 @@ public class VariantDefinition extends HighLevelDefinition {
30 30
 	public <T> T accept(DefinitionVisitor<T> visitor) {
31 31
 		return visitor.visitVariant(this);
32 32
 	}
33
+
34
+	@Override
35
+	public <C, R> R accept(C context, DefinitionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitVariant(context, this);
37
+	}
33 38
 	
34 39
 	@Override
35 40
 	public void collectMembers(MemberCollector collector) {
@@ -40,11 +45,13 @@ public class VariantDefinition extends HighLevelDefinition {
40 45
 	}
41 46
 	
42 47
 	public static class Option extends Taggable {
48
+		public final VariantDefinition variant;
43 49
 		public final String name;
44 50
 		public final int ordinal;
45 51
 		public final ITypeID[] types;
46 52
 		
47
-		public Option(String name, int ordinal, ITypeID[] types) {
53
+		public Option(VariantDefinition variant, String name, int ordinal, ITypeID[] types) {
54
+			this.variant = variant;
48 55
 			this.name = name;
49 56
 			this.ordinal = ordinal;
50 57
 			this.types = types;

+ 13
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ZSPackage.java Dosyayı Görüntüle

@@ -26,6 +26,10 @@ import org.openzen.zenscript.codemodel.type.ITypeID;
26 26
  * @author Hoofdgebruiker
27 27
  */
28 28
 public class ZSPackage {
29
+	public static ZSPackage createRoot() {
30
+		return new ZSPackage(null, "");
31
+	}
32
+	
29 33
 	public final String name;
30 34
 	public final String fullName;
31 35
 	public final ZSPackage parent;
@@ -51,7 +55,7 @@ public class ZSPackage {
51 55
 			return new PartialPackageExpression(position, subPackages.get(name.name));
52 56
 		
53 57
 		if (types.containsKey(name.name)) {
54
-			if (types.get(name.name).genericParameters.length != name.getNumberOfArguments())
58
+			if (types.get(name.name).typeParameters.length != name.getNumberOfArguments())
55 59
 				throw new CompileException(position, CompileExceptionCode.TYPE_ARGUMENTS_INVALID_NUMBER, "Invalid number of type arguments");
56 60
 			
57 61
 			return new PartialTypeExpression(position, registry.getForDefinition(types.get(name.name), name.arguments), name.arguments);
@@ -109,6 +113,14 @@ public class ZSPackage {
109 113
 		return null;
110 114
 	}
111 115
 	
116
+	public ZSPackage getRecursive(String name) {
117
+		int dot = name.indexOf('.');
118
+		if (dot < 0)
119
+			return getOrCreatePackage(name);
120
+		else
121
+			return getOrCreatePackage(name.substring(0, dot)).getRecursive(name.substring(dot + 1));
122
+	}
123
+	
112 124
 	public ZSPackage getOrCreatePackage(String name) {
113 125
 		if (subPackages.containsKey(name))
114 126
 			return subPackages.get(name);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/AndAndExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class AndAndExpression extends Expression {
29 29
 		return visitor.visitAndAnd(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitAndAnd(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tLeft = left.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ArrayExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class ArrayExpression extends Expression {
29 29
 		return visitor.visitArray(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitArray(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression[] tExpressions = Expression.transform(expressions, transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallExpression.java Dosyayı Görüntüle

@@ -38,6 +38,11 @@ public class CallExpression extends Expression {
38 38
 		return visitor.visitCall(this);
39 39
 	}
40 40
 
41
+	@Override
42
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
43
+		return visitor.visitCall(context, this);
44
+	}
45
+
41 46
 	@Override
42 47
 	public Expression transform(ExpressionTransformer transformer) {
43 48
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallStaticExpression.java Dosyayı Görüntüle

@@ -35,6 +35,11 @@ public class CallStaticExpression extends Expression {
35 35
 		return visitor.visitCallStatic(this);
36 36
 	}
37 37
 
38
+	@Override
39
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
40
+		return visitor.visitCallStatic(context, this);
41
+	}
42
+
38 43
 	@Override
39 44
 	public Expression transform(ExpressionTransformer transformer) {
40 45
 		CallArguments tArguments = arguments.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedClosureExpression.java Dosyayı Görüntüle

@@ -31,6 +31,11 @@ public class CapturedClosureExpression extends CapturedExpression {
31 31
 		return visitor.visitRecaptured(this);
32 32
 	}
33 33
 
34
+	@Override
35
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitCapturedClosure(context, this);
37
+	}
38
+
34 39
 	@Override
35 40
 	public Expression transform(ExpressionTransformer transformer) {
36 41
 		Expression tValue = transformer.transform(value);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedDirectExpression.java Dosyayı Görüntüle

@@ -30,6 +30,11 @@ public class CapturedDirectExpression extends CapturedExpression {
30 30
 		return visitor.visitCapturedDirect(this);
31 31
 	}
32 32
 
33
+	@Override
34
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
35
+		return visitor.visitCapturedDirect(context, this);
36
+	}
37
+
33 38
 	@Override
34 39
 	public Expression transform(ExpressionTransformer transformer) {
35 40
 		Expression tValue = transformer.transform(value);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedLocalVariableExpression.java Dosyayı Görüntüle

@@ -32,6 +32,11 @@ public class CapturedLocalVariableExpression extends CapturedExpression {
32 32
 		return visitor.visitCapturedLocal(this);
33 33
 	}
34 34
 
35
+	@Override
36
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
37
+		return visitor.visitCapturedLocalVariable(context, this);
38
+	}
39
+
35 40
 	@Override
36 41
 	public Expression transform(ExpressionTransformer transformer) {
37 42
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedParameterExpression.java Dosyayı Görüntüle

@@ -32,6 +32,11 @@ public class CapturedParameterExpression extends CapturedExpression {
32 32
 		return visitor.visitCapturedParameter(this);
33 33
 	}
34 34
 
35
+	@Override
36
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
37
+		return visitor.visitCapturedParameter(context, this);
38
+	}
39
+
35 40
 	@Override
36 41
 	public Expression transform(ExpressionTransformer transformer) {
37 42
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedThisExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class CapturedThisExpression extends CapturedExpression {
28 28
 		return visitor.visitCapturedThis(this);
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitCapturedThis(context, this);
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression transform(ExpressionTransformer transformer) {
33 38
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CastExpression.java Dosyayı Görüntüle

@@ -31,6 +31,11 @@ public class CastExpression extends Expression {
31 31
 		return visitor.visitCast(this);
32 32
 	}
33 33
 
34
+	@Override
35
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitCast(context, this);
37
+	}
38
+
34 39
 	@Override
35 40
 	public Expression transform(ExpressionTransformer transformer) {
36 41
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CheckNullExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class CheckNullExpression extends Expression {
27 27
 		return visitor.visitCheckNull(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitCheckNull(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = transformer.transform(value);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CoalesceExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class CoalesceExpression extends Expression {
28 28
 		return visitor.visitCoalesce(this);
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitCoalesce(context, this);
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression transform(ExpressionTransformer transformer) {
33 38
 		Expression tLeft = left.transform(transformer);

+ 14
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CompareExpression.java Dosyayı Görüntüle

@@ -23,11 +23,11 @@ public class CompareExpression extends Expression {
23 23
 	public final FunctionalMemberRef operator;
24 24
 	public final CompareType comparison;
25 25
 	
26
-	public CompareExpression(CodePosition position, Expression left, Expression right, FunctionalMemberRef operator, CompareType comparison, TypeScope scope) {
26
+	public CompareExpression(CodePosition position, Expression left, Expression right, FunctionalMemberRef operator, CompareType comparison) {
27 27
 		super(position, BasicTypeID.BOOL, binaryThrow(position, left.thrownType, right.thrownType));
28 28
 		
29 29
 		this.left = left;
30
-		this.right = scope == null ? right : right.castImplicit(position, scope, operator.getHeader().parameters[0].type);
30
+		this.right = right;
31 31
 		this.operator = operator;
32 32
 		this.comparison = comparison;
33 33
 	}
@@ -37,15 +37,25 @@ public class CompareExpression extends Expression {
37 37
 		return visitor.visitCompare(this);
38 38
 	}
39 39
 
40
+	@Override
41
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
42
+		return visitor.visitCompare(context, this);
43
+	}
44
+
40 45
 	@Override
41 46
 	public Expression transform(ExpressionTransformer transformer) {
42 47
 		Expression tLeft = left.transform(transformer);
43 48
 		Expression tRight = right.transform(transformer);
44
-		return left == tLeft && right == tRight ? this : new CompareExpression(position, tLeft, tRight, operator, comparison, null);
49
+		return left == tLeft && right == tRight ? this : new CompareExpression(position, tLeft, tRight, operator, comparison);
45 50
 	}
46 51
 
47 52
 	@Override
48 53
 	public Expression normalize(TypeScope scope) {
49
-		return new CompareExpression(position, left.normalize(scope), right.normalize(scope), operator, comparison, scope);
54
+		return new CompareExpression(
55
+				position,
56
+				left.normalize(scope),
57
+				right.normalize(scope).castImplicit(position, scope, operator.getHeader().parameters[0].type),
58
+				operator,
59
+				comparison);
50 60
 	}
51 61
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConditionalExpression.java Dosyayı Görüntüle

@@ -39,6 +39,11 @@ public class ConditionalExpression extends Expression {
39 39
 		return visitor.visitConditional(this);
40 40
 	}
41 41
 
42
+	@Override
43
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
44
+		return visitor.visitConditional(context, this);
45
+	}
46
+
42 47
 	@Override
43 48
 	public Expression transform(ExpressionTransformer transformer) {
44 49
 		Expression tCondition = transformer.transform(condition);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class ConstExpression extends Expression {
29 29
 		return visitor.visitConst(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitConst(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantBoolExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantBoolExpression extends Expression {
27 27
 		return visitor.visitConstantBool(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantBool(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantByteExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantByteExpression extends Expression {
27 27
 		return visitor.visitConstantByte(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantByte(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantCharExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantCharExpression extends Expression {
27 27
 		return visitor.visitConstantChar(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantChar(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantDoubleExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantDoubleExpression extends Expression {
27 27
 		return visitor.visitConstantDouble(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantDouble(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantFloatExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantFloatExpression extends Expression {
27 27
 		return visitor.visitConstantFloat(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantFloat(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantIntExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantIntExpression extends Expression {
27 27
 		return visitor.visitConstantInt(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantInt(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 6
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantLongExpression.java Dosyayı Görüntüle

@@ -12,6 +12,7 @@ import org.openzen.zenscript.codemodel.type.BasicTypeID;
12 12
 /**
13 13
  *
14 14
  * @author Hoofdgebruiker
15
+ * 
15 16
  */
16 17
 public class ConstantLongExpression extends Expression {
17 18
 	public final long value;
@@ -27,6 +28,11 @@ public class ConstantLongExpression extends Expression {
27 28
 		return visitor.visitConstantLong(this);
28 29
 	}
29 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitConstantLong(context, this);
34
+	}
35
+
30 36
 	@Override
31 37
 	public Expression transform(ExpressionTransformer transformer) {
32 38
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantSByteExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantSByteExpression extends Expression {
27 27
 		return visitor.visitConstantSByte(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantSByte(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantShortExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantShortExpression extends Expression {
27 27
 		return visitor.visitConstantShort(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantShort(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantStringExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantStringExpression extends Expression {
27 27
 		return visitor.visitConstantString(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantString(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUIntExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantUIntExpression extends Expression {
27 27
 		return visitor.visitConstantUInt(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantUInt(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantULongExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantULongExpression extends Expression {
27 27
 		return visitor.visitConstantULong(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantULong(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUShortExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantUShortExpression extends Expression {
27 27
 		return visitor.visitConstantUShort(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantUShort(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUSizeExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class ConstantUSizeExpression extends Expression {
27 27
 		return visitor.visitConstantUSize(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantUSize(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorSuperCallExpression.java Dosyayı Görüntüle

@@ -33,6 +33,11 @@ public class ConstructorSuperCallExpression extends Expression {
33 33
 		return visitor.visitConstructorSuperCall(this);
34 34
 	}
35 35
 
36
+	@Override
37
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
38
+		return visitor.visitConstructorSuperCall(context, this);
39
+	}
40
+
36 41
 	@Override
37 42
 	public Expression transform(ExpressionTransformer transformer) {
38 43
 		CallArguments tArguments = arguments.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorThisCallExpression.java Dosyayı Görüntüle

@@ -36,6 +36,11 @@ public class ConstructorThisCallExpression extends Expression {
36 36
 		return visitor.visitConstructorThisCall(this);
37 37
 	}
38 38
 
39
+	@Override
40
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
41
+		return visitor.visitConstructorThisCall(context, this);
42
+	}
43
+
39 44
 	@Override
40 45
 	public Expression transform(ExpressionTransformer transformer) {
41 46
 		CallArguments tArguments = arguments.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/DummyExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class DummyExpression extends Expression {
28 28
 		throw new UnsupportedOperationException("This is a dummy expression");
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		throw new UnsupportedOperationException("This is a dummy expression");
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression normalize(TypeScope scope) {
33 38
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/EnumConstantExpression.java Dosyayı Görüntüle

@@ -36,6 +36,11 @@ public class EnumConstantExpression extends Expression {
36 36
 		return visitor.visitEnumConstant(this);
37 37
 	}
38 38
 
39
+	@Override
40
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
41
+		return visitor.visitEnumConstant(context, this);
42
+	}
43
+
39 44
 	@Override
40 45
 	public Expression transform(ExpressionTransformer transformer) {
41 46
 		return this;

+ 2
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/Expression.java Dosyayı Görüntüle

@@ -49,6 +49,8 @@ public abstract class Expression implements IPartialExpression {
49 49
 	
50 50
 	public abstract <T> T accept(ExpressionVisitor<T> visitor);
51 51
 	
52
+	public abstract <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor);
53
+	
52 54
 	public abstract Expression transform(ExpressionTransformer transformer);
53 55
 	
54 56
 	public final Expression transform(StatementTransformer transformer) {

+ 148
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ExpressionVisitorWithContext.java Dosyayı Görüntüle

@@ -0,0 +1,148 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.codemodel.expression;
7
+
8
+/**
9
+ *
10
+ * @author Hoofdgebruiker
11
+ */
12
+public interface ExpressionVisitorWithContext<C, R> {
13
+	public R visitAndAnd(C context, AndAndExpression expression);
14
+	
15
+	public R visitArray(C context, ArrayExpression expression);
16
+	
17
+	public R visitCompare(C context, CompareExpression expression);
18
+	
19
+	public R visitCall(C context, CallExpression expression);
20
+	
21
+	public R visitCallStatic(C context, CallStaticExpression expression);
22
+	
23
+	public R visitCapturedClosure(C context, CapturedClosureExpression expression);
24
+	
25
+	public R visitCapturedDirect(C context, CapturedDirectExpression expression);
26
+	
27
+	public R visitCapturedLocalVariable(C context, CapturedLocalVariableExpression expression);
28
+	
29
+	public R visitCapturedParameter(C context, CapturedParameterExpression expression);
30
+	
31
+	public R visitCapturedThis(C context, CapturedThisExpression expression);
32
+	
33
+	public R visitCast(C context, CastExpression expression);
34
+	
35
+	public R visitCheckNull(C context, CheckNullExpression expression);
36
+	
37
+	public R visitCoalesce(C context, CoalesceExpression expression);
38
+	
39
+	public R visitConditional(C context, ConditionalExpression expression);
40
+	
41
+	public R visitConst(C context, ConstExpression expression);
42
+	
43
+	public R visitConstantBool(C context, ConstantBoolExpression expression);
44
+	
45
+	public R visitConstantByte(C context, ConstantByteExpression expression);
46
+	
47
+	public R visitConstantChar(C context, ConstantCharExpression expression);
48
+	
49
+	public R visitConstantDouble(C context, ConstantDoubleExpression expression);
50
+	
51
+	public R visitConstantFloat(C context, ConstantFloatExpression expression);
52
+	
53
+	public R visitConstantInt(C context, ConstantIntExpression expression);
54
+	
55
+	public R visitConstantLong(C context, ConstantLongExpression expression);
56
+	
57
+	public R visitConstantSByte(C context, ConstantSByteExpression expression);
58
+	
59
+	public R visitConstantShort(C context, ConstantShortExpression expression);
60
+	
61
+	public R visitConstantString(C context, ConstantStringExpression expression);
62
+	
63
+	public R visitConstantUInt(C context, ConstantUIntExpression expression);
64
+	
65
+	public R visitConstantULong(C context, ConstantULongExpression expression);
66
+	
67
+	public R visitConstantUShort(C context, ConstantUShortExpression expression);
68
+	
69
+	public R visitConstantUSize(C context, ConstantUSizeExpression expression);
70
+	
71
+	public R visitConstructorThisCall(C context, ConstructorThisCallExpression expression);
72
+	
73
+	public R visitConstructorSuperCall(C context, ConstructorSuperCallExpression expression);
74
+	
75
+	public R visitEnumConstant(C context, EnumConstantExpression expression);
76
+	
77
+	public R visitFunction(C context, FunctionExpression expression);
78
+	
79
+	public R visitGetField(C context, GetFieldExpression expression);
80
+	
81
+	public R visitGetFunctionParameter(C context, GetFunctionParameterExpression expression);
82
+	
83
+	public R visitGetLocalVariable(C context, GetLocalVariableExpression expression);
84
+	
85
+	public R visitGetMatchingVariantField(C context, GetMatchingVariantField expression);
86
+	
87
+	public R visitGetStaticField(C context, GetStaticFieldExpression expression);
88
+	
89
+	public R visitGetter(C context, GetterExpression expression);
90
+	
91
+	public R visitGlobal(C context, GlobalExpression expression);
92
+	
93
+	public R visitGlobalCall(C context, GlobalCallExpression expression);
94
+	
95
+	public R visitInterfaceCast(C context, InterfaceCastExpression expression);
96
+	
97
+	public R visitIs(C context, IsExpression expression);
98
+	
99
+	public R visitMakeConst(C context, MakeConstExpression expression);
100
+	
101
+	public R visitMap(C context, MapExpression expression);
102
+	
103
+	public R visitMatch(C context, MatchExpression expression);
104
+	
105
+	public R visitNew(C context, NewExpression expression);
106
+	
107
+	public R visitNull(C context, NullExpression expression);
108
+	
109
+	public R visitOrOr(C context, OrOrExpression expression);
110
+	
111
+	public R visitPanic(C context, PanicExpression expression);
112
+	
113
+	public R visitPostCall(C context, PostCallExpression expression);
114
+	
115
+	public R visitRange(C context, RangeExpression expression);
116
+	
117
+	public R visitSameObject(C context, SameObjectExpression expression);
118
+	
119
+	public R visitSetField(C context, SetFieldExpression expression);
120
+	
121
+	public R visitSetFunctionParameter(C context, SetFunctionParameterExpression expression);
122
+	
123
+	public R visitSetLocalVariable(C context, SetLocalVariableExpression expression);
124
+	
125
+	public R visitSetStaticField(C context, SetStaticFieldExpression expression);
126
+	
127
+	public R visitSetter(C context, SetterExpression expression);
128
+	
129
+	public R visitStaticGetter(C context, StaticGetterExpression expression);
130
+	
131
+	public R visitStaticSetter(C context, StaticSetterExpression expression);
132
+	
133
+	public R visitSupertypeCast(C context, SupertypeCastExpression expression);
134
+	
135
+	public R visitThis(C context, ThisExpression expression);
136
+	
137
+	public R visitThrow(C context, ThrowExpression expression);
138
+	
139
+	public R visitTryConvert(C context, TryConvertExpression expression);
140
+	
141
+	public R visitTryRethrowAsException(C context, TryRethrowAsExceptionExpression expression);
142
+	
143
+	public R visitTryRethrowAsResult(C context, TryRethrowAsResultExpression expression);
144
+	
145
+	public R visitVariantValue(C context, VariantValueExpression expression);
146
+	
147
+	public R visitWrapOptional(C context, WrapOptionalExpression expression);
148
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/FunctionExpression.java Dosyayı Görüntüle

@@ -46,6 +46,11 @@ public class FunctionExpression extends Expression {
46 46
 		return visitor.visitFunction(this);
47 47
 	}
48 48
 
49
+	@Override
50
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
51
+		return visitor.visitFunction(context, this);
52
+	}
53
+
49 54
 	@Override
50 55
 	public FunctionExpression transform(ExpressionTransformer transformer) {
51 56
 		Statement tBody = body.transform(transformer, ConcatMap.empty(LoopStatement.class, LoopStatement.class));

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFieldExpression.java Dosyayı Görüntüle

@@ -48,6 +48,11 @@ public class GetFieldExpression extends Expression {
48 48
 		return visitor.visitGetField(this);
49 49
 	}
50 50
 
51
+	@Override
52
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
53
+		return visitor.visitGetField(context, this);
54
+	}
55
+
51 56
 	@Override
52 57
 	public Expression transform(ExpressionTransformer transformer) {
53 58
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFunctionParameterExpression.java Dosyayı Görüntüle

@@ -39,6 +39,11 @@ public class GetFunctionParameterExpression extends Expression {
39 39
 		return visitor.visitGetFunctionParameter(this);
40 40
 	}
41 41
 
42
+	@Override
43
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
44
+		return visitor.visitGetFunctionParameter(context, this);
45
+	}
46
+
42 47
 	@Override
43 48
 	public Expression transform(ExpressionTransformer transformer) {
44 49
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetLocalVariableExpression.java Dosyayı Görüntüle

@@ -39,6 +39,11 @@ public class GetLocalVariableExpression extends Expression {
39 39
 		return visitor.visitGetLocalVariable(this);
40 40
 	}
41 41
 
42
+	@Override
43
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
44
+		return visitor.visitGetLocalVariable(context, this);
45
+	}
46
+
42 47
 	@Override
43 48
 	public Expression transform(ExpressionTransformer transformer) {
44 49
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetMatchingVariantField.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class GetMatchingVariantField extends Expression {
29 29
 		return visitor.visitGetMatchingVariantField(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitGetMatchingVariantField(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetStaticFieldExpression.java Dosyayı Görüntüle

@@ -41,6 +41,11 @@ public class GetStaticFieldExpression extends Expression {
41 41
 		return visitor.visitGetStaticField(this);
42 42
 	}
43 43
 
44
+	@Override
45
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
46
+		return visitor.visitGetStaticField(context, this);
47
+	}
48
+
44 49
 	@Override
45 50
 	public Expression transform(ExpressionTransformer transformer) {
46 51
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class GetterExpression extends Expression {
29 29
 		return visitor.visitGetter(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitGetter(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalCallExpression.java Dosyayı Görüntüle

@@ -30,6 +30,11 @@ public class GlobalCallExpression extends Expression {
30 30
 		return visitor.visitGlobalCall(this);
31 31
 	}
32 32
 
33
+	@Override
34
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
35
+		return visitor.visitGlobalCall(context, this);
36
+	}
37
+
33 38
 	@Override
34 39
 	public Expression transform(ExpressionTransformer transformer) {
35 40
 		CallArguments tArguments = arguments.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class GlobalExpression extends Expression {
28 28
 		return visitor.visitGlobal(this);
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitGlobal(context, this);
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression transform(ExpressionTransformer transformer) {
33 38
 		Expression tResolution = resolution.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class InterfaceCastExpression extends Expression {
27 27
 		return visitor.visitInterfaceCast(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitInterfaceCast(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/IsExpression.java Dosyayı Görüntüle

@@ -30,6 +30,11 @@ public class IsExpression extends Expression {
30 30
 		return visitor.visitIs(this);
31 31
 	}
32 32
 
33
+	@Override
34
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
35
+		return visitor.visitIs(context, this);
36
+	}
37
+
33 38
 	@Override
34 39
 	public Expression transform(ExpressionTransformer transformer) {
35 40
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MakeConstExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class MakeConstExpression extends Expression {
27 27
 		return visitor.visitMakeConst(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitMakeConst(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MapExpression.java Dosyayı Görüntüle

@@ -33,6 +33,11 @@ public class MapExpression extends Expression {
33 33
 		return visitor.visitMap(this);
34 34
 	}
35 35
 
36
+	@Override
37
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
38
+		return visitor.visitMap(context, this);
39
+	}
40
+
36 41
 	@Override
37 42
 	public Expression transform(ExpressionTransformer transformer) {
38 43
 		Expression[] tKeys = Expression.transform(keys, transformer);

+ 8
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MatchExpression.java Dosyayı Görüntüle

@@ -6,7 +6,6 @@
6 6
 package org.openzen.zenscript.codemodel.expression;
7 7
 
8 8
 import java.util.ArrayList;
9
-import java.util.Collections;
10 9
 import java.util.List;
11 10
 import org.openzen.zencode.shared.CodePosition;
12 11
 import org.openzen.zenscript.codemodel.expression.switchvalue.SwitchValue;
@@ -40,6 +39,11 @@ public class MatchExpression extends Expression {
40 39
 		return visitor.visitMatch(this);
41 40
 	}
42 41
 
42
+	@Override
43
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
44
+		return visitor.visitMatch(context, this);
45
+	}
46
+
43 47
 	@Override
44 48
 	public Expression transform(ExpressionTransformer transformer) {
45 49
 		Expression tValue = value.transform(transformer);
@@ -77,14 +81,15 @@ public class MatchExpression extends Expression {
77 81
 			statements.add(new ExpressionStatement(matchCase.value.position, caseExpression));
78 82
 			if (reachable)
79 83
 				statements.add(new BreakStatement(matchCase.value.position, switchStatement));
80
-			SwitchCase switchCase = new SwitchCase(matchCase.key, statements);
84
+			SwitchCase switchCase = new SwitchCase(matchCase.key, statements.toArray(new Statement[statements.size()]));
81 85
 			switchStatement.cases.add(switchCase);
82 86
 			
83 87
 			if (matchCase.key == null)
84 88
 				hasDefault = true;
85 89
 		}
86 90
 		if (!hasDefault) {
87
-			switchStatement.cases.add(new SwitchCase(null, Collections.singletonList(new ExpressionStatement(position, new PanicExpression(position, BasicTypeID.VOID, new ConstantStringExpression(position, "Missing case"))))));
91
+			Statement defaultCase = new ExpressionStatement(position, new PanicExpression(position, BasicTypeID.VOID, new ConstantStringExpression(position, "Missing case")));
92
+			switchStatement.cases.add(new SwitchCase(null, new Statement[] { defaultCase }));
88 93
 		}
89 94
 		return new SwitchedMatch(result, switchStatement);
90 95
 	}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NewExpression.java Dosyayı Görüntüle

@@ -48,6 +48,11 @@ public class NewExpression extends Expression {
48 48
 		return visitor.visitNew(this);
49 49
 	}
50 50
 
51
+	@Override
52
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
53
+		return visitor.visitNew(context, this);
54
+	}
55
+
51 56
 	@Override
52 57
 	public Expression transform(ExpressionTransformer transformer) {
53 58
 		CallArguments tArguments = arguments.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NullExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class NullExpression extends Expression {
28 28
 		return visitor.visitNull(this);
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitNull(context, this);
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression transform(ExpressionTransformer transformer) {
33 38
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/OrOrExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class OrOrExpression extends Expression {
29 29
 		return visitor.visitOrOr(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitOrOr(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tLeft = left.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PanicExpression.java Dosyayı Görüntüle

@@ -32,6 +32,11 @@ public class PanicExpression extends Expression {
32 32
 		return visitor.visitPanic(this);
33 33
 	}
34 34
 
35
+	@Override
36
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
37
+		return visitor.visitPanic(context, this);
38
+	}
39
+
35 40
 	@Override
36 41
 	public Expression transform(ExpressionTransformer transformer) {
37 42
 		return new PanicExpression(position, type, transformer.transform(value));

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PostCallExpression.java Dosyayı Görüntüle

@@ -37,6 +37,11 @@ public class PostCallExpression extends Expression {
37 37
 		return visitor.visitPostCall(this);
38 38
 	}
39 39
 
40
+	@Override
41
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
42
+		return visitor.visitPostCall(context, this);
43
+	}
44
+
40 45
 	@Override
41 46
 	public Expression transform(ExpressionTransformer transformer) {
42 47
 		Expression tTarget = target.transform(transformer);

+ 5
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/RangeExpression.java Dosyayı Görüntüle

@@ -7,7 +7,6 @@ package org.openzen.zenscript.codemodel.expression;
7 7
 
8 8
 import org.openzen.zencode.shared.CodePosition;
9 9
 import org.openzen.zenscript.codemodel.scope.TypeScope;
10
-import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
11 10
 import org.openzen.zenscript.codemodel.type.ITypeID;
12 11
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
13 12
 
@@ -38,6 +37,11 @@ public class RangeExpression extends Expression {
38 37
 		return visitor.visitRange(this);
39 38
 	}
40 39
 
40
+	@Override
41
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
42
+		return visitor.visitRange(context, this);
43
+	}
44
+
41 45
 	@Override
42 46
 	public Expression transform(ExpressionTransformer transformer) {
43 47
 		Expression tFrom = from.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SameObjectExpression.java Dosyayı Görüntüle

@@ -31,6 +31,11 @@ public class SameObjectExpression extends Expression {
31 31
 		return visitor.visitSameObject(this);
32 32
 	}
33 33
 
34
+	@Override
35
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitSameObject(context, this);
37
+	}
38
+
34 39
 	@Override
35 40
 	public Expression transform(ExpressionTransformer transformer) {
36 41
 		Expression tLeft = left.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFieldExpression.java Dosyayı Görüntüle

@@ -34,6 +34,11 @@ public class SetFieldExpression extends Expression {
34 34
 		return visitor.visitSetField(this);
35 35
 	}
36 36
 
37
+	@Override
38
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
39
+		return visitor.visitSetField(context, this);
40
+	}
41
+
37 42
 	@Override
38 43
 	public Expression transform(ExpressionTransformer transformer) {
39 44
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFunctionParameterExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class SetFunctionParameterExpression extends Expression {
29 29
 		return visitor.visitSetFunctionParameter(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitSetFunctionParameter(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetLocalVariableExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class SetLocalVariableExpression extends Expression {
29 29
 		return visitor.visitSetLocalVariable(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitSetLocalVariable(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetStaticFieldExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class SetStaticFieldExpression extends Expression {
29 29
 		return visitor.visitSetStaticField(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitSetStaticField(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetterExpression.java Dosyayı Görüntüle

@@ -31,6 +31,11 @@ public class SetterExpression extends Expression {
31 31
 		return visitor.visitSetter(this);
32 32
 	}
33 33
 
34
+	@Override
35
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitSetter(context, this);
37
+	}
38
+
34 39
 	@Override
35 40
 	public Expression transform(ExpressionTransformer transformer) {
36 41
 		Expression tTarget = target.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class StaticGetterExpression extends Expression {
27 27
 		return visitor.visitStaticGetter(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitStaticGetter(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticSetterExpression.java Dosyayı Görüntüle

@@ -29,6 +29,11 @@ public class StaticSetterExpression extends Expression {
29 29
 		return visitor.visitStaticSetter(this);
30 30
 	}
31 31
 
32
+	@Override
33
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
34
+		return visitor.visitStaticSetter(context, this);
35
+	}
36
+
32 37
 	@Override
33 38
 	public Expression transform(ExpressionTransformer transformer) {
34 39
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SupertypeCastExpression.java Dosyayı Görüntüle

@@ -28,6 +28,11 @@ public class SupertypeCastExpression extends Expression {
28 28
 		return visitor.visitSupertypeCast(this);
29 29
 	}
30 30
 
31
+	@Override
32
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
33
+		return visitor.visitSupertypeCast(context, this);
34
+	}
35
+
31 36
 	@Override
32 37
 	public Expression transform(ExpressionTransformer transformer) {
33 38
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThisExpression.java Dosyayı Görüntüle

@@ -31,6 +31,11 @@ public class ThisExpression extends Expression {
31 31
 		return visitor.visitThis(this);
32 32
 	}
33 33
 
34
+	@Override
35
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
36
+		return visitor.visitThis(context, this);
37
+	}
38
+
34 39
 	@Override
35 40
 	public Expression transform(ExpressionTransformer transformer) {
36 41
 		return this;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThrowExpression.java Dosyayı Görüntüle

@@ -32,6 +32,11 @@ public class ThrowExpression extends Expression {
32 32
 		return visitor.visitThrow(this);
33 33
 	}
34 34
 
35
+	@Override
36
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
37
+		return visitor.visitThrow(context, this);
38
+	}
39
+
35 40
 	@Override
36 41
 	public Expression transform(ExpressionTransformer transformer) {
37 42
 		Expression tValue = transformer.transform(value);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryConvertExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class TryConvertExpression extends Expression {
27 27
 		return visitor.visitTryConvert(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitTryConvert(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsExceptionExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class TryRethrowAsExceptionExpression extends Expression {
27 27
 		return visitor.visitTryRethrowAsException(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitTryRethrowAsException(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsResultExpression.java Dosyayı Görüntüle

@@ -27,6 +27,11 @@ public class TryRethrowAsResultExpression extends Expression {
27 27
 		return visitor.visitTryRethrowAsResult(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitTryRethrowAsResult(context, this);
33
+	}
34
+
30 35
 	@Override
31 36
 	public Expression transform(ExpressionTransformer transformer) {
32 37
 		Expression tValue = value.transform(transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/VariantValueExpression.java Dosyayı Görüntüle

@@ -47,6 +47,11 @@ public class VariantValueExpression extends Expression {
47 47
 		return visitor.visitVariantValue(this);
48 48
 	}
49 49
 
50
+	@Override
51
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
52
+		return visitor.visitVariantValue(context, this);
53
+	}
54
+
50 55
 	@Override
51 56
 	public Expression transform(ExpressionTransformer transformer) {
52 57
 		Expression[] tArguments = Expression.transform(arguments, transformer);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/WrapOptionalExpression.java Dosyayı Görüntüle

@@ -30,6 +30,11 @@ public class WrapOptionalExpression extends Expression {
30 30
 		return visitor.visitWrapOptional(this);
31 31
 	}
32 32
 
33
+	@Override
34
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
35
+		return visitor.visitWrapOptional(context, this);
36
+	}
37
+
33 38
 	@Override
34 39
 	public Expression transform(ExpressionTransformer transformer) {
35 40
 		Expression tValue = value.transform(transformer);

+ 0
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/CharSwitchValue.java Dosyayı Görüntüle


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor

Loading…
İptal
Kaydet