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,4 +32,12 @@ public class VariantOptionRef {
32 32
 	public <T> T getTag(Class<T> type) {
33 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,7 +15,6 @@ import org.openzen.zenscript.codemodel.type.BasicTypeID;
15 15
 import org.openzen.zenscript.codemodel.type.ITypeID;
16 16
 import org.openzen.zenscript.javabytecode.JavaModule;
17 17
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
18
-import org.openzen.zenscript.javabytecode.compiler.definitions.JavaOptionInfoTag;
19 18
 
20 19
 import java.io.FileOutputStream;
21 20
 import java.io.IOException;
@@ -196,7 +195,7 @@ public class CompilerUtils {
196 195
 
197 196
 		@Override
198 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,10 +13,7 @@ import org.openzen.zenscript.codemodel.member.ref.ConstMemberRef;
13 13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
14 14
 import org.openzen.zenscript.codemodel.member.ref.FieldMemberRef;
15 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 17
 import org.openzen.zenscript.codemodel.type.member.BuiltinID;
21 18
 import org.openzen.zenscript.implementations.IntRange;
22 19
 import org.openzen.zenscript.javabytecode.*;
@@ -1736,7 +1733,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void> {
1736 1733
 
1737 1734
 	@Override
1738 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 1743
 	@Override
@@ -2033,7 +2034,7 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void> {
2033 2034
 				javaWriter.label(defaultLabel);
2034 2035
 			}
2035 2036
 			//switchCase.value.body.setTag(MatchExpression.class, expression);
2036
-			switchCase.value.accept(new MatchExpressionVisitor(this.javaWriter));
2037
+			switchCase.value.accept(this);
2037 2038
 			javaWriter.goTo(end);
2038 2039
 		}
2039 2040
 
@@ -2425,26 +2426,4 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void> {
2425 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,28 +195,15 @@ public class JavaDefinitionVisitor implements DefinitionVisitor<byte[]> {
195 195
 
196 196
 		final JavaMemberVisitor visitor = new JavaMemberVisitor(writer, toClass, variant);
197 197
 
198
-
199 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 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 201
 			final String optionClassName = variantName + "$" + option.name;
217
-			final JavaClassInfo optionClass = new JavaClassInfo(variantName);
202
+			final JavaClassInfo optionClass = new JavaClassInfo(optionClassName);
218 203
 			final JavaClassWriter optionWriter = new JavaClassWriter(ClassWriter.COMPUTE_FRAMES);
219 204
 
205
+			option.setTag(JavaClassInfo.class, optionClass);
206
+
220 207
 
221 208
 			//Generic option signature
222 209
 			final String signature;
@@ -245,14 +232,13 @@ public class JavaDefinitionVisitor implements DefinitionVisitor<byte[]> {
245 232
 
246 233
 
247 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 236
 			getDenominator.start();
250
-			getDenominator.constant(optionNo);
237
+			getDenominator.constant(option.ordinal);
251 238
 			getDenominator.returnInt();
252 239
 			getDenominator.end();
253 240
 
254 241
 
255
-
256 242
 			//Print the option files, won't be in production
257 243
 			optionVisitor.end();
258 244
 			optionWriter.visitEnd();
@@ -263,6 +249,12 @@ public class JavaDefinitionVisitor implements DefinitionVisitor<byte[]> {
263 249
 				e.printStackTrace();
264 250
 			}
265 251
 		}
252
+
253
+
254
+		for (final IDefinitionMember member : variant.members) {
255
+			member.accept(visitor);
256
+		}
257
+
266 258
 		visitor.end();
267 259
 		writer.visitEnd();
268 260
 

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

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

Loading…
Cancel
Save