Browse Source

- Added visitors with context

- WIP on the module serializer
Stan Hebben 6 years ago
parent
commit
2ba94edb6d
100 changed files with 809 additions and 19 deletions
  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. 8
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/FunctionHeader.java
  4. 7
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java
  5. 93
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/StatementContext.java
  6. 44
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/TypeContext.java
  7. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/AliasDefinition.java
  8. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ClassDefinition.java
  9. 28
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/DefinitionVisitorWithContext.java
  10. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/EnumDefinition.java
  11. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ExpansionDefinition.java
  12. 10
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/FunctionDefinition.java
  13. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/InterfaceDefinition.java
  14. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/StructDefinition.java
  15. 8
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/VariantDefinition.java
  16. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ZSPackage.java
  17. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/AndAndExpression.java
  18. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ArrayExpression.java
  19. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallExpression.java
  20. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallStaticExpression.java
  21. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedClosureExpression.java
  22. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedDirectExpression.java
  23. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedLocalVariableExpression.java
  24. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedParameterExpression.java
  25. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CapturedThisExpression.java
  26. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CastExpression.java
  27. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CheckNullExpression.java
  28. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CoalesceExpression.java
  29. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CompareExpression.java
  30. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConditionalExpression.java
  31. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstExpression.java
  32. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantBoolExpression.java
  33. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantByteExpression.java
  34. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantCharExpression.java
  35. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantDoubleExpression.java
  36. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantFloatExpression.java
  37. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantIntExpression.java
  38. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantLongExpression.java
  39. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantSByteExpression.java
  40. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantShortExpression.java
  41. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantStringExpression.java
  42. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUIntExpression.java
  43. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantULongExpression.java
  44. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUShortExpression.java
  45. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantUSizeExpression.java
  46. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorSuperCallExpression.java
  47. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstructorThisCallExpression.java
  48. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/DummyExpression.java
  49. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/EnumConstantExpression.java
  50. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/Expression.java
  51. 148
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ExpressionVisitorWithContext.java
  52. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/FunctionExpression.java
  53. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFieldExpression.java
  54. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetFunctionParameterExpression.java
  55. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetLocalVariableExpression.java
  56. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetMatchingVariantField.java
  57. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetStaticFieldExpression.java
  58. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java
  59. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalCallExpression.java
  60. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GlobalExpression.java
  61. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java
  62. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/IsExpression.java
  63. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MakeConstExpression.java
  64. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MapExpression.java
  65. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MatchExpression.java
  66. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NewExpression.java
  67. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NullExpression.java
  68. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/OrOrExpression.java
  69. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PanicExpression.java
  70. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/PostCallExpression.java
  71. 5
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/RangeExpression.java
  72. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SameObjectExpression.java
  73. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFieldExpression.java
  74. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetFunctionParameterExpression.java
  75. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetLocalVariableExpression.java
  76. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetStaticFieldExpression.java
  77. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SetterExpression.java
  78. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java
  79. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticSetterExpression.java
  80. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/SupertypeCastExpression.java
  81. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThisExpression.java
  82. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ThrowExpression.java
  83. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryConvertExpression.java
  84. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsExceptionExpression.java
  85. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/TryRethrowAsResultExpression.java
  86. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/VariantValueExpression.java
  87. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/WrapOptionalExpression.java
  88. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/CharSwitchValue.java
  89. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/EnumConstantSwitchValue.java
  90. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/IntSwitchValue.java
  91. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/StringSwitchValue.java
  92. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/SwitchValue.java
  93. 22
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/SwitchValueVisitorWithContext.java
  94. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/VariantOptionSwitchValue.java
  95. 16
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/GenericParameterBoundVisitorWithContext.java
  96. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/ParameterSuperBound.java
  97. 5
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/ParameterTypeBound.java
  98. 2
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/TypeParameter.java
  99. 2
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/TypeParameterBound.java
  100. 0
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java

+ 4
- 4
CodeFormatter/src/main/java/org/openzen/zenscript/formatter/DefinitionFormatter.java View File

@@ -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 View File

@@ -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
 	

+ 8
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/FunctionHeader.java View File

@@ -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
 	}

+ 7
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java View File

@@ -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) {

+ 93
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/StatementContext.java View File

@@ -0,0 +1,93 @@
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.generic.TypeParameter;
14
+import org.openzen.zenscript.codemodel.statement.LoopStatement;
15
+import org.openzen.zenscript.codemodel.statement.VarStatement;
16
+
17
+/**
18
+ *
19
+ * @author Hoofdgebruiker
20
+ */
21
+public class StatementContext extends TypeContext {
22
+	private final List<VarStatement> variables = new ArrayList<>();
23
+	private final LoopStatement[] loops;
24
+	private final FunctionHeader header;
25
+	
26
+	public StatementContext() {
27
+		super(TypeParameter.NONE);
28
+		loops = LoopStatement.NONE;
29
+		header = null;
30
+	}
31
+	
32
+	public StatementContext(FunctionHeader header) {
33
+		super(header.typeParameters);
34
+		loops = LoopStatement.NONE;
35
+		this.header = header;
36
+	}
37
+	
38
+	public StatementContext(TypeContext outer) {
39
+		super(outer.parameters);
40
+		loops = LoopStatement.NONE;
41
+		header = null;
42
+	}
43
+	
44
+	public StatementContext(TypeContext outer, FunctionHeader header) {
45
+		super(outer, header.typeParameters);
46
+		loops = LoopStatement.NONE;
47
+		this.header = header;
48
+	}
49
+	
50
+	public StatementContext(StatementContext outer) {
51
+		super(outer.parameters);
52
+		
53
+		variables.addAll(outer.variables);
54
+		loops = outer.loops;
55
+		header = outer.header;
56
+	}
57
+	
58
+	public StatementContext(StatementContext outer, LoopStatement loop) {
59
+		super(outer.parameters);
60
+		
61
+		variables.addAll(outer.variables);
62
+		loops = Arrays.copyOf(outer.loops, outer.loops.length + 1);
63
+		loops[loops.length - 1] = loop;
64
+		header = outer.header;
65
+	}
66
+	
67
+	public void add(VarStatement variable) {
68
+		variables.add(variable);
69
+	}
70
+	
71
+	public int getVariableId(VarStatement variable) {
72
+		return variables.indexOf(variable);
73
+	}
74
+	
75
+	public int getLoopId(LoopStatement loop) {
76
+		for (int i = 0; i < loops.length; i++)
77
+			if (loops[i] == loop)
78
+				return i;
79
+		
80
+		return -1;
81
+	}
82
+	
83
+	public int getParameterIndex(FunctionParameter parameter) {
84
+		if (header == null)
85
+			return -1;
86
+		
87
+		for (int i = 0; i < header.parameters.length; i++)
88
+			if (header.parameters[i] == parameter)
89
+				return i;
90
+		
91
+		return -1;
92
+	}
93
+}

+ 44
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/context/TypeContext.java View File

@@ -0,0 +1,44 @@
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.List;
10
+import org.openzen.zenscript.codemodel.generic.TypeParameter;
11
+
12
+/**
13
+ *
14
+ * @author Hoofdgebruiker
15
+ */
16
+public class TypeContext {
17
+	protected final TypeParameter[] parameters;
18
+	
19
+	public TypeContext(TypeParameter[] parameters) {
20
+		this.parameters = parameters;
21
+	}
22
+	
23
+	public TypeContext(TypeContext outer, TypeParameter[] inner) {
24
+		parameters = concat(outer.parameters, inner);
25
+	}
26
+	
27
+	public TypeContext(TypeContext outer, List<TypeParameter> inner) {
28
+		this(outer, inner.toArray(new TypeParameter[inner.size()]));
29
+	}
30
+	
31
+	public int getId(TypeParameter parameter) {
32
+		for (int i = 0; i < parameters.length; i++)
33
+			if (parameters[i] == parameter)
34
+				return i;
35
+		
36
+		return -1;
37
+	}
38
+	
39
+	public static <T> T[] concat(T[] first, T[] second) {
40
+		T[] result = Arrays.copyOf(first, first.length + second.length);
41
+		System.arraycopy(second, 0, result, first.length, second.length);
42
+		return result;
43
+	}
44
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/AliasDefinition.java View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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;

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/ZSPackage.java View File

@@ -51,7 +51,7 @@ public class ZSPackage {
51 51
 			return new PartialPackageExpression(position, subPackages.get(name.name));
52 52
 		
53 53
 		if (types.containsKey(name.name)) {
54
-			if (types.get(name.name).genericParameters.length != name.getNumberOfArguments())
54
+			if (types.get(name.name).typeParameters.length != name.getNumberOfArguments())
55 55
 				throw new CompileException(position, CompileExceptionCode.TYPE_ARGUMENTS_INVALID_NUMBER, "Invalid number of type arguments");
56 56
 			
57 57
 			return new PartialTypeExpression(position, registry.getForDefinition(types.get(name.name), name.arguments), name.arguments);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/AndAndExpression.java View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CompareExpression.java View File

@@ -37,6 +37,11 @@ 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);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConditionalExpression.java View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ConstantLongExpression.java View File

@@ -27,6 +27,11 @@ public class ConstantLongExpression extends Expression {
27 27
 		return visitor.visitConstantLong(this);
28 28
 	}
29 29
 
30
+	@Override
31
+	public <C, R> R accept(C context, ExpressionVisitorWithContext<C, R> visitor) {
32
+		return visitor.visitConstantLong(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/ConstantSByteExpression.java View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/MatchExpression.java View File

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

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/NewExpression.java View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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 View File

@@ -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);

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/CharSwitchValue.java View File

@@ -20,4 +20,9 @@ public class CharSwitchValue implements SwitchValue {
20 20
 	public <T> T accept(SwitchValueVisitor<T> visitor) {
21 21
 		return visitor.acceptChar(this);
22 22
 	}
23
+	
24
+	@Override
25
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor) {
26
+		return visitor.acceptChar(context, this);
27
+	}
23 28
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/EnumConstantSwitchValue.java View File

@@ -22,4 +22,9 @@ public class EnumConstantSwitchValue implements SwitchValue {
22 22
 	public <T> T accept(SwitchValueVisitor<T> visitor) {
23 23
 		return visitor.acceptEnumConstant(this);
24 24
 	}
25
+	
26
+	@Override
27
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor) {
28
+		return visitor.acceptEnumConstant(context, this);
29
+	}
25 30
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/IntSwitchValue.java View File

@@ -20,4 +20,9 @@ public class IntSwitchValue implements SwitchValue {
20 20
 	public <T> T accept(SwitchValueVisitor<T> visitor) {
21 21
 		return visitor.acceptInt(this);
22 22
 	}
23
+	
24
+	@Override
25
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor) {
26
+		return visitor.acceptInt(context, this);
27
+	}
23 28
 }

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/StringSwitchValue.java View File

@@ -20,4 +20,9 @@ public class StringSwitchValue implements SwitchValue {
20 20
 	public <T> T accept(SwitchValueVisitor<T> visitor) {
21 21
 		return visitor.acceptString(this);
22 22
 	}
23
+	
24
+	@Override
25
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor) {
26
+		return visitor.acceptString(context, this);
27
+	}
23 28
 }

+ 2
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/SwitchValue.java View File

@@ -11,4 +11,6 @@ package org.openzen.zenscript.codemodel.expression.switchvalue;
11 11
  */
12 12
 public interface SwitchValue {
13 13
 	public <T> T accept(SwitchValueVisitor<T> visitor);
14
+	
15
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor);
14 16
 }

+ 22
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/SwitchValueVisitorWithContext.java View File

@@ -0,0 +1,22 @@
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.switchvalue;
7
+
8
+/**
9
+ *
10
+ * @author Hoofdgebruiker
11
+ */
12
+public interface SwitchValueVisitorWithContext <C, R> {
13
+	public R acceptInt(C context, IntSwitchValue value);
14
+	
15
+	public R acceptChar(C context, CharSwitchValue value);
16
+	
17
+	public R acceptString(C context, StringSwitchValue value);
18
+	
19
+	public R acceptEnumConstant(C context, EnumConstantSwitchValue value);
20
+	
21
+	public R acceptVariantOption(C context, VariantOptionSwitchValue value);
22
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/VariantOptionSwitchValue.java View File

@@ -24,4 +24,9 @@ public class VariantOptionSwitchValue implements SwitchValue {
24 24
 	public <T> T accept(SwitchValueVisitor<T> visitor) {
25 25
 		return visitor.acceptVariantOption(this);
26 26
 	}
27
+	
28
+	@Override
29
+	public <C, R> R accept(C context, SwitchValueVisitorWithContext<C, R> visitor) {
30
+		return visitor.acceptVariantOption(context, this);
31
+	}
27 32
 }

+ 16
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/GenericParameterBoundVisitorWithContext.java View File

@@ -0,0 +1,16 @@
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.generic;
7
+
8
+/**
9
+ *
10
+ * @author Hoofdgebruiker
11
+ */
12
+public interface GenericParameterBoundVisitorWithContext<C, R> {
13
+	public R visitSuper(C context, ParameterSuperBound bound);
14
+	
15
+	public R visitType(C context, ParameterTypeBound bound);
16
+}

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/ParameterSuperBound.java View File

@@ -50,6 +50,11 @@ public class ParameterSuperBound extends TypeParameterBound {
50 50
 		return visitor.visitSuper(this);
51 51
 	}
52 52
 
53
+	@Override
54
+	public <C, R> R accept(C context, GenericParameterBoundVisitorWithContext<C, R> visitor) {
55
+		return visitor.visitSuper(context, this);
56
+	}
57
+
53 58
 	@Override
54 59
 	public boolean isObjectType() {
55 60
 		return true;

+ 5
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/ParameterTypeBound.java View File

@@ -50,6 +50,11 @@ public class ParameterTypeBound extends TypeParameterBound {
50 50
 		return visitor.visitType(this);
51 51
 	}
52 52
 
53
+	@Override
54
+	public <C, R> R accept(C context, GenericParameterBoundVisitorWithContext<C, R> visitor) {
55
+		return visitor.visitType(context, this);
56
+	}
57
+
53 58
 	@Override
54 59
 	public boolean isObjectType() {
55 60
 		return true;

+ 2
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/TypeParameter.java View File

@@ -9,6 +9,7 @@ import java.util.ArrayList;
9 9
 import java.util.List;
10 10
 import java.util.Map;
11 11
 import org.openzen.zencode.shared.CodePosition;
12
+import org.openzen.zencode.shared.Taggable;
12 13
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
13 14
 import org.openzen.zenscript.codemodel.type.ITypeID;
14 15
 import org.openzen.zenscript.codemodel.type.member.LocalMemberCache;
@@ -17,7 +18,7 @@ import org.openzen.zenscript.codemodel.type.member.LocalMemberCache;
17 18
  *
18 19
  * @author Hoofdgebruiker
19 20
  */
20
-public class TypeParameter {
21
+public class TypeParameter extends Taggable {
21 22
 	public static final TypeParameter[] NONE = new TypeParameter[0];
22 23
 	
23 24
 	public final CodePosition position;

+ 2
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/generic/TypeParameterBound.java View File

@@ -19,6 +19,8 @@ public abstract class TypeParameterBound {
19 19
 	
20 20
 	public abstract <T> T accept(GenericParameterBoundVisitor<T> visitor);
21 21
 	
22
+	public abstract <C, R> R accept(C context, GenericParameterBoundVisitorWithContext<C, R> visitor);
23
+	
22 24
 	public abstract void registerMembers(LocalMemberCache cache, TypeMembers type);
23 25
 	
24 26
 	public abstract boolean matches(LocalMemberCache cache, ITypeID type);

+ 0
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save