Browse Source

Adding (part of) support for optional types.

Stan Hebben 6 years ago
parent
commit
333c5f429d

+ 1
- 0
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java View File

@@ -160,6 +160,7 @@ public class JavaCompiler {
160 160
 			methodName = "generatedBlock" + (generatedScriptBlockCounter++);
161 161
 		} else {
162 162
 			// TODO: remove special characters
163
+			System.out.println("Writing script: " + sourceFile.filename);
163 164
 			methodName = sourceFile.filename.substring(0, sourceFile.filename.lastIndexOf('.')).replace("/", "_");
164 165
 		}
165 166
 

+ 111
- 0
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaOptionalTypeClassVisitor.java View File

@@ -0,0 +1,111 @@
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.javabytecode.compiler;
7
+
8
+import org.openzen.zenscript.codemodel.type.ArrayTypeID;
9
+import org.openzen.zenscript.codemodel.type.AssocTypeID;
10
+import org.openzen.zenscript.codemodel.type.BasicTypeID;
11
+import org.openzen.zenscript.codemodel.type.ConstTypeID;
12
+import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
13
+import org.openzen.zenscript.codemodel.type.FunctionTypeID;
14
+import org.openzen.zenscript.codemodel.type.GenericTypeID;
15
+import org.openzen.zenscript.codemodel.type.ITypeVisitor;
16
+import org.openzen.zenscript.codemodel.type.IteratorTypeID;
17
+import org.openzen.zenscript.codemodel.type.OptionalTypeID;
18
+import org.openzen.zenscript.codemodel.type.RangeTypeID;
19
+
20
+/**
21
+ *
22
+ * @author Hoofdgebruiker
23
+ */
24
+public class JavaOptionalTypeClassVisitor implements ITypeVisitor<Class> {
25
+	private final JavaTypeClassVisitor base;
26
+	
27
+	public JavaOptionalTypeClassVisitor(JavaTypeClassVisitor base) {
28
+		this.base = base;
29
+	}
30
+
31
+	@Override
32
+	public Class visitBasic(BasicTypeID basic) {
33
+		switch (basic) {
34
+			case VOID:
35
+				return void.class;
36
+			case NULL:
37
+				return Object.class;
38
+			case ANY:
39
+				return Object.class; // TODO
40
+			case BOOL:
41
+				return Boolean.class;
42
+			case BYTE:
43
+			case SBYTE:
44
+				return Byte.class;
45
+			case SHORT:
46
+			case USHORT:
47
+				return Short.class;
48
+			case INT:
49
+			case UINT:
50
+				return Integer.class;
51
+			case LONG:
52
+			case ULONG:
53
+				return Long.class;
54
+			case FLOAT:
55
+				return Float.class;
56
+			case DOUBLE:
57
+				return Double.class;
58
+			case CHAR:
59
+				return Character.class;
60
+			case STRING:
61
+				return String.class;
62
+			default:
63
+				throw new IllegalArgumentException("Invalid type: " + basic);
64
+		}
65
+	}
66
+
67
+	@Override
68
+	public Class visitArray(ArrayTypeID array) {
69
+		return base.visitArray(array);
70
+	}
71
+
72
+	@Override
73
+	public Class visitAssoc(AssocTypeID assoc) {
74
+		return base.visitAssoc(assoc);
75
+	}
76
+
77
+	@Override
78
+	public Class visitIterator(IteratorTypeID iterator) {
79
+		return base.visitIterator(iterator);
80
+	}
81
+
82
+	@Override
83
+	public Class visitFunction(FunctionTypeID function) {
84
+		return base.visitFunction(function);
85
+	}
86
+
87
+	@Override
88
+	public Class visitDefinition(DefinitionTypeID definition) {
89
+		return base.visitDefinition(definition);
90
+	}
91
+
92
+	@Override
93
+	public Class visitGeneric(GenericTypeID generic) {
94
+		return base.visitGeneric(generic);
95
+	}
96
+
97
+	@Override
98
+	public Class visitRange(RangeTypeID range) {
99
+		return base.visitRange(range);
100
+	}
101
+
102
+	@Override
103
+	public Class visitConst(ConstTypeID type) {
104
+		return base.visitConst(type);
105
+	}
106
+
107
+	@Override
108
+	public Class visitOptional(OptionalTypeID optional) {
109
+		return base.visitOptional(optional);
110
+	}
111
+}

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

@@ -9,6 +9,7 @@ import java.util.Map;
9 9
 public class JavaTypeClassVisitor implements ITypeVisitor<Class> {
10 10
 
11 11
     public static final JavaTypeClassVisitor INSTANCE = new JavaTypeClassVisitor();
12
+	private final JavaOptionalTypeClassVisitor optional = new JavaOptionalTypeClassVisitor(this);
12 13
 
13 14
     @Override
14 15
     public Class visitBasic(BasicTypeID basic) {
@@ -87,6 +88,6 @@ public class JavaTypeClassVisitor implements ITypeVisitor<Class> {
87 88
 
88 89
     @Override
89 90
     public Class visitOptional(OptionalTypeID optional) {
90
-        return null;
91
+        return optional.baseType.accept(this.optional);
91 92
     }
92 93
 }

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

@@ -16,7 +16,7 @@ import static org.objectweb.asm.Opcodes.*;
16 16
 public class JavaWriter {
17 17
     private final LocalVariablesSorter visitor;
18 18
     private final List<JavaLocalVariableInfo> localVariableInfos = new ArrayList<>();
19
-    private boolean debug = true;
19
+    private boolean debug = false;
20 20
     private boolean nameVariables = true;
21 21
     private int labelIndex = 1;
22 22
     private Map<Label, String> labelNames = new HashMap<>();

Loading…
Cancel
Save