Browse Source

Added type preparation.

Stan Hebben 6 years ago
parent
commit
a02b2c2369
36 changed files with 589 additions and 420 deletions
  1. 5
    33
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeContext.java
  2. 48
    25
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java
  3. 8
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaModule.java
  4. 10
    8
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/CompilerUtils.java
  5. 3
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java
  6. 3
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaPreDecrementVisitor.java
  7. 3
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaPreIncrementVisitor.java
  8. 4
    4
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaStatementVisitor.java
  9. 10
    15
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaDefinitionVisitor.java
  10. 3
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java
  11. 48
    0
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaContext.java
  12. 3
    5
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaImplementation.java
  13. 15
    10
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaMethod.java
  14. 57
    0
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaModifiers.java
  15. 44
    0
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeClass.java
  16. 16
    0
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeTranslation.java
  17. 30
    0
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeTranslator.java
  18. 4
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeDescriptorVisitor.java
  19. 4
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeInternalNameVisitor.java
  20. 3
    3
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeNameVisitor.java
  21. 3
    5
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaVariantOption.java
  22. 29
    26
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java
  23. 12
    10
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionMemberVisitor.java
  24. 85
    105
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionVisitor.java
  25. 20
    17
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java
  26. 0
    27
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/FormattingUtils.java
  27. 1
    1
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaDefinitionVisitor.java
  28. 2
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java
  29. 6
    5
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java
  30. 6
    3
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceCompiler.java
  31. 5
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceContext.java
  32. 81
    24
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java
  33. 4
    3
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceFile.java
  34. 14
    8
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceSyntheticHelperGenerator.java
  35. 0
    46
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaNativeClass.java
  36. 0
    14
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourceSignatureVisitor.java

JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaContext.java → JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeContext.java View File

12
 import org.openzen.zenscript.codemodel.type.ITypeID;
12
 import org.openzen.zenscript.codemodel.type.ITypeID;
13
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
13
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
14
 import org.openzen.zenscript.javabytecode.compiler.CompilerUtils;
14
 import org.openzen.zenscript.javabytecode.compiler.CompilerUtils;
15
+import org.openzen.zenscript.javashared.JavaContext;
15
 import org.openzen.zenscript.javashared.JavaSynthesizedClass;
16
 import org.openzen.zenscript.javashared.JavaSynthesizedClass;
16
 import org.openzen.zenscript.javashared.JavaSyntheticClassGenerator;
17
 import org.openzen.zenscript.javashared.JavaSyntheticClassGenerator;
17
 import org.openzen.zenscript.javashared.JavaTypeDescriptorVisitor;
18
 import org.openzen.zenscript.javashared.JavaTypeDescriptorVisitor;
21
  *
22
  *
22
  * @author Hoofdgebruiker
23
  * @author Hoofdgebruiker
23
  */
24
  */
24
-public class JavaContext {
25
+public class JavaBytecodeContext extends JavaContext {
25
 	private final JavaModule module;
26
 	private final JavaModule module;
26
 	private final TypeGenerator typeGenerator;
27
 	private final TypeGenerator typeGenerator;
27
 	private final JavaTypeInternalNameVisitor internalNameVisitor;
28
 	private final JavaTypeInternalNameVisitor internalNameVisitor;
28
 	private final JavaTypeDescriptorVisitor descriptorVisitor;
29
 	private final JavaTypeDescriptorVisitor descriptorVisitor;
29
 	
30
 	
30
-	public JavaContext(JavaModule module) {
31
+	public JavaBytecodeContext(JavaModule module) {
31
 		this.module = module;
32
 		this.module = module;
32
 		
33
 		
33
 		typeGenerator = new TypeGenerator();
34
 		typeGenerator = new TypeGenerator();
39
 		return typeGenerator;
40
 		return typeGenerator;
40
 	}
41
 	}
41
 	
42
 	
43
+	@Override
42
 	public String getDescriptor(ITypeID type) {
44
 	public String getDescriptor(ITypeID type) {
43
 		return type.accept(descriptorVisitor);
45
 		return type.accept(descriptorVisitor);
44
 	}
46
 	}
51
 		return Type.getType(getDescriptor(type));
53
 		return Type.getType(getDescriptor(type));
52
 	}
54
 	}
53
 	
55
 	
54
-	public String getMethodDescriptor(FunctionHeader header) {
55
-		return getMethodDescriptor(header, false);
56
-	}
57
-	
58
-    public String getMethodSignature(FunctionHeader header) {
59
-        StringBuilder signatureBuilder = new StringBuilder("(");
60
-        for (FunctionParameter parameter : header.parameters) {
61
-            signatureBuilder.append(getDescriptor(parameter.type));
62
-        }
63
-        signatureBuilder.append(")").append(getDescriptor(header.returnType));
64
-        return signatureBuilder.toString();
65
-    }
66
-	
67
-	public String getEnumConstructorDescriptor(FunctionHeader header) {
68
-		return getMethodDescriptor(header, true);
69
-	}
70
-	
71
-	private String getMethodDescriptor(FunctionHeader header, boolean isEnumConstructor) {
72
-        StringBuilder descBuilder = new StringBuilder("(");
73
-        if (isEnumConstructor)
74
-            descBuilder.append("Ljava/lang/String;I");
75
-		
76
-        for (FunctionParameter parameter : header.parameters) {
77
-			descBuilder.append(getDescriptor(parameter.type));
78
-        }
79
-        descBuilder.append(")");
80
-        descBuilder.append(getDescriptor(header.returnType));
81
-        return descBuilder.toString();
82
-    }
83
-	
84
 	public void register(String name, byte[] bytecode) {
56
 	public void register(String name, byte[] bytecode) {
85
 		module.register(name, bytecode);
57
 		module.register(name, bytecode);
86
 	}
58
 	}
89
 
61
 
90
 		@Override
62
 		@Override
91
 		public JavaSynthesizedClass synthesizeFunction(FunctionTypeID type) {
63
 		public JavaSynthesizedClass synthesizeFunction(FunctionTypeID type) {
92
-			return CompilerUtils.getLambdaInterface(JavaContext.this, type);
64
+			return CompilerUtils.getLambdaInterface(JavaBytecodeContext.this, type);
93
 		}
65
 		}
94
 
66
 
95
 		@Override
67
 		@Override

+ 48
- 25
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java View File

6
 package org.openzen.zenscript.javabytecode;
6
 package org.openzen.zenscript.javabytecode;
7
 
7
 
8
 import java.io.File;
8
 import java.io.File;
9
+import java.util.ArrayList;
9
 import java.util.HashMap;
10
 import java.util.HashMap;
10
 import java.util.Map;
11
 import java.util.Map;
11
 
12
 
24
 import org.openzen.zenscript.javabytecode.compiler.definitions.JavaDefinitionVisitor;
25
 import org.openzen.zenscript.javabytecode.compiler.definitions.JavaDefinitionVisitor;
25
 
26
 
26
 import java.util.HashMap;
27
 import java.util.HashMap;
28
+import java.util.List;
27
 import java.util.Map;
29
 import java.util.Map;
28
 import org.openzen.zenscript.javashared.JavaClass;
30
 import org.openzen.zenscript.javashared.JavaClass;
31
+import org.openzen.zenscript.javashared.prepare.JavaPrepareDefinitionMemberVisitor;
32
+import org.openzen.zenscript.javashared.prepare.JavaPrepareDefinitionVisitor;
29
 
33
 
30
 /**
34
 /**
31
  * @author Hoofdgebruiker
35
  * @author Hoofdgebruiker
37
 	private int generatedScriptBlockCounter = 0;
41
 	private int generatedScriptBlockCounter = 0;
38
 	private boolean finished = false;
42
 	private boolean finished = false;
39
 	private final File jarFile;
43
 	private final File jarFile;
40
-	private final JavaContext context;
44
+	private final JavaBytecodeContext context;
45
+	
46
+	private final List<HighLevelDefinition> definitions = new ArrayList<>();
47
+	private final List<ScriptBlock> scripts = new ArrayList<>();
41
 	
48
 	
42
 	public JavaCompiler(File jarFile) {
49
 	public JavaCompiler(File jarFile) {
43
 		this(false, jarFile);
50
 		this(false, jarFile);
46
 	public JavaCompiler(boolean debug, File jarFile) {
53
 	public JavaCompiler(boolean debug, File jarFile) {
47
 		target = new JavaModule();
54
 		target = new JavaModule();
48
 		this.jarFile = jarFile;
55
 		this.jarFile = jarFile;
49
-		this.context = new JavaContext(target);
56
+		this.context = new JavaBytecodeContext(target);
50
 		
57
 		
51
 		scriptsClassWriter = new JavaClassWriter(ClassWriter.COMPUTE_FRAMES);
58
 		scriptsClassWriter = new JavaClassWriter(ClassWriter.COMPUTE_FRAMES);
52
 		scriptsClassWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Scripts", null, "java/lang/Object", null);
59
 		scriptsClassWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Scripts", null, "java/lang/Object", null);
54
 
61
 
55
 	@Override
62
 	@Override
56
 	public void addDefinition(HighLevelDefinition definition, SemanticModule module) {
63
 	public void addDefinition(HighLevelDefinition definition, SemanticModule module) {
57
-		String className = getClassName(definition.position.getFilename());
58
-		JavaScriptFile scriptFile = getScriptFile(className);
59
-		target.register(definition.name, definition.accept(new JavaDefinitionVisitor(context, scriptFile.classWriter)));
64
+		JavaPrepareDefinitionVisitor preparer = new JavaPrepareDefinitionVisitor(definition.position.getFilename(), null);
65
+		definition.accept(preparer);
66
+		
67
+		definitions.add(definition);
60
 	}
68
 	}
61
 
69
 
62
 	@Override
70
 	@Override
63
 	public void addScriptBlock(ScriptBlock script) {
71
 	public void addScriptBlock(ScriptBlock script) {
64
-		final SourceFile sourceFile = script.getTag(SourceFile.class);
65
-		final String className = getClassName(sourceFile == null ? null : sourceFile.getFilename());
66
-		JavaScriptFile scriptFile = getScriptFile(className);
67
-
68
-		String methodName = scriptFile.scriptMethods.isEmpty() ? "run" : "run" + scriptFile.scriptMethods.size();
69
-
70
-		// convert scripts into methods (add them to a Scripts class?)
71
-		// (TODO: can we break very long scripts into smaller methods? for the extreme scripts)
72
-		final JavaClassWriter visitor = scriptFile.classWriter;
73
-		JavaMethodInfo method = new JavaMethodInfo(new JavaClass(script.pkg.fullName, className, JavaClass.Kind.CLASS), methodName, "()V", Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
74
-		scriptFile.scriptMethods.add(method);
75
-
76
-		final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, new JavaWriter(visitor, method, null, null, null));
77
-		statementVisitor.start();
78
-		for (Statement statement : script.statements) {
79
-			statement.accept(statementVisitor);
80
-		}
81
-		target.register("Scripts", scriptsClassWriter.toByteArray());
82
-		statementVisitor.end();
72
+		scripts.add(script);
83
 	}
73
 	}
84
 
74
 
85
 	private String getClassName(String filename) {
75
 	private String getClassName(String filename) {
124
 			throw new IllegalStateException("Already finished!");
114
 			throw new IllegalStateException("Already finished!");
125
 		
115
 		
126
 		finished = true;
116
 		finished = true;
127
-
117
+		
118
+		for (HighLevelDefinition definition : definitions) {
119
+			JavaPrepareDefinitionMemberVisitor memberPreparer = new JavaPrepareDefinitionMemberVisitor(context, definition.position.getFilename());
120
+			definition.accept(memberPreparer);
121
+		}
122
+		
123
+		for (HighLevelDefinition definition : definitions) {
124
+			String className = getClassName(definition.position.getFilename());
125
+			JavaScriptFile scriptFile = getScriptFile(className);
126
+			
127
+			target.register(definition.name, definition.accept(new JavaDefinitionVisitor(context, scriptFile.classWriter)));
128
+		}
129
+ 
130
+		for (ScriptBlock script : scripts) {
131
+			final SourceFile sourceFile = script.getTag(SourceFile.class);
132
+			final String className = getClassName(sourceFile == null ? null : sourceFile.getFilename());
133
+			JavaScriptFile scriptFile = getScriptFile(className);
134
+
135
+			String methodName = scriptFile.scriptMethods.isEmpty() ? "run" : "run" + scriptFile.scriptMethods.size();
136
+
137
+			// convert scripts into methods (add them to a Scripts class?)
138
+			// (TODO: can we break very long scripts into smaller methods? for the extreme scripts)
139
+			final JavaClassWriter visitor = scriptFile.classWriter;
140
+			JavaMethodInfo method = new JavaMethodInfo(new JavaClass(script.pkg.fullName, className, JavaClass.Kind.CLASS), methodName, "()V", Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
141
+			scriptFile.scriptMethods.add(method);
142
+
143
+			final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, new JavaWriter(visitor, method, null, null, null));
144
+			statementVisitor.start();
145
+			for (Statement statement : script.statements) {
146
+				statement.accept(statementVisitor);
147
+			}
148
+			statementVisitor.end();
149
+		}
150
+		
128
 		JavaMethodInfo runMethod = new JavaMethodInfo(new JavaClass("script", "Scripts", JavaClass.Kind.CLASS), "run", "()V", Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
151
 		JavaMethodInfo runMethod = new JavaMethodInfo(new JavaClass("script", "Scripts", JavaClass.Kind.CLASS), "run", "()V", Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
129
 		final JavaWriter runWriter = new JavaWriter(scriptsClassWriter, runMethod, null, null, null);
152
 		final JavaWriter runWriter = new JavaWriter(scriptsClassWriter, runMethod, null, null, null);
130
 		runWriter.start();
153
 		runWriter.start();

+ 8
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaModule.java View File

18
  * @author Hoofdgebruiker
18
  * @author Hoofdgebruiker
19
  */
19
  */
20
 public class JavaModule {
20
 public class JavaModule {
21
-	public static final Map<String, byte[]> classes = new HashMap<>();
21
+	private final Map<String, byte[]> classes = new HashMap<>();
22
 
22
 
23
 	public JavaModule() {
23
 	public JavaModule() {
24
 
24
 
25
 	}
25
 	}
26
 
26
 
27
 	public void register(String classname, byte[] bytecode) {
27
 	public void register(String classname, byte[] bytecode) {
28
-		if (bytecode == null) return;
28
+		if (bytecode == null)
29
+			return;
30
+		
29
 		classes.put(classname, bytecode);
31
 		classes.put(classname, bytecode);
30
-		try (FileOutputStream writer = new FileOutputStream(new File(classname + ".class"))) {
32
+		
33
+		try (FileOutputStream writer = new FileOutputStream(new File(classname.replace('/', '_') + ".class"))) {
31
 			writer.write(bytecode);
34
 			writer.write(bytecode);
32
 		} catch (IOException e) {
35
 		} catch (IOException e) {
33
 			e.printStackTrace();
36
 			e.printStackTrace();
49
 
52
 
50
 		@Override
53
 		@Override
51
 		public Class<?> loadClass(String name) throws ClassNotFoundException {
54
 		public Class<?> loadClass(String name) throws ClassNotFoundException {
55
+			//System.out.println("LoadClass " + name);
56
+			
52
 			if (customClasses.containsKey(name))
57
 			if (customClasses.containsKey(name))
53
 				return customClasses.get(name);
58
 				return customClasses.get(name);
54
 			if (classes.containsKey(name)) {
59
 			if (classes.containsKey(name)) {

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

20
 import java.util.HashMap;
20
 import java.util.HashMap;
21
 import java.util.Map;
21
 import java.util.Map;
22
 import org.openzen.zenscript.codemodel.type.FunctionTypeID;
22
 import org.openzen.zenscript.codemodel.type.FunctionTypeID;
23
-import org.openzen.zenscript.javabytecode.JavaContext;
23
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
24
 import org.openzen.zenscript.javashared.JavaClass;
24
 import org.openzen.zenscript.javashared.JavaClass;
25
 import org.openzen.zenscript.javashared.JavaSynthesizedClass;
25
 import org.openzen.zenscript.javashared.JavaSynthesizedClass;
26
 import org.openzen.zenscript.javashared.JavaSynthesizedClassNamer;
26
 import org.openzen.zenscript.javashared.JavaSynthesizedClassNamer;
70
 		return position.getFilename().substring(0, position.getFilename().lastIndexOf('.')).replace("/", "_");
70
 		return position.getFilename().substring(0, position.getFilename().lastIndexOf('.')).replace("/", "_");
71
 	}
71
 	}
72
 
72
 
73
-    public static void tagMethodParameters(JavaContext context, FunctionHeader header, boolean isStatic) {
73
+    public static void tagMethodParameters(JavaBytecodeContext context, FunctionHeader header, boolean isStatic) {
74
         for (int i = 0; i < header.parameters.length; i++) {
74
         for (int i = 0; i < header.parameters.length; i++) {
75
             FunctionParameter parameter = header.parameters[i];
75
             FunctionParameter parameter = header.parameters[i];
76
             Type parameterType = context.getType(parameter.type);
76
             Type parameterType = context.getType(parameter.type);
78
         }
78
         }
79
     }
79
     }
80
 
80
 
81
-    public static void tagConstructorParameters(JavaContext context, FunctionHeader header, boolean isEnum) {
81
+    public static void tagConstructorParameters(JavaBytecodeContext context, FunctionHeader header, boolean isEnum) {
82
         for (int i = 0; i < header.parameters.length; i++) {
82
         for (int i = 0; i < header.parameters.length; i++) {
83
             FunctionParameter parameter = header.parameters[i];
83
             FunctionParameter parameter = header.parameters[i];
84
             Type parameterType = context.getType(parameter.type);
84
             Type parameterType = context.getType(parameter.type);
86
         }
86
         }
87
     }
87
     }
88
 
88
 
89
-    public static void writeDefaultFieldInitializers(JavaContext context, JavaWriter constructorWriter, HighLevelDefinition definition, boolean staticFields) {
89
+    public static void writeDefaultFieldInitializers(JavaBytecodeContext context, JavaWriter constructorWriter, HighLevelDefinition definition, boolean staticFields) {
90
         JavaExpressionVisitor expressionVisitor = new JavaExpressionVisitor(context, constructorWriter);
90
         JavaExpressionVisitor expressionVisitor = new JavaExpressionVisitor(context, constructorWriter);
91
         for (final IDefinitionMember definitionMember : definition.members) {
91
         for (final IDefinitionMember definitionMember : definition.members) {
92
             if (!(definitionMember instanceof FieldMember))
92
             if (!(definitionMember instanceof FieldMember))
107
 
107
 
108
 	private static final Map<String, JavaSynthesizedClass> functions = new HashMap<>();
108
 	private static final Map<String, JavaSynthesizedClass> functions = new HashMap<>();
109
 	
109
 	
110
-    public static JavaSynthesizedClass getLambdaInterface(JavaContext context, FunctionTypeID function) {
110
+    public static JavaSynthesizedClass getLambdaInterface(JavaBytecodeContext context, FunctionTypeID function) {
111
 		String signature = JavaSynthesizedClassNamer.getFunctionSignature(function);
111
 		String signature = JavaSynthesizedClassNamer.getFunctionSignature(function);
112
 		if (functions.containsKey(signature))
112
 		if (functions.containsKey(signature))
113
 			return functions.get(signature).withTypeParameters(JavaSynthesizedClassNamer.extractTypeParameters(function));
113
 			return functions.get(signature).withTypeParameters(JavaSynthesizedClassNamer.extractTypeParameters(function));
114
 		
114
 		
115
+		System.out.println("Generating function " + signature);
116
+		
115
 		JavaSynthesizedClass result = JavaSynthesizedClassNamer.createFunctionName(function);
117
 		JavaSynthesizedClass result = JavaSynthesizedClassNamer.createFunctionName(function);
116
 		functions.put(signature, result);
118
 		functions.put(signature, result);
117
 		
119
 		
119
         return result;
121
         return result;
120
     }
122
     }
121
 
123
 
122
-    private static void createLambdaInterface(JavaContext context, FunctionHeader header, JavaClass cls) {
124
+    private static void createLambdaInterface(JavaBytecodeContext context, FunctionHeader header, JavaClass cls) {
123
         ClassWriter ifaceWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
125
         ClassWriter ifaceWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
124
         ifaceWriter.visitAnnotation("java/lang/FunctionalInterface", true).visitEnd();
126
         ifaceWriter.visitAnnotation("java/lang/FunctionalInterface", true).visitEnd();
125
-        ifaceWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT, cls.getClassName(), null, "java/lang/Object", null);
127
+        ifaceWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT, cls.internalName, null, "java/lang/Object", null);
126
 
128
 
127
         ifaceWriter
129
         ifaceWriter
128
 				.visitMethod(
130
 				.visitMethod(
133
 					null)
135
 					null)
134
 				.visitEnd();
136
 				.visitEnd();
135
 
137
 
136
-        context.register(cls.internalName, ifaceWriter.toByteArray());
138
+        context.register(cls.internalName.replace('/', '.'), ifaceWriter.toByteArray());
137
 
139
 
138
         try (FileOutputStream out = new FileOutputStream(cls.getClassName() + ".class")){
140
         try (FileOutputStream out = new FileOutputStream(cls.getClassName() + ".class")){
139
             out.write(ifaceWriter.toByteArray());
141
             out.write(ifaceWriter.toByteArray());

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

149
 
149
 
150
 	protected final JavaWriter javaWriter;
150
 	protected final JavaWriter javaWriter;
151
 	private final JavaCapturedExpressionVisitor capturedExpressionVisitor = new JavaCapturedExpressionVisitor(this);
151
 	private final JavaCapturedExpressionVisitor capturedExpressionVisitor = new JavaCapturedExpressionVisitor(this);
152
-	private final JavaContext context;
152
+	private final JavaBytecodeContext context;
153
 
153
 
154
-    public JavaExpressionVisitor(JavaContext context, JavaWriter javaWriter) {
154
+    public JavaExpressionVisitor(JavaBytecodeContext context, JavaWriter javaWriter) {
155
         this.javaWriter = javaWriter;
155
         this.javaWriter = javaWriter;
156
 		this.context = context;
156
 		this.context = context;
157
     }
157
     }
1640
 		functionWriter.end();
1640
 		functionWriter.end();
1641
 		lambdaCW.visitEnd();
1641
 		lambdaCW.visitEnd();
1642
 
1642
 
1643
-		JavaModule.classes.putIfAbsent(name, lambdaCW.toByteArray());
1643
+		context.register(name, lambdaCW.toByteArray());
1644
 
1644
 
1645
 		try (FileOutputStream out = new FileOutputStream(name + ".class")) {
1645
 		try (FileOutputStream out = new FileOutputStream(name + ".class")) {
1646
 			out.write(lambdaCW.toByteArray());
1646
 			out.write(lambdaCW.toByteArray());

+ 3
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaPreDecrementVisitor.java View File

74
 import org.openzen.zenscript.codemodel.expression.TryRethrowAsResultExpression;
74
 import org.openzen.zenscript.codemodel.expression.TryRethrowAsResultExpression;
75
 import org.openzen.zenscript.codemodel.expression.VariantValueExpression;
75
 import org.openzen.zenscript.codemodel.expression.VariantValueExpression;
76
 import org.openzen.zenscript.codemodel.expression.WrapOptionalExpression;
76
 import org.openzen.zenscript.codemodel.expression.WrapOptionalExpression;
77
-import org.openzen.zenscript.javabytecode.JavaContext;
77
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
78
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
78
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
79
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
79
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
80
 
80
 
85
 public class JavaPreDecrementVisitor implements ExpressionVisitor<Void> {
85
 public class JavaPreDecrementVisitor implements ExpressionVisitor<Void> {
86
 	private final JavaExpressionVisitor expressionCompiler;
86
 	private final JavaExpressionVisitor expressionCompiler;
87
 	private final JavaWriter javaWriter;
87
 	private final JavaWriter javaWriter;
88
-	private final JavaContext context;
88
+	private final JavaBytecodeContext context;
89
 	
89
 	
90
-	public JavaPreDecrementVisitor(JavaContext context, JavaExpressionVisitor expressionCompiler) {
90
+	public JavaPreDecrementVisitor(JavaBytecodeContext context, JavaExpressionVisitor expressionCompiler) {
91
 		this.expressionCompiler = expressionCompiler;
91
 		this.expressionCompiler = expressionCompiler;
92
 		this.context = context;
92
 		this.context = context;
93
 		javaWriter = expressionCompiler.getJavaWriter();
93
 		javaWriter = expressionCompiler.getJavaWriter();

+ 3
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaPreIncrementVisitor.java View File

74
 import org.openzen.zenscript.codemodel.expression.TryRethrowAsResultExpression;
74
 import org.openzen.zenscript.codemodel.expression.TryRethrowAsResultExpression;
75
 import org.openzen.zenscript.codemodel.expression.VariantValueExpression;
75
 import org.openzen.zenscript.codemodel.expression.VariantValueExpression;
76
 import org.openzen.zenscript.codemodel.expression.WrapOptionalExpression;
76
 import org.openzen.zenscript.codemodel.expression.WrapOptionalExpression;
77
-import org.openzen.zenscript.javabytecode.JavaContext;
77
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
78
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
78
 import org.openzen.zenscript.javabytecode.JavaLocalVariableInfo;
79
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
79
 import org.openzen.zenscript.javabytecode.JavaParameterInfo;
80
 
80
 
84
  */
84
  */
85
 public class JavaPreIncrementVisitor implements ExpressionVisitor<Void> {
85
 public class JavaPreIncrementVisitor implements ExpressionVisitor<Void> {
86
 	private final JavaExpressionVisitor expressionCompiler;
86
 	private final JavaExpressionVisitor expressionCompiler;
87
-	private final JavaContext context;
87
+	private final JavaBytecodeContext context;
88
 	private final JavaWriter javaWriter;
88
 	private final JavaWriter javaWriter;
89
 	
89
 	
90
-	public JavaPreIncrementVisitor(JavaContext context, JavaExpressionVisitor expressionCompiler) {
90
+	public JavaPreIncrementVisitor(JavaBytecodeContext context, JavaExpressionVisitor expressionCompiler) {
91
 		this.expressionCompiler = expressionCompiler;
91
 		this.expressionCompiler = expressionCompiler;
92
 		this.context = context;
92
 		this.context = context;
93
 		javaWriter = expressionCompiler.getJavaWriter();
93
 		javaWriter = expressionCompiler.getJavaWriter();

+ 4
- 4
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaStatementVisitor.java View File

9
 
9
 
10
 import java.util.Arrays;
10
 import java.util.Arrays;
11
 import java.util.List;
11
 import java.util.List;
12
-import org.openzen.zenscript.javabytecode.JavaContext;
12
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
13
 import org.openzen.zenscript.javashared.JavaClass;
13
 import org.openzen.zenscript.javashared.JavaClass;
14
 
14
 
15
 public class JavaStatementVisitor implements StatementVisitor<Boolean> {
15
 public class JavaStatementVisitor implements StatementVisitor<Boolean> {
16
     private final JavaWriter javaWriter;
16
     private final JavaWriter javaWriter;
17
-	private final JavaContext context;
17
+	private final JavaBytecodeContext context;
18
     public JavaExpressionVisitor expressionVisitor;
18
     public JavaExpressionVisitor expressionVisitor;
19
 
19
 
20
     /**
20
     /**
21
      * @param javaWriter the method writer that compiles the statement
21
      * @param javaWriter the method writer that compiles the statement
22
      */
22
      */
23
-    public JavaStatementVisitor(JavaContext context, JavaWriter javaWriter) {
23
+    public JavaStatementVisitor(JavaBytecodeContext context, JavaWriter javaWriter) {
24
         this.javaWriter = javaWriter;
24
         this.javaWriter = javaWriter;
25
 		this.context = context;
25
 		this.context = context;
26
         this.expressionVisitor = new JavaExpressionVisitor(context, javaWriter);
26
         this.expressionVisitor = new JavaExpressionVisitor(context, javaWriter);
27
     }
27
     }
28
 
28
 
29
-    public JavaStatementVisitor(JavaContext context, JavaExpressionVisitor expressionVisitor) {
29
+    public JavaStatementVisitor(JavaBytecodeContext context, JavaExpressionVisitor expressionVisitor) {
30
         this.javaWriter = expressionVisitor.getJavaWriter();
30
         this.javaWriter = expressionVisitor.getJavaWriter();
31
 		this.context = context;
31
 		this.context = context;
32
         this.expressionVisitor = expressionVisitor;
32
         this.expressionVisitor = expressionVisitor;

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

8
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
8
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
9
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
9
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
10
 import org.openzen.zenscript.codemodel.type.ITypeID;
10
 import org.openzen.zenscript.codemodel.type.ITypeID;
11
-import org.openzen.zenscript.javabytecode.JavaContext;
11
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
12
 import org.openzen.zenscript.javabytecode.JavaMethodInfo;
12
 import org.openzen.zenscript.javabytecode.JavaMethodInfo;
13
 import org.openzen.zenscript.javabytecode.JavaModule;
13
 import org.openzen.zenscript.javabytecode.JavaModule;
14
 import org.openzen.zenscript.javabytecode.compiler.*;
14
 import org.openzen.zenscript.javabytecode.compiler.*;
34
 			Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
34
 			Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
35
 
35
 
36
 	private final JavaClassWriter outerWriter;
36
 	private final JavaClassWriter outerWriter;
37
-	private final JavaContext context;
37
+	private final JavaBytecodeContext context;
38
 
38
 
39
-    public JavaDefinitionVisitor(JavaContext context, JavaClassWriter outerWriter) {
39
+    public JavaDefinitionVisitor(JavaBytecodeContext context, JavaClassWriter outerWriter) {
40
 		this.context = context;
40
 		this.context = context;
41
 		this.outerWriter = outerWriter;
41
 		this.outerWriter = outerWriter;
42
 	}
42
 	}
192
 		writer.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, "getDenominator", "()I", null, null).visitEnd();
192
 		writer.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, "getDenominator", "()I", null, null).visitEnd();
193
 
193
 
194
 
194
 
195
-		final JavaMemberVisitor visitor = new JavaMemberVisitor(writer, toClass, variant);
195
+		final JavaMemberVisitor visitor = new JavaMemberVisitor(context, writer, toClass, variant);
196
 
196
 
197
 		final List<VariantDefinition.Option> options = variant.options;
197
 		final List<VariantDefinition.Option> options = variant.options;
198
 		//Each option is one of the possible child classes
198
 		//Each option is one of the possible child classes
213
 				StringBuilder builder = new StringBuilder();
213
 				StringBuilder builder = new StringBuilder();
214
 				for (int i = 0; i < option.types.length; ++i) {
214
 				for (int i = 0; i < option.types.length; ++i) {
215
 					builder.append("<T").append(i).append(":");
215
 					builder.append("<T").append(i).append(":");
216
-					builder.append(option.types[i].accept(JavaTypeVisitor.INSTANCE).getDescriptor());
216
+					builder.append(context.getDescriptor(option.types[i]));
217
 				}
217
 				}
218
 				builder.append(">");
218
 				builder.append(">");
219
 				builder.append("L").append(variantName).append(";");
219
 				builder.append("L").append(variantName).append(";");
223
 			}
223
 			}
224
 
224
 
225
 			optionWriter.visit(Opcodes.V1_8, Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC, optionClassName, signature, variantName, null);
225
 			optionWriter.visit(Opcodes.V1_8, Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC, optionClassName, signature, variantName, null);
226
-			final JavaMemberVisitor optionVisitor = new JavaMemberVisitor(optionWriter, optionClass, variant);
227
-
228
-
226
+			final JavaMemberVisitor optionVisitor = new JavaMemberVisitor(context, optionWriter, optionClass, variant);
229
 			final StringBuilder optionInitDescBuilder = new StringBuilder("(");
227
 			final StringBuilder optionInitDescBuilder = new StringBuilder("(");
230
 
228
 
231
 			ITypeID[] types = option.types;
229
 			ITypeID[] types = option.types;
232
 			for (int i = 0; i < types.length; ++i) {
230
 			for (int i = 0; i < types.length; ++i) {
233
-				final Type type = types[i].accept(JavaTypeVisitor.INSTANCE);
234
-				final String internalName = type.getDescriptor();
231
+				final String internalName = context.getInternalName(types[i]);
235
 				optionInitDescBuilder.append(internalName);
232
 				optionInitDescBuilder.append(internalName);
236
 				optionWriter.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "Field" + i, internalName, "TT" + i + ";", null).visitEnd();
233
 				optionWriter.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "Field" + i, internalName, "TT" + i + ";", null).visitEnd();
237
 			}
234
 			}
247
 				initWriter.dup();
244
 				initWriter.dup();
248
 				initWriter.loadObject(i + 1);
245
 				initWriter.loadObject(i + 1);
249
 
246
 
250
-				final Type type = types[i].accept(JavaTypeVisitor.INSTANCE);
251
-				final String internalName = type.getDescriptor();
252
-
253
-				initWriter.putField(optionClassName, "Field" + i, internalName);
247
+				final String descriptor = context.getDescriptor(types[i]);
248
+				initWriter.putField(optionClassName, "Field" + i, descriptor);
254
 			}
249
 			}
255
 			initWriter.pop();
250
 			initWriter.pop();
256
 			initWriter.ret();
251
 			initWriter.ret();
268
 			optionVisitor.end();
263
 			optionVisitor.end();
269
 			optionWriter.visitEnd();
264
 			optionWriter.visitEnd();
270
 			final byte[] byteArray = optionWriter.toByteArray();
265
 			final byte[] byteArray = optionWriter.toByteArray();
271
-			JavaModule.classes.put(optionClassName, byteArray);
266
+			context.register(optionClassName, byteArray);
272
 
267
 
273
 			//Print the option files, won't be in production
268
 			//Print the option files, won't be in production
274
 			try (FileOutputStream out = new FileOutputStream(optionClassName + ".class")) {
269
 			try (FileOutputStream out = new FileOutputStream(optionClassName + ".class")) {

+ 3
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java View File

15
 import org.openzen.zenscript.javabytecode.compiler.*;
15
 import org.openzen.zenscript.javabytecode.compiler.*;
16
 
16
 
17
 import java.util.List;
17
 import java.util.List;
18
-import org.openzen.zenscript.javabytecode.JavaContext;
18
+import org.openzen.zenscript.javabytecode.JavaBytecodeContext;
19
 import org.openzen.zenscript.javashared.JavaClass;
19
 import org.openzen.zenscript.javashared.JavaClass;
20
 import org.openzen.zenscript.javashared.JavaField;
20
 import org.openzen.zenscript.javashared.JavaField;
21
 
21
 
22
 public class JavaMemberVisitor implements MemberVisitor<Void> {
22
 public class JavaMemberVisitor implements MemberVisitor<Void> {
23
     private final ClassWriter writer;
23
     private final ClassWriter writer;
24
-	private final JavaContext context;
24
+	private final JavaBytecodeContext context;
25
     private final JavaClass toClass;
25
     private final JavaClass toClass;
26
     private final HighLevelDefinition definition;
26
     private final HighLevelDefinition definition;
27
     private final JavaStatementVisitor clinitStatementVisitor;
27
     private final JavaStatementVisitor clinitStatementVisitor;
28
     private EnumDefinition enumDefinition = null;
28
     private EnumDefinition enumDefinition = null;
29
 
29
 
30
-    public JavaMemberVisitor(JavaContext context, ClassWriter writer, JavaClass toClass, HighLevelDefinition definition) {
30
+    public JavaMemberVisitor(JavaBytecodeContext context, ClassWriter writer, JavaClass toClass, HighLevelDefinition definition) {
31
         this.writer = writer;
31
         this.writer = writer;
32
         this.toClass = toClass;
32
         this.toClass = toClass;
33
         this.definition = definition;
33
         this.definition = definition;

+ 48
- 0
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaContext.java View File

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.javashared;
7
+
8
+import org.openzen.zenscript.codemodel.FunctionHeader;
9
+import org.openzen.zenscript.codemodel.FunctionParameter;
10
+import org.openzen.zenscript.codemodel.type.ITypeID;
11
+
12
+/**
13
+ *
14
+ * @author Hoofdgebruiker
15
+ */
16
+public abstract class JavaContext {
17
+	public abstract String getDescriptor(ITypeID type);
18
+	
19
+	public String getMethodDescriptor(FunctionHeader header) {
20
+		return getMethodDescriptor(header, false);
21
+	}
22
+	
23
+    public String getMethodSignature(FunctionHeader header) {
24
+        StringBuilder signatureBuilder = new StringBuilder("(");
25
+        for (FunctionParameter parameter : header.parameters) {
26
+            signatureBuilder.append(getDescriptor(parameter.type));
27
+        }
28
+        signatureBuilder.append(")").append(getDescriptor(header.returnType));
29
+        return signatureBuilder.toString();
30
+    }
31
+	
32
+	public String getEnumConstructorDescriptor(FunctionHeader header) {
33
+		return getMethodDescriptor(header, true);
34
+	}
35
+	
36
+	private String getMethodDescriptor(FunctionHeader header, boolean isEnumConstructor) {
37
+        StringBuilder descBuilder = new StringBuilder("(");
38
+        if (isEnumConstructor)
39
+            descBuilder.append("Ljava/lang/String;I");
40
+		
41
+        for (FunctionParameter parameter : header.parameters) {
42
+			descBuilder.append(getDescriptor(parameter.type));
43
+        }
44
+        descBuilder.append(")");
45
+        descBuilder.append(getDescriptor(header.returnType));
46
+        return descBuilder.toString();
47
+    }
48
+}

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/tags/JavaSourceImplementation.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaImplementation.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.tags;
7
-
8
-import org.openzen.zenscript.javashared.JavaClass;
6
+package org.openzen.zenscript.javashared;
9
 
7
 
10
 /**
8
 /**
11
  *
9
  *
12
  * @author Hoofdgebruiker
10
  * @author Hoofdgebruiker
13
  */
11
  */
14
-public class JavaSourceImplementation {
12
+public class JavaImplementation {
15
 	public final boolean inline;
13
 	public final boolean inline;
16
 	public final JavaClass implementationClass;
14
 	public final JavaClass implementationClass;
17
 	
15
 	
18
-	public JavaSourceImplementation(boolean inline, JavaClass implementationClass) {
16
+	public JavaImplementation(boolean inline, JavaClass implementationClass) {
19
 		this.inline = inline;
17
 		this.inline = inline;
20
 		this.implementationClass = implementationClass;
18
 		this.implementationClass = implementationClass;
21
 	}
19
 	}

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/tags/JavaSourceMethod.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaMethod.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.tags;
7
-
8
-import org.openzen.zenscript.javashared.JavaClass;
9
-import org.openzen.zenscript.javasource.JavaCallCompiler;
6
+package org.openzen.zenscript.javashared;
10
 
7
 
11
 /**
8
 /**
12
  *
9
  *
13
  * @author Hoofdgebruiker
10
  * @author Hoofdgebruiker
14
  */
11
  */
15
-public class JavaSourceMethod {
12
+public class JavaMethod {
16
 	public final JavaClass cls;
13
 	public final JavaClass cls;
17
 	public final Kind kind;
14
 	public final Kind kind;
18
 	public final String name;
15
 	public final String name;
19
 	public final boolean compile;
16
 	public final boolean compile;
20
-	public final JavaCallCompiler compiler;
17
+	public final JavaNativeTranslation translation;
18
+	
19
+	public final String descriptor;
20
+	public final int modifiers;
21
 	
21
 	
22
-	public JavaSourceMethod(JavaClass cls, Kind kind, String name, boolean compile) {
22
+	public JavaMethod(JavaClass cls, Kind kind, String name, boolean compile, String descriptor, int modifiers) {
23
 		this.cls = cls;
23
 		this.cls = cls;
24
 		this.kind = kind;
24
 		this.kind = kind;
25
 		this.name = name;
25
 		this.name = name;
26
 		this.compile = compile;
26
 		this.compile = compile;
27
-		compiler = null;
27
+		translation = null;
28
+		
29
+		this.descriptor = descriptor;
30
+		this.modifiers = modifiers;
28
 	}
31
 	}
29
 	
32
 	
30
-	public JavaSourceMethod(JavaCallCompiler compiler) {
33
+	public JavaMethod(JavaNativeTranslation<?> translation) {
31
 		this.cls = null;
34
 		this.cls = null;
32
 		this.kind = Kind.COMPILED;
35
 		this.kind = Kind.COMPILED;
33
 		this.name = null;
36
 		this.name = null;
34
 		this.compile = false;
37
 		this.compile = false;
35
-		this.compiler = compiler;
38
+		this.translation = translation;
39
+		this.descriptor = "";
40
+		this.modifiers = 0;
36
 	}
41
 	}
37
 	
42
 	
38
 	public enum Kind {
43
 	public enum Kind {

+ 57
- 0
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaModifiers.java View File

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.javashared;
7
+
8
+import org.openzen.zenscript.codemodel.Modifiers;
9
+
10
+/**
11
+ *
12
+ * @author Hoofdgebruiker
13
+ */
14
+public class JavaModifiers {
15
+	public static final int PUBLIC = 0x0001; // class, field, method
16
+    public static final int PRIVATE = 0x0002; // class, field, method
17
+    public static final int PROTECTED = 0x0004; // class, field, method
18
+    public static final int STATIC = 0x0008; // field, method
19
+    public static final int FINAL = 0x0010; // class, field, method, parameter
20
+    public static final int SUPER = 0x0020; // class
21
+    public static final int SYNCHRONIZED = 0x0020; // method
22
+    public static final int OPEN = 0x0020; // module
23
+    public static final int TRANSITIVE = 0x0020; // module requires
24
+    public static final int VOLATILE = 0x0040; // field
25
+    public static final int BRIDGE = 0x0040; // method
26
+    public static final int STATIC_PHASE = 0x0040; // module requires
27
+    public static final int VARARGS = 0x0080; // method
28
+    public static final int TRANSIENT = 0x0080; // field
29
+    public static final int NATIVE = 0x0100; // method
30
+    public static final int INTERFACE = 0x0200; // class
31
+    public static final int ABSTRACT = 0x0400; // class, method
32
+    public static final int STRICT = 0x0800; // method
33
+    public static final int SYNTHETIC = 0x1000; // class, field, method, parameter, module *
34
+    public static final int ANNOTATION = 0x2000; // class
35
+    public static final int ENUM = 0x4000; // class(?) field inner
36
+    public static final int MANDATED = 0x8000; // parameter, module, module *
37
+    public static final int MODULE = 0x8000; // class
38
+	
39
+	public static int getJavaModifiers(int modifiers) {
40
+		int out = 0;
41
+		if (Modifiers.isStatic(modifiers))
42
+			out |= STATIC;
43
+		if (Modifiers.isFinal(modifiers))
44
+			out |= FINAL;
45
+		if (Modifiers.isPublic(modifiers))
46
+			out |= PUBLIC;
47
+		if (Modifiers.isPrivate(modifiers))
48
+			out |= PRIVATE;
49
+		if (Modifiers.isProtected(modifiers))
50
+			out |= PROTECTED;
51
+		if (Modifiers.isAbstract(modifiers))
52
+			out |= ABSTRACT;
53
+		return out;
54
+	}
55
+	
56
+	private JavaModifiers() {}
57
+}

+ 44
- 0
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeClass.java View File

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.javashared;
7
+
8
+import java.util.HashMap;
9
+import java.util.Map;
10
+
11
+/**
12
+ *
13
+ * @author Hoofdgebruiker
14
+ */
15
+public class JavaNativeClass {
16
+	public final JavaClass cls;
17
+	private final Map<String, JavaMethod> methods = new HashMap<>();
18
+	public final boolean nonDestructible;
19
+	
20
+	public JavaNativeClass(JavaClass cls) {
21
+		this(cls, false);
22
+	}
23
+	
24
+	public JavaNativeClass(JavaClass cls, boolean nonDestructible) {
25
+		this.cls = cls;
26
+		this.nonDestructible = nonDestructible;
27
+	}
28
+	
29
+	public void addMethod(String key, JavaMethod method) {
30
+		methods.put(key, method);
31
+	}
32
+	
33
+	public void addConstructor(String key, String descriptor) {
34
+		methods.put(key, new JavaMethod(cls, JavaMethod.Kind.CONSTRUCTOR, "<init>", false, descriptor, JavaModifiers.PUBLIC));
35
+	}
36
+	
37
+	public void addInstanceMethod(String key, String name, String descriptor) {
38
+		methods.put(key, new JavaMethod(cls, JavaMethod.Kind.INSTANCE, name, false, descriptor, JavaModifiers.PUBLIC));
39
+	}
40
+	
41
+	public JavaMethod getMethod(String name) {
42
+		return methods.get(name);
43
+	}
44
+}

+ 16
- 0
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeTranslation.java View File

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.javashared;
7
+
8
+import org.openzen.zenscript.codemodel.expression.Expression;
9
+
10
+/**
11
+ *
12
+ * @author Hoofdgebruiker
13
+ */
14
+public interface JavaNativeTranslation<T> {
15
+	public T translate(Expression expression, JavaNativeTranslator<T> translator);
16
+}

+ 30
- 0
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaNativeTranslator.java View File

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.javashared;
7
+
8
+import org.openzen.zenscript.codemodel.expression.CallExpression;
9
+import org.openzen.zenscript.codemodel.expression.CastExpression;
10
+import org.openzen.zenscript.codemodel.expression.Expression;
11
+
12
+/**
13
+ *
14
+ * @author Hoofdgebruiker
15
+ */
16
+public interface JavaNativeTranslator<T> {
17
+	T isEmptyAsLengthZero(Expression value);
18
+	
19
+	T listToArray(CastExpression value);
20
+	
21
+	T containsAsIndexOf(Expression target, Expression value);
22
+	
23
+	T sorted(Expression value);
24
+	
25
+	T sortedWithComparator(Expression value, Expression comparator);
26
+	
27
+	T copy(Expression value);
28
+	
29
+	T copyTo(CallExpression call);
30
+}

+ 4
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeDescriptorVisitor.java View File

6
 
6
 
7
 public class JavaTypeDescriptorVisitor implements ITypeVisitor<String> {
7
 public class JavaTypeDescriptorVisitor implements ITypeVisitor<String> {
8
 	private final JavaTypeDescriptorVisitor forOptional;
8
 	private final JavaTypeDescriptorVisitor forOptional;
9
+	private final JavaSyntheticClassGenerator generator;
9
 	private final boolean optional;
10
 	private final boolean optional;
10
 	
11
 	
11
 	public JavaTypeDescriptorVisitor(JavaSyntheticClassGenerator generator) {
12
 	public JavaTypeDescriptorVisitor(JavaSyntheticClassGenerator generator) {
14
 	
15
 	
15
 	private JavaTypeDescriptorVisitor(JavaSyntheticClassGenerator generator, boolean optional) {
16
 	private JavaTypeDescriptorVisitor(JavaSyntheticClassGenerator generator, boolean optional) {
16
 		this.optional = optional;
17
 		this.optional = optional;
18
+		this.generator = generator;
17
 		forOptional = optional ? this : new JavaTypeDescriptorVisitor(generator, true);
19
 		forOptional = optional ? this : new JavaTypeDescriptorVisitor(generator, true);
18
 	}
20
 	}
19
 	
21
 	
76
 
78
 
77
     @Override
79
     @Override
78
     public String visitFunction(FunctionTypeID function) {
80
     public String visitFunction(FunctionTypeID function) {
79
-        return "L" + JavaSynthesizedClassNamer.createFunctionName(function).cls.internalName + ";";
81
+        return "L" + generator.synthesizeFunction(function).cls.internalName + ";";
80
     }
82
     }
81
 
83
 
82
     @Override
84
     @Override
101
 
103
 
102
     @Override
104
     @Override
103
     public String visitRange(RangeTypeID range) {
105
     public String visitRange(RangeTypeID range) {
104
-		return "L" + JavaSynthesizedClassNamer.createRangeName(range).cls.internalName + ";";
106
+		return "L" + generator.synthesizeRange(range).cls.internalName + ";";
105
     }
107
     }
106
 
108
 
107
     @Override
109
     @Override

+ 4
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeInternalNameVisitor.java View File

6
 
6
 
7
 public class JavaTypeInternalNameVisitor implements ITypeVisitor<String> {
7
 public class JavaTypeInternalNameVisitor implements ITypeVisitor<String> {
8
 	private final JavaTypeInternalNameVisitor forOptional;
8
 	private final JavaTypeInternalNameVisitor forOptional;
9
+	private final JavaSyntheticClassGenerator generator;
9
 	private final boolean optional;
10
 	private final boolean optional;
10
 	
11
 	
11
 	public JavaTypeInternalNameVisitor(JavaSyntheticClassGenerator generator) {
12
 	public JavaTypeInternalNameVisitor(JavaSyntheticClassGenerator generator) {
14
 	
15
 	
15
 	private JavaTypeInternalNameVisitor(JavaSyntheticClassGenerator generator, boolean optional) {
16
 	private JavaTypeInternalNameVisitor(JavaSyntheticClassGenerator generator, boolean optional) {
16
 		this.optional = optional;
17
 		this.optional = optional;
18
+		this.generator = generator;
17
 		forOptional = optional ? this : new JavaTypeInternalNameVisitor(generator, true);
19
 		forOptional = optional ? this : new JavaTypeInternalNameVisitor(generator, true);
18
 	}
20
 	}
19
 	
21
 	
76
 
78
 
77
     @Override
79
     @Override
78
     public String visitFunction(FunctionTypeID function) {
80
     public String visitFunction(FunctionTypeID function) {
79
-        return JavaSynthesizedClassNamer.createFunctionName(function).cls.internalName;
81
+        return generator.synthesizeFunction(function).cls.internalName;
80
     }
82
     }
81
 
83
 
82
     @Override
84
     @Override
97
 
99
 
98
     @Override
100
     @Override
99
     public String visitRange(RangeTypeID range) {
101
     public String visitRange(RangeTypeID range) {
100
-		return JavaSynthesizedClassNamer.createRangeName(range).cls.internalName;
102
+		return generator.synthesizeRange(range).cls.internalName;
101
     }
103
     }
102
 
104
 
103
     @Override
105
     @Override

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceTypeNameVisitor.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaTypeNameVisitor.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource;
6
+package org.openzen.zenscript.javashared;
7
 
7
 
8
 import org.openzen.zenscript.codemodel.FunctionParameter;
8
 import org.openzen.zenscript.codemodel.FunctionParameter;
9
 import org.openzen.zenscript.codemodel.type.ArrayTypeID;
9
 import org.openzen.zenscript.codemodel.type.ArrayTypeID;
22
  *
22
  *
23
  * @author Hoofdgebruiker
23
  * @author Hoofdgebruiker
24
  */
24
  */
25
-public class JavaSourceTypeNameVisitor implements ITypeVisitor<String> {
26
-	public JavaSourceTypeNameVisitor() {}
25
+public class JavaTypeNameVisitor implements ITypeVisitor<String> {
26
+	public JavaTypeNameVisitor() {}
27
 
27
 
28
 	@Override
28
 	@Override
29
 	public String visitBasic(BasicTypeID basic) {
29
 	public String visitBasic(BasicTypeID basic) {

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/tags/JavaSourceVariantOption.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaVariantOption.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.tags;
7
-
8
-import org.openzen.zenscript.javashared.JavaClass;
6
+package org.openzen.zenscript.javashared;
9
 
7
 
10
 /**
8
 /**
11
  *
9
  *
12
  * @author Hoofdgebruiker
10
  * @author Hoofdgebruiker
13
  */
11
  */
14
-public class JavaSourceVariantOption {
12
+public class JavaVariantOption {
15
 	public final JavaClass variantClass;
13
 	public final JavaClass variantClass;
16
 	public final JavaClass variantOptionClass;
14
 	public final JavaClass variantOptionClass;
17
 	
15
 	
18
-	public JavaSourceVariantOption(JavaClass variantClass, JavaClass variantOptionClass) {
16
+	public JavaVariantOption(JavaClass variantClass, JavaClass variantOptionClass) {
19
 		this.variantClass = variantClass;
17
 		this.variantClass = variantClass;
20
 		this.variantOptionClass = variantOptionClass;
18
 		this.variantOptionClass = variantOptionClass;
21
 	}
19
 	}

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourcePrepareClassMethodVisitor.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.prepare;
6
+package org.openzen.zenscript.javashared.prepare;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaNativeClass;
8
 import org.openzen.zencode.shared.StringExpansion;
9
 import org.openzen.zencode.shared.StringExpansion;
9
 import org.openzen.zenscript.codemodel.OperatorType;
10
 import org.openzen.zenscript.codemodel.OperatorType;
10
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
11
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
16
 import org.openzen.zenscript.codemodel.member.DefinitionMember;
17
 import org.openzen.zenscript.codemodel.member.DefinitionMember;
17
 import org.openzen.zenscript.codemodel.member.DestructorMember;
18
 import org.openzen.zenscript.codemodel.member.DestructorMember;
18
 import org.openzen.zenscript.codemodel.member.FieldMember;
19
 import org.openzen.zenscript.codemodel.member.FieldMember;
20
+import org.openzen.zenscript.codemodel.member.FunctionalMember;
19
 import org.openzen.zenscript.codemodel.member.GetterMember;
21
 import org.openzen.zenscript.codemodel.member.GetterMember;
20
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
22
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
21
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
23
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
26
 import org.openzen.zenscript.codemodel.member.SetterMember;
28
 import org.openzen.zenscript.codemodel.member.SetterMember;
27
 import org.openzen.zenscript.codemodel.member.StaticInitializerMember;
29
 import org.openzen.zenscript.codemodel.member.StaticInitializerMember;
28
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
30
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
29
-import org.openzen.zenscript.javasource.JavaSourceTypeNameVisitor;
31
+import org.openzen.zenscript.javashared.JavaTypeNameVisitor;
30
 import org.openzen.zenscript.javashared.JavaClass;
32
 import org.openzen.zenscript.javashared.JavaClass;
31
 import org.openzen.zenscript.javashared.JavaField;
33
 import org.openzen.zenscript.javashared.JavaField;
32
-import org.openzen.zenscript.javasource.JavaSourceContext;
33
-import org.openzen.zenscript.javasource.tags.JavaSourceImplementation;
34
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
34
+import org.openzen.zenscript.javashared.JavaContext;
35
+import org.openzen.zenscript.javashared.JavaImplementation;
36
+import org.openzen.zenscript.javashared.JavaMethod;
37
+import org.openzen.zenscript.javashared.JavaModifiers;
35
 
38
 
36
 /**
39
 /**
37
  *
40
  *
38
  * @author Hoofdgebruiker
41
  * @author Hoofdgebruiker
39
  */
42
  */
40
-public class JavaSourcePrepareClassMethodVisitor implements MemberVisitor<Void> {
43
+public class JavaPrepareClassMethodVisitor implements MemberVisitor<Void> {
41
 	private static final boolean DEBUG_EMPTY = true;
44
 	private static final boolean DEBUG_EMPTY = true;
42
 	
45
 	
43
-	private final JavaSourceContext context;
46
+	private final JavaContext context;
44
 	private final String filename;
47
 	private final String filename;
45
 	private final JavaClass cls;
48
 	private final JavaClass cls;
46
 	private final JavaNativeClass nativeClass;
49
 	private final JavaNativeClass nativeClass;
47
-	private final JavaSourcePrepareDefinitionMemberVisitor memberPreparer;
50
+	private final JavaPrepareDefinitionMemberVisitor memberPreparer;
48
 	
51
 	
49
-	public JavaSourcePrepareClassMethodVisitor(
50
-			JavaSourceContext context,
52
+	public JavaPrepareClassMethodVisitor(
53
+			JavaContext context,
51
 			String filename,
54
 			String filename,
52
 			JavaClass cls,
55
 			JavaClass cls,
53
 			JavaNativeClass nativeClass,
56
 			JavaNativeClass nativeClass,
54
-			JavaSourcePrepareDefinitionMemberVisitor memberPreparer,
57
+			JavaPrepareDefinitionMemberVisitor memberPreparer,
55
 			boolean startsEmpty) {
58
 			boolean startsEmpty) {
56
 		this.context = context;
59
 		this.context = context;
57
 		this.filename = filename;
60
 		this.filename = filename;
124
 
127
 
125
 	@Override
128
 	@Override
126
 	public Void visitCaster(CasterMember member) {
129
 	public Void visitCaster(CasterMember member) {
127
-		visitFunctional(member, "to" + member.toType.accept(new JavaSourceTypeNameVisitor()));
130
+		visitFunctional(member, "to" + member.toType.accept(new JavaTypeNameVisitor()));
128
 		return null;
131
 		return null;
129
 	}
132
 	}
130
 
133
 
145
 		memberPreparer.prepare(member.type);
148
 		memberPreparer.prepare(member.type);
146
 		
149
 		
147
 		if (canMergeImplementation(member)) {
150
 		if (canMergeImplementation(member)) {
148
-			member.setTag(JavaSourceImplementation.class, new JavaSourceImplementation(true, cls));
151
+			member.setTag(JavaImplementation.class, new JavaImplementation(true, cls));
149
 			for (IDefinitionMember m : member.members)
152
 			for (IDefinitionMember m : member.members)
150
 				m.accept(this);
153
 				m.accept(this);
151
 		} else {
154
 		} else {
154
 			
157
 			
155
 			cls.empty = false;
158
 			cls.empty = false;
156
 			
159
 			
157
-			JavaClass implementationClass = new JavaClass(cls, member.type.accept(new JavaSourceTypeNameVisitor()) + "Implementation", JavaClass.Kind.CLASS);
158
-			member.setTag(JavaSourceImplementation.class, new JavaSourceImplementation(false, implementationClass));
160
+			JavaClass implementationClass = new JavaClass(cls, member.type.accept(new JavaTypeNameVisitor()) + "Implementation", JavaClass.Kind.CLASS);
161
+			member.setTag(JavaImplementation.class, new JavaImplementation(false, implementationClass));
159
 			
162
 			
160
-			JavaSourcePrepareClassMethodVisitor visitor = new JavaSourcePrepareClassMethodVisitor(context, filename, implementationClass, null, memberPreparer, true);
163
+			JavaPrepareClassMethodVisitor visitor = new JavaPrepareClassMethodVisitor(context, filename, implementationClass, null, memberPreparer, true);
161
 			for (IDefinitionMember m : member.members)
164
 			for (IDefinitionMember m : member.members)
162
 				m.accept(visitor);
165
 				m.accept(visitor);
163
 		}
166
 		}
170
 
173
 
171
 	@Override
174
 	@Override
172
 	public Void visitInnerDefinition(InnerDefinitionMember member) {
175
 	public Void visitInnerDefinition(InnerDefinitionMember member) {
173
-		JavaSourcePrepareDefinitionMemberVisitor innerDefinitionPrepare = new JavaSourcePrepareDefinitionMemberVisitor(context, filename);
176
+		JavaPrepareDefinitionMemberVisitor innerDefinitionPrepare = new JavaPrepareDefinitionMemberVisitor(context, filename);
174
 		member.innerDefinition.accept(innerDefinitionPrepare);
177
 		member.innerDefinition.accept(innerDefinitionPrepare);
175
 		
178
 		
176
 		if (DEBUG_EMPTY && cls.empty)
179
 		if (DEBUG_EMPTY && cls.empty)
188
 		return null;
191
 		return null;
189
 	}
192
 	}
190
 	
193
 	
191
-	private JavaSourceMethod.Kind getKind(DefinitionMember member) {
194
+	private JavaMethod.Kind getKind(DefinitionMember member) {
192
 		if (member instanceof ConstructorMember)
195
 		if (member instanceof ConstructorMember)
193
-			return JavaSourceMethod.Kind.CONSTRUCTOR;
196
+			return JavaMethod.Kind.CONSTRUCTOR;
194
 		
197
 		
195
-		return member.isStatic() ? JavaSourceMethod.Kind.STATIC : JavaSourceMethod.Kind.INSTANCE;
198
+		return member.isStatic() ? JavaMethod.Kind.STATIC : JavaMethod.Kind.INSTANCE;
196
 	}
199
 	}
197
 	
200
 	
198
 	private String getOperatorName(OperatorType operator) {
201
 	private String getOperatorName(OperatorType operator) {
278
 		}
281
 		}
279
 	}
282
 	}
280
 	
283
 	
281
-	private void visitFunctional(DefinitionMember member, String name) {
284
+	private void visitFunctional(FunctionalMember member, String name) {
282
 		NativeTag nativeTag = member.getTag(NativeTag.class);
285
 		NativeTag nativeTag = member.getTag(NativeTag.class);
283
-		JavaSourceMethod method = null;
286
+		JavaMethod method = null;
284
 		if (nativeTag != null && nativeClass != null)
287
 		if (nativeTag != null && nativeClass != null)
285
 			method = nativeClass.getMethod(nativeTag.value);
288
 			method = nativeClass.getMethod(nativeTag.value);
286
 		
289
 		
287
 		if (member.getOverrides() != null) {
290
 		if (member.getOverrides() != null) {
288
 			DefinitionMemberRef base = member.getOverrides();
291
 			DefinitionMemberRef base = member.getOverrides();
289
-			JavaSourceMethod baseMethod = base.getTarget().getTag(JavaSourceMethod.class);
292
+			JavaMethod baseMethod = base.getTarget().getTag(JavaMethod.class);
290
 			if (baseMethod == null)
293
 			if (baseMethod == null)
291
 				throw new IllegalStateException("Base method not yet prepared!");
294
 				throw new IllegalStateException("Base method not yet prepared!");
292
 			
295
 			
293
-			method = new JavaSourceMethod(cls, baseMethod.kind, baseMethod.name, true);
296
+			method = new JavaMethod(cls, baseMethod.kind, baseMethod.name, true, context.getMethodDescriptor(member.header), JavaModifiers.getJavaModifiers(member.modifiers));
294
 		} else if (method == null) {
297
 		} else if (method == null) {
295
-			method = new JavaSourceMethod(cls, getKind(member), name, true);
298
+			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(member.header), JavaModifiers.getJavaModifiers(member.modifiers));
296
 		}
299
 		}
297
 		
300
 		
298
 		if (method.compile) {
301
 		if (method.compile) {
302
 			cls.empty = false;
305
 			cls.empty = false;
303
 		}
306
 		}
304
 		
307
 		
305
-		member.setTag(JavaSourceMethod.class, method);
308
+		member.setTag(JavaMethod.class, method);
306
 	}
309
 	}
307
 }
310
 }

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourcePrepareDefinitionMemberVisitor.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionMemberVisitor.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.prepare;
6
+package org.openzen.zenscript.javashared.prepare;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaNativeClass;
8
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
 import org.openzen.zenscript.codemodel.definition.AliasDefinition;
10
 import org.openzen.zenscript.codemodel.definition.AliasDefinition;
10
 import org.openzen.zenscript.codemodel.definition.ClassDefinition;
11
 import org.openzen.zenscript.codemodel.definition.ClassDefinition;
19
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
20
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
20
 import org.openzen.zenscript.codemodel.type.ITypeID;
21
 import org.openzen.zenscript.codemodel.type.ITypeID;
21
 import org.openzen.zenscript.javashared.JavaClass;
22
 import org.openzen.zenscript.javashared.JavaClass;
22
-import org.openzen.zenscript.javasource.JavaSourceContext;
23
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
23
+import org.openzen.zenscript.javashared.JavaContext;
24
+import org.openzen.zenscript.javashared.JavaMethod;
25
+import org.openzen.zenscript.javashared.JavaModifiers;
24
 
26
 
25
 /**
27
 /**
26
  *
28
  *
27
  * @author Hoofdgebruiker
29
  * @author Hoofdgebruiker
28
  */
30
  */
29
-public class JavaSourcePrepareDefinitionMemberVisitor implements DefinitionVisitor<JavaClass> {
30
-	private final JavaSourceContext context;
31
+public class JavaPrepareDefinitionMemberVisitor implements DefinitionVisitor<JavaClass> {
32
+	private final JavaContext context;
31
 	private final String filename;
33
 	private final String filename;
32
 	
34
 	
33
-	public JavaSourcePrepareDefinitionMemberVisitor(JavaSourceContext context, String filename) {
35
+	public JavaPrepareDefinitionMemberVisitor(JavaContext context, String filename) {
34
 		this.context = context;
36
 		this.context = context;
35
 		this.filename = filename;
37
 		this.filename = filename;
36
 	}
38
 	}
88
 			return definition.getTag(JavaClass.class);
90
 			return definition.getTag(JavaClass.class);
89
 		
91
 		
90
 		JavaClass cls = definition.getTag(JavaClass.class);
92
 		JavaClass cls = definition.getTag(JavaClass.class);
91
-		JavaSourceMethod method = new JavaSourceMethod(cls, JavaSourceMethod.Kind.STATIC, definition.name, true);
92
-		definition.caller.setTag(JavaSourceMethod.class, method);
93
+		JavaMethod method = new JavaMethod(cls, JavaMethod.Kind.STATIC, definition.name, true, context.getMethodDescriptor(definition.header), JavaModifiers.getJavaModifiers(definition.modifiers));
94
+		definition.caller.setTag(JavaMethod.class, method);
93
 		return cls;
95
 		return cls;
94
 	}
96
 	}
95
 
97
 
136
 	
138
 	
137
 	private void visitClassMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass, boolean startsEmpty) {
139
 	private void visitClassMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass, boolean startsEmpty) {
138
 		System.out.println("Preparing " + cls.internalName);
140
 		System.out.println("Preparing " + cls.internalName);
139
-		JavaSourcePrepareClassMethodVisitor methodVisitor = new JavaSourcePrepareClassMethodVisitor(context, filename, cls, nativeClass, this, startsEmpty);
141
+		JavaPrepareClassMethodVisitor methodVisitor = new JavaPrepareClassMethodVisitor(context, filename, cls, nativeClass, this, startsEmpty);
140
 		for (IDefinitionMember member : definition.members) {
142
 		for (IDefinitionMember member : definition.members) {
141
 			member.accept(methodVisitor);
143
 			member.accept(methodVisitor);
142
 		}
144
 		}
145
 	
147
 	
146
 	private void visitExpansionMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass) {
148
 	private void visitExpansionMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass) {
147
 		System.out.println("Preparing " + cls.internalName);
149
 		System.out.println("Preparing " + cls.internalName);
148
-		JavaSourcePrepareExpansionMethodVisitor methodVisitor = new JavaSourcePrepareExpansionMethodVisitor(context, cls, nativeClass);
150
+		JavaPrepareExpansionMethodVisitor methodVisitor = new JavaPrepareExpansionMethodVisitor(context, cls, nativeClass);
149
 		for (IDefinitionMember member : definition.members) {
151
 		for (IDefinitionMember member : definition.members) {
150
 			member.accept(methodVisitor);
152
 			member.accept(methodVisitor);
151
 		}
153
 		}

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourcePrepareDefinitionVisitor.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionVisitor.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.prepare;
6
+package org.openzen.zenscript.javashared.prepare;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaNativeClass;
8
 import java.util.HashMap;
9
 import java.util.HashMap;
10
+import java.util.List;
9
 import java.util.Map;
11
 import java.util.Map;
10
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
11
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
13
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
25
 import org.openzen.zenscript.codemodel.member.InnerDefinitionMember;
27
 import org.openzen.zenscript.codemodel.member.InnerDefinitionMember;
26
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
28
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
27
 import org.openzen.zenscript.codemodel.type.ITypeID;
29
 import org.openzen.zenscript.codemodel.type.ITypeID;
28
-import org.openzen.zenscript.formattershared.ExpressionString;
29
-import org.openzen.zenscript.javasource.JavaOperator;
30
 import org.openzen.zenscript.javashared.JavaClass;
30
 import org.openzen.zenscript.javashared.JavaClass;
31
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
32
-import org.openzen.zenscript.javasource.tags.JavaSourceVariantOption;
31
+import org.openzen.zenscript.javashared.JavaMethod;
32
+import org.openzen.zenscript.javashared.JavaModifiers;
33
+import org.openzen.zenscript.javashared.JavaVariantOption;
33
 
34
 
34
 /**
35
 /**
35
  *
36
  *
36
  * @author Hoofdgebruiker
37
  * @author Hoofdgebruiker
37
  */
38
  */
38
-public class JavaSourcePrepareDefinitionVisitor implements DefinitionVisitor<JavaClass> {
39
+public class JavaPrepareDefinitionVisitor implements DefinitionVisitor<JavaClass> {
39
 	private static final Map<String, JavaNativeClass> nativeClasses = new HashMap<>();
40
 	private static final Map<String, JavaNativeClass> nativeClasses = new HashMap<>();
40
 	
41
 	
41
 	static {
42
 	static {
42
 		{
43
 		{
43
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "StringBuilder", JavaClass.Kind.CLASS));
44
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "StringBuilder", JavaClass.Kind.CLASS));
44
-			cls.addConstructor("constructor", "");
45
-			cls.addConstructor("constructorWithCapacity", "");
46
-			cls.addConstructor("constructorWithValue", "");
47
-			cls.addMethod("isEmpty", new JavaSourceMethod((formatter, call) -> ((CallExpression)call).accept(formatter).unaryPostfix(JavaOperator.EQUALS, "length() == 0")));
48
-			cls.addInstanceMethod("length", "length");
49
-			cls.addInstanceMethod("appendBool", "append");
50
-			cls.addInstanceMethod("appendByte", "append");
51
-			cls.addInstanceMethod("appendSByte", "append");
52
-			cls.addInstanceMethod("appendShort", "append");
53
-			cls.addInstanceMethod("appendUShort", "append");
54
-			cls.addInstanceMethod("appendInt", "append");
55
-			cls.addInstanceMethod("appendUInt", "append");
56
-			cls.addInstanceMethod("appendLong", "append");
57
-			cls.addInstanceMethod("appendULong", "append");
58
-			cls.addInstanceMethod("appendFloat", "append");
59
-			cls.addInstanceMethod("appendDouble", "append");
60
-			cls.addInstanceMethod("appendChar", "append");
61
-			cls.addInstanceMethod("appendString", "append");
62
-			cls.addInstanceMethod("asString", "toString");
45
+			cls.addConstructor("constructor", "()V");
46
+			cls.addConstructor("constructorWithCapacity", "(I)V");
47
+			cls.addConstructor("constructorWithValue", "(Ljava/lang/String;)V");
48
+			cls.addMethod("isEmpty", new JavaMethod((expression, translator) -> translator.isEmptyAsLengthZero(((CallExpression)expression).target)));
49
+			cls.addInstanceMethod("length", "length", "()I");
50
+			cls.addInstanceMethod("appendBool", "append", "(Z)Ljava/lang/StringBuilder;");
51
+			cls.addInstanceMethod("appendByte", "append", "(I)Ljava/lang/StringBuilder;");
52
+			cls.addInstanceMethod("appendSByte", "append", "(B)Ljava/lang/StringBuilder;");
53
+			cls.addInstanceMethod("appendShort", "append", "(S)Ljava/lang/StringBuilder;");
54
+			cls.addInstanceMethod("appendUShort", "append", "(I)Ljava/lang/StringBuilder;");
55
+			cls.addInstanceMethod("appendInt", "append", "(I)Ljava/lang/StringBuilder;");
56
+			cls.addInstanceMethod("appendUInt", "append", "(I)Ljava/lang/StringBuilder;");
57
+			cls.addInstanceMethod("appendLong", "append", "(J)Ljava/lang/StringBuilder;");
58
+			cls.addInstanceMethod("appendULong", "append", "(J)Ljava/lang/StringBuilder;");
59
+			cls.addInstanceMethod("appendFloat", "append", "(F)Ljava/lang/StringBuilder;");
60
+			cls.addInstanceMethod("appendDouble", "append", "(D)Ljava/lang/StringBuilder;");
61
+			cls.addInstanceMethod("appendChar", "append", "(C)Ljava/lang/StringBuilder;");
62
+			cls.addInstanceMethod("appendString", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
63
+			cls.addInstanceMethod("asString", "toString", "()Ljava/lang/String;");
63
 			nativeClasses.put("stdlib::StringBuilder", cls);
64
 			nativeClasses.put("stdlib::StringBuilder", cls);
64
 		}
65
 		}
65
 		
66
 		
66
 		{
67
 		{
67
 			JavaNativeClass list = new JavaNativeClass(new JavaClass("java.util", "List", JavaClass.Kind.INTERFACE));
68
 			JavaNativeClass list = new JavaNativeClass(new JavaClass("java.util", "List", JavaClass.Kind.INTERFACE));
68
 			JavaClass arrayList = new JavaClass("java.util", "ArrayList", JavaClass.Kind.CLASS);
69
 			JavaClass arrayList = new JavaClass("java.util", "ArrayList", JavaClass.Kind.CLASS);
69
-			list.addMethod("constructor", new JavaSourceMethod(arrayList, JavaSourceMethod.Kind.CONSTRUCTOR, "", false));
70
-			list.addInstanceMethod("add", "add");
71
-			list.addInstanceMethod("insert", "add");
72
-			list.addInstanceMethod("remove", "remove");
73
-			list.addInstanceMethod("indexOf", "indexOf");
74
-			list.addInstanceMethod("lastIndexOf", "lastIndexOf");
75
-			list.addInstanceMethod("getAtIndex", "get");
76
-			list.addInstanceMethod("setAtIndex", "set");
77
-			list.addInstanceMethod("contains", "contains");
78
-			list.addMethod("toArray", new JavaSourceMethod((formatter, call) -> formatter.listToArray((CastExpression)call)));
79
-			list.addInstanceMethod("length", "size");
80
-			list.addInstanceMethod("isEmpty", "isEmpty");
81
-			list.addInstanceMethod("iterate", "iterator");
70
+			list.addMethod("constructor", new JavaMethod(arrayList, JavaMethod.Kind.CONSTRUCTOR, "", false, "()V", JavaModifiers.PUBLIC));
71
+			list.addInstanceMethod("add", "add", "(Ljava/lang/Object;)Z"); List<?> l;
72
+			list.addInstanceMethod("insert", "add", "(Ljava/lang/Object;I)V");
73
+			list.addInstanceMethod("remove", "remove", "(java/lang/Object;)Z");
74
+			list.addInstanceMethod("indexOf", "indexOf", "(java/lang/Object;)I");
75
+			list.addInstanceMethod("lastIndexOf", "lastIndexOf", "(Ljava/lang/Object;)I");
76
+			list.addInstanceMethod("getAtIndex", "get", "(I)Ljava/lang/Object;");
77
+			list.addInstanceMethod("setAtIndex", "set", "(ILjava/lang/Object;)Ljava/lang/Object;");
78
+			list.addInstanceMethod("contains", "contains", "(Ljava/lang/Object;)Z");
79
+			list.addMethod("toArray", new JavaMethod((expression, translator) -> translator.listToArray((CastExpression)expression)));
80
+			list.addInstanceMethod("length", "size", "()I");
81
+			list.addInstanceMethod("isEmpty", "isEmpty", "()Z");
82
+			list.addInstanceMethod("iterate", "iterator", "()Ljava/util/Iterator;");
82
 			nativeClasses.put("stdlib::List", list);
83
 			nativeClasses.put("stdlib::List", list);
83
 		}
84
 		}
84
 		
85
 		
85
 		{
86
 		{
86
 			JavaNativeClass iterable = new JavaNativeClass(new JavaClass("java.lang", "Iterable", JavaClass.Kind.INTERFACE));
87
 			JavaNativeClass iterable = new JavaNativeClass(new JavaClass("java.lang", "Iterable", JavaClass.Kind.INTERFACE));
87
-			iterable.addInstanceMethod("iterate", "iterator");
88
+			iterable.addInstanceMethod("iterate", "iterator", "()Ljava/util/Iterator;");
88
 			nativeClasses.put("stdlib::Iterable", iterable);
89
 			nativeClasses.put("stdlib::Iterable", iterable);
89
 		}
90
 		}
90
 		
91
 		
91
 		{
92
 		{
92
 			JavaNativeClass iterator = new JavaNativeClass(JavaClass.ITERATOR);
93
 			JavaNativeClass iterator = new JavaNativeClass(JavaClass.ITERATOR);
93
-			iterator.addInstanceMethod("hasNext", "hasNext");
94
-			iterator.addInstanceMethod("next", "next");
94
+			iterator.addInstanceMethod("hasNext", "hasNext", "()Z");
95
+			iterator.addInstanceMethod("next", "next", "()Ljava/lang/Object;");
95
 			nativeClasses.put("stdlib::Iterator", iterator);
96
 			nativeClasses.put("stdlib::Iterator", iterator);
96
 		}
97
 		}
97
 		
98
 		
98
 		{
99
 		{
99
 			JavaNativeClass comparable = new JavaNativeClass(new JavaClass("java.lang", "Comparable", JavaClass.Kind.INTERFACE));
100
 			JavaNativeClass comparable = new JavaNativeClass(new JavaClass("java.lang", "Comparable", JavaClass.Kind.INTERFACE));
100
-			comparable.addInstanceMethod("compareTo", "compareTo");
101
+			comparable.addInstanceMethod("compareTo", "compareTo", "(Ljava/lang/Object;)I");
101
 			nativeClasses.put("stdlib::Comparable", comparable);
102
 			nativeClasses.put("stdlib::Comparable", comparable);
102
 		}
103
 		}
103
 		
104
 		
106
 			JavaClass math = new JavaClass("java.lang", "Math", JavaClass.Kind.CLASS);
107
 			JavaClass math = new JavaClass("java.lang", "Math", JavaClass.Kind.CLASS);
107
 			
108
 			
108
 			JavaNativeClass cls = new JavaNativeClass(integer);
109
 			JavaNativeClass cls = new JavaNativeClass(integer);
109
-			cls.addMethod("min", new JavaSourceMethod(math, JavaSourceMethod.Kind.STATIC, "min", false));
110
-			cls.addMethod("max", new JavaSourceMethod(math, JavaSourceMethod.Kind.STATIC, "max", false));
111
-			cls.addMethod("toHexString", new JavaSourceMethod(integer, JavaSourceMethod.Kind.EXPANSION, "toHexString", false));
110
+			cls.addMethod("min", new JavaMethod(math, JavaMethod.Kind.STATIC, "min", false, "(II)I", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
111
+			cls.addMethod("max", new JavaMethod(math, JavaMethod.Kind.STATIC, "max", false, "(II)I", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
112
+			cls.addMethod("toHexString", new JavaMethod(integer, JavaMethod.Kind.EXPANSION, "toHexString", false, "()Ljava/lang/String;", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
112
 			nativeClasses.put("stdlib::Integer", cls);
113
 			nativeClasses.put("stdlib::Integer", cls);
113
 		}
114
 		}
114
 		
115
 		
115
 		{
116
 		{
116
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "String", JavaClass.Kind.CLASS));
117
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "String", JavaClass.Kind.CLASS));
117
-			cls.addMethod("contains", new JavaSourceMethod((formatter, calle) -> {
118
-				CallExpression call = (CallExpression)calle;
119
-				ExpressionString str = call.arguments.arguments[0].accept(formatter);
120
-				ExpressionString character = call.arguments.arguments[1].accept(formatter);
121
-				return str.unaryPostfix(JavaOperator.GREATER_EQUALS, ".indexOf(" + character.value + ")");
118
+			cls.addMethod("contains", new JavaMethod((expression, translator) -> {
119
+				CallExpression call = (CallExpression)expression;
120
+				Expression str = call.target;
121
+				Expression character = call.arguments.arguments[0];
122
+				return translator.containsAsIndexOf(str, character);
122
 			}));
123
 			}));
123
-			cls.addInstanceMethod("indexOf", "indexOf");
124
-			cls.addInstanceMethod("indexOfFrom", "indexOf");
125
-			cls.addInstanceMethod("lastIndexOf", "lastIndexOf");
126
-			cls.addInstanceMethod("lastIndexOfFrom", "lastIndexOf");
127
-			cls.addInstanceMethod("trim", "trim");
124
+			cls.addInstanceMethod("indexOf", "indexOf", "(I)I");
125
+			cls.addInstanceMethod("indexOfFrom", "indexOf", "(II)I");
126
+			cls.addInstanceMethod("lastIndexOf", "lastIndexOf", "(I)I");
127
+			cls.addInstanceMethod("lastIndexOfFrom", "lastIndexOf", "(II)I");
128
+			cls.addInstanceMethod("trim", "trim", "()Ljava/lang/String;");
128
 			nativeClasses.put("stdlib::String", cls);
129
 			nativeClasses.put("stdlib::String", cls);
129
 		}
130
 		}
130
 		
131
 		
131
 		{
132
 		{
132
 			JavaClass arrays = new JavaClass("java.lang", "Arrays", JavaClass.Kind.CLASS);
133
 			JavaClass arrays = new JavaClass("java.lang", "Arrays", JavaClass.Kind.CLASS);
133
 			JavaNativeClass cls = new JavaNativeClass(arrays);
134
 			JavaNativeClass cls = new JavaNativeClass(arrays);
134
-			cls.addMethod("sort", new JavaSourceMethod(arrays, JavaSourceMethod.Kind.EXPANSION, "sort", false));
135
-			cls.addMethod("sorted", new JavaSourceMethod((formatter, calle) -> {
136
-				Expression target = formatter.duplicable(((CallExpression)calle).target);
137
-				ExpressionString targetString = target.accept(formatter);
138
-				ExpressionString copy = new ExpressionString("Arrays.copyOf(" + targetString.value + ", " + targetString.value + ".length).sort()", JavaOperator.CALL);
139
-				ExpressionString source = formatter.hoist(copy, formatter.scope.type(target.type));
140
-				formatter.target.writeLine("Arrays.sort(" + source.value + ");");
141
-				return source;
135
+			cls.addMethod("sort", new JavaMethod(arrays, JavaMethod.Kind.EXPANSION, "sort", false, "([Ljava/lang/Object;)[Ljava/lang/Object;", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
136
+			cls.addMethod("sorted", new JavaMethod((expression, translator) -> {
137
+				return translator.sorted(((CallExpression)expression).target);
142
 			}));
138
 			}));
143
-			cls.addMethod("sortWithComparator", new JavaSourceMethod(arrays, JavaSourceMethod.Kind.EXPANSION, "sort", false));
144
-			cls.addMethod("sortedWithComparator", new JavaSourceMethod((formatter, calle) -> {
145
-				Expression target = formatter.duplicable(((CallExpression)calle).target);
146
-				ExpressionString comparator = ((CallExpression)calle).arguments.arguments[0].accept(formatter);
147
-				ExpressionString targetString = target.accept(formatter);
148
-				ExpressionString copy = new ExpressionString("Arrays.copyOf(" + targetString.value + ", " + targetString.value + ".length).sort()", JavaOperator.CALL);
149
-				ExpressionString source = formatter.hoist(copy, formatter.scope.type(target.type));
150
-				formatter.target.writeLine("Arrays.sort(" + source.value + ", " + comparator.value + ");");
151
-				return source;
139
+			cls.addMethod("sortWithComparator", new JavaMethod(arrays, JavaMethod.Kind.EXPANSION, "sort", false, "([Ljava/lang/Object;Ljava/lang/Comparator;)[Ljava/lang/Object;", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
140
+			cls.addMethod("sortedWithComparator", new JavaMethod((expression, translator) -> {
141
+				return translator.sortedWithComparator(
142
+						((CallExpression)expression).target,
143
+						((CallExpression)expression).arguments.arguments[0]);
152
 			}));
144
 			}));
153
-			cls.addMethod("copy", new JavaSourceMethod((formatter, calle) -> {
154
-				Expression target = formatter.duplicable(((CallExpression)calle).target);
155
-				ExpressionString source = target.accept(formatter);
156
-				return new ExpressionString("Arrays.copyOf(" + source.value + ", " + source.value + ".length)", JavaOperator.CALL);
145
+			cls.addMethod("copy", new JavaMethod((expression, translator) -> {
146
+				return translator.copy(((CallExpression)expression).target);
157
 			}));
147
 			}));
158
-			cls.addMethod("copyResize", new JavaSourceMethod(arrays, JavaSourceMethod.Kind.EXPANSION, "copyOf", false));
159
-			cls.addMethod("copyTo", new JavaSourceMethod((formatter, calle) -> {
160
-				CallExpression call = (CallExpression)calle;
161
-				Expression source = call.target;
162
-				Expression target = call.arguments.arguments[0];
163
-				Expression sourceOffset = call.arguments.arguments[1];
164
-				Expression targetOffset = call.arguments.arguments[2];
165
-				Expression length = call.arguments.arguments[3];
166
-				return new ExpressionString("System.arraycopy("
167
-					+ source.accept(formatter) + ", "
168
-					+ sourceOffset.accept(formatter) + ", "
169
-					+ target.accept(formatter) + ", "
170
-					+ targetOffset.accept(formatter) + ", "
171
-					+ length.accept(formatter) + ")", JavaOperator.CALL);
148
+			cls.addMethod("copyResize", new JavaMethod(arrays, JavaMethod.Kind.EXPANSION, "copyOf", false, "([Ljava/lang/Object;I)[Ljava/lang/Object;", JavaModifiers.PUBLIC | JavaModifiers.STATIC));
149
+			cls.addMethod("copyTo", new JavaMethod((expression, translator) -> {
150
+				return translator.copyTo((CallExpression)expression);
172
 			}));
151
 			}));
173
 			nativeClasses.put("stdlib::Arrays", cls);
152
 			nativeClasses.put("stdlib::Arrays", cls);
174
 		}
153
 		}
175
 		
154
 		
176
 		{
155
 		{
177
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "IllegalArgumentException", JavaClass.Kind.CLASS));
156
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "IllegalArgumentException", JavaClass.Kind.CLASS));
178
-			cls.addConstructor("constructor", "");
157
+			cls.addConstructor("constructor", "(Ljava/lang/String;)V");
179
 			nativeClasses.put("stdlib::IllegalArgumentException", cls);
158
 			nativeClasses.put("stdlib::IllegalArgumentException", cls);
180
 		}
159
 		}
181
 		
160
 		
182
 		{
161
 		{
183
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "Exception", JavaClass.Kind.CLASS));
162
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.lang", "Exception", JavaClass.Kind.CLASS));
184
-			cls.addConstructor("constructor", "");
185
-			cls.addConstructor("constructorWithCause", "");
163
+			cls.addConstructor("constructor", "(Ljava/lang/String;)V");
164
+			cls.addConstructor("constructorWithCause", "(Ljava/lang/String;Ljava/lang/Throwable;)V");
186
 			nativeClasses.put("stdlib::Exception", cls);
165
 			nativeClasses.put("stdlib::Exception", cls);
187
 		}
166
 		}
188
 		
167
 		
189
 		{
168
 		{
190
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "IOException", JavaClass.Kind.CLASS));
169
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "IOException", JavaClass.Kind.CLASS));
191
-			cls.addConstructor("constructor", "");
170
+			cls.addConstructor("constructor", "(Ljava/lang/String;)V");
192
 			nativeClasses.put("io::IOException", cls);
171
 			nativeClasses.put("io::IOException", cls);
193
 		}
172
 		}
194
 		
173
 		
195
 		{
174
 		{
196
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "Reader", JavaClass.Kind.INTERFACE));
175
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "Reader", JavaClass.Kind.INTERFACE));
197
-			cls.addInstanceMethod("destruct", "close");
198
-			cls.addInstanceMethod("readCharacter", "read");
199
-			cls.addInstanceMethod("readArray", "read");
200
-			cls.addInstanceMethod("readArraySlice", "read");
176
+			cls.addInstanceMethod("destruct", "close", "()V");
177
+			cls.addInstanceMethod("readCharacter", "read", "()C");
178
+			cls.addInstanceMethod("readArray", "read", "([C)I");
179
+			cls.addInstanceMethod("readArraySlice", "read", "([CII)I");
201
 			nativeClasses.put("io::Reader", cls);
180
 			nativeClasses.put("io::Reader", cls);
202
 		}
181
 		}
203
 		
182
 		
204
 		{
183
 		{
205
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "StringReader", JavaClass.Kind.CLASS), true);
184
 			JavaNativeClass cls = new JavaNativeClass(new JavaClass("java.io", "StringReader", JavaClass.Kind.CLASS), true);
206
-			cls.addConstructor("constructor", "");
207
-			cls.addInstanceMethod("destructor", "close");
208
-			cls.addInstanceMethod("readCharacter", "read");
209
-			cls.addInstanceMethod("readSlice", "read");
185
+			cls.addConstructor("constructor", "(Ljava/lang/String;)V");
186
+			cls.addInstanceMethod("destructor", "close", "()V");
187
+			cls.addInstanceMethod("readCharacter", "read", "()C");
188
+			cls.addInstanceMethod("readArray", "read", "([C)I");
189
+			cls.addInstanceMethod("readSlice", "read", "([CII)I");
210
 			nativeClasses.put("io::StringReader", cls);
190
 			nativeClasses.put("io::StringReader", cls);
211
 		}
191
 		}
212
 	}
192
 	}
214
 	private final String filename;
194
 	private final String filename;
215
 	private final JavaClass outerClass;
195
 	private final JavaClass outerClass;
216
 	
196
 	
217
-	public JavaSourcePrepareDefinitionVisitor(String filename, JavaClass outerClass) {
197
+	public JavaPrepareDefinitionVisitor(String filename, JavaClass outerClass) {
218
 		this.filename = filename;
198
 		this.filename = filename;
219
 		this.outerClass = outerClass;
199
 		this.outerClass = outerClass;
220
 	}
200
 	}
307
 		
287
 		
308
 		for (VariantDefinition.Option option : variant.options) {
288
 		for (VariantDefinition.Option option : variant.options) {
309
 			JavaClass variantCls = new JavaClass(cls.fullName, option.name, JavaClass.Kind.CLASS);
289
 			JavaClass variantCls = new JavaClass(cls.fullName, option.name, JavaClass.Kind.CLASS);
310
-			option.setTag(JavaSourceVariantOption.class, new JavaSourceVariantOption(cls, variantCls));
290
+			option.setTag(JavaVariantOption.class, new JavaVariantOption(cls, variantCls));
311
 		}
291
 		}
312
 		
292
 		
313
 		return cls;
293
 		return cls;
335
 		
315
 		
336
 		for (IDefinitionMember member : definition.members) {
316
 		for (IDefinitionMember member : definition.members) {
337
 			if (member instanceof InnerDefinitionMember) {
317
 			if (member instanceof InnerDefinitionMember) {
338
-				((InnerDefinitionMember) member).innerDefinition.accept(new JavaSourcePrepareDefinitionVisitor(filename, cls));
318
+				((InnerDefinitionMember) member).innerDefinition.accept(new JavaPrepareDefinitionVisitor(filename, cls));
339
 			}
319
 			}
340
 		}
320
 		}
341
 		
321
 		

JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourcePrepareExpansionMethodVisitor.java → JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java View File

3
  * To change this template file, choose Tools | Templates
3
  * To change this template file, choose Tools | Templates
4
  * and open the template in the editor.
4
  * and open the template in the editor.
5
  */
5
  */
6
-package org.openzen.zenscript.javasource.prepare;
6
+package org.openzen.zenscript.javashared.prepare;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaNativeClass;
8
 import org.openzen.zencode.shared.StringExpansion;
9
 import org.openzen.zencode.shared.StringExpansion;
9
 import org.openzen.zenscript.codemodel.OperatorType;
10
 import org.openzen.zenscript.codemodel.OperatorType;
10
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
11
 import org.openzen.zenscript.codemodel.annotations.NativeTag;
16
 import org.openzen.zenscript.codemodel.member.DefinitionMember;
17
 import org.openzen.zenscript.codemodel.member.DefinitionMember;
17
 import org.openzen.zenscript.codemodel.member.DestructorMember;
18
 import org.openzen.zenscript.codemodel.member.DestructorMember;
18
 import org.openzen.zenscript.codemodel.member.FieldMember;
19
 import org.openzen.zenscript.codemodel.member.FieldMember;
20
+import org.openzen.zenscript.codemodel.member.FunctionalMember;
19
 import org.openzen.zenscript.codemodel.member.GetterMember;
21
 import org.openzen.zenscript.codemodel.member.GetterMember;
20
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
22
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
21
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
23
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
25
 import org.openzen.zenscript.codemodel.member.OperatorMember;
27
 import org.openzen.zenscript.codemodel.member.OperatorMember;
26
 import org.openzen.zenscript.codemodel.member.SetterMember;
28
 import org.openzen.zenscript.codemodel.member.SetterMember;
27
 import org.openzen.zenscript.codemodel.member.StaticInitializerMember;
29
 import org.openzen.zenscript.codemodel.member.StaticInitializerMember;
28
-import org.openzen.zenscript.javasource.JavaSourceTypeNameVisitor;
30
+import org.openzen.zenscript.javashared.JavaTypeNameVisitor;
29
 import org.openzen.zenscript.javashared.JavaClass;
31
 import org.openzen.zenscript.javashared.JavaClass;
30
 import org.openzen.zenscript.javashared.JavaField;
32
 import org.openzen.zenscript.javashared.JavaField;
31
-import org.openzen.zenscript.javasource.JavaSourceContext;
32
-import org.openzen.zenscript.javasource.tags.JavaSourceImplementation;
33
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
33
+import org.openzen.zenscript.javashared.JavaContext;
34
+import org.openzen.zenscript.javashared.JavaImplementation;
35
+import org.openzen.zenscript.javashared.JavaMethod;
36
+import org.openzen.zenscript.javashared.JavaModifiers;
34
 
37
 
35
 /**
38
 /**
36
  *
39
  *
37
  * @author Hoofdgebruiker
40
  * @author Hoofdgebruiker
38
  */
41
  */
39
-public class JavaSourcePrepareExpansionMethodVisitor implements MemberVisitor<Void> {
42
+public class JavaPrepareExpansionMethodVisitor implements MemberVisitor<Void> {
40
 	private static final boolean DEBUG_EMPTY = true;
43
 	private static final boolean DEBUG_EMPTY = true;
41
 	
44
 	
42
-	private final JavaSourceContext context;
45
+	private final JavaContext context;
43
 	private final JavaClass cls;
46
 	private final JavaClass cls;
44
 	private final JavaNativeClass nativeClass;
47
 	private final JavaNativeClass nativeClass;
45
 	
48
 	
46
-	public JavaSourcePrepareExpansionMethodVisitor(JavaSourceContext context, JavaClass cls, JavaNativeClass nativeClass) {
49
+	public JavaPrepareExpansionMethodVisitor(JavaContext context, JavaClass cls, JavaNativeClass nativeClass) {
47
 		this.cls = cls;
50
 		this.cls = cls;
48
 		this.nativeClass = nativeClass;
51
 		this.nativeClass = nativeClass;
49
 		this.context = context;
52
 		this.context = context;
111
 
114
 
112
 	@Override
115
 	@Override
113
 	public Void visitCaster(CasterMember member) {
116
 	public Void visitCaster(CasterMember member) {
114
-		visitFunctional(member, "to" + member.toType.accept(new JavaSourceTypeNameVisitor()));
117
+		visitFunctional(member, "to" + member.toType.accept(new JavaTypeNameVisitor()));
115
 		return null;
118
 		return null;
116
 	}
119
 	}
117
 
120
 
129
 
132
 
130
 	@Override
133
 	@Override
131
 	public Void visitImplementation(ImplementationMember member) {
134
 	public Void visitImplementation(ImplementationMember member) {
132
-		JavaClass implementationClass = new JavaClass(cls, member.type.accept(new JavaSourceTypeNameVisitor()) + "Implementation", JavaClass.Kind.CLASS);
133
-		member.setTag(JavaSourceImplementation.class, new JavaSourceImplementation(false, implementationClass));
135
+		JavaClass implementationClass = new JavaClass(cls, member.type.accept(new JavaTypeNameVisitor()) + "Implementation", JavaClass.Kind.CLASS);
136
+		member.setTag(JavaImplementation.class, new JavaImplementation(false, implementationClass));
134
 		for (IDefinitionMember implementedMember : member.members)
137
 		for (IDefinitionMember implementedMember : member.members)
135
 			implementedMember.accept(this);
138
 			implementedMember.accept(this);
136
 		
139
 		
150
 		return null;
153
 		return null;
151
 	}
154
 	}
152
 	
155
 	
153
-	private void visitFunctional(DefinitionMember member, String name) {
156
+	private void visitFunctional(FunctionalMember member, String name) {
154
 		NativeTag nativeTag = member.getTag(NativeTag.class);
157
 		NativeTag nativeTag = member.getTag(NativeTag.class);
155
-		JavaSourceMethod method = null;
158
+		JavaMethod method = null;
156
 		if (nativeTag != null && nativeClass != null)
159
 		if (nativeTag != null && nativeClass != null)
157
 			method = nativeClass.getMethod(nativeTag.value);
160
 			method = nativeClass.getMethod(nativeTag.value);
158
 		if (method == null)
161
 		if (method == null)
159
-			method = new JavaSourceMethod(cls, getKind(member), name, true); 
162
+			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(member.header), JavaModifiers.getJavaModifiers(member.modifiers)); 
160
 		
163
 		
161
 		if (method.compile) {
164
 		if (method.compile) {
162
 			if (DEBUG_EMPTY && cls.empty)
165
 			if (DEBUG_EMPTY && cls.empty)
165
 			cls.empty = false;
168
 			cls.empty = false;
166
 		}
169
 		}
167
 		
170
 		
168
-		member.setTag(JavaSourceMethod.class, method);
171
+		member.setTag(JavaMethod.class, method);
169
 	}
172
 	}
170
 	
173
 	
171
-	private JavaSourceMethod.Kind getKind(DefinitionMember member) {
172
-		return member.isStatic() ? JavaSourceMethod.Kind.STATIC : JavaSourceMethod.Kind.EXPANSION;
174
+	private JavaMethod.Kind getKind(DefinitionMember member) {
175
+		return member.isStatic() ? JavaMethod.Kind.STATIC : JavaMethod.Kind.EXPANSION;
173
 	}
176
 	}
174
 	
177
 	
175
 	private String getOperatorName(OperatorType operator) {
178
 	private String getOperatorName(OperatorType operator) {

+ 0
- 27
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/FormattingUtils.java View File

25
 public class FormattingUtils {
25
 public class FormattingUtils {
26
 	private FormattingUtils() {}
26
 	private FormattingUtils() {}
27
 	
27
 	
28
-	public static void formatModifiers(StringBuilder output, int modifiers) {
29
-		if (Modifiers.isPrivate(modifiers))
30
-			output.append("private ");
31
-		if (Modifiers.isProtected(modifiers))
32
-			output.append("protected ");
33
-		if (Modifiers.isPublic(modifiers))
34
-			output.append("public ");
35
-		if (Modifiers.isExport(modifiers))
36
-			output.append("export ");
37
-		if (Modifiers.isStatic(modifiers))
38
-			output.append("static ");
39
-		if (Modifiers.isAbstract(modifiers))
40
-			output.append("abstract ");
41
-		if (Modifiers.isVirtual(modifiers))
42
-			output.append("virtual ");
43
-		if (Modifiers.isFinal(modifiers))
44
-			output.append("final ");
45
-		if (Modifiers.isExtern(modifiers))
46
-			output.append("extern ");
47
-		if (Modifiers.isImplicit(modifiers))
48
-			output.append("implicit ");
49
-		if (Modifiers.isConst(modifiers))
50
-			output.append("const ");
51
-		if (Modifiers.isConstOptional(modifiers))
52
-			output.append("const? ");
53
-	}
54
-	
55
 	public static void formatHeader(StringBuilder result, JavaSourceFormattingSettings settings, FunctionHeader header, JavaSourceTypeVisitor typeFormatter) {
28
 	public static void formatHeader(StringBuilder result, JavaSourceFormattingSettings settings, FunctionHeader header, JavaSourceTypeVisitor typeFormatter) {
56
 		FormattingUtils.formatTypeParameters(result, header.typeParameters, typeFormatter);
29
 		FormattingUtils.formatTypeParameters(result, header.typeParameters, typeFormatter);
57
 		result.append("(");
30
 		result.append("(");

+ 1
- 1
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaDefinitionVisitor.java View File

32
 import org.openzen.zenscript.codemodel.type.ITypeID;
32
 import org.openzen.zenscript.codemodel.type.ITypeID;
33
 import org.openzen.zenscript.compiler.CompileScope;
33
 import org.openzen.zenscript.compiler.CompileScope;
34
 import org.openzen.zenscript.compiler.SemanticModule;
34
 import org.openzen.zenscript.compiler.SemanticModule;
35
-import org.openzen.zenscript.javasource.prepare.JavaNativeClass;
35
+import org.openzen.zenscript.javashared.JavaNativeClass;
36
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
36
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
37
 import org.openzen.zenscript.javasource.scope.JavaSourceStatementScope;
37
 import org.openzen.zenscript.javasource.scope.JavaSourceStatementScope;
38
 import org.openzen.zenscript.javashared.JavaClass;
38
 import org.openzen.zenscript.javashared.JavaClass;

+ 2
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java View File

31
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
31
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
32
 import org.openzen.zenscript.codemodel.type.ITypeID;
32
 import org.openzen.zenscript.codemodel.type.ITypeID;
33
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
33
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
34
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
34
+import org.openzen.zenscript.javashared.JavaMethod;
35
 
35
 
36
 /**
36
 /**
37
  *
37
  *
56
 	}
56
 	}
57
 	
57
 	
58
 	private void compileMethod(DefinitionMember member, FunctionHeader header, Statement body) {
58
 	private void compileMethod(DefinitionMember member, FunctionHeader header, Statement body) {
59
-		JavaSourceMethod method = member.getTag(JavaSourceMethod.class);
59
+		JavaMethod method = member.getTag(JavaMethod.class);
60
 		if (method == null)
60
 		if (method == null)
61
 			throw new AssertionError();
61
 			throw new AssertionError();
62
 		if (!method.compile)
62
 		if (!method.compile)

+ 6
- 5
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java View File

5
  */
5
  */
6
 package org.openzen.zenscript.javasource;
6
 package org.openzen.zenscript.javasource;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaTypeNameVisitor;
8
 import java.util.ArrayList;
9
 import java.util.ArrayList;
9
 import java.util.Collections;
10
 import java.util.Collections;
10
 import java.util.List;
11
 import java.util.List;
37
 import org.openzen.zenscript.compiler.SemanticModule;
38
 import org.openzen.zenscript.compiler.SemanticModule;
38
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
39
 import org.openzen.zenscript.javasource.scope.JavaSourceFileScope;
39
 import org.openzen.zenscript.javashared.JavaClass;
40
 import org.openzen.zenscript.javashared.JavaClass;
40
-import org.openzen.zenscript.javasource.tags.JavaSourceImplementation;
41
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
41
+import org.openzen.zenscript.javashared.JavaImplementation;
42
+import org.openzen.zenscript.javashared.JavaMethod;
42
 
43
 
43
 /**
44
 /**
44
  *
45
  *
72
 	}
73
 	}
73
 	
74
 	
74
 	private void compileMethod(DefinitionMember member, FunctionHeader header, Statement body) {
75
 	private void compileMethod(DefinitionMember member, FunctionHeader header, Statement body) {
75
-		JavaSourceMethod method = member.getTag(JavaSourceMethod.class);
76
+		JavaMethod method = member.getTag(JavaMethod.class);
76
 		if (method == null)
77
 		if (method == null)
77
 			throw new AssertionError();
78
 			throw new AssertionError();
78
 		if (!method.compile)
79
 		if (!method.compile)
221
 
222
 
222
 	@Override
223
 	@Override
223
 	public Void visitImplementation(ImplementationMember member) {
224
 	public Void visitImplementation(ImplementationMember member) {
224
-		JavaSourceImplementation implementation = member.getTag(JavaSourceImplementation.class);
225
+		JavaImplementation implementation = member.getTag(JavaImplementation.class);
225
 		if (implementation.inline) {
226
 		if (implementation.inline) {
226
 			for (IDefinitionMember m : member.members) {
227
 			for (IDefinitionMember m : member.members) {
227
 				m.accept(this);
228
 				m.accept(this);
228
 			}
229
 			}
229
 		} else {
230
 		} else {
230
-			String interfaceName = member.type.accept(new JavaSourceTypeNameVisitor());
231
+			String interfaceName = member.type.accept(new JavaTypeNameVisitor());
231
 			String implementationName = interfaceName + "Implementation";
232
 			String implementationName = interfaceName + "Implementation";
232
 			
233
 			
233
 			begin(ElementType.FIELD);
234
 			begin(ElementType.FIELD);

+ 6
- 3
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceCompiler.java View File

5
  */
5
  */
6
 package org.openzen.zenscript.javasource;
6
 package org.openzen.zenscript.javasource;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaContext;
8
 import java.io.File;
9
 import java.io.File;
9
 import java.util.HashMap;
10
 import java.util.HashMap;
10
 import java.util.Map;
11
 import java.util.Map;
15
 import org.openzen.zenscript.compiler.CompilationUnit;
16
 import org.openzen.zenscript.compiler.CompilationUnit;
16
 import org.openzen.zenscript.compiler.SemanticModule;
17
 import org.openzen.zenscript.compiler.SemanticModule;
17
 import org.openzen.zenscript.compiler.ZenCodeCompiler;
18
 import org.openzen.zenscript.compiler.ZenCodeCompiler;
18
-import org.openzen.zenscript.javasource.prepare.JavaSourcePrepareDefinitionVisitor;
19
+import org.openzen.zenscript.javashared.prepare.JavaPrepareDefinitionVisitor;
19
 import org.openzen.zenscript.javashared.JavaClass;
20
 import org.openzen.zenscript.javashared.JavaClass;
20
 
21
 
21
 /**
22
 /**
38
 		
39
 		
39
 		settings = new JavaSourceFormattingSettings.Builder().build();
40
 		settings = new JavaSourceFormattingSettings.Builder().build();
40
 		typeGenerator = new JavaSourceSyntheticTypeGenerator(directory, settings);
41
 		typeGenerator = new JavaSourceSyntheticTypeGenerator(directory, settings);
41
-		helperGenerator = new JavaSourceSyntheticHelperGenerator(directory, settings);
42
+		
43
+		JavaSourceContext context = new JavaSourceContext(typeGenerator);
44
+		helperGenerator = new JavaSourceSyntheticHelperGenerator(context, directory, settings);
42
 		
45
 		
43
 		this.directory = directory;
46
 		this.directory = directory;
44
 	}
47
 	}
46
 	@Override
49
 	@Override
47
 	public void addDefinition(HighLevelDefinition definition, SemanticModule module) {
50
 	public void addDefinition(HighLevelDefinition definition, SemanticModule module) {
48
 		String filename = getFilename(definition);
51
 		String filename = getFilename(definition);
49
-		JavaSourcePrepareDefinitionVisitor prepare = new JavaSourcePrepareDefinitionVisitor(filename, null);
52
+		JavaPrepareDefinitionVisitor prepare = new JavaPrepareDefinitionVisitor(filename, null);
50
 		JavaClass cls = definition.accept(prepare);
53
 		JavaClass cls = definition.accept(prepare);
51
 		
54
 		
52
 		File file = new File(getDirectory(definition.pkg), cls.getName() + ".java");
55
 		File file = new File(getDirectory(definition.pkg), cls.getName() + ".java");

+ 5
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceContext.java View File

6
 package org.openzen.zenscript.javasource;
6
 package org.openzen.zenscript.javasource;
7
 
7
 
8
 import org.openzen.zenscript.codemodel.type.ITypeID;
8
 import org.openzen.zenscript.codemodel.type.ITypeID;
9
+import org.openzen.zenscript.javashared.JavaContext;
10
+import org.openzen.zenscript.javashared.JavaSyntheticClassGenerator;
9
 import org.openzen.zenscript.javashared.JavaTypeDescriptorVisitor;
11
 import org.openzen.zenscript.javashared.JavaTypeDescriptorVisitor;
10
 
12
 
11
 /**
13
 /**
12
  *
14
  *
13
  * @author Hoofdgebruiker
15
  * @author Hoofdgebruiker
14
  */
16
  */
15
-public class JavaSourceContext {
17
+public class JavaSourceContext extends JavaContext {
16
 	private final JavaTypeDescriptorVisitor typeDescriptorVisitor;
18
 	private final JavaTypeDescriptorVisitor typeDescriptorVisitor;
17
 	
19
 	
18
-	public JavaSourceContext(JavaSourceSyntheticTypeGenerator generator) {
20
+	public JavaSourceContext(JavaSyntheticClassGenerator generator) {
19
 		typeDescriptorVisitor = new JavaTypeDescriptorVisitor(generator);
21
 		typeDescriptorVisitor = new JavaTypeDescriptorVisitor(generator);
20
 	}
22
 	}
21
 	
23
 	
24
+	@Override
22
 	public String getDescriptor(ITypeID type) {
25
 	public String getDescriptor(ITypeID type) {
23
 		return type.accept(typeDescriptorVisitor);
26
 		return type.accept(typeDescriptorVisitor);
24
 	}
27
 	}

+ 81
- 24
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java View File

95
 import org.openzen.zenscript.javasource.scope.JavaSourceStatementScope;
95
 import org.openzen.zenscript.javasource.scope.JavaSourceStatementScope;
96
 import org.openzen.zenscript.javashared.JavaClass;
96
 import org.openzen.zenscript.javashared.JavaClass;
97
 import org.openzen.zenscript.javashared.JavaField;
97
 import org.openzen.zenscript.javashared.JavaField;
98
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
99
-import org.openzen.zenscript.javasource.tags.JavaSourceVariantOption;
98
+import org.openzen.zenscript.javashared.JavaNativeTranslation;
99
+import org.openzen.zenscript.javashared.JavaNativeTranslator;
100
+import org.openzen.zenscript.javashared.JavaMethod;
101
+import org.openzen.zenscript.javashared.JavaVariantOption;
100
 
102
 
101
 /**
103
 /**
102
  *
104
  *
103
  * @author Hoofdgebruiker
105
  * @author Hoofdgebruiker
104
  */
106
  */
105
-public class JavaSourceExpressionFormatter implements ExpressionVisitor<ExpressionString> {
107
+public class JavaSourceExpressionFormatter implements ExpressionVisitor<ExpressionString>, JavaNativeTranslator<ExpressionString> {
106
 	private static final JavaClass RESULT = new JavaClass("stdlib", "Result", JavaClass.Kind.CLASS);
108
 	private static final JavaClass RESULT = new JavaClass("stdlib", "Result", JavaClass.Kind.CLASS);
107
 	private static final JavaClass RESULT_OK = new JavaClass("stdlib", "Result.Ok", JavaClass.Kind.CLASS);
109
 	private static final JavaClass RESULT_OK = new JavaClass("stdlib", "Result.Ok", JavaClass.Kind.CLASS);
108
 	private static final JavaClass RESULT_ERROR = new JavaClass("stdlib", "Result.Error", JavaClass.Kind.CLASS);
110
 	private static final JavaClass RESULT_ERROR = new JavaClass("stdlib", "Result.Error", JavaClass.Kind.CLASS);
159
 		if (expression.member.getBuiltin() != null) {
161
 		if (expression.member.getBuiltin() != null) {
160
 			return visitBuiltinCall(expression, expression.member.getBuiltin());
162
 			return visitBuiltinCall(expression, expression.member.getBuiltin());
161
 		} else {
163
 		} else {
162
-			JavaSourceMethod method = expression.member.getTag(JavaSourceMethod.class);
164
+			JavaMethod method = expression.member.getTag(JavaMethod.class);
163
 			if (method == null)
165
 			if (method == null)
164
 				throw new IllegalStateException("No source method tag for " + expression.member.getCanonicalName() + "!");
166
 				throw new IllegalStateException("No source method tag for " + expression.member.getCanonicalName() + "!");
165
 			
167
 			
166
-			if (method.kind == JavaSourceMethod.Kind.COMPILED) {
167
-				return method.compiler.call(this, expression);
168
+			if (method.kind == JavaMethod.Kind.COMPILED) {
169
+				return (ExpressionString) method.translation.translate(expression, this);
168
 			} else {
170
 			} else {
169
 				return compileCall(method, expression.target, expression.arguments);
171
 				return compileCall(method, expression.target, expression.arguments);
170
 			}
172
 			}
171
 		}
173
 		}
172
 	}
174
 	}
173
 	
175
 	
174
-	private ExpressionString compileCall(JavaSourceMethod method, Expression target, CallArguments arguments) {
176
+	private ExpressionString compileCall(JavaMethod method, Expression target, CallArguments arguments) {
175
 		switch (method.kind) {
177
 		switch (method.kind) {
176
 			case EXPANSION: {
178
 			case EXPANSION: {
177
 				StringBuilder output = new StringBuilder();
179
 				StringBuilder output = new StringBuilder();
199
 		if (expression.member.getBuiltin() != null)
201
 		if (expression.member.getBuiltin() != null)
200
 			return visitBuiltinCallStatic(expression, expression.member.getBuiltin());
202
 			return visitBuiltinCallStatic(expression, expression.member.getBuiltin());
201
 		
203
 		
202
-		JavaSourceMethod method = expression.member.getTag(JavaSourceMethod.class);
204
+		JavaMethod method = expression.member.getTag(JavaMethod.class);
203
 		if (method == null)
205
 		if (method == null)
204
 			throw new IllegalStateException("No source method tag for " + expression.member.getCanonicalName() + "!");
206
 			throw new IllegalStateException("No source method tag for " + expression.member.getCanonicalName() + "!");
205
 		
207
 		
241
 		if (expression.member.member.builtin != null)
243
 		if (expression.member.member.builtin != null)
242
 			return visitBuiltinCast(expression);
244
 			return visitBuiltinCast(expression);
243
 		
245
 		
244
-		JavaSourceMethod method = expression.member.getTag(JavaSourceMethod.class);
246
+		JavaMethod method = expression.member.getTag(JavaMethod.class);
245
 		if (method == null)
247
 		if (method == null)
246
 			throw new CompileException(expression.position, CompileExceptionCode.INTERNAL_ERROR, "No tag for caster");
248
 			throw new CompileException(expression.position, CompileExceptionCode.INTERNAL_ERROR, "No tag for caster");
247
 		
249
 		
248
-		if (method.kind == JavaSourceMethod.Kind.COMPILED) {
249
-			return method.compiler.call(this, expression);
250
+		if (method.kind == JavaMethod.Kind.COMPILED) {
251
+			return (ExpressionString)method.translation.translate(expression, this);
250
 		} else {
252
 		} else {
251
 			return compileCall(method, expression.target, CallArguments.EMPTY);
253
 			return compileCall(method, expression.target, CallArguments.EMPTY);
252
 		}
254
 		}
441
 		if (expression.getter.member.builtin != null)
443
 		if (expression.getter.member.builtin != null)
442
 			return visitBuiltinGetter(expression, expression.getter.member.builtin);
444
 			return visitBuiltinGetter(expression, expression.getter.member.builtin);
443
 		
445
 		
444
-		JavaSourceMethod method = expression.getter.getTag(JavaSourceMethod.class);
446
+		JavaMethod method = expression.getter.getTag(JavaMethod.class);
445
 		StringBuilder result = new StringBuilder();
447
 		StringBuilder result = new StringBuilder();
446
 		result.append(expression.target.accept(this));
448
 		result.append(expression.target.accept(this));
447
 		result.append(".");
449
 		result.append(".");
513
 		if (expression.constructor.getBuiltin() != null)
515
 		if (expression.constructor.getBuiltin() != null)
514
 			return visitBuiltinConstructor(expression);
516
 			return visitBuiltinConstructor(expression);
515
 		
517
 		
516
-		JavaSourceMethod method = expression.constructor.getTag(JavaSourceMethod.class);
518
+		JavaMethod method = expression.constructor.getTag(JavaMethod.class);
517
 		switch (method.kind) {
519
 		switch (method.kind) {
518
 			case EXPANSION: {
520
 			case EXPANSION: {
519
 				StringBuilder output = new StringBuilder();
521
 				StringBuilder output = new StringBuilder();
699
 	
701
 	
700
 	@Override
702
 	@Override
701
 	public ExpressionString visitVariantValue(VariantValueExpression expression) {
703
 	public ExpressionString visitVariantValue(VariantValueExpression expression) {
702
-		JavaSourceVariantOption option = expression.option.getTag(JavaSourceVariantOption.class);
704
+		JavaVariantOption option = expression.option.getTag(JavaVariantOption.class);
703
 		
705
 		
704
 		StringBuilder result = new StringBuilder();
706
 		StringBuilder result = new StringBuilder();
705
 		result.append("new ").append(scope.type(option.variantOptionClass));
707
 		result.append("new ").append(scope.type(option.variantOptionClass));
740
 		}
742
 		}
741
 	}
743
 	}
742
 	
744
 	
743
-	public ExpressionString listToArray(CastExpression expression) {
744
-		Expression target = duplicable(expression.target);
745
-		ExpressionString targetString = target.accept(this);
746
-		ArrayTypeID resultType = (ArrayTypeID)expression.type;
747
-		return new ExpressionString(
748
-				targetString.value + ".toArray(" + newArray(resultType.elementType, targetString.unaryPostfix(JavaOperator.CALL, ".size()")).value + ")",
749
-				JavaOperator.CALL);
750
-	}
751
-	
752
 	public ExpressionString unaryPrefix(Expression value, JavaOperator operator) {
745
 	public ExpressionString unaryPrefix(Expression value, JavaOperator operator) {
753
 		return value.accept(this).unaryPrefix(operator);
746
 		return value.accept(this).unaryPrefix(operator);
754
 	}
747
 	}
1130
 				}
1123
 				}
1131
 			}
1124
 			}
1132
 			case ARRAY_CONTAINS: {
1125
 			case ARRAY_CONTAINS: {
1133
-				JavaSourceMethod method = scope.fileScope.helperGenerator.createArrayContains((ArrayTypeID)call.target.type);
1126
+				JavaMethod method = scope.fileScope.helperGenerator.createArrayContains((ArrayTypeID)call.target.type);
1134
 				return callAsStatic(scope.fileScope.importer.importType(method.cls) + '.' + method.name, call);
1127
 				return callAsStatic(scope.fileScope.importer.importType(method.cls) + '.' + method.name, call);
1135
 			}
1128
 			}
1136
 			case ARRAY_EQUALS: return callAsStatic("Arrays.equals", call);
1129
 			case ARRAY_EQUALS: return callAsStatic("Arrays.equals", call);
1772
 		
1765
 		
1773
 		throw new UnsupportedOperationException("Unknown builtin constructor: " + expression.constructor.getBuiltin());
1766
 		throw new UnsupportedOperationException("Unknown builtin constructor: " + expression.constructor.getBuiltin());
1774
 	}
1767
 	}
1768
+
1769
+	@Override
1770
+	public ExpressionString isEmptyAsLengthZero(Expression value) {
1771
+		return value.accept(this).unaryPostfix(JavaOperator.EQUALS, ".length() == 0");
1772
+	}
1773
+
1774
+	@Override
1775
+	public ExpressionString listToArray(CastExpression expression) {
1776
+		Expression target = duplicable(expression.target);
1777
+		ExpressionString targetString = target.accept(this);
1778
+		ArrayTypeID resultType = (ArrayTypeID)expression.type;
1779
+		return new ExpressionString(
1780
+				targetString.value + ".toArray(" + newArray(resultType.elementType, targetString.unaryPostfix(JavaOperator.CALL, ".size()")).value + ")",
1781
+				JavaOperator.CALL);
1782
+	}
1783
+
1784
+	@Override
1785
+	public ExpressionString containsAsIndexOf(Expression target, Expression value) {
1786
+		return target.accept(this)
1787
+				.unaryPostfix(JavaOperator.GREATER_EQUALS, ".indexOf(" + value.accept(this).value + ") >= 0");
1788
+	}
1789
+
1790
+	@Override
1791
+	public ExpressionString sorted(Expression value) {
1792
+		Expression target = duplicable(value);
1793
+		ExpressionString targetString = target.accept(this);
1794
+		ExpressionString copy = new ExpressionString("Arrays.copyOf(" + targetString.value + ", " + targetString.value + ".length).sort()", JavaOperator.CALL);
1795
+		ExpressionString source = hoist(copy, scope.type(target.type));
1796
+		this.target.writeLine("Arrays.sort(" + source.value + ");");
1797
+		return source;
1798
+	}
1799
+
1800
+	@Override
1801
+	public ExpressionString sortedWithComparator(Expression value, Expression comparator) {
1802
+		Expression target = duplicable(value);
1803
+		ExpressionString comparatorString = comparator.accept(this);
1804
+		ExpressionString targetString = target.accept(this);
1805
+		ExpressionString copy = new ExpressionString("Arrays.copyOf(" + targetString.value + ", " + targetString.value + ".length).sort()", JavaOperator.CALL);
1806
+		ExpressionString source = hoist(copy, scope.type(target.type));
1807
+		this.target.writeLine("Arrays.sort(" + source.value + ", " + comparatorString.value + ");");
1808
+		return source;
1809
+	}
1810
+
1811
+	@Override
1812
+	public ExpressionString copy(Expression value) {
1813
+		Expression target = duplicable(value);
1814
+		ExpressionString source = target.accept(this);
1815
+		return new ExpressionString("Arrays.copyOf(" + source.value + ", " + source.value + ".length)", JavaOperator.CALL);
1816
+	}
1817
+
1818
+	@Override
1819
+	public ExpressionString copyTo(CallExpression call) {
1820
+		Expression source = call.target;
1821
+		Expression target = call.arguments.arguments[0];
1822
+		Expression sourceOffset = call.arguments.arguments[1];
1823
+		Expression targetOffset = call.arguments.arguments[2];
1824
+		Expression length = call.arguments.arguments[3];
1825
+		return new ExpressionString("System.arraycopy("
1826
+			+ source.accept(this) + ", "
1827
+			+ sourceOffset.accept(this) + ", "
1828
+			+ target.accept(this) + ", "
1829
+			+ targetOffset.accept(this) + ", "
1830
+			+ length.accept(this) + ")", JavaOperator.CALL);
1831
+	}
1775
 }
1832
 }

+ 4
- 3
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceFile.java View File

5
  */
5
  */
6
 package org.openzen.zenscript.javasource;
6
 package org.openzen.zenscript.javasource;
7
 
7
 
8
+import org.openzen.zenscript.javashared.JavaContext;
8
 import java.io.BufferedOutputStream;
9
 import java.io.BufferedOutputStream;
9
 import java.io.File;
10
 import java.io.File;
10
 import java.io.FileOutputStream;
11
 import java.io.FileOutputStream;
23
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
24
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
24
 import org.openzen.zenscript.compiler.SemanticModule;
25
 import org.openzen.zenscript.compiler.SemanticModule;
25
 import org.openzen.zenscript.javashared.JavaClass;
26
 import org.openzen.zenscript.javashared.JavaClass;
26
-import org.openzen.zenscript.javasource.prepare.JavaSourcePrepareDefinitionMemberVisitor;
27
+import org.openzen.zenscript.javashared.prepare.JavaPrepareDefinitionMemberVisitor;
27
 
28
 
28
 /**
29
 /**
29
  *
30
  *
68
 		modules.put(definition, module);
69
 		modules.put(definition, module);
69
 	}
70
 	}
70
 	
71
 	
71
-	public void prepare(JavaSourceContext context) {
72
-		JavaSourcePrepareDefinitionMemberVisitor visitor = new JavaSourcePrepareDefinitionMemberVisitor(context, file.getName());
72
+	public void prepare(JavaContext context) {
73
+		JavaPrepareDefinitionMemberVisitor visitor = new JavaPrepareDefinitionMemberVisitor(context, file.getName());
73
 		
74
 		
74
 		if (mainDefinition != null)
75
 		if (mainDefinition != null)
75
 			mainDefinition.accept(visitor);
76
 			mainDefinition.accept(visitor);

+ 14
- 8
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceSyntheticHelperGenerator.java View File

28
 import org.openzen.zenscript.codemodel.type.IteratorTypeID;
28
 import org.openzen.zenscript.codemodel.type.IteratorTypeID;
29
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
29
 import org.openzen.zenscript.codemodel.type.RangeTypeID;
30
 import org.openzen.zenscript.javashared.JavaClass;
30
 import org.openzen.zenscript.javashared.JavaClass;
31
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
31
+import org.openzen.zenscript.javashared.JavaContext;
32
+import org.openzen.zenscript.javashared.JavaMethod;
33
+import org.openzen.zenscript.javashared.JavaModifiers;
32
 
34
 
33
 /**
35
 /**
34
  *
36
  *
35
  * @author Hoofdgebruiker
37
  * @author Hoofdgebruiker
36
  */
38
  */
37
 public class JavaSourceSyntheticHelperGenerator {
39
 public class JavaSourceSyntheticHelperGenerator {
40
+	private final JavaContext context;
38
 	private final File directory;
41
 	private final File directory;
39
 	private final JavaSourceFormattingSettings settings;
42
 	private final JavaSourceFormattingSettings settings;
40
 	private final Map<String, List<String>> members = new HashMap<>();
43
 	private final Map<String, List<String>> members = new HashMap<>();
41
 	private final JavaClass arrayHelpers = new JavaClass("zsynthetic", "ArrayHelpers", JavaClass.Kind.CLASS);
44
 	private final JavaClass arrayHelpers = new JavaClass("zsynthetic", "ArrayHelpers", JavaClass.Kind.CLASS);
42
-	private final Map<ArrayKind, JavaSourceMethod> existingContains = new HashMap<>();
43
-	private final Map<ArrayKind, JavaSourceMethod> existingIndexOf = new HashMap<>();
45
+	private final Map<ArrayKind, JavaMethod> existingContains = new HashMap<>();
46
+	private final Map<ArrayKind, JavaMethod> existingIndexOf = new HashMap<>();
44
 	
47
 	
45
-	public JavaSourceSyntheticHelperGenerator(File directory, JavaSourceFormattingSettings settings) {
48
+	public JavaSourceSyntheticHelperGenerator(JavaContext context, File directory, JavaSourceFormattingSettings settings) {
49
+		this.context = context;
46
 		this.directory = new File(directory, "zsynthetic");
50
 		this.directory = new File(directory, "zsynthetic");
47
 		this.settings = settings;
51
 		this.settings = settings;
48
 	}
52
 	}
49
 	
53
 	
50
-	public JavaSourceMethod createArrayContains(ArrayTypeID type) {
54
+	public JavaMethod createArrayContains(ArrayTypeID type) {
51
 		ArrayKind kind = type.accept(new ArrayKindVisitor());
55
 		ArrayKind kind = type.accept(new ArrayKindVisitor());
52
 		if (existingContains.containsKey(kind))
56
 		if (existingContains.containsKey(kind))
53
 			return existingContains.get(kind);
57
 			return existingContains.get(kind);
55
 		String method = generateContains(kind);
59
 		String method = generateContains(kind);
56
 		addMember(arrayHelpers, method);
60
 		addMember(arrayHelpers, method);
57
 		
61
 		
58
-		JavaSourceMethod sourceMethod = new JavaSourceMethod(arrayHelpers, JavaSourceMethod.Kind.EXPANSION, kind.containsName, false);
62
+		String descriptor = "(" + context.getDescriptor(type) + context.getDescriptor(type.elementType) + ")Z";
63
+		JavaMethod sourceMethod = new JavaMethod(arrayHelpers, JavaMethod.Kind.EXPANSION, kind.containsName, false, descriptor, JavaModifiers.PUBLIC | JavaModifiers.STATIC);
59
 		existingContains.put(kind, sourceMethod);
64
 		existingContains.put(kind, sourceMethod);
60
 		return sourceMethod;
65
 		return sourceMethod;
61
 	}
66
 	}
62
 	
67
 	
63
-	public JavaSourceMethod createArrayIndexOf(ArrayTypeID type) {
68
+	public JavaMethod createArrayIndexOf(ArrayTypeID type) {
64
 		ArrayKind kind = type.accept(new ArrayKindVisitor());
69
 		ArrayKind kind = type.accept(new ArrayKindVisitor());
65
 		if (existingContains.containsKey(kind))
70
 		if (existingContains.containsKey(kind))
66
 			return existingContains.get(kind);
71
 			return existingContains.get(kind);
68
 		String method = generateContains(kind);
73
 		String method = generateContains(kind);
69
 		addMember(arrayHelpers, method);
74
 		addMember(arrayHelpers, method);
70
 		
75
 		
71
-		JavaSourceMethod sourceMethod = new JavaSourceMethod(arrayHelpers, JavaSourceMethod.Kind.EXPANSION, kind.containsName, false);
76
+		String descriptor = "(" + context.getDescriptor(type) + ")I";
77
+		JavaMethod sourceMethod = new JavaMethod(arrayHelpers, JavaMethod.Kind.EXPANSION, kind.containsName, false, descriptor, JavaModifiers.PUBLIC | JavaModifiers.STATIC);
72
 		existingContains.put(kind, sourceMethod);
78
 		existingContains.put(kind, sourceMethod);
73
 		return sourceMethod;
79
 		return sourceMethod;
74
 	}
80
 	}

+ 0
- 46
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaNativeClass.java View File

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.javasource.prepare;
7
-
8
-import java.util.HashMap;
9
-import java.util.Map;
10
-import org.openzen.zenscript.javashared.JavaClass;
11
-import org.openzen.zenscript.javasource.tags.JavaSourceMethod;
12
-
13
-/**
14
- *
15
- * @author Hoofdgebruiker
16
- */
17
-public class JavaNativeClass {
18
-	public final JavaClass cls;
19
-	private final Map<String, JavaSourceMethod> methods = new HashMap<>();
20
-	public final boolean nonDestructible;
21
-	
22
-	public JavaNativeClass(JavaClass cls) {
23
-		this(cls, false);
24
-	}
25
-	
26
-	public JavaNativeClass(JavaClass cls, boolean nonDestructible) {
27
-		this.cls = cls;
28
-		this.nonDestructible = nonDestructible;
29
-	}
30
-	
31
-	public void addMethod(String key, JavaSourceMethod method) {
32
-		methods.put(key, method);
33
-	}
34
-	
35
-	public void addConstructor(String key, String name) {
36
-		methods.put(key, new JavaSourceMethod(cls, JavaSourceMethod.Kind.CONSTRUCTOR, name, false));
37
-	}
38
-	
39
-	public void addInstanceMethod(String key, String name) {
40
-		methods.put(key, new JavaSourceMethod(cls, JavaSourceMethod.Kind.INSTANCE, name, false));
41
-	}
42
-	
43
-	public JavaSourceMethod getMethod(String name) {
44
-		return methods.get(name);
45
-	}
46
-}

+ 0
- 14
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/prepare/JavaSourceSignatureVisitor.java View File

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.javasource.prepare;
7
-
8
-/**
9
- *
10
- * @author Hoofdgebruiker
11
- */
12
-public class JavaSourceSignatureVisitor {
13
-	
14
-}

Loading…
Cancel
Save