Browse Source

Some variant stuff, commited so that I can merge stan's changes

kindlich 6 years ago
parent
commit
4851501041
No known key found for this signature in database

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

32
 	public <T> T getTag(Class<T> type) {
32
 	public <T> T getTag(Class<T> type) {
33
 		return option.getTag(type);
33
 		return option.getTag(type);
34
 	}
34
 	}
35
+
36
+	public int getOrdinal() {
37
+		return option.ordinal;
38
+	}
39
+
40
+	public VariantDefinition.Option getOption() {
41
+		return option;
42
+	}
35
 }
43
 }

+ 1
- 2
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/CompilerUtils.java View File

15
 import org.openzen.zenscript.codemodel.type.ITypeID;
15
 import org.openzen.zenscript.codemodel.type.ITypeID;
16
 import org.openzen.zenscript.javabytecode.JavaModule;
16
 import org.openzen.zenscript.javabytecode.JavaModule;
17
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
17
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
18
-import org.openzen.zenscript.javabytecode.compiler.definitions.JavaOptionInfoTag;
19
 
18
 
20
 import java.io.FileOutputStream;
19
 import java.io.FileOutputStream;
21
 import java.io.IOException;
20
 import java.io.IOException;
196
 
195
 
197
 		@Override
196
 		@Override
198
 		public Integer acceptVariantOption(VariantOptionSwitchValue value) {
197
 		public Integer acceptVariantOption(VariantOptionSwitchValue value) {
199
-			return value.option.getTag(JavaOptionInfoTag.class).number;
198
+			return value.option.getOrdinal();
200
 		}
199
 		}
201
 	}
200
 	}
202
 }
201
 }

+ 7
- 28
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java View File

13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
14
 import org.openzen.zenscript.codemodel.member.ref.FieldMemberRef;
14
 import org.openzen.zenscript.codemodel.member.ref.FieldMemberRef;
15
 import org.openzen.zenscript.codemodel.statement.ReturnStatement;
15
 import org.openzen.zenscript.codemodel.statement.ReturnStatement;
16
-import org.openzen.zenscript.codemodel.type.ArrayTypeID;
17
-import org.openzen.zenscript.codemodel.type.AssocTypeID;
18
-import org.openzen.zenscript.codemodel.type.BasicTypeID;
19
-import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
16
+import org.openzen.zenscript.codemodel.type.*;
20
 import org.openzen.zenscript.codemodel.type.member.BuiltinID;
17
 import org.openzen.zenscript.codemodel.type.member.BuiltinID;
21
 import org.openzen.zenscript.implementations.IntRange;
18
 import org.openzen.zenscript.implementations.IntRange;
22
 import org.openzen.zenscript.javabytecode.*;
19
 import org.openzen.zenscript.javabytecode.*;
1736
 
1733
 
1737
 	@Override
1734
 	@Override
1738
 	public Void visitGetMatchingVariantField(GetMatchingVariantField expression) {
1735
 	public Void visitGetMatchingVariantField(GetMatchingVariantField expression) {
1739
-		throw new UnsupportedOperationException(); // TODO
1736
+		javaWriter.loadObject(0);
1737
+		final ITypeID type = expression.value.option.getParameterType(expression.index);
1738
+		javaWriter.getField(new JavaFieldInfo(expression.value.option.getTag(JavaClassInfo.class), "Field" + expression.index, type.accept(JavaTypeVisitor.INSTANCE).getInternalName()));
1739
+		return null;
1740
+		//throw new UnsupportedOperationException(); // TODO
1740
 	}
1741
 	}
1741
 
1742
 
1742
 	@Override
1743
 	@Override
2033
 				javaWriter.label(defaultLabel);
2034
 				javaWriter.label(defaultLabel);
2034
 			}
2035
 			}
2035
 			//switchCase.value.body.setTag(MatchExpression.class, expression);
2036
 			//switchCase.value.body.setTag(MatchExpression.class, expression);
2036
-			switchCase.value.accept(new MatchExpressionVisitor(this.javaWriter));
2037
+			switchCase.value.accept(this);
2037
 			javaWriter.goTo(end);
2038
 			javaWriter.goTo(end);
2038
 		}
2039
 		}
2039
 
2040
 
2425
 		return true;
2426
 		return true;
2426
 	}
2427
 	}
2427
 
2428
 
2428
-
2429
-	private static final class MatchExpressionVisitor extends JavaExpressionVisitor {
2430
-		public MatchExpressionVisitor(JavaWriter javaWriter) {
2431
-			super(javaWriter);
2432
-		}
2433
-
2434
-		@Override
2435
-		public Void visitGetLocalVariable(GetLocalVariableExpression expression) {
2436
-			final Label label = new Label();
2437
-			final JavaLocalVariableInfo tag = expression.variable.getTag(JavaLocalVariableInfo.class);
2438
-			if (tag != null) {
2439
-				tag.end = label;
2440
-				javaWriter.load(tag.type, tag.local);
2441
-				javaWriter.label(label);
2442
-				return null;
2443
-			}
2444
-
2445
-			javaWriter.aConstNull();
2446
-			return null;
2447
-
2448
-		}
2449
-	}
2450
 }
2429
 }

+ 12
- 20
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaDefinitionVisitor.java View File

195
 
195
 
196
 		final JavaMemberVisitor visitor = new JavaMemberVisitor(writer, toClass, variant);
196
 		final JavaMemberVisitor visitor = new JavaMemberVisitor(writer, toClass, variant);
197
 
197
 
198
-
199
 		final List<VariantDefinition.Option> options = variant.options;
198
 		final List<VariantDefinition.Option> options = variant.options;
200
-		for (int optionNo = 0, optionsSize = options.size(); optionNo < optionsSize; optionNo++) {
201
-			final VariantDefinition.Option option = options.get(optionNo);
202
-			option.setTag(JavaOptionInfoTag.class, new JavaOptionInfoTag(optionNo));
203
-		}
204
-
205
-		for (final IDefinitionMember member : variant.members) {
206
-			member.accept(visitor);
207
-		}
208
-
209
-
210
-
211
-
212
 		//Each option is one of the possible child classes
199
 		//Each option is one of the possible child classes
213
-		for (int optionNo = 0, optionsSize = options.size(); optionNo < optionsSize; ++optionNo) {
214
-			final VariantDefinition.Option option = options.get(optionNo);
215
-
200
+		for (final VariantDefinition.Option option : options) {
216
 			final String optionClassName = variantName + "$" + option.name;
201
 			final String optionClassName = variantName + "$" + option.name;
217
-			final JavaClassInfo optionClass = new JavaClassInfo(variantName);
202
+			final JavaClassInfo optionClass = new JavaClassInfo(optionClassName);
218
 			final JavaClassWriter optionWriter = new JavaClassWriter(ClassWriter.COMPUTE_FRAMES);
203
 			final JavaClassWriter optionWriter = new JavaClassWriter(ClassWriter.COMPUTE_FRAMES);
219
 
204
 
205
+			option.setTag(JavaClassInfo.class, optionClass);
206
+
220
 
207
 
221
 			//Generic option signature
208
 			//Generic option signature
222
 			final String signature;
209
 			final String signature;
245
 
232
 
246
 
233
 
247
 			//Denominator for switch-cases
234
 			//Denominator for switch-cases
248
-			final JavaWriter getDenominator = new JavaWriter(optionWriter, new JavaMethodInfo(optionClass, "getDenominator", "()I", Modifiers.PUBLIC), null,null, null, "java/lang/Override");
235
+			final JavaWriter getDenominator = new JavaWriter(optionWriter, new JavaMethodInfo(optionClass, "getDenominator", "()I", Modifiers.PUBLIC), null, null, null, "java/lang/Override");
249
 			getDenominator.start();
236
 			getDenominator.start();
250
-			getDenominator.constant(optionNo);
237
+			getDenominator.constant(option.ordinal);
251
 			getDenominator.returnInt();
238
 			getDenominator.returnInt();
252
 			getDenominator.end();
239
 			getDenominator.end();
253
 
240
 
254
 
241
 
255
-
256
 			//Print the option files, won't be in production
242
 			//Print the option files, won't be in production
257
 			optionVisitor.end();
243
 			optionVisitor.end();
258
 			optionWriter.visitEnd();
244
 			optionWriter.visitEnd();
263
 				e.printStackTrace();
249
 				e.printStackTrace();
264
 			}
250
 			}
265
 		}
251
 		}
252
+
253
+
254
+		for (final IDefinitionMember member : variant.members) {
255
+			member.accept(visitor);
256
+		}
257
+
266
 		visitor.end();
258
 		visitor.end();
267
 		writer.visitEnd();
259
 		writer.visitEnd();
268
 
260
 

+ 1
- 1
ScriptingExample/src/main/java/org/openzen/zenscript/scriptingexample/Main.java View File

123
 	}
123
 	}
124
 	
124
 	
125
 	private static JavaModule compileSemanticToJava(SemanticModule module) {
125
 	private static JavaModule compileSemanticToJava(SemanticModule module) {
126
-		JavaCompiler compiler = new JavaCompiler(false);
126
+		JavaCompiler compiler = new JavaCompiler(false, null);
127
 		for (HighLevelDefinition definition : module.definitions.getAll()) {
127
 		for (HighLevelDefinition definition : module.definitions.getAll()) {
128
 			compiler.addDefinition(definition, module);
128
 			compiler.addDefinition(definition, module);
129
 		}
129
 		}

Loading…
Cancel
Save