浏览代码

Started working on propagating a logger object instead of having to resort to Sysout

Mwahaha, Jared you will have to review this :manic_laugther:
kindlich 4 年前
父节点
当前提交
1b737430f9
找不到此签名对应的密钥
共有 54 个文件被更改,包括 711 次插入443 次删除
  1. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java
  2. 20
    14
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/SemanticModule.java
  3. 2
    2
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/partial/PartialMemberGroupExpression.java
  4. 7
    6
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/DefinitionTypeID.java
  5. 2
    1
      CompilerShared/src/main/java/org/openzen/zenscript/compiler/Target.java
  6. 20
    11
      Constructor/src/main/java/org/openzen/zenscript/constructor/ConstructorRegistry.java
  7. 2
    1
      Constructor/src/main/java/org/openzen/zenscript/constructor/Main.java
  8. 4
    2
      Constructor/src/main/java/org/openzen/zenscript/constructor/ModuleLoader.java
  9. 4
    3
      Constructor/src/main/java/org/openzen/zenscript/constructor/ParsedModule.java
  10. 4
    2
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/DirectoryModuleReference.java
  11. 3
    1
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/ModuleReference.java
  12. 2
    1
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/SourceModule.java
  13. 9
    7
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/SourceModuleReference.java
  14. 2
    1
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/directory/DirectorySourceModule.java
  15. 43
    0
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/logging/EmptyModuleLogger.java
  16. 6
    0
      Constructor/src/main/java/org/openzen/zenscript/constructor/module/logging/ModuleLogger.java
  17. 4
    2
      IDE/src/main/java/org/openzen/zenscript/ide/host/local/LocalModule.java
  18. 16
    28
      IDE/src/main/java/org/openzen/zenscript/ide/host/local/LocalTarget.java
  19. 80
    0
      IDE/src/main/java/org/openzen/zenscript/ide/host/local/logging/LocalModuleLogger.java
  20. 57
    0
      IDE/src/main/java/org/openzen/zenscript/ide/host/local/logging/LocalValidatorLogger.java
  21. 4
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeContext.java
  22. 8
    4
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeModule.java
  23. 9
    3
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeRunUnit.java
  24. 12
    7
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java
  25. 6
    6
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java
  26. 143
    138
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaWriter.java
  27. 7
    7
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaDefinitionVisitor.java
  28. 5
    5
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaExpansionMemberVisitor.java
  29. 10
    9
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java
  30. 0
    34
      JavaIntegration/src/main/java/org/openzen/zencode/java/EmptyLogger.java
  31. 8
    4
      JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeLoader.java
  32. 4
    3
      JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeModule.java
  33. 21
    36
      JavaIntegration/src/main/java/org/openzen/zencode/java/ScriptingEngine.java
  34. 7
    0
      JavaIntegration/src/main/java/org/openzen/zencode/java/logger/ScriptingEngineLogger.java
  35. 83
    0
      JavaIntegration/src/main/java/org/openzen/zencode/java/logger/ScriptingEngineStreamLogger.java
  36. 2
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaClass.java
  37. 4
    1
      JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaContext.java
  38. 6
    6
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java
  39. 3
    3
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionMemberVisitor.java
  40. 2
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java
  41. 3
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceCompiler.java
  42. 3
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceContext.java
  43. 6
    4
      Parser/src/main/java/org/openzen/zenscript/parser/FolderPackage.java
  44. 10
    8
      Parser/src/main/java/org/openzen/zenscript/parser/ParsedFile.java
  45. 5
    4
      Parser/src/main/java/org/openzen/zenscript/parser/ZippedPackage.java
  46. 0
    4
      Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedNewExpression.java
  47. 5
    0
      Parser/src/main/java/org/openzen/zenscript/parser/logger/ParserLogger.java
  48. 0
    58
      ScriptingExample/src/main/java/org/openzen/zenscript/scriptingexample/logging/StreamLogger.java
  49. 7
    0
      Shared/src/main/java/org/openzen/zencode/shared/logging/CompileExceptionLogger.java
  50. 1
    1
      Shared/src/main/java/org/openzen/zencode/shared/logging/IZSLogger.java
  51. 7
    0
      Shared/src/main/java/org/openzen/zencode/shared/logging/SourceFileLogger.java
  52. 6
    4
      Validator/src/main/java/org/openzen/zenscript/validator/Validator.java
  53. 21
    0
      Validator/src/main/java/org/openzen/zenscript/validator/logger/IZSValidationLogger.java
  54. 5
    0
      Validator/src/main/java/org/openzen/zenscript/validator/logger/ValidatorLogger.java

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java 查看文件

196
 		}
196
 		}
197
 		
197
 		
198
 		if (isDestructible() && destructor == null && !(this instanceof ExpansionDefinition)) {
198
 		if (isDestructible() && destructor == null && !(this instanceof ExpansionDefinition)) {
199
-			System.out.println("Added destructor to " + position);
199
+			//System.out.println("Added destructor to " + position);
200
 			destructor = new DestructorMember(position, this, Modifiers.PUBLIC);
200
 			destructor = new DestructorMember(position, this, Modifiers.PUBLIC);
201
 			members.add(destructor);
201
 			members.add(destructor);
202
 		}
202
 		}

+ 20
- 14
CodeModel/src/main/java/org/openzen/zenscript/codemodel/SemanticModule.java 查看文件

9
 import java.util.HashMap;
9
 import java.util.HashMap;
10
 import java.util.List;
10
 import java.util.List;
11
 import java.util.Map;
11
 import java.util.Map;
12
+
13
+import org.openzen.zencode.shared.logging.*;
12
 import org.openzen.zenscript.codemodel.annotations.AnnotationDefinition;
14
 import org.openzen.zenscript.codemodel.annotations.AnnotationDefinition;
13
 import org.openzen.zenscript.codemodel.annotations.AnnotationProcessor;
15
 import org.openzen.zenscript.codemodel.annotations.AnnotationProcessor;
14
 import org.openzen.zenscript.codemodel.context.ModuleContext;
16
 import org.openzen.zenscript.codemodel.context.ModuleContext;
43
 	public final List<ExpansionDefinition> expansions;
45
 	public final List<ExpansionDefinition> expansions;
44
 	public final AnnotationDefinition[] annotations;
46
 	public final AnnotationDefinition[] annotations;
45
 	public final StorageType[] storageTypes;
47
 	public final StorageType[] storageTypes;
48
+	public final IZSLogger logger;
46
 	
49
 	
47
 	public SemanticModule(
50
 	public SemanticModule(
48
-			Module module,
49
-			SemanticModule[] dependencies,
50
-			FunctionParameter[] parameters,
51
-			State state,
52
-			ZSPackage rootPackage,
53
-			ZSPackage modulePackage,
54
-			PackageDefinitions definitions,
55
-			List<ScriptBlock> scripts,
56
-			GlobalTypeRegistry registry,
57
-			List<ExpansionDefinition> expansions,
58
-			AnnotationDefinition[] annotations,
59
-			StorageType[] storageTypes)
51
+	        Module module,
52
+            SemanticModule[] dependencies,
53
+            FunctionParameter[] parameters,
54
+            State state,
55
+            ZSPackage rootPackage,
56
+            ZSPackage modulePackage,
57
+            PackageDefinitions definitions,
58
+            List<ScriptBlock> scripts,
59
+            GlobalTypeRegistry registry,
60
+            List<ExpansionDefinition> expansions,
61
+            AnnotationDefinition[] annotations,
62
+            StorageType[] storageTypes,
63
+            IZSLogger logger)
60
 	{
64
 	{
61
 		this.name = module.name;
65
 		this.name = module.name;
62
 		this.module = module;
66
 		this.module = module;
73
 		this.expansions = expansions;
77
 		this.expansions = expansions;
74
 		this.annotations = annotations;
78
 		this.annotations = annotations;
75
 		this.storageTypes = storageTypes;
79
 		this.storageTypes = storageTypes;
76
-	}
80
+        this.logger = logger;
81
+    }
77
 	
82
 	
78
 	public boolean isValid() {
83
 	public boolean isValid() {
79
 		return state != State.INVALID;
84
 		return state != State.INVALID;
108
 				registry,
113
 				registry,
109
 				expansions,
114
 				expansions,
110
 				annotations,
115
 				annotations,
111
-				storageTypes);
116
+				storageTypes,
117
+                logger);
112
 	}
118
 	}
113
 	
119
 	
114
 	public ModuleContext getContext() {
120
 	public ModuleContext getContext() {

+ 2
- 2
CodeModel/src/main/java/org/openzen/zenscript/codemodel/partial/PartialMemberGroupExpression.java 查看文件

100
 				// ignore this here
100
 				// ignore this here
101
 			}
101
 			}
102
 		}
102
 		}
103
-		if (results.isEmpty())
104
-			System.out.println("!");
103
+		//if (results.isEmpty())
104
+		//	System.out.println("!");
105
 		return results;
105
 		return results;
106
 	}
106
 	}
107
 
107
 

+ 7
- 6
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/DefinitionTypeID.java 查看文件

101
 		DefinitionTypeID current = this;
101
 		DefinitionTypeID current = this;
102
 		do {
102
 		do {
103
 			if (current.typeArguments != null) {
103
 			if (current.typeArguments != null) {
104
-				if (current.definition.typeParameters == null)
105
-					System.out.println("Type parameters but no generic parameters");
106
-				else
107
-					for (int i = 0; i < current.typeArguments.length; i++)
108
-						mapping.put(current.definition.typeParameters[i], current.typeArguments[i]);
109
-			}
104
+                if(current.definition.typeParameters != null) {
105
+                    for (int i = 0; i < current.typeArguments.length; i++)
106
+                        mapping.put(current.definition.typeParameters[i], current.typeArguments[i]);
107
+                }//else {
108
+                //    System.out.println("Type parameters but no generic parameters");
109
+                //}
110
+            }
110
 
111
 
111
 			current = current.outer;
112
 			current = current.outer;
112
 		} while (current != null && !current.definition.isStatic());
113
 		} while (current != null && !current.definition.isStatic());

+ 2
- 1
CompilerShared/src/main/java/org/openzen/zenscript/compiler/Target.java 查看文件

5
  */
5
  */
6
 package org.openzen.zenscript.compiler;
6
 package org.openzen.zenscript.compiler;
7
 
7
 
8
+import org.openzen.zencode.shared.logging.*;
8
 import org.openzen.zenscript.codemodel.SemanticModule;
9
 import org.openzen.zenscript.codemodel.SemanticModule;
9
 
10
 
10
 /**
11
 /**
12
  * @author Hoofdgebruiker
13
  * @author Hoofdgebruiker
13
  */
14
  */
14
 public interface Target {
15
 public interface Target {
15
-	public ZenCodeCompiler createCompiler(SemanticModule module);
16
+	public ZenCodeCompiler createCompiler(SemanticModule module, IZSLogger logger);
16
 	
17
 	
17
 	public String getModule();
18
 	public String getModule();
18
 	
19
 	

+ 20
- 11
Constructor/src/main/java/org/openzen/zenscript/constructor/ConstructorRegistry.java 查看文件

6
 package org.openzen.zenscript.constructor;
6
 package org.openzen.zenscript.constructor;
7
 
7
 
8
 import org.json.JSONObject;
8
 import org.json.JSONObject;
9
+import org.openzen.zencode.shared.logging.*;
9
 import org.openzen.zenscript.codemodel.SemanticModule;
10
 import org.openzen.zenscript.codemodel.SemanticModule;
10
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
11
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
12
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
75
 		}
76
 		}
76
 
77
 
77
 		@Override
78
 		@Override
78
-		public ZenCodeCompiler createCompiler(SemanticModule module) {
79
-			return new JavaSourceZenCompiler(output, module.registry);
79
+		public ZenCodeCompiler createCompiler(SemanticModule module, IZSLogger logger) {
80
+			return new JavaSourceZenCompiler(output, module.registry, logger);
80
 		}
81
 		}
81
 
82
 
82
 		@Override
83
 		@Override
107
 		
108
 		
108
 		public final GlobalTypeRegistry registry;
109
 		public final GlobalTypeRegistry registry;
109
 		private final SimpleJavaCompileSpace space;
110
 		private final SimpleJavaCompileSpace space;
111
+		private final IZSLogger logger;
110
 		
112
 		
111
-		public JavaSourceZenCompiler(File output, GlobalTypeRegistry registry) {
113
+		public JavaSourceZenCompiler(File output, GlobalTypeRegistry registry, IZSLogger logger) {
112
 			this.output = output;
114
 			this.output = output;
113
 			compiler = new JavaSourceCompiler(registry);
115
 			compiler = new JavaSourceCompiler(registry);
114
 			this.registry = registry;
116
 			this.registry = registry;
115
 			space = new SimpleJavaCompileSpace(registry);
117
 			space = new SimpleJavaCompileSpace(registry);
116
-		}
118
+            this.logger = logger;
119
+        }
117
 
120
 
118
 		@Override
121
 		@Override
119
 		public void addModule(SemanticModule module) {
122
 		public void addModule(SemanticModule module) {
120
-			JavaSourceModule result = compiler.compile(module, space, module.modulePackage.fullName);
123
+			JavaSourceModule result = compiler.compile(logger, module, space, module.modulePackage.fullName);
121
 			writeMappings(result);
124
 			writeMappings(result);
122
 			
125
 			
123
 			modules.add(result);
126
 			modules.add(result);
169
 		}
172
 		}
170
 
173
 
171
 		@Override
174
 		@Override
172
-		public ZenCodeCompiler createCompiler(SemanticModule module) {
173
-			return new JavaBytecodeJarCompiler();
175
+		public ZenCodeCompiler createCompiler(SemanticModule module, IZSLogger logger) {
176
+			return new JavaBytecodeJarCompiler(logger);
174
 		}
177
 		}
175
 
178
 
176
 		@Override
179
 		@Override
199
 		private final ZSPackage stdlib = new ZSPackage(root, "stdlib");
202
 		private final ZSPackage stdlib = new ZSPackage(root, "stdlib");
200
 		public final GlobalTypeRegistry registry = new GlobalTypeRegistry(stdlib);
203
 		public final GlobalTypeRegistry registry = new GlobalTypeRegistry(stdlib);
201
 		
204
 		
202
-		private final JavaCompiler compiler = new JavaCompiler();
205
+		private final JavaCompiler compiler;
203
 		private final List<JavaBytecodeModule> modules = new ArrayList<>();
206
 		private final List<JavaBytecodeModule> modules = new ArrayList<>();
204
 		private final SimpleJavaCompileSpace space = new SimpleJavaCompileSpace(registry);
207
 		private final SimpleJavaCompileSpace space = new SimpleJavaCompileSpace(registry);
205
-
206
-		@Override
208
+        private final IZSLogger logger;
209
+        
210
+        public JavaBytecodeJarCompiler(IZSLogger logger) {
211
+            this.logger = logger;
212
+            compiler = new JavaCompiler(logger);
213
+        }
214
+        
215
+        @Override
207
 		public void addModule(SemanticModule module) {
216
 		public void addModule(SemanticModule module) {
208
 			JavaBytecodeModule result = compiler.compile(module.modulePackage.fullName, module, space);
217
 			JavaBytecodeModule result = compiler.compile(module.modulePackage.fullName, module, space);
209
 			modules.add(result);
218
 			modules.add(result);
217
 
226
 
218
 		@Override
227
 		@Override
219
 		public void run() {
228
 		public void run() {
220
-			JavaBytecodeRunUnit unit = new JavaBytecodeRunUnit();
229
+			JavaBytecodeRunUnit unit = new JavaBytecodeRunUnit(logger);
221
 			for (JavaBytecodeModule module : modules)
230
 			for (JavaBytecodeModule module : modules)
222
 				unit.add(module);
231
 				unit.add(module);
223
 			//unit.add(compiler.helpers);
232
 			//unit.add(compiler.helpers);

+ 2
- 1
Constructor/src/main/java/org/openzen/zenscript/constructor/Main.java 查看文件

9
 import org.openzen.zenscript.constructor.module.ModuleReference;
9
 import org.openzen.zenscript.constructor.module.ModuleReference;
10
 import org.openzen.zenscript.constructor.module.SourceModuleReference;
10
 import org.openzen.zenscript.constructor.module.SourceModuleReference;
11
 import org.openzen.zenscript.constructor.module.directory.DirectorySourceModule;
11
 import org.openzen.zenscript.constructor.module.directory.DirectorySourceModule;
12
+import org.openzen.zenscript.constructor.module.logging.*;
12
 
13
 
13
 public class Main {
14
 public class Main {
14
     /**
15
     /**
22
 			return;
23
 			return;
23
 		}
24
 		}
24
 		
25
 		
25
-		Consumer<CompileException> exceptionLogger = exception -> System.err.println(exception.toString());
26
+        ModuleLogger exceptionLogger = new EmptyModuleLogger();
26
 		
27
 		
27
 		File currentDirectory = new File(arguments.directory);
28
 		File currentDirectory = new File(arguments.directory);
28
 		ZSPackage root = ZSPackage.createRoot();
29
 		ZSPackage root = ZSPackage.createRoot();

+ 4
- 2
Constructor/src/main/java/org/openzen/zenscript/constructor/ModuleLoader.java 查看文件

11
 import java.util.Stack;
11
 import java.util.Stack;
12
 import java.util.function.Consumer;
12
 import java.util.function.Consumer;
13
 import org.openzen.zencode.shared.CompileException;
13
 import org.openzen.zencode.shared.CompileException;
14
+import org.openzen.zencode.shared.logging.*;
14
 import org.openzen.zenscript.codemodel.SemanticModule;
15
 import org.openzen.zenscript.codemodel.SemanticModule;
15
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
16
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
16
 import org.openzen.zenscript.constructor.module.ModuleReference;
17
 import org.openzen.zenscript.constructor.module.ModuleReference;
18
+import org.openzen.zenscript.constructor.module.logging.*;
17
 
19
 
18
 /**
20
 /**
19
  *
21
  *
27
 	private final Stack<String> compilingModulesStack = new Stack<>();
29
 	private final Stack<String> compilingModulesStack = new Stack<>();
28
 	
30
 	
29
 	private final GlobalTypeRegistry registry;
31
 	private final GlobalTypeRegistry registry;
30
-	private final Consumer<CompileException> exceptionLogger;
32
+	private final ModuleLogger exceptionLogger;
31
 	
33
 	
32
-	public ModuleLoader(GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger) {
34
+	public ModuleLoader(GlobalTypeRegistry registry, ModuleLogger exceptionLogger) {
33
 		this.registry = registry;
35
 		this.registry = registry;
34
 		this.exceptionLogger = exceptionLogger;
36
 		this.exceptionLogger = exceptionLogger;
35
 	}
37
 	}

+ 4
- 3
Constructor/src/main/java/org/openzen/zenscript/constructor/ParsedModule.java 查看文件

16
 import org.json.JSONObject;
16
 import org.json.JSONObject;
17
 import org.json.JSONTokener;
17
 import org.json.JSONTokener;
18
 import org.openzen.zencode.shared.CompileException;
18
 import org.openzen.zencode.shared.CompileException;
19
+import org.openzen.zencode.shared.logging.*;
19
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
20
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
20
 import org.openzen.zenscript.lexer.ParseException;
21
 import org.openzen.zenscript.lexer.ParseException;
21
 import org.openzen.zenscript.parser.BracketExpressionParser;
22
 import org.openzen.zenscript.parser.BracketExpressionParser;
32
 	public final String packageName;
33
 	public final String packageName;
33
 	public final String javaPackageName;
34
 	public final String javaPackageName;
34
 	public final String host;
35
 	public final String host;
35
-	private final Consumer<CompileException> exceptionLogger;
36
+	//private final CompileExceptionLogger exceptionLogger;
36
 	
37
 	
37
-	public ParsedModule(String name, File directory, File moduleFile, Consumer<CompileException> exceptionLogger) throws IOException {
38
+	public ParsedModule(String name, File directory, File moduleFile, CompileExceptionLogger exceptionLogger) throws IOException {
38
 		this.name = name;
39
 		this.name = name;
39
 		this.sourceDirectory = new File(directory, "src");
40
 		this.sourceDirectory = new File(directory, "src");
40
-		this.exceptionLogger = exceptionLogger;
41
+		//this.exceptionLogger = exceptionLogger;
41
 		
42
 		
42
 		BufferedInputStream input = new BufferedInputStream(new FileInputStream(moduleFile));
43
 		BufferedInputStream input = new BufferedInputStream(new FileInputStream(moduleFile));
43
 		JSONObject json = new JSONObject(new JSONTokener(input));
44
 		JSONObject json = new JSONObject(new JSONTokener(input));

+ 4
- 2
Constructor/src/main/java/org/openzen/zenscript/constructor/module/DirectoryModuleReference.java 查看文件

8
 import org.openzen.zenscript.constructor.module.directory.SourceDirectoryPackage;
8
 import org.openzen.zenscript.constructor.module.directory.SourceDirectoryPackage;
9
 import java.io.File;
9
 import java.io.File;
10
 import java.io.IOException;
10
 import java.io.IOException;
11
+import java.lang.*;
12
+import java.lang.String;
11
 import java.util.ArrayList;
13
 import java.util.ArrayList;
12
 import java.util.List;
14
 import java.util.List;
13
-import java.util.function.Consumer;
14
 import org.json.JSONArray;
15
 import org.json.JSONArray;
15
 import org.json.JSONObject;
16
 import org.json.JSONObject;
16
 import org.openzen.zencode.shared.CompileException;
17
 import org.openzen.zencode.shared.CompileException;
28
 import org.openzen.zenscript.constructor.ModuleLoader;
29
 import org.openzen.zenscript.constructor.ModuleLoader;
29
 import org.openzen.zenscript.codemodel.type.TypeSymbol;
30
 import org.openzen.zenscript.codemodel.type.TypeSymbol;
30
 import org.openzen.zenscript.codemodel.type.storage.StorageType;
31
 import org.openzen.zenscript.codemodel.type.storage.StorageType;
32
+import org.openzen.zenscript.constructor.module.logging.*;
31
 import org.openzen.zenscript.lexer.ParseException;
33
 import org.openzen.zenscript.lexer.ParseException;
32
 import org.openzen.zenscript.parser.ParsedFile;
34
 import org.openzen.zenscript.parser.ParsedFile;
33
 
35
 
53
 	}
55
 	}
54
 
56
 
55
 	@Override
57
 	@Override
56
-	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger) {
58
+	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, ModuleLogger exceptionLogger) {
57
 		if (!directory.exists())
59
 		if (!directory.exists())
58
 			throw new ConstructorException("Error: module directory not found: " + directory);
60
 			throw new ConstructorException("Error: module directory not found: " + directory);
59
 		
61
 		

+ 3
- 1
Constructor/src/main/java/org/openzen/zenscript/constructor/module/ModuleReference.java 查看文件

7
 
7
 
8
 import java.util.function.Consumer;
8
 import java.util.function.Consumer;
9
 import org.openzen.zencode.shared.CompileException;
9
 import org.openzen.zencode.shared.CompileException;
10
+import org.openzen.zencode.shared.logging.*;
10
 import org.openzen.zenscript.codemodel.SemanticModule;
11
 import org.openzen.zenscript.codemodel.SemanticModule;
11
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
12
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
12
 import org.openzen.zenscript.constructor.ModuleLoader;
13
 import org.openzen.zenscript.constructor.ModuleLoader;
14
+import org.openzen.zenscript.constructor.module.logging.*;
13
 
15
 
14
 /**
16
 /**
15
  *
17
  *
18
 public interface ModuleReference {
20
 public interface ModuleReference {
19
 	public String getName();
21
 	public String getName();
20
 	
22
 	
21
-	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger);
23
+	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, ModuleLogger exceptionLogger);
22
 	
24
 	
23
 	public SourcePackage getRootPackage();
25
 	public SourcePackage getRootPackage();
24
 }
26
 }

+ 2
- 1
Constructor/src/main/java/org/openzen/zenscript/constructor/module/SourceModule.java 查看文件

8
 import java.util.Map;
8
 import java.util.Map;
9
 import java.util.function.Consumer;
9
 import java.util.function.Consumer;
10
 import org.openzen.zencode.shared.CompileException;
10
 import org.openzen.zencode.shared.CompileException;
11
+import org.openzen.zencode.shared.logging.*;
11
 import org.openzen.zenscript.codemodel.SemanticModule;
12
 import org.openzen.zenscript.codemodel.SemanticModule;
12
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
13
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
13
 import org.openzen.zenscript.codemodel.type.ISymbol;
14
 import org.openzen.zenscript.codemodel.type.ISymbol;
22
 	
23
 	
23
 	public SourcePackage getRootPackage();
24
 	public SourcePackage getRootPackage();
24
 	
25
 	
25
-	public SemanticModule[] loadDependencies(ModuleLoader loader, GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger);
26
+	public SemanticModule[] loadDependencies(ModuleLoader loader, GlobalTypeRegistry registry, CompileExceptionLogger exceptionLogger);
26
 	
27
 	
27
 	public Map<String, ISymbol> getGlobals(SemanticModule module);
28
 	public Map<String, ISymbol> getGlobals(SemanticModule module);
28
 }
29
 }

+ 9
- 7
Constructor/src/main/java/org/openzen/zenscript/constructor/module/SourceModuleReference.java 查看文件

11
 import org.openzen.zencode.shared.CompileException;
11
 import org.openzen.zencode.shared.CompileException;
12
 import org.openzen.zencode.shared.CompileExceptionCode;
12
 import org.openzen.zencode.shared.CompileExceptionCode;
13
 import org.openzen.zencode.shared.SourceFile;
13
 import org.openzen.zencode.shared.SourceFile;
14
+import org.openzen.zencode.shared.logging.*;
14
 import org.openzen.zenscript.codemodel.FunctionParameter;
15
 import org.openzen.zenscript.codemodel.FunctionParameter;
15
 import org.openzen.zenscript.codemodel.Module;
16
 import org.openzen.zenscript.codemodel.Module;
16
 import org.openzen.zenscript.codemodel.ModuleSpace;
17
 import org.openzen.zenscript.codemodel.ModuleSpace;
21
 import org.openzen.zenscript.constructor.ConstructorException;
22
 import org.openzen.zenscript.constructor.ConstructorException;
22
 import org.openzen.zenscript.constructor.ModuleLoader;
23
 import org.openzen.zenscript.constructor.ModuleLoader;
23
 import org.openzen.zenscript.codemodel.type.storage.StorageType;
24
 import org.openzen.zenscript.codemodel.type.storage.StorageType;
25
+import org.openzen.zenscript.constructor.module.logging.*;
24
 import org.openzen.zenscript.lexer.ParseException;
26
 import org.openzen.zenscript.lexer.ParseException;
25
 import org.openzen.zenscript.parser.BracketExpressionParser;
27
 import org.openzen.zenscript.parser.BracketExpressionParser;
26
 import org.openzen.zenscript.parser.ParsedFile;
28
 import org.openzen.zenscript.parser.ParsedFile;
48
 	}
50
 	}
49
 
51
 
50
 	@Override
52
 	@Override
51
-	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger) {
52
-		SemanticModule[] dependencies = module.loadDependencies(loader, registry, exceptionLogger);
53
+	public SemanticModule load(ModuleLoader loader, GlobalTypeRegistry registry, ModuleLogger logger) {
54
+		SemanticModule[] dependencies = module.loadDependencies(loader, registry, logger);
53
 
55
 
54
 		ModuleSpace space = new ModuleSpace(registry, new ArrayList<>(), StorageType.getStandard());
56
 		ModuleSpace space = new ModuleSpace(registry, new ArrayList<>(), StorageType.getStandard());
55
 		for (SemanticModule module : dependencies) {
57
 		for (SemanticModule module : dependencies) {
64
 		Module module = new Module(getName());
66
 		Module module = new Module(getName());
65
 		CompilingPackage compilingPackage = new CompilingPackage(pkg, module);
67
 		CompilingPackage compilingPackage = new CompilingPackage(pkg, module);
66
 
68
 
67
-		ParsedFile[] parsedFiles = parse(compilingPackage, exceptionLogger);
68
-		SemanticModule result = ParsedFile.compileSyntaxToSemantic(dependencies, compilingPackage, parsedFiles, space, FunctionParameter.NONE, exceptionLogger);
69
+		ParsedFile[] parsedFiles = parse(compilingPackage, logger);
70
+		SemanticModule result = ParsedFile.compileSyntaxToSemantic(dependencies, compilingPackage, parsedFiles, space, FunctionParameter.NONE, logger);
69
 		result.globals.putAll(this.module.getGlobals(result));
71
 		result.globals.putAll(this.module.getGlobals(result));
70
 		return result;
72
 		return result;
71
 	}
73
 	}
75
 		return module.getRootPackage();
77
 		return module.getRootPackage();
76
 	}
78
 	}
77
 	
79
 	
78
-	public ParsedFile[] parse(CompilingPackage compilingPackage, Consumer<CompileException> exceptionLogger) {
80
+	public ParsedFile[] parse(CompilingPackage compilingPackage, CompileExceptionLogger exceptionLogger) {
79
 		// TODO: load bracket parsers from host plugins
81
 		// TODO: load bracket parsers from host plugins
80
 		List<ParsedFile> files = new ArrayList<>();
82
 		List<ParsedFile> files = new ArrayList<>();
81
 		parse(files, compilingPackage, null, module.getRootPackage(), exceptionLogger);
83
 		parse(files, compilingPackage, null, module.getRootPackage(), exceptionLogger);
82
 		return files.toArray(new ParsedFile[files.size()]);
84
 		return files.toArray(new ParsedFile[files.size()]);
83
 	}
85
 	}
84
 	
86
 	
85
-	private static void parse(List<ParsedFile> files, CompilingPackage pkg, BracketExpressionParser bracketParser, SourcePackage directory, Consumer<CompileException> exceptionLogger) {
87
+	private static void parse(List<ParsedFile> files, CompilingPackage pkg, BracketExpressionParser bracketParser, SourcePackage directory, CompileExceptionLogger exceptionLogger) {
86
 		for (SourceFile file : directory.getFiles()) {
88
 		for (SourceFile file : directory.getFiles()) {
87
 			try {
89
 			try {
88
 				files.add(ParsedFile.parse(pkg, bracketParser, file));
90
 				files.add(ParsedFile.parse(pkg, bracketParser, file));
89
 			} catch (ParseException ex) {
91
 			} catch (ParseException ex) {
90
-				exceptionLogger.accept(new CompileException(ex.position, CompileExceptionCode.PARSE_ERROR, ex.message));
92
+				exceptionLogger.logCompileException(new CompileException(ex.position, CompileExceptionCode.PARSE_ERROR, ex.message));
91
 			}
93
 			}
92
 		}
94
 		}
93
 		for (SourcePackage subpkg : directory.getSubPackages()) {
95
 		for (SourcePackage subpkg : directory.getSubPackages()) {

+ 2
- 1
Constructor/src/main/java/org/openzen/zenscript/constructor/module/directory/DirectorySourceModule.java 查看文件

16
 import org.json.JSONArray;
16
 import org.json.JSONArray;
17
 import org.json.JSONObject;
17
 import org.json.JSONObject;
18
 import org.openzen.zencode.shared.CompileException;
18
 import org.openzen.zencode.shared.CompileException;
19
+import org.openzen.zencode.shared.logging.*;
19
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
20
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
20
 import org.openzen.zenscript.codemodel.ModuleSpace;
21
 import org.openzen.zenscript.codemodel.ModuleSpace;
21
 import org.openzen.zenscript.codemodel.SemanticModule;
22
 import org.openzen.zenscript.codemodel.SemanticModule;
75
 	}
76
 	}
76
 
77
 
77
 	@Override
78
 	@Override
78
-	public SemanticModule[] loadDependencies(ModuleLoader loader, GlobalTypeRegistry registry, Consumer<CompileException> exceptionLogger) {
79
+	public SemanticModule[] loadDependencies(ModuleLoader loader, GlobalTypeRegistry registry, CompileExceptionLogger exceptionLogger) {
79
 		List<String> dependencyNames = new ArrayList<>();
80
 		List<String> dependencyNames = new ArrayList<>();
80
 		if (!isStdLib)
81
 		if (!isStdLib)
81
 			dependencyNames.add("stdlib");
82
 			dependencyNames.add("stdlib");

+ 43
- 0
Constructor/src/main/java/org/openzen/zenscript/constructor/module/logging/EmptyModuleLogger.java 查看文件

1
+package org.openzen.zenscript.constructor.module.logging;
2
+
3
+import org.openzen.zencode.shared.*;
4
+
5
+public class EmptyModuleLogger implements ModuleLogger {
6
+    
7
+    @Override
8
+    public void logCompileException(CompileException exception) {
9
+        error(exception.getMessage());
10
+    }
11
+    
12
+    @Override
13
+    public void info(String message) {
14
+        System.out.println(message);
15
+    }
16
+    
17
+    @Override
18
+    public void debug(String message) {
19
+        System.out.println(message);
20
+    }
21
+    
22
+    @Override
23
+    public void warning(String message) {
24
+        System.out.println(message);
25
+    }
26
+    
27
+    @Override
28
+    public void error(String message) {
29
+        System.err.println(message);
30
+    }
31
+    
32
+    @Override
33
+    public void throwingErr(String message, Throwable throwable) {
34
+        System.err.println(message);
35
+        throwable.printStackTrace();
36
+    }
37
+    
38
+    @Override
39
+    public void throwingWarn(String message, Throwable throwable) {
40
+        System.out.println(message);
41
+        throwable.printStackTrace(System.out);
42
+    }
43
+}

+ 6
- 0
Constructor/src/main/java/org/openzen/zenscript/constructor/module/logging/ModuleLogger.java 查看文件

1
+package org.openzen.zenscript.constructor.module.logging;
2
+
3
+import org.openzen.zencode.shared.logging.*;
4
+import org.openzen.zenscript.parser.logger.*;
5
+
6
+public interface ModuleLogger extends CompileExceptionLogger, ParserLogger {}

+ 4
- 2
IDE/src/main/java/org/openzen/zenscript/ide/host/local/LocalModule.java 查看文件

13
 import org.openzen.zenscript.ide.host.IDEModule;
13
 import org.openzen.zenscript.ide.host.IDEModule;
14
 import org.openzen.zenscript.ide.host.IDEModuleType;
14
 import org.openzen.zenscript.ide.host.IDEModuleType;
15
 import org.openzen.zenscript.ide.host.IDEPackage;
15
 import org.openzen.zenscript.ide.host.IDEPackage;
16
-import org.openzen.zenscript.validator.Validator;
16
+import org.openzen.zenscript.ide.host.local.logging.*;
17
+import org.openzen.zenscript.validator.*;
18
+import org.openzen.zenscript.validator.logger.*;
17
 
19
 
18
 /**
20
 /**
19
  *
21
  *
46
 	@Override
48
 	@Override
47
 	public void prebuild(ModuleLoader loader, Consumer<IDECodeError> errors) {
49
 	public void prebuild(ModuleLoader loader, Consumer<IDECodeError> errors) {
48
 		SemanticModule module = loader.getModule(this.module.getName());
50
 		SemanticModule module = loader.getModule(this.module.getName());
49
-		Validator.validate(module, entry -> errors.accept(new IDECodeError(null, entry.position, entry.message)));
51
+		Validator.validate(module, new LocalValidatorLogger(errors));
50
 	}
52
 	}
51
 }
53
 }

+ 16
- 28
IDE/src/main/java/org/openzen/zenscript/ide/host/local/LocalTarget.java 查看文件

12
 import java.util.function.Consumer;
12
 import java.util.function.Consumer;
13
 import live.LiveObject;
13
 import live.LiveObject;
14
 import live.SimpleLiveObject;
14
 import live.SimpleLiveObject;
15
+import org.openzen.zencode.shared.logging.*;
15
 import org.openzen.zenscript.codemodel.SemanticModule;
16
 import org.openzen.zenscript.codemodel.SemanticModule;
16
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
17
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
17
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
18
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
23
 import org.openzen.zenscript.constructor.module.directory.DirectorySourceModule;
24
 import org.openzen.zenscript.constructor.module.directory.DirectorySourceModule;
24
 import org.openzen.zenscript.constructor.module.ModuleReference;
25
 import org.openzen.zenscript.constructor.module.ModuleReference;
25
 import org.openzen.zenscript.constructor.module.SourceModuleReference;
26
 import org.openzen.zenscript.constructor.module.SourceModuleReference;
27
+import org.openzen.zenscript.constructor.module.logging.*;
26
 import org.openzen.zenscript.ide.host.IDECodeError;
28
 import org.openzen.zenscript.ide.host.IDECodeError;
27
 import org.openzen.zenscript.ide.host.IDECompileState;
29
 import org.openzen.zenscript.ide.host.IDECompileState;
28
 import org.openzen.zenscript.ide.host.IDESourceFile;
30
 import org.openzen.zenscript.ide.host.IDESourceFile;
29
 import org.openzen.zenscript.ide.host.IDETarget;
31
 import org.openzen.zenscript.ide.host.IDETarget;
30
-import org.openzen.zenscript.ide.ui.view.output.ErrorOutputSpan;
31
-import org.openzen.zenscript.ide.ui.view.output.OutputLine;
32
+import org.openzen.zenscript.ide.host.local.logging.*;
33
+import org.openzen.zenscript.ide.ui.view.output.*;
34
+import org.openzen.zenscript.parser.logger.*;
32
 import org.openzen.zenscript.validator.ValidationLogEntry;
35
 import org.openzen.zenscript.validator.ValidationLogEntry;
33
 import org.openzen.zenscript.validator.Validator;
36
 import org.openzen.zenscript.validator.Validator;
37
+import org.openzen.zenscript.validator.logger.*;
34
 import stdlib.Strings;
38
 import stdlib.Strings;
35
 
39
 
36
 /**
40
 /**
92
 		ZSPackage root = ZSPackage.createRoot();
96
 		ZSPackage root = ZSPackage.createRoot();
93
 		ZSPackage stdlibPackage = new ZSPackage(root, "stdlib");
97
 		ZSPackage stdlibPackage = new ZSPackage(root, "stdlib");
94
 		GlobalTypeRegistry registry = new GlobalTypeRegistry(stdlibPackage);
98
 		GlobalTypeRegistry registry = new GlobalTypeRegistry(stdlibPackage);
95
-		
96
-		ModuleLoader moduleLoader = new ModuleLoader(registry, exception -> {
97
-			IDESourceFile sourceFile = new LocalSourceFile(exception.position.file);
98
-			state.addError(sourceFile, new IDECodeError(sourceFile, exception.position, exception.message));
99
-			
100
-			String[] lines = Strings.split(exception.getMessage(), '\n');
101
-			for (String line : lines) {
102
-				output.accept(new OutputLine(new ErrorOutputSpan(line)));
103
-			}
104
-		});
99
+        final LocalModuleLogger localModuleLogger = new LocalModuleLogger(state, output);
100
+        ModuleLoader moduleLoader = new ModuleLoader(registry, localModuleLogger);
101
+        
105
 		//moduleLoader.register("stdlib", new DirectoryModuleReference("stdlib", new File("../../StdLibs/stdlib"), true));
102
 		//moduleLoader.register("stdlib", new DirectoryModuleReference("stdlib", new File("../../StdLibs/stdlib"), true));
106
 		moduleLoader.register("stdlib", new SourceModuleReference(new DirectorySourceModule("stdlib", new File("../../StdLibs/stdlib"), true), true));
103
 		moduleLoader.register("stdlib", new SourceModuleReference(new DirectorySourceModule("stdlib", new File("../../StdLibs/stdlib"), true), true));
107
 		Set<String> compiledModules = new HashSet<>();
104
 		Set<String> compiledModules = new HashSet<>();
108
-		
109
-		Consumer<ValidationLogEntry> validationLogger = entry -> {
110
-			String[] message = Strings.split(entry.message, '\n');
111
-			output.accept(new OutputLine(new ErrorOutputSpan(entry.kind + " " + entry.position.toString() + ": " + message[0])));
112
-			for (int i = 1; i < message.length; i++)
113
-				output.accept(new OutputLine(new ErrorOutputSpan("    " + message[i])));
114
-			
115
-			IDESourceFile sourceFile = new LocalSourceFile(entry.position.file);
116
-			state.addError(sourceFile, new IDECodeError(sourceFile, entry.position, entry.message));
117
-		};
118
-		try {
105
+        
106
+        try {
119
 			for (Library library : project.libraries) {
107
 			for (Library library : project.libraries) {
120
 				for (ModuleReference module : library.modules)
108
 				for (ModuleReference module : library.modules)
121
 					moduleLoader.register(module.getName(), module);
109
 					moduleLoader.register(module.getName(), module);
125
 			}
113
 			}
126
 			
114
 			
127
 			SemanticModule module = moduleLoader.getModule(target.getModule());
115
 			SemanticModule module = moduleLoader.getModule(target.getModule());
128
-			module = Validator.validate(module.normalize(), validationLogger);
116
+			module = Validator.validate(module.normalize(), localModuleLogger);
129
 			
117
 			
130
 			if (compile) {
118
 			if (compile) {
131
-				ZenCodeCompiler compiler = target.createCompiler(module);
119
+				ZenCodeCompiler compiler = target.createCompiler(module, localModuleLogger);
132
 				if (!module.isValid())
120
 				if (!module.isValid())
133
 					return compiler;
121
 					return compiler;
134
 
122
 
135
 				SemanticModule stdlib = moduleLoader.getModule("stdlib");
123
 				SemanticModule stdlib = moduleLoader.getModule("stdlib");
136
-				stdlib = Validator.validate(stdlib.normalize(), validationLogger);
124
+				stdlib = Validator.validate(stdlib.normalize(), localModuleLogger);
137
 				if (!stdlib.isValid())
125
 				if (!stdlib.isValid())
138
 					return compiler;
126
 					return compiler;
139
 
127
 
140
 				compiler.addModule(stdlib);
128
 				compiler.addModule(stdlib);
141
 				compiledModules.add(stdlib.name);
129
 				compiledModules.add(stdlib.name);
142
 
130
 
143
-				boolean isValid = compileDependencies(moduleLoader, compiler, compiledModules, new Stack<>(), module, validationLogger);
131
+				boolean isValid = compileDependencies(moduleLoader, compiler, compiledModules, new Stack<>(), module, localModuleLogger);
144
 				if (!isValid)
132
 				if (!isValid)
145
 					return compiler;
133
 					return compiler;
146
 
134
 
169
 		}
157
 		}
170
 	}
158
 	}
171
 	
159
 	
172
-	private boolean compileDependencies(ModuleLoader loader, ZenCodeCompiler compiler, Set<String> compiledModules, Stack<String> compilingModules, SemanticModule module, Consumer<ValidationLogEntry> logger) {
160
+	private boolean compileDependencies(ModuleLoader loader, ZenCodeCompiler compiler, Set<String> compiledModules, Stack<String> compilingModules, SemanticModule module, ValidatorLogger logger) {
173
 		for (SemanticModule dependency : module.dependencies) {
161
 		for (SemanticModule dependency : module.dependencies) {
174
 			if (compiledModules.contains(dependency.name))
162
 			if (compiledModules.contains(dependency.name))
175
 				continue;
163
 				continue;

+ 80
- 0
IDE/src/main/java/org/openzen/zenscript/ide/host/local/logging/LocalModuleLogger.java 查看文件

1
+package org.openzen.zenscript.ide.host.local.logging;
2
+
3
+import org.openzen.zencode.shared.*;
4
+import org.openzen.zenscript.constructor.module.logging.*;
5
+import org.openzen.zenscript.ide.host.*;
6
+import org.openzen.zenscript.ide.host.local.*;
7
+import org.openzen.zenscript.ide.ui.view.output.*;
8
+import org.openzen.zenscript.validator.*;
9
+import org.openzen.zenscript.validator.logger.*;
10
+import stdlib.*;
11
+
12
+import java.util.function.*;
13
+
14
+public class LocalModuleLogger implements ModuleLogger, ValidatorLogger {
15
+    
16
+    private final LocalCompileState state;
17
+    private final Consumer<OutputLine> output;
18
+    
19
+    public LocalModuleLogger(LocalCompileState state, Consumer<OutputLine> output) {
20
+        this.state = state;
21
+        this.output = output;
22
+    }
23
+    
24
+    @Override
25
+    public void logCompileException(CompileException exception) {
26
+        IDESourceFile sourceFile = new LocalSourceFile(exception.position.file);
27
+        state.addError(sourceFile, new IDECodeError(sourceFile, exception.position, exception.message));
28
+        
29
+        String[] lines = Strings.split(exception.getMessage(), '\n');
30
+        for(String line : lines) {
31
+            output.accept(new OutputLine(new ErrorOutputSpan(line)));
32
+        }
33
+    }
34
+    
35
+    @Override
36
+    public void info(String message) {
37
+        output.accept(new OutputLine(new BasicOutputSpan(message)));
38
+    }
39
+    
40
+    @Override
41
+    public void debug(String message) {
42
+        output.accept(new OutputLine(new BasicOutputSpan(message)));
43
+    }
44
+    
45
+    @Override
46
+    public void warning(String message) {
47
+        output.accept(new OutputLine(new BasicOutputSpan(message)));
48
+    }
49
+    
50
+    @Override
51
+    public void error(String message) {
52
+        output.accept(new OutputLine(new ErrorOutputSpan(message)));
53
+    }
54
+    
55
+    @Override
56
+    public void throwingErr(String message, Throwable throwable) {
57
+        output.accept(new OutputLine(new ErrorOutputSpan(message)));
58
+    }
59
+    
60
+    @Override
61
+    public void throwingWarn(String message, Throwable throwable) {
62
+        output.accept(new OutputLine(new BasicOutputSpan(message)));
63
+    }
64
+    
65
+    @Override
66
+    public void logValidationError(ValidationLogEntry entry) {
67
+        String[] message = Strings.split(entry.message, '\n');
68
+        output.accept(new OutputLine(new ErrorOutputSpan(entry.kind + " " + entry.position.toString() + ": " + message[0])));
69
+        for(int i = 1; i < message.length; i++)
70
+            output.accept(new OutputLine(new ErrorOutputSpan("    " + message[i])));
71
+        
72
+        IDESourceFile sourceFile = new LocalSourceFile(entry.position.file);
73
+        state.addError(sourceFile, new IDECodeError(sourceFile, entry.position, entry.message));
74
+    }
75
+    
76
+    @Override
77
+    public void logValidationWarning(ValidationLogEntry warningEntry) {
78
+        logValidationError(warningEntry);
79
+    }
80
+}

+ 57
- 0
IDE/src/main/java/org/openzen/zenscript/ide/host/local/logging/LocalValidatorLogger.java 查看文件

1
+package org.openzen.zenscript.ide.host.local.logging;
2
+
3
+import org.openzen.zenscript.ide.host.*;
4
+import org.openzen.zenscript.validator.*;
5
+import org.openzen.zenscript.validator.logger.*;
6
+
7
+import java.util.function.*;
8
+
9
+public class LocalValidatorLogger implements ValidatorLogger {
10
+    
11
+    private final Consumer<IDECodeError> errors;
12
+    
13
+    public LocalValidatorLogger(Consumer<IDECodeError> errors) {
14
+        this.errors = errors;
15
+    }
16
+    
17
+    @Override
18
+    public void info(String message) {
19
+        throw new UnsupportedOperationException();
20
+    }
21
+    
22
+    @Override
23
+    public void debug(String message) {
24
+        throw new UnsupportedOperationException();
25
+    }
26
+    
27
+    @Override
28
+    public void warning(String message) {
29
+        throw new UnsupportedOperationException();
30
+    }
31
+    
32
+    @Override
33
+    public void error(String message) {
34
+        throw new UnsupportedOperationException();
35
+    }
36
+    
37
+    @Override
38
+    public void throwingErr(String message, Throwable throwable) {
39
+        throw new UnsupportedOperationException();
40
+    }
41
+    
42
+    @Override
43
+    public void throwingWarn(String message, Throwable throwable) {
44
+        throw new UnsupportedOperationException();
45
+    }
46
+    
47
+    @Override
48
+    public void logValidationError(ValidationLogEntry errorEntry) {
49
+        logValidationWarning(errorEntry);
50
+    }
51
+    
52
+    @Override
53
+    public void logValidationWarning(ValidationLogEntry entry) {
54
+        final IDECodeError ideCodeError = new IDECodeError(null, entry.position, entry.message);
55
+        errors.accept(ideCodeError);
56
+    }
57
+}

+ 4
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeContext.java 查看文件

9
 import org.objectweb.asm.Opcodes;
9
 import org.objectweb.asm.Opcodes;
10
 import org.objectweb.asm.Type;
10
 import org.objectweb.asm.Type;
11
 import org.openzen.zencode.shared.CodePosition;
11
 import org.openzen.zencode.shared.CodePosition;
12
+import org.openzen.zencode.shared.logging.*;
12
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
13
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
13
 import org.openzen.zenscript.codemodel.type.StoredType;
14
 import org.openzen.zenscript.codemodel.type.StoredType;
14
 import org.openzen.zenscript.codemodel.type.TypeID;
15
 import org.openzen.zenscript.codemodel.type.TypeID;
34
 	private final JavaTypeDescriptorVisitor descriptorVisitor;
35
 	private final JavaTypeDescriptorVisitor descriptorVisitor;
35
 	private int lambdaCounter = 0;
36
 	private int lambdaCounter = 0;
36
 	
37
 	
37
-	public JavaBytecodeContext(JavaBytecodeModule target, JavaCompileSpace space, ZSPackage modulePackage, String basePackage) {
38
-		super(space, modulePackage, basePackage);
38
+	public JavaBytecodeContext(JavaBytecodeModule target, JavaCompileSpace space, ZSPackage modulePackage, String basePackage, IZSLogger logger) {
39
+		super(space, modulePackage, basePackage, logger);
39
 		
40
 		
40
 		this.target = target;
41
 		this.target = target;
41
 		
42
 		
102
 		rangeWriter.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "to", getDescriptor(range.baseType), null, null).visitEnd();
103
 		rangeWriter.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "to", getDescriptor(range.baseType), null, null).visitEnd();
103
 		
104
 		
104
 		JavaMethod method = JavaMethod.getConstructor(range.cls, "(" + getDescriptor(range.baseType) + getDescriptor(range.baseType) + ")V", Opcodes.ACC_PUBLIC);
105
 		JavaMethod method = JavaMethod.getConstructor(range.cls, "(" + getDescriptor(range.baseType) + getDescriptor(range.baseType) + ")V", Opcodes.ACC_PUBLIC);
105
-		JavaWriter constructorWriter = new JavaWriter(CodePosition.GENERATED, rangeWriter, method, null, method.descriptor, null);
106
+		JavaWriter constructorWriter = new JavaWriter(logger, CodePosition.GENERATED, rangeWriter, method, null, method.descriptor, null);
106
 		constructorWriter.loadObject(0);
107
 		constructorWriter.loadObject(0);
107
 		constructorWriter.invokeSpecial("java/lang/Object", "<init>", "()V");
108
 		constructorWriter.invokeSpecial("java/lang/Object", "<init>", "()V");
108
 		constructorWriter.loadObject(0);
109
 		constructorWriter.loadObject(0);

+ 8
- 4
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeModule.java 查看文件

9
 import java.util.HashMap;
9
 import java.util.HashMap;
10
 import java.util.List;
10
 import java.util.List;
11
 import java.util.Map;
11
 import java.util.Map;
12
+
13
+import org.openzen.zencode.shared.logging.*;
12
 import org.openzen.zenscript.codemodel.FunctionParameter;
14
 import org.openzen.zenscript.codemodel.FunctionParameter;
13
 import org.openzen.zenscript.codemodel.Module;
15
 import org.openzen.zenscript.codemodel.Module;
14
 import org.openzen.zenscript.javashared.JavaCompiledModule;
16
 import org.openzen.zenscript.javashared.JavaCompiledModule;
21
 public class JavaBytecodeModule extends JavaCompiledModule {
23
 public class JavaBytecodeModule extends JavaCompiledModule {
22
 	private final Map<String, byte[]> classes = new HashMap<>();
24
 	private final Map<String, byte[]> classes = new HashMap<>();
23
 	private final List<JavaScriptMethod> scripts = new ArrayList<>();
25
 	private final List<JavaScriptMethod> scripts = new ArrayList<>();
24
-	
25
-	public JavaBytecodeModule(Module module, FunctionParameter[] parameters) {
26
+    private final IZSLogger logger;
27
+    
28
+    public JavaBytecodeModule(Module module, FunctionParameter[] parameters, IZSLogger logger) {
26
 		super(module, parameters);
29
 		super(module, parameters);
27
-	}
30
+        this.logger = logger;
31
+    }
28
 	
32
 	
29
 	public void addClass(String name, byte[] bytecode) {
33
 	public void addClass(String name, byte[] bytecode) {
30
 		if (bytecode == null)
34
 		if (bytecode == null)
31
 			return;
35
 			return;
32
 
36
 
33
 		if(name.startsWith("java")) {
37
 		if(name.startsWith("java")) {
34
-			System.err.println("Invalid name " + name);
38
+			logger.debug("Warning: Invalid name " + name);
35
 		} else {
39
 		} else {
36
 			classes.put(name, bytecode);
40
 			classes.put(name, bytecode);
37
 		}
41
 		}

+ 9
- 3
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaBytecodeRunUnit.java 查看文件

9
 import org.objectweb.asm.Opcodes;
9
 import org.objectweb.asm.Opcodes;
10
 import org.objectweb.asm.Type;
10
 import org.objectweb.asm.Type;
11
 import org.openzen.zencode.shared.CodePosition;
11
 import org.openzen.zencode.shared.CodePosition;
12
+import org.openzen.zencode.shared.logging.*;
12
 import org.openzen.zenscript.codemodel.FunctionHeader;
13
 import org.openzen.zenscript.codemodel.FunctionHeader;
13
 import org.openzen.zenscript.codemodel.FunctionParameter;
14
 import org.openzen.zenscript.codemodel.FunctionParameter;
14
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
15
 import org.openzen.zenscript.codemodel.type.BasicTypeID;
38
 	private final List<JavaParameterInfo> scriptParameterInfo = new ArrayList<>();
39
 	private final List<JavaParameterInfo> scriptParameterInfo = new ArrayList<>();
39
 
40
 
40
 	private boolean scriptsWritten = false;
41
 	private boolean scriptsWritten = false;
41
-
42
-	public void add(JavaBytecodeModule module) {
42
+	private final IZSLogger logger;
43
+    
44
+    public JavaBytecodeRunUnit(IZSLogger logger) {
45
+        this.logger = logger;
46
+    }
47
+    
48
+    public void add(JavaBytecodeModule module) {
43
 		scriptsWritten = false;
49
 		scriptsWritten = false;
44
 
50
 
45
 		for (Map.Entry<String, byte[]> classEntry : module.getClasses().entrySet())
51
 		for (Map.Entry<String, byte[]> classEntry : module.getClasses().entrySet())
125
 		headerBuilder.append(")V");
131
 		headerBuilder.append(")V");
126
 
132
 
127
 		JavaMethod runMethod = JavaMethod.getStatic(new JavaClass("script", "Scripts", JavaClass.Kind.CLASS), "run", headerBuilder.toString(), Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
133
 		JavaMethod runMethod = JavaMethod.getStatic(new JavaClass("script", "Scripts", JavaClass.Kind.CLASS), "run", headerBuilder.toString(), Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
128
-		final JavaWriter runWriter = new JavaWriter(CodePosition.GENERATED, scriptsClassWriter, runMethod, null, null, null);
134
+		final JavaWriter runWriter = new JavaWriter(logger, CodePosition.GENERATED, scriptsClassWriter, runMethod, null, null, null);
129
 		runWriter.start();
135
 		runWriter.start();
130
 		for (JavaScriptMethod method : scripts) {
136
 		for (JavaScriptMethod method : scripts) {
131
 			for (int i = 0; i < method.parameters.length; i++) {
137
 			for (int i = 0; i < method.parameters.length; i++) {

+ 12
- 7
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java 查看文件

11
 import org.objectweb.asm.Opcodes;
11
 import org.objectweb.asm.Opcodes;
12
 import org.openzen.zencode.shared.CodePosition;
12
 import org.openzen.zencode.shared.CodePosition;
13
 import org.openzen.zencode.shared.SourceFile;
13
 import org.openzen.zencode.shared.SourceFile;
14
+import org.openzen.zencode.shared.logging.*;
14
 import org.openzen.zenscript.codemodel.FunctionHeader;
15
 import org.openzen.zenscript.codemodel.FunctionHeader;
15
 import org.openzen.zenscript.codemodel.FunctionParameter;
16
 import org.openzen.zenscript.codemodel.FunctionParameter;
16
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
17
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
35
  * @author Hoofdgebruiker
36
  * @author Hoofdgebruiker
36
  */
37
  */
37
 public class JavaCompiler {
38
 public class JavaCompiler {
38
-	private int generatedScriptBlockCounter = 0;
39
+    
40
+    private int generatedScriptBlockCounter = 0;
39
 	private int expansionCounter = 0;
41
 	private int expansionCounter = 0;
40
-
41
-	public JavaCompiler() {}
42
+	private IZSLogger logger;
43
+    
44
+    public JavaCompiler(IZSLogger logger) {
45
+        this.logger = logger;
46
+    }
42
 	
47
 	
43
 	public JavaBytecodeModule compile(String packageName, SemanticModule module, JavaCompileSpace space) {
48
 	public JavaBytecodeModule compile(String packageName, SemanticModule module, JavaCompileSpace space) {
44
 		Map<String, JavaScriptFile> scriptBlocks = new LinkedHashMap<>();
49
 		Map<String, JavaScriptFile> scriptBlocks = new LinkedHashMap<>();
45
 		
50
 		
46
-		JavaBytecodeModule target = new JavaBytecodeModule(module.module, module.parameters);
47
-		JavaBytecodeContext context = new JavaBytecodeContext(target, space, module.modulePackage, packageName);
51
+		JavaBytecodeModule target = new JavaBytecodeModule(module.module, module.parameters, logger);
52
+		JavaBytecodeContext context = new JavaBytecodeContext(target, space, module.modulePackage, packageName, logger);
48
 		context.addModule(module.module, target);
53
 		context.addModule(module.module, target);
49
 		
54
 		
50
 		for (HighLevelDefinition definition : module.definitions.getAll()) {
55
 		for (HighLevelDefinition definition : module.definitions.getAll()) {
92
 			JavaMethod method = JavaMethod.getStatic(new JavaClass(context.getPackageName(script.pkg), className, JavaClass.Kind.CLASS), methodName, scriptDescriptor, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
97
 			JavaMethod method = JavaMethod.getStatic(new JavaClass(context.getPackageName(script.pkg), className, JavaClass.Kind.CLASS), methodName, scriptDescriptor, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC);
93
 			scriptFile.scriptMethods.add(new JavaScriptMethod(method, module.parameters, javaScriptParameters));
98
 			scriptFile.scriptMethods.add(new JavaScriptMethod(method, module.parameters, javaScriptParameters));
94
 
99
 
95
-			final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, context.getJavaModule(script.module), new JavaWriter(CodePosition.UNKNOWN, visitor, method, null, null, null));
100
+			final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, context.getJavaModule(script.module), new JavaWriter(logger, CodePosition.UNKNOWN, visitor, method, null, null, null));
96
 			statementVisitor.start();
101
 			statementVisitor.start();
97
 			for (Statement statement : script.statements) {
102
 			for (Statement statement : script.statements) {
98
 				statement.accept(statementVisitor);
103
 				statement.accept(statementVisitor);
108
 
113
 
109
 			if (target.getClasses().containsKey(entry.getKey())) {
114
 			if (target.getClasses().containsKey(entry.getKey())) {
110
 				//TODO Scripts and definitions seem to create the same class. Bad!
115
 				//TODO Scripts and definitions seem to create the same class. Bad!
111
-				System.err.println("Trying to register " + entry.getKey() + " a 2nd time");
116
+				logger.warning("Warning: Trying to register " + entry.getKey() + " a 2nd time");
112
 			}else{
117
 			}else{
113
 				target.addClass(entry.getKey(), entry.getValue().classWriter.toByteArray());
118
 				target.addClass(entry.getKey(), entry.getValue().classWriter.toByteArray());
114
 			}
119
 			}

+ 6
- 6
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java 查看文件

2059
 		//Bridge method!!!
2059
 		//Bridge method!!!
2060
 		if (!Objects.equals(methodInfo.descriptor, descriptor)) {
2060
 		if (!Objects.equals(methodInfo.descriptor, descriptor)) {
2061
 			final JavaMethod bridgeMethodInfo = new JavaMethod(methodInfo.cls, methodInfo.kind, methodInfo.name, methodInfo.compile, methodInfo.descriptor, methodInfo.modifiers | JavaModifiers.BRIDGE | JavaModifiers.SYNTHETIC, methodInfo.genericResult, methodInfo.typeParameterArguments);
2061
 			final JavaMethod bridgeMethodInfo = new JavaMethod(methodInfo.cls, methodInfo.kind, methodInfo.name, methodInfo.compile, methodInfo.descriptor, methodInfo.modifiers | JavaModifiers.BRIDGE | JavaModifiers.SYNTHETIC, methodInfo.genericResult, methodInfo.typeParameterArguments);
2062
-			final JavaWriter bridgeWriter = new JavaWriter(expression.position, lambdaCW, bridgeMethodInfo, null, methodInfo.descriptor, null, "java/lang/Override");
2062
+			final JavaWriter bridgeWriter = new JavaWriter(context.logger, expression.position, lambdaCW, bridgeMethodInfo, null, methodInfo.descriptor, null, "java/lang/Override");
2063
 			bridgeWriter.start();
2063
 			bridgeWriter.start();
2064
 			
2064
 			
2065
 			//This.name(parameters, casted)
2065
 			//This.name(parameters, casted)
2086
 			
2086
 			
2087
 			final JavaMethod actualMethod = new JavaMethod(methodInfo.cls, methodInfo.kind, methodInfo.name, methodInfo.compile, context.getMethodDescriptor(expression.header), methodInfo.modifiers, methodInfo.genericResult, methodInfo.typeParameterArguments);
2087
 			final JavaMethod actualMethod = new JavaMethod(methodInfo.cls, methodInfo.kind, methodInfo.name, methodInfo.compile, context.getMethodDescriptor(expression.header), methodInfo.modifiers, methodInfo.genericResult, methodInfo.typeParameterArguments);
2088
 			//No @Override
2088
 			//No @Override
2089
-			functionWriter = new JavaWriter(expression.position, lambdaCW, actualMethod, null, signature, null);
2089
+			functionWriter = new JavaWriter(context.logger, expression.position, lambdaCW, actualMethod, null, signature, null);
2090
 		} else {
2090
 		} else {
2091
-			functionWriter = new JavaWriter(expression.position, lambdaCW, methodInfo, null, signature, null, "java/lang/Override");
2091
+			functionWriter = new JavaWriter(context.logger, expression.position, lambdaCW, methodInfo, null, signature, null, "java/lang/Override");
2092
 		}
2092
 		}
2093
 
2093
 
2094
 		javaWriter.newObject(className);
2094
 		javaWriter.newObject(className);
2097
 		final String constructorDesc = calcFunctionSignature(expression.closure);
2097
 		final String constructorDesc = calcFunctionSignature(expression.closure);
2098
 
2098
 
2099
 
2099
 
2100
-		final JavaWriter constructorWriter = new JavaWriter(expression.position, lambdaCW, JavaMethod.getConstructor(javaWriter.method.cls, constructorDesc, Opcodes.ACC_PUBLIC), null, null, null);
2100
+		final JavaWriter constructorWriter = new JavaWriter(context.logger, expression.position, lambdaCW, JavaMethod.getConstructor(javaWriter.method.cls, constructorDesc, Opcodes.ACC_PUBLIC), null, null, null);
2101
 		constructorWriter.start();
2101
 		constructorWriter.start();
2102
 		constructorWriter.loadObject(0);
2102
 		constructorWriter.loadObject(0);
2103
 		constructorWriter.dup();
2103
 		constructorWriter.dup();
4173
 
4173
 
4174
 		//Constructor
4174
 		//Constructor
4175
 		{
4175
 		{
4176
-			final JavaWriter constructorWriter = new JavaWriter(expression.position, lambdaCW, JavaMethod.getConstructor(javaWriter.method.cls, constructorDesc, Opcodes.ACC_PUBLIC), null, null, null);
4176
+			final JavaWriter constructorWriter = new JavaWriter(context.logger, expression.position, lambdaCW, JavaMethod.getConstructor(javaWriter.method.cls, constructorDesc, Opcodes.ACC_PUBLIC), null, null, null);
4177
 			constructorWriter.start();
4177
 			constructorWriter.start();
4178
 			constructorWriter.loadObject(0);
4178
 			constructorWriter.loadObject(0);
4179
 			constructorWriter.dup();
4179
 			constructorWriter.dup();
4189
 		//The actual method
4189
 		//The actual method
4190
 		{
4190
 		{
4191
 			final JavaMethod actualMethod = new JavaMethod(tag.method.cls, tag.method.kind, tag.method.name, tag.method.compile, tag.method.descriptor, tag.method.modifiers & ~JavaModifiers.ABSTRACT, tag.method.genericResult, tag.method.typeParameterArguments);
4191
 			final JavaMethod actualMethod = new JavaMethod(tag.method.cls, tag.method.kind, tag.method.name, tag.method.compile, tag.method.descriptor, tag.method.modifiers & ~JavaModifiers.ABSTRACT, tag.method.genericResult, tag.method.typeParameterArguments);
4192
-			final JavaWriter functionWriter = new JavaWriter(expression.position, lambdaCW, actualMethod, null, methodDescriptor, null, "java/lang/Override");
4192
+			final JavaWriter functionWriter = new JavaWriter(context.logger, expression.position, lambdaCW, actualMethod, null, methodDescriptor, null, "java/lang/Override");
4193
 			functionWriter.start();
4193
 			functionWriter.start();
4194
 
4194
 
4195
 			//this.wrapped
4195
 			//this.wrapped

+ 143
- 138
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaWriter.java
文件差异内容过多而无法显示
查看文件


+ 7
- 7
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaDefinitionVisitor.java 查看文件

133
 
133
 
134
 	@Override
134
 	@Override
135
 	public byte[] visitEnum(EnumDefinition definition) {
135
 	public byte[] visitEnum(EnumDefinition definition) {
136
-		System.out.println("Compiling enum " + definition.name + " in " + definition.position.getFilename());
136
+		context.logger.debug("Compiling enum " + definition.name + " in " + definition.position.getFilename());
137
 
137
 
138
 		String superTypeInternalName = definition.getSuperType() == null ? "java/lang/Object" : context.getInternalName(definition.getSuperType());
138
 		String superTypeInternalName = definition.getSuperType() == null ? "java/lang/Object" : context.getInternalName(definition.getSuperType());
139
 
139
 
151
         }
151
         }
152
 
152
 
153
 		JavaMethod valuesMethod = JavaMethod.getStatic(toClass, "values", "()[L" + toClass.internalName + ";", Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
153
 		JavaMethod valuesMethod = JavaMethod.getStatic(toClass, "values", "()[L" + toClass.internalName + ";", Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
154
-		JavaWriter valuesWriter = new JavaWriter(definition.position, writer, true, valuesMethod, definition, null, null);
154
+		JavaWriter valuesWriter = new JavaWriter(context.logger, definition.position, writer, true, valuesMethod, definition, null, null);
155
 		valuesWriter.start();
155
 		valuesWriter.start();
156
 		valuesWriter.getStaticField(toClass.internalName, "$VALUES", "[L" + toClass.internalName + ";");
156
 		valuesWriter.getStaticField(toClass.internalName, "$VALUES", "[L" + toClass.internalName + ";");
157
 		valuesWriter.invokeVirtual(ARRAY_CLONE);
157
 		valuesWriter.invokeVirtual(ARRAY_CLONE);
160
 		valuesWriter.end();
160
 		valuesWriter.end();
161
 
161
 
162
 		JavaMethod valueOfMethod = JavaMethod.getStatic(toClass, "valueOf", "(Ljava/lang/String;)L" + toClass.internalName + ";", Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
162
 		JavaMethod valueOfMethod = JavaMethod.getStatic(toClass, "valueOf", "(Ljava/lang/String;)L" + toClass.internalName + ";", Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC);
163
-		JavaWriter valueOfWriter = new JavaWriter(definition.position, writer, true, valueOfMethod, definition, null, null);
163
+		JavaWriter valueOfWriter = new JavaWriter(context.logger, definition.position, writer, true, valueOfMethod, definition, null, null);
164
 		valueOfWriter.start();
164
 		valueOfWriter.start();
165
 		valueOfWriter.invokeStatic(CLASS_FORNAME);
165
 		valueOfWriter.invokeStatic(CLASS_FORNAME);
166
 		valueOfWriter.loadObject(0);
166
 		valueOfWriter.loadObject(0);
186
         final String signature = context.getMethodSignature(definition.header);
186
         final String signature = context.getMethodSignature(definition.header);
187
 		final JavaMethod method = context.getJavaMethod(definition.caller);
187
 		final JavaMethod method = context.getJavaMethod(definition.caller);
188
 
188
 
189
-		final JavaWriter writer = new JavaWriter(definition.position, outerWriter, true, method, definition, signature, null);
189
+		final JavaWriter writer = new JavaWriter(context.logger, definition.position, outerWriter, true, method, definition, signature, null);
190
         final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, context.getJavaModule(definition.module), writer);
190
         final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, context.getJavaModule(definition.module), writer);
191
         statementVisitor.start();
191
         statementVisitor.start();
192
 		boolean returns = definition.caller.body.accept(statementVisitor);
192
 		boolean returns = definition.caller.body.accept(statementVisitor);
301
 			optionInitSignatureBuilder.append(")V");
301
 			optionInitSignatureBuilder.append(")V");
302
 
302
 
303
 			JavaMethod constructorMethod = JavaMethod.getConstructor(optionTag.variantOptionClass, optionInitDescBuilder.toString(), JavaModifiers.PUBLIC);
303
 			JavaMethod constructorMethod = JavaMethod.getConstructor(optionTag.variantOptionClass, optionInitDescBuilder.toString(), JavaModifiers.PUBLIC);
304
-			final JavaWriter initWriter = new JavaWriter(option.position, optionWriter, constructorMethod, variant, optionInitSignatureBuilder.toString(), null);
304
+			final JavaWriter initWriter = new JavaWriter(context.logger, option.position, optionWriter, constructorMethod, variant, optionInitSignatureBuilder.toString(), null);
305
 			initWriter.start();
305
 			initWriter.start();
306
 			initWriter.loadObject(0);
306
 			initWriter.loadObject(0);
307
 			initWriter.dup();
307
 			initWriter.dup();
319
 
319
 
320
 			//Denominator for switch-cases
320
 			//Denominator for switch-cases
321
 			JavaMethod denominator = JavaMethod.getVirtual(optionTag.variantOptionClass, "getDenominator", "()I", JavaModifiers.PUBLIC);
321
 			JavaMethod denominator = JavaMethod.getVirtual(optionTag.variantOptionClass, "getDenominator", "()I", JavaModifiers.PUBLIC);
322
-			final JavaWriter getDenominator = new JavaWriter(option.position, optionWriter, denominator, null, null, null, "java/lang/Override");
322
+			final JavaWriter getDenominator = new JavaWriter(context.logger, option.position, optionWriter, denominator, null, null, null, "java/lang/Override");
323
 			getDenominator.start();
323
 			getDenominator.start();
324
 			getDenominator.constant(option.ordinal);
324
 			getDenominator.constant(option.ordinal);
325
 			getDenominator.returnInt();
325
 			getDenominator.returnInt();
336
 			member.accept(visitor);
336
 			member.accept(visitor);
337
 		}
337
 		}
338
 
338
 
339
-		final JavaWriter superInitWriter = new JavaWriter(variant.position, writer, JavaMethod.getConstructor(toClass, "()V", Opcodes.ACC_PUBLIC), variant, "()V", null);
339
+		final JavaWriter superInitWriter = new JavaWriter(context.logger, variant.position, writer, JavaMethod.getConstructor(toClass, "()V", Opcodes.ACC_PUBLIC), variant, "()V", null);
340
 		superInitWriter.start();
340
 		superInitWriter.start();
341
 		superInitWriter.loadObject(0);
341
 		superInitWriter.loadObject(0);
342
 		superInitWriter.invokeSpecial("java/lang/Object", "<init>", "()V");
342
 		superInitWriter.invokeSpecial("java/lang/Object", "<init>", "()V");

+ 5
- 5
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaExpansionMemberVisitor.java 查看文件

37
 		this.context = context;
37
 		this.context = context;
38
 		javaModule = context.getJavaModule(definition.module);
38
 		javaModule = context.getJavaModule(definition.module);
39
 
39
 
40
-		final JavaWriter javaWriter = new JavaWriter(definition.position, writer, new JavaMethod(context.getJavaClass(definition), JavaMethod.Kind.STATICINIT, "<clinit>", true, "()V", 0, false), definition, null, null);
40
+		final JavaWriter javaWriter = new JavaWriter(context.logger, definition.position, writer, new JavaMethod(context.getJavaClass(definition), JavaMethod.Kind.STATICINIT, "<clinit>", true, "()V", 0, false), definition, null, null);
41
 		this.clinitStatementVisitor = new JavaStatementVisitor(context, javaModule, javaWriter);
41
 		this.clinitStatementVisitor = new JavaStatementVisitor(context, javaModule, javaWriter);
42
 		this.clinitStatementVisitor.start();
42
 		this.clinitStatementVisitor.start();
43
 		CompilerUtils.writeDefaultFieldInitializers(context, javaWriter, definition, true);
43
 		CompilerUtils.writeDefaultFieldInitializers(context, javaWriter, definition, true);
131
 		}
131
 		}
132
 
132
 
133
 
133
 
134
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, true, method, definition, true, methodSignature, methodDescriptor, null);
134
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, true, method, definition, true, methodSignature, methodDescriptor, null);
135
 		methodWriter.label(methodStart);
135
 		methodWriter.label(methodStart);
136
 
136
 
137
 		if (!isStatic) {
137
 		if (!isStatic) {
212
 		final Label methodEnd = new Label();
212
 		final Label methodEnd = new Label();
213
 
213
 
214
 		final JavaMethod method = context.getJavaMethod(member);
214
 		final JavaMethod method = context.getJavaMethod(member);
215
-		final JavaWriter methodWriter = new JavaWriter(member.position, this.writer, true, method, definition, true, signature, descriptor, new String[0]);
215
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, this.writer, true, method, definition, true, signature, descriptor, new String[0]);
216
 
216
 
217
 		methodWriter.label(methodStart);
217
 		methodWriter.label(methodStart);
218
 
218
 
257
 		final Label methodEnd = new Label();
257
 		final Label methodEnd = new Label();
258
 
258
 
259
 		final JavaMethod javaMethod = context.getJavaMethod(member);
259
 		final JavaMethod javaMethod = context.getJavaMethod(member);
260
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, true, javaMethod, member.definition, true, signature, description, new String[0]);
260
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, true, javaMethod, member.definition, true, signature, description, new String[0]);
261
 
261
 
262
 
262
 
263
 		methodWriter.label(methodStart);
263
 		methodWriter.label(methodStart);
318
 		final Label methodEnd = new Label();
318
 		final Label methodEnd = new Label();
319
 
319
 
320
 		final JavaMethod javaMethod = context.getJavaMethod(member);
320
 		final JavaMethod javaMethod = context.getJavaMethod(member);
321
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, true, javaMethod, member.definition, true, methodSignature, methodDescriptor, new String[0]);
321
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, true, javaMethod, member.definition, true, methodSignature, methodDescriptor, new String[0]);
322
 
322
 
323
 		methodWriter.label(methodStart);
323
 		methodWriter.label(methodStart);
324
 		methodWriter.nameVariable(0, "expandedObj", methodStart, methodEnd, context.getType(this.expandedClass));
324
 		methodWriter.nameVariable(0, "expandedObj", methodStart, methodEnd, context.getType(this.expandedClass));

+ 10
- 9
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java 查看文件

4
 import org.objectweb.asm.Label;
4
 import org.objectweb.asm.Label;
5
 import org.objectweb.asm.Opcodes;
5
 import org.objectweb.asm.Opcodes;
6
 import org.objectweb.asm.Type;
6
 import org.objectweb.asm.Type;
7
+import org.openzen.zencode.shared.logging.*;
7
 import org.openzen.zenscript.codemodel.FunctionParameter;
8
 import org.openzen.zenscript.codemodel.FunctionParameter;
8
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9
 import org.openzen.zenscript.codemodel.Modifiers;
10
 import org.openzen.zenscript.codemodel.Modifiers;
38
 		this.context = context;
39
 		this.context = context;
39
 		javaModule = context.getJavaModule(definition.module);
40
 		javaModule = context.getJavaModule(definition.module);
40
 
41
 
41
-        final JavaWriter javaWriter = new JavaWriter(definition.position, writer, new JavaMethod(toClass, JavaMethod.Kind.STATICINIT, "<clinit>", true, "()V", 0, false), definition, null, null);
42
+        final JavaWriter javaWriter = new JavaWriter(context.logger, definition.position, writer, new JavaMethod(toClass, JavaMethod.Kind.STATICINIT, "<clinit>", true, "()V", 0, false), definition, null, null);
42
         this.clinitStatementVisitor = new JavaStatementVisitor(context, javaModule, javaWriter);
43
         this.clinitStatementVisitor = new JavaStatementVisitor(context, javaModule, javaWriter);
43
         this.clinitStatementVisitor.start();
44
         this.clinitStatementVisitor.start();
44
         CompilerUtils.writeDefaultFieldInitializers(context, javaWriter, definition, true);
45
         CompilerUtils.writeDefaultFieldInitializers(context, javaWriter, definition, true);
65
 
66
 
66
         final Label constructorStart = new Label();
67
         final Label constructorStart = new Label();
67
         final Label constructorEnd = new Label();
68
         final Label constructorEnd = new Label();
68
-        final JavaWriter constructorWriter = new JavaWriter(member.position, writer, method, definition, context.getMethodSignature(member.header), null);
69
+        final JavaWriter constructorWriter = new JavaWriter(context.logger, member.position, writer, method, definition, context.getMethodSignature(member.header), null);
69
         constructorWriter.label(constructorStart);
70
         constructorWriter.label(constructorStart);
70
         CompilerUtils.tagConstructorParameters(context, javaModule, member.definition, member.header, isEnum);
71
         CompilerUtils.tagConstructorParameters(context, javaModule, member.definition, member.header, isEnum);
71
         if(isEnum) {
72
         if(isEnum) {
98
 
99
 
99
 		if (!member.isConstructorForwarded()) {
100
 		if (!member.isConstructorForwarded()) {
100
 			if (isEnum) {
101
 			if (isEnum) {
101
-				System.out.println("Writing enum constructor");
102
+				context.logger.debug("Writing enum constructor");
102
 				constructorWriter.getVisitor().newLocal(Type.getType(String.class));
103
 				constructorWriter.getVisitor().newLocal(Type.getType(String.class));
103
 				constructorWriter.getVisitor().newLocal(Type.getType(int.class));
104
 				constructorWriter.getVisitor().newLocal(Type.getType(int.class));
104
 				constructorWriter.loadObject(0);
105
 				constructorWriter.loadObject(0);
106
 				constructorWriter.loadInt(2);
107
 				constructorWriter.loadInt(2);
107
 				constructorWriter.invokeSpecial(Type.getInternalName(Enum.class), "<init>", "(Ljava/lang/String;I)V");
108
 				constructorWriter.invokeSpecial(Type.getInternalName(Enum.class), "<init>", "(Ljava/lang/String;I)V");
108
 			} else if (definition.getSuperType() == null) {
109
 			} else if (definition.getSuperType() == null) {
109
-				System.out.println("Writing regular constructor");
110
+				context.logger.debug("Writing regular constructor");
110
 				constructorWriter.loadObject(0);
111
 				constructorWriter.loadObject(0);
111
 				constructorWriter.invokeSpecial(Type.getInternalName(Object.class), "<init>", "()V");
112
 				constructorWriter.invokeSpecial(Type.getInternalName(Object.class), "<init>", "()V");
112
 			}
113
 			}
144
 
145
 
145
 		final Label constructorStart = new Label();
146
 		final Label constructorStart = new Label();
146
 		final Label constructorEnd = new Label();
147
 		final Label constructorEnd = new Label();
147
-		final JavaWriter destructorWriter = new JavaWriter(member.position, writer, method, definition, null, null);
148
+		final JavaWriter destructorWriter = new JavaWriter(context.logger, member.position, writer, method, definition, null, null);
148
 		destructorWriter.label(constructorStart);
149
 		destructorWriter.label(constructorStart);
149
 		
150
 		
150
         final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, javaModule, destructorWriter);
151
         final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, javaModule, destructorWriter);
163
         final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.getEffectiveModifiers());
164
         final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.getEffectiveModifiers());
164
         final JavaMethod method = context.getJavaMethod(member);
165
         final JavaMethod method = context.getJavaMethod(member);
165
 		
166
 		
166
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, method, definition, context.getMethodSignature(member.header), null);
167
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, method, definition, context.getMethodSignature(member.header), null);
167
 
168
 
168
 		if (!isAbstract) {
169
 		if (!isAbstract) {
169
 			if (method.isAbstract() || method.cls.kind == JavaClass.Kind.INTERFACE)
170
 			if (method.isAbstract() || method.cls.kind == JavaClass.Kind.INTERFACE)
195
 		final Label methodEnd = new Label();
196
 		final Label methodEnd = new Label();
196
 
197
 
197
 		final JavaMethod method = context.getJavaMethod(member);
198
 		final JavaMethod method = context.getJavaMethod(member);
198
-		final JavaWriter methodWriter = new JavaWriter(member.position, this.writer, true, method, definition, false, signature, descriptor, new String[0]);
199
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, this.writer, true, method, definition, false, signature, descriptor, new String[0]);
199
 
200
 
200
 		methodWriter.label(methodStart);
201
 		methodWriter.label(methodStart);
201
 		final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, javaModule, methodWriter);
202
 		final JavaStatementVisitor statementVisitor = new JavaStatementVisitor(context, javaModule, methodWriter);
216
 		final Label methodEnd = new Label();
217
 		final Label methodEnd = new Label();
217
 
218
 
218
 		final JavaMethod javaMethod = context.getJavaMethod(member);
219
 		final JavaMethod javaMethod = context.getJavaMethod(member);
219
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, true, javaMethod, member.definition, false, signature, description, new String[0]);
220
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, true, javaMethod, member.definition, false, signature, description, new String[0]);
220
 		methodWriter.label(methodStart);
221
 		methodWriter.label(methodStart);
221
 
222
 
222
 		//in script you use $ but the parameter is named "value", which to choose?
223
 		//in script you use $ but the parameter is named "value", which to choose?
267
 		final Label methodEnd = new Label();
268
 		final Label methodEnd = new Label();
268
 
269
 
269
 
270
 
270
-		final JavaWriter methodWriter = new JavaWriter(member.position, writer, true, javaMethod, member.definition, false, methodSignature, methodDescriptor, new String[0]);
271
+		final JavaWriter methodWriter = new JavaWriter(context.logger, member.position, writer, true, javaMethod, member.definition, false, methodSignature, methodDescriptor, new String[0]);
271
 
272
 
272
 		methodWriter.label(methodStart);
273
 		methodWriter.label(methodStart);
273
 
274
 

+ 0
- 34
JavaIntegration/src/main/java/org/openzen/zencode/java/EmptyLogger.java 查看文件

1
-package org.openzen.zencode.java;
2
-
3
-public class EmptyLogger implements IZSLogger {
4
-    
5
-    @Override
6
-    public void info(String message) {
7
-    
8
-    }
9
-    
10
-    @Override
11
-    public void debug(String message) {
12
-    
13
-    }
14
-    
15
-    @Override
16
-    public void warning(String message) {
17
-    
18
-    }
19
-    
20
-    @Override
21
-    public void error(String message) {
22
-    
23
-    }
24
-    
25
-    @Override
26
-    public void throwingErr(String message, Throwable throwable) {
27
-    
28
-    }
29
-    
30
-    @Override
31
-    public void throwingWarn(String message, Throwable throwable) {
32
-    
33
-    }
34
-}

+ 8
- 4
JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeLoader.java 查看文件

8
 import java.util.*;
8
 import java.util.*;
9
 import java.util.function.Consumer;
9
 import java.util.function.Consumer;
10
 import org.openzen.zencode.shared.CompileException;
10
 import org.openzen.zencode.shared.CompileException;
11
+import org.openzen.zencode.shared.logging.*;
11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
 
13
 
13
 /**
14
 /**
18
 	private final Class<?>[] classes;
19
 	private final Class<?>[] classes;
19
 	private final Class<?>[] globals;
20
 	private final Class<?>[] globals;
20
 	private final Map<String, LoadingModule> modulesByName = new HashMap<>();
21
 	private final Map<String, LoadingModule> modulesByName = new HashMap<>();
21
-	private boolean loaded = false;
22
+    private final IZSLogger logger;
23
+    private boolean loaded = false;
22
 	
24
 	
23
-	public JavaNativeLoader(Class<?>[] classes, Class<?>[] globals) {
25
+	public JavaNativeLoader(Class<?>[] classes, Class<?>[] globals, IZSLogger logger) {
24
 		this.classes = classes;
26
 		this.classes = classes;
25
 		this.globals = globals;
27
 		this.globals = globals;
28
+		this.logger = logger;
26
 	}
29
 	}
27
 	
30
 	
28
 	public LoadingModule addModule(
31
 	public LoadingModule addModule(
65
 		for (Class<?> cls : classes) {
68
 		for (Class<?> cls : classes) {
66
 			LoadingModule module = findModuleByPackage(modulesByPackage, getPackageName(cls));
69
 			LoadingModule module = findModuleByPackage(modulesByPackage, getPackageName(cls));
67
 			if (module == null) {
70
 			if (module == null) {
68
-				System.out.println("Warning: module not found for class " + cls.getName());
71
+				logger.warning("Module not found for class " + cls.getName());
69
 			} else {
72
 			} else {
70
 				module.classes.add(cls);
73
 				module.classes.add(cls);
71
 			}
74
 			}
73
 		for (Class<?> cls : globals) {
76
 		for (Class<?> cls : globals) {
74
 			LoadingModule module = findModuleByPackage(modulesByPackage, getPackageName(cls));
77
 			LoadingModule module = findModuleByPackage(modulesByPackage, getPackageName(cls));
75
 			if (module == null) {
78
 			if (module == null) {
76
-				System.out.println("Warning: module not found for class " + cls.getName());
79
+				logger.warning("Module not found for class " + cls.getName());
77
 			} else {
80
 			} else {
78
 				module.globals.add(cls);
81
 				module.globals.add(cls);
79
 			}
82
 			}
110
 		}
113
 		}
111
 		
114
 		
112
 		module.resolved = new JavaNativeModule(
115
 		module.resolved = new JavaNativeModule(
116
+                logger,
113
 				module.pkg,
117
 				module.pkg,
114
 				module.name,
118
 				module.name,
115
 				module.basePackage,
119
 				module.basePackage,

+ 4
- 3
JavaIntegration/src/main/java/org/openzen/zencode/java/JavaNativeModule.java 查看文件

472
 			final Class<?> classFromType = getClassFromType(expandedType);
472
 			final Class<?> classFromType = getClassFromType(expandedType);
473
 			if(classFromType == null) {
473
 			if(classFromType == null) {
474
 				//TODO REMOVE
474
 				//TODO REMOVE
475
-				System.err.println("Could not get class for type " + expandedType + " attempting to do stuff anyways");
476
-			} else 	if(!method.getParameterTypes()[0].isAssignableFrom(classFromType))
477
-				throw new IllegalArgumentException("Cannot add extension method " + method + " as its first parameter does not match the extended type.");
475
+				logger.debug("Could not get class for type " + expandedType + " attempting to do stuff anyways");
476
+			} else if(!method.getParameterTypes()[0].isAssignableFrom(classFromType)) {
477
+                throw new IllegalArgumentException("Cannot add extension method " + method + " as its first parameter does not match the extended type.");
478
+            }
478
 
479
 
479
 
480
 
480
 			final ZenCodeType.Method methodAnnotation = method.getAnnotation(ZenCodeType.Method.class);
481
 			final ZenCodeType.Method methodAnnotation = method.getAnnotation(ZenCodeType.Method.class);

+ 21
- 36
JavaIntegration/src/main/java/org/openzen/zencode/java/ScriptingEngine.java 查看文件

5
  */
5
  */
6
 package org.openzen.zencode.java;
6
 package org.openzen.zencode.java;
7
 
7
 
8
+import org.openzen.zencode.java.logger.*;
8
 import org.openzen.zencode.shared.*;
9
 import org.openzen.zencode.shared.*;
9
 import org.openzen.zenscript.codemodel.*;
10
 import org.openzen.zenscript.codemodel.*;
10
 import org.openzen.zenscript.codemodel.context.*;
11
 import org.openzen.zenscript.codemodel.context.*;
20
 import java.io.*;
21
 import java.io.*;
21
 import java.lang.reflect.InvocationTargetException;
22
 import java.lang.reflect.InvocationTargetException;
22
 import java.util.*;
23
 import java.util.*;
23
-import java.util.function.*;
24
 
24
 
25
 /**
25
 /**
26
  *
26
  *
37
 	
37
 	
38
 	public boolean debug = false;
38
 	public boolean debug = false;
39
 	
39
 	
40
-	public IZSLogger logger;
40
+	public final ScriptingEngineLogger logger;
41
 	
41
 	
42
 	public ScriptingEngine() {
42
 	public ScriptingEngine() {
43
-		space = new ModuleSpace(registry, new ArrayList<>(), StorageType.getStandard());
44
-		
45
-		try {
46
-            ZippedPackage stdlibs = new ZippedPackage(ScriptingEngine.class.getResourceAsStream("/StdLibs.jar"));
47
-            SemanticModule stdlibModule = stdlibs.loadModule(space, "stdlib", null, new SemanticModule[0], FunctionParameter.NONE, stdlib);
48
-			stdlibModule = Validator.validate(stdlibModule, error -> System.out.println(error.toString()));
49
-			space.addModule("stdlib", stdlibModule);
50
-			registerCompiled(stdlibModule);
51
-		} catch (CompileException | ParseException | IOException ex) {
52
-			throw new RuntimeException(ex);
53
-		}
54
-		this.logger = new EmptyLogger();
43
+        this(new ScriptingEngineStreamLogger());
55
     }
44
     }
56
     
45
     
57
-    public ScriptingEngine(IZSLogger logger) {
58
-        this();
46
+    public ScriptingEngine(ScriptingEngineLogger logger) {
47
+        this.space = new ModuleSpace(registry, new ArrayList<>(), StorageType.getStandard());
59
         this.logger = logger;
48
         this.logger = logger;
49
+        try {
50
+            ZippedPackage stdlibs = new ZippedPackage(ScriptingEngine.class.getResourceAsStream("/StdLibs.jar"));
51
+            SemanticModule stdlibModule = stdlibs.loadModule(space, "stdlib", null, SemanticModule.NONE, FunctionParameter.NONE, stdlib, logger);
52
+            stdlibModule = Validator.validate(stdlibModule, logger);
53
+            space.addModule("stdlib", stdlibModule);
54
+            registerCompiled(stdlibModule);
55
+        } catch (CompileException | ParseException | IOException ex) {
56
+            throw new RuntimeException(ex);
57
+        }
60
     }
58
     }
61
 	
59
 	
62
 	public JavaNativeModule createNativeModule(String name, String basePackage, JavaNativeModule... dependencies) {
60
 	public JavaNativeModule createNativeModule(String name, String basePackage, JavaNativeModule... dependencies) {
63
 		ZSPackage testPackage = new ZSPackage(space.rootPackage, name);
61
 		ZSPackage testPackage = new ZSPackage(space.rootPackage, name);
64
-		return new JavaNativeModule(testPackage, name, basePackage, registry, dependencies);
62
+		return new JavaNativeModule(logger, testPackage, name, basePackage, registry, dependencies);
65
 	}
63
 	}
66
 	
64
 	
67
 	public void registerNativeProvided(JavaNativeModule module) throws CompileException {
65
 	public void registerNativeProvided(JavaNativeModule module) throws CompileException {
68
 		SemanticModule semantic = Validator.validate(
66
 		SemanticModule semantic = Validator.validate(
69
-				module.toSemantic(space), System.out::println);
67
+				module.toSemantic(space), logger);
70
 		if (!semantic.isValid())
68
 		if (!semantic.isValid())
71
 			return;
69
 			return;
72
 		
70
 		
87
 			BracketExpressionParser bracketParser,
85
 			BracketExpressionParser bracketParser,
88
 			FunctionParameter[] scriptParameters,
86
 			FunctionParameter[] scriptParameters,
89
 			String... dependencies) throws ParseException
87
 			String... dependencies) throws ParseException
90
-	{
91
-		return createScriptedModule(name, sources, bracketParser, scriptParameters, Throwable::printStackTrace, System.out::println, sourceFile -> System.out.println("Loading " + sourceFile.getFilename()), dependencies);
92
-	}
93
-	
94
-	public SemanticModule createScriptedModule(
95
-			String name,
96
-			SourceFile[] sources,
97
-			BracketExpressionParser bracketParser,
98
-			FunctionParameter[] scriptParameters,
99
-			Consumer<CompileException> compileExceptionConsumer,
100
-			Consumer<ValidationLogEntry> validatorErrorConsumer,
101
-			Consumer<SourceFile> sourceFileConsumer,
102
-			String... dependencies) throws ParseException
103
 	{
88
 	{
104
 		Module scriptModule = new Module(name);
89
 		Module scriptModule = new Module(name);
105
 		CompilingPackage scriptPackage = new CompilingPackage(new ZSPackage(space.rootPackage, name), scriptModule);
90
 		CompilingPackage scriptPackage = new CompilingPackage(new ZSPackage(space.rootPackage, name), scriptModule);
106
 		
91
 		
107
 		ParsedFile[] files = new ParsedFile[sources.length];
92
 		ParsedFile[] files = new ParsedFile[sources.length];
108
 		for (int i = 0; i < sources.length; i++) {
93
 		for (int i = 0; i < sources.length; i++) {
109
-			sourceFileConsumer.accept(sources[i]);
94
+			logger.logSourceFile(sources[i]);
110
 			files[i] = ParsedFile.parse(scriptPackage, bracketParser, sources[i]);
95
 			files[i] = ParsedFile.parse(scriptPackage, bracketParser, sources[i]);
111
 		}
96
 		}
112
 		
97
 		
122
 				files,
107
 				files,
123
 				space,
108
 				space,
124
 				scriptParameters,
109
 				scriptParameters,
125
-				compileExceptionConsumer);
110
+				logger);
126
 		if (!scripts.isValid())
111
 		if (!scripts.isValid())
127
 			return scripts;
112
 			return scripts;
128
 		
113
 		
129
 		return Validator.validate(
114
 		return Validator.validate(
130
 				scripts.normalize(),
115
 				scripts.normalize(),
131
-				validatorErrorConsumer);
116
+				logger);
132
 	}
117
 	}
133
 	
118
 	
134
 	public void registerCompiled(SemanticModule module) {
119
 	public void registerCompiled(SemanticModule module) {
148
         for (JavaNativeModule nativeModule : nativeModules)
133
         for (JavaNativeModule nativeModule : nativeModules)
149
             javaSpace.register(nativeModule.getCompiled());
134
             javaSpace.register(nativeModule.getCompiled());
150
         
135
         
151
-        JavaCompiler compiler = new JavaCompiler();
136
+        JavaCompiler compiler = new JavaCompiler(logger);
152
         
137
         
153
-        JavaBytecodeRunUnit runUnit = new JavaBytecodeRunUnit();
138
+        JavaBytecodeRunUnit runUnit = new JavaBytecodeRunUnit(logger);
154
         for (SemanticModule compiled : compiledModules)
139
         for (SemanticModule compiled : compiledModules)
155
             runUnit.add(compiler.compile(compiled.name, compiled, javaSpace));
140
             runUnit.add(compiler.compile(compiled.name, compiled, javaSpace));
156
         if (debug)
141
         if (debug)

+ 7
- 0
JavaIntegration/src/main/java/org/openzen/zencode/java/logger/ScriptingEngineLogger.java 查看文件

1
+package org.openzen.zencode.java.logger;
2
+
3
+import org.openzen.zencode.shared.logging.*;
4
+import org.openzen.zenscript.parser.logger.*;
5
+import org.openzen.zenscript.validator.logger.*;
6
+
7
+public interface ScriptingEngineLogger extends ValidatorLogger, SourceFileLogger, ParserLogger {}

+ 83
- 0
JavaIntegration/src/main/java/org/openzen/zencode/java/logger/ScriptingEngineStreamLogger.java 查看文件

1
+package org.openzen.zencode.java.logger;
2
+
3
+import org.openzen.zencode.shared.*;
4
+import org.openzen.zenscript.validator.*;
5
+
6
+import java.io.*;
7
+
8
+public class ScriptingEngineStreamLogger implements ScriptingEngineLogger {
9
+    
10
+    private final PrintStream infoStream, debugStream, warningStream, errorStream;
11
+    
12
+    public ScriptingEngineStreamLogger(PrintStream debugStream, PrintStream infoStream, PrintStream warningStream, PrintStream errorStream) {
13
+        this.infoStream = infoStream;
14
+        this.debugStream = debugStream;
15
+        this.warningStream = warningStream;
16
+        this.errorStream = errorStream;
17
+    }
18
+    
19
+    public ScriptingEngineStreamLogger(PrintStream normalStream, PrintStream errorStream) {
20
+        this(normalStream, normalStream, normalStream, errorStream);
21
+    }
22
+    
23
+    public ScriptingEngineStreamLogger() {
24
+        this(System.out, System.err);
25
+    }
26
+    
27
+    @Override
28
+    public void info(String message) {
29
+        infoStream.println("INFO: " + message);
30
+        infoStream.flush();
31
+    }
32
+    
33
+    @Override
34
+    public void debug(String message) {
35
+        debugStream.println("DEBUG:   " + message);
36
+        debugStream.flush();
37
+    }
38
+    
39
+    @Override
40
+    public void warning(String message) {
41
+        warningStream.println("WARNING: " + message);
42
+        warningStream.flush();
43
+    }
44
+    
45
+    @Override
46
+    public void error(String message) {
47
+        errorStream.println("ERROR:   " + message);
48
+    }
49
+    
50
+    @Override
51
+    public void throwingErr(String message, Throwable throwable) {
52
+        errorStream.println("ERROR:   " + message);
53
+        throwable.printStackTrace(errorStream);
54
+        errorStream.flush();
55
+    }
56
+    
57
+    @Override
58
+    public void throwingWarn(String message, Throwable throwable) {
59
+        warningStream.println("WARNING: " + message);
60
+        throwable.printStackTrace(warningStream);
61
+        warningStream.flush();
62
+    }
63
+    
64
+    @Override
65
+    public void logCompileException(CompileException exception) {
66
+        throw new UnsupportedOperationException();
67
+    }
68
+    
69
+    @Override
70
+    public void logSourceFile(SourceFile file) {
71
+        info("Loading File: " + file.getFilename());
72
+    }
73
+    
74
+    @Override
75
+    public void logValidationError(ValidationLogEntry errorEntry) {
76
+        error(errorEntry.toString());
77
+    }
78
+    
79
+    @Override
80
+    public void logValidationWarning(ValidationLogEntry warningEntry) {
81
+        warning(warningEntry.toString());
82
+    }
83
+}

+ 2
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaClass.java 查看文件

41
 			return new JavaClass("", internalName, kind, new String[0]);
41
 			return new JavaClass("", internalName, kind, new String[0]);
42
 		
42
 		
43
 		int lastSlash = internalName.lastIndexOf('/');
43
 		int lastSlash = internalName.lastIndexOf('/');
44
-		if (lastSlash < 0)
45
-			System.out.println(internalName);
44
+		//if (lastSlash < 0)
45
+		//	System.out.println(internalName);
46
 		
46
 		
47
 		String pkg = lastSlash < 0 ? "" : internalName.substring(0, lastSlash);
47
 		String pkg = lastSlash < 0 ? "" : internalName.substring(0, lastSlash);
48
 		String className = lastSlash < 0 ? internalName : internalName.substring(lastSlash + 1);
48
 		String className = lastSlash < 0 ? internalName : internalName.substring(lastSlash + 1);

+ 4
- 1
JavaShared/src/main/java/org/openzen/zenscript/javashared/JavaContext.java 查看文件

10
 import java.util.List;
10
 import java.util.List;
11
 import java.util.Map;
11
 import java.util.Map;
12
 import org.openzen.zencode.shared.CodePosition;
12
 import org.openzen.zencode.shared.CodePosition;
13
+import org.openzen.zencode.shared.logging.*;
13
 import org.openzen.zenscript.codemodel.FunctionHeader;
14
 import org.openzen.zenscript.codemodel.FunctionHeader;
14
 import org.openzen.zenscript.codemodel.FunctionParameter;
15
 import org.openzen.zenscript.codemodel.FunctionParameter;
15
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
16
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
48
 	
49
 	
49
 	public final ZSPackage modulePackage;
50
 	public final ZSPackage modulePackage;
50
 	public final String basePackage;
51
 	public final String basePackage;
52
+	public final IZSLogger logger;
51
 	
53
 	
52
-	public JavaContext(JavaCompileSpace space, ZSPackage modulePackage, String basePackage) {
54
+	public JavaContext(JavaCompileSpace space, ZSPackage modulePackage, String basePackage, IZSLogger logger) {
55
+	    this.logger = logger;
53
 		this.space = space;
56
 		this.space = space;
54
 		this.registry = space.getRegistry();
57
 		this.registry = space.getRegistry();
55
 		
58
 		

+ 6
- 6
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java 查看文件

73
 	@Override
73
 	@Override
74
 	public Void visitConst(ConstMember member) {
74
 	public Void visitConst(ConstMember member) {
75
 		if (DEBUG_EMPTY && cls.empty)
75
 		if (DEBUG_EMPTY && cls.empty)
76
-			System.out.println("Class " + cls.fullName + " not empty because of const " + member.name);
76
+			context.logger.debug("Class " + cls.fullName + " not empty because of const " + member.name);
77
 		
77
 		
78
 		cls.empty = false;
78
 		cls.empty = false;
79
 		module.setFieldInfo(member, new JavaField(cls, member.name, context.getDescriptor(member.getType()), context.getSignature(member.getType())));
79
 		module.setFieldInfo(member, new JavaField(cls, member.name, context.getDescriptor(member.getType()), context.getSignature(member.getType())));
105
 	@Override
105
 	@Override
106
 	public Void visitDestructor(DestructorMember member) {
106
 	public Void visitDestructor(DestructorMember member) {
107
 		if (DEBUG_EMPTY && cls.empty)
107
 		if (DEBUG_EMPTY && cls.empty)
108
-			System.out.println("Class " + cls.fullName + " not empty because of destructor");
108
+			context.logger.debug("Class " + cls.fullName + " not empty because of destructor");
109
 		
109
 		
110
 		cls.empty = false;
110
 		cls.empty = false;
111
 		return null;
111
 		return null;
163
 				m.accept(this);
163
 				m.accept(this);
164
 		} else {
164
 		} else {
165
 			if (DEBUG_EMPTY && cls.empty)
165
 			if (DEBUG_EMPTY && cls.empty)
166
-				System.out.println("Class " + cls.fullName + " not empty because of unmergeable implementation");
166
+				context.logger.debug("Class " + cls.fullName + " not empty because of unmergeable implementation");
167
 			
167
 			
168
 			cls.empty = false;
168
 			cls.empty = false;
169
 			
169
 			
187
 		member.innerDefinition.accept(innerDefinitionPrepare);
187
 		member.innerDefinition.accept(innerDefinitionPrepare);
188
 		
188
 		
189
 		if (DEBUG_EMPTY && cls.empty)
189
 		if (DEBUG_EMPTY && cls.empty)
190
-			System.out.println("Class " + cls.fullName + " not empty because of inner definition " + member.innerDefinition.name);
190
+			context.logger.debug("Class " + cls.fullName + " not empty because of inner definition " + member.innerDefinition.name);
191
 		cls.empty = false;
191
 		cls.empty = false;
192
 		return null;
192
 		return null;
193
 	}
193
 	}
195
 	@Override
195
 	@Override
196
 	public Void visitStaticInitializer(StaticInitializerMember member) {
196
 	public Void visitStaticInitializer(StaticInitializerMember member) {
197
 		if (DEBUG_EMPTY && cls.empty)
197
 		if (DEBUG_EMPTY && cls.empty)
198
-			System.out.println("Class " + cls.fullName + " not empty because of static initializer");
198
+			context.logger.debug("Class " + cls.fullName + " not empty because of static initializer");
199
 		
199
 		
200
 		cls.empty = false;
200
 		cls.empty = false;
201
 		return null;
201
 		return null;
339
 		
339
 		
340
 		if (method.compile && member.getBuiltin() != BuiltinID.CLASS_DEFAULT_CONSTRUCTOR) {
340
 		if (method.compile && member.getBuiltin() != BuiltinID.CLASS_DEFAULT_CONSTRUCTOR) {
341
 			if (DEBUG_EMPTY && cls.empty)
341
 			if (DEBUG_EMPTY && cls.empty)
342
-				System.out.println("Class " + cls.fullName + " not empty because of " + member.describe());
342
+				context.logger.debug("Class " + cls.fullName + " not empty because of " + member.describe());
343
 			
343
 			
344
 			cls.empty = false;
344
 			cls.empty = false;
345
 		}
345
 		}

+ 3
- 3
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareDefinitionMemberVisitor.java 查看文件

52
 		if (definition.module != module.module)
52
 		if (definition.module != module.module)
53
 			throw new IllegalArgumentException("Definition is not in the same module as the current module!");
53
 			throw new IllegalArgumentException("Definition is not in the same module as the current module!");
54
 		
54
 		
55
-		System.out.println("~~ Preparing " + definition.name);
55
+		context.logger.debug("~~ Preparing " + definition.name);
56
 		definition.accept(this);
56
 		definition.accept(this);
57
 	}
57
 	}
58
 	
58
 	
152
 	}
152
 	}
153
 	
153
 	
154
 	private void visitClassMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass, boolean startsEmpty) {
154
 	private void visitClassMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass, boolean startsEmpty) {
155
-		System.out.println("Preparing " + cls.internalName);
155
+		context.logger.debug("Preparing " + cls.internalName);
156
 		JavaPrepareClassMethodVisitor methodVisitor = new JavaPrepareClassMethodVisitor(context, module, cls, nativeClass, this, startsEmpty);
156
 		JavaPrepareClassMethodVisitor methodVisitor = new JavaPrepareClassMethodVisitor(context, module, cls, nativeClass, this, startsEmpty);
157
 		for (IDefinitionMember member : definition.members) {
157
 		for (IDefinitionMember member : definition.members) {
158
 			member.accept(methodVisitor);
158
 			member.accept(methodVisitor);
161
 	}
161
 	}
162
 	
162
 	
163
 	private void visitExpansionMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass) {
163
 	private void visitExpansionMembers(HighLevelDefinition definition, JavaClass cls, JavaNativeClass nativeClass) {
164
-		System.out.println("Preparing " + cls.internalName);
164
+		context.logger.debug("Preparing " + cls.internalName);
165
 		JavaPrepareExpansionMethodVisitor methodVisitor = new JavaPrepareExpansionMethodVisitor(context, module, cls, nativeClass);
165
 		JavaPrepareExpansionMethodVisitor methodVisitor = new JavaPrepareExpansionMethodVisitor(context, module, cls, nativeClass);
166
 		for (IDefinitionMember member : definition.members) {
166
 		for (IDefinitionMember member : definition.members) {
167
 			member.accept(methodVisitor);
167
 			member.accept(methodVisitor);

+ 2
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java 查看文件

65
 		module.setFieldInfo(member, field);
65
 		module.setFieldInfo(member, field);
66
 		
66
 		
67
 		if (DEBUG_EMPTY && cls.empty)
67
 		if (DEBUG_EMPTY && cls.empty)
68
-			System.out.println("Class " + cls.fullName + " not empty because of const");
68
+			context.logger.debug("Class " + cls.fullName + " not empty because of const");
69
 		
69
 		
70
 		cls.empty = false;
70
 		cls.empty = false;
71
 		return null;
71
 		return null;
202
 		
202
 		
203
 		if (method.compile) {
203
 		if (method.compile) {
204
 			if (DEBUG_EMPTY && cls.empty)
204
 			if (DEBUG_EMPTY && cls.empty)
205
-				System.out.println("Class " + cls.fullName + " not empty because of " + member.describe());
205
+				context.logger.debug("Class " + cls.fullName + " not empty because of " + member.describe());
206
 			
206
 			
207
 			cls.empty = false;
207
 			cls.empty = false;
208
 		}
208
 		}

+ 3
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceCompiler.java 查看文件

8
 import java.util.HashMap;
8
 import java.util.HashMap;
9
 import java.util.Map;
9
 import java.util.Map;
10
 import org.openzen.zencode.shared.SourceFile;
10
 import org.openzen.zencode.shared.SourceFile;
11
+import org.openzen.zencode.shared.logging.*;
11
 import org.openzen.zenscript.codemodel.FunctionParameter;
12
 import org.openzen.zenscript.codemodel.FunctionParameter;
12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
 import org.openzen.zenscript.codemodel.Module;
14
 import org.openzen.zenscript.codemodel.Module;
31
 		settings = new JavaSourceFormattingSettings.Builder().build();
32
 		settings = new JavaSourceFormattingSettings.Builder().build();
32
 	}
33
 	}
33
 	
34
 	
34
-	public JavaSourceModule compile(SemanticModule module, JavaCompileSpace space, String basePackage) {
35
-		JavaSourceContext context = new JavaSourceContext(helpers, settings, space, module.modulePackage, basePackage);
35
+	public JavaSourceModule compile(IZSLogger logger, SemanticModule module, JavaCompileSpace space, String basePackage) {
36
+		JavaSourceContext context = new JavaSourceContext(logger, helpers, settings, space, module.modulePackage, basePackage);
36
 		
37
 		
37
 		JavaSourceModule result = new JavaSourceModule(module.module, module.parameters);
38
 		JavaSourceModule result = new JavaSourceModule(module.module, module.parameters);
38
 		context.addModule(module.module, result);
39
 		context.addModule(module.module, result);

+ 3
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceContext.java 查看文件

5
  */
5
  */
6
 package org.openzen.zenscript.javasource;
6
 package org.openzen.zenscript.javasource;
7
 
7
 
8
+import org.openzen.zencode.shared.logging.*;
8
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
9
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
9
 import org.openzen.zenscript.codemodel.type.StoredType;
10
 import org.openzen.zenscript.codemodel.type.StoredType;
10
 import org.openzen.zenscript.codemodel.type.TypeID;
11
 import org.openzen.zenscript.codemodel.type.TypeID;
22
 	private final JavaSyntheticClassGenerator generator;
23
 	private final JavaSyntheticClassGenerator generator;
23
 	public final JavaSourceSyntheticHelperGenerator helperGenerator;
24
 	public final JavaSourceSyntheticHelperGenerator helperGenerator;
24
 	
25
 	
25
-	public JavaSourceContext(JavaSourceModule helpers, JavaSourceFormattingSettings settings, JavaCompileSpace space, ZSPackage modulePackage, String basePackage) {
26
-		super(space, modulePackage, basePackage);
26
+	public JavaSourceContext(IZSLogger logger, JavaSourceModule helpers, JavaSourceFormattingSettings settings, JavaCompileSpace space, ZSPackage modulePackage, String basePackage) {
27
+		super(space, modulePackage, basePackage, logger);
27
 		
28
 		
28
 		typeDescriptorVisitor = new JavaTypeDescriptorVisitor(this);
29
 		typeDescriptorVisitor = new JavaTypeDescriptorVisitor(this);
29
 		this.generator = new JavaSourceSyntheticTypeGenerator(helpers, settings, this);
30
 		this.generator = new JavaSourceSyntheticTypeGenerator(helpers, settings, this);

+ 6
- 4
Parser/src/main/java/org/openzen/zenscript/parser/FolderPackage.java 查看文件

9
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
9
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
10
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
10
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
11
 import org.openzen.zenscript.lexer.ParseException;
11
 import org.openzen.zenscript.lexer.ParseException;
12
+import org.openzen.zenscript.parser.logger.*;
12
 
13
 
13
 import java.io.BufferedReader;
14
 import java.io.BufferedReader;
14
 import java.io.File;
15
 import java.io.File;
60
         files.add(parent);
61
         files.add(parent);
61
     }
62
     }
62
 	
63
 	
63
-	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters) throws ParseException {
64
-		return loadModule(space, name, bracketParser, dependencies, scriptParameters, new ZSPackage(space.rootPackage, name));
64
+	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ParserLogger logger) throws ParseException {
65
+		return loadModule(space, name, bracketParser, dependencies, scriptParameters, new ZSPackage(space.rootPackage, name), logger);
65
 	}
66
 	}
66
 	
67
 	
67
-	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ZSPackage pkg) throws ParseException {
68
+	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ZSPackage pkg, ParserLogger logger) throws ParseException {
68
 		List<SourceFile> sourceFiles = files.get(name);
69
 		List<SourceFile> sourceFiles = files.get(name);
69
 		if (sourceFiles == null)
70
 		if (sourceFiles == null)
70
 			return null; // no such module
71
 			return null; // no such module
80
 				scriptPackage,
81
 				scriptPackage,
81
 				files,
82
 				files,
82
 				space,
83
 				space,
83
-				scriptParameters, Throwable::printStackTrace);
84
+				scriptParameters,
85
+                logger);
84
 		return scripts.normalize();
86
 		return scripts.normalize();
85
 	}
87
 	}
86
 }
88
 }

+ 10
- 8
Parser/src/main/java/org/openzen/zenscript/parser/ParsedFile.java 查看文件

11
 import org.openzen.zencode.shared.FileSourceFile;
11
 import org.openzen.zencode.shared.FileSourceFile;
12
 import org.openzen.zencode.shared.LiteralSourceFile;
12
 import org.openzen.zencode.shared.LiteralSourceFile;
13
 import org.openzen.zencode.shared.SourceFile;
13
 import org.openzen.zencode.shared.SourceFile;
14
+import org.openzen.zencode.shared.logging.*;
14
 import org.openzen.zenscript.codemodel.FunctionHeader;
15
 import org.openzen.zenscript.codemodel.FunctionHeader;
15
 import org.openzen.zenscript.codemodel.FunctionParameter;
16
 import org.openzen.zenscript.codemodel.FunctionParameter;
16
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
17
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
33
 import org.openzen.zenscript.codemodel.type.ISymbol;
34
 import org.openzen.zenscript.codemodel.type.ISymbol;
34
 import org.openzen.zenscript.lexer.ParseException;
35
 import org.openzen.zenscript.lexer.ParseException;
35
 import org.openzen.zenscript.lexer.ZSTokenParser;
36
 import org.openzen.zenscript.lexer.ZSTokenParser;
37
+import org.openzen.zenscript.parser.logger.*;
36
 import org.openzen.zenscript.parser.statements.ParsedStatement;
38
 import org.openzen.zenscript.parser.statements.ParsedStatement;
37
 
39
 
38
 import java.io.File;
40
 import java.io.File;
42
 import java.util.HashMap;
44
 import java.util.HashMap;
43
 import java.util.List;
45
 import java.util.List;
44
 import java.util.Map;
46
 import java.util.Map;
45
-import java.util.function.Consumer;
46
 
47
 
47
 import static org.openzen.zenscript.lexer.ZSTokenType.EOF;
48
 import static org.openzen.zenscript.lexer.ZSTokenType.EOF;
48
 import static org.openzen.zenscript.lexer.ZSTokenType.K_IMPORT;
49
 import static org.openzen.zenscript.lexer.ZSTokenType.K_IMPORT;
58
 			ParsedFile[] files,
59
 			ParsedFile[] files,
59
 			ModuleSpace registry,
60
 			ModuleSpace registry,
60
 			FunctionParameter[] parameters,
61
 			FunctionParameter[] parameters,
61
-			Consumer<CompileException> exceptionLogger) {
62
+			ParserLogger logger) {
62
 		// We are considering all these files to be in the same package, so make
63
 		// We are considering all these files to be in the same package, so make
63
 		// a single PackageDefinition instance. If these files were in multiple
64
 		// a single PackageDefinition instance. If these files were in multiple
64
 		// packages, we'd need an instance for every package.
65
 		// packages, we'd need an instance for every package.
100
 		}
101
 		}
101
 		
102
 		
102
 		if (failed)
103
 		if (failed)
103
-			return new SemanticModule(pkg.module, dependencies, parameters, SemanticModule.State.INVALID, rootPackage, pkg.getPackage(), definitions, Collections.emptyList(), registry.registry, expansions, registry.getAnnotations(), registry.getStorageTypes());
104
+			return new SemanticModule(pkg.module, dependencies, parameters, SemanticModule.State.INVALID, rootPackage, pkg.getPackage(), definitions, Collections.emptyList(), registry.registry, expansions, registry.getAnnotations(), registry.getStorageTypes(), logger);
104
 		
105
 		
105
 		// scripts will store all the script blocks encountered in the files
106
 		// scripts will store all the script blocks encountered in the files
106
 		PrecompilationState precompiler = new PrecompilationState();
107
 		PrecompilationState precompiler = new PrecompilationState();
114
 			// compileCode will convert the parsed statements and expressions
115
 			// compileCode will convert the parsed statements and expressions
115
 			// into semantic code. This semantic code can then be compiled
116
 			// into semantic code. This semantic code can then be compiled
116
 			// to various targets.
117
 			// to various targets.
117
-			file.compileCode(moduleContext, precompiler, rootPackage, pkg, expansions, scripts, globals, scriptHeader, exceptionLogger, importErrors);
118
+			file.compileCode(moduleContext, precompiler, rootPackage, pkg, expansions, scripts, globals, scriptHeader, logger, importErrors);
118
 		}
119
 		}
119
         
120
         
120
         for(CompileException error : importErrors.values()) {
121
         for(CompileException error : importErrors.values()) {
121
-            exceptionLogger.accept(error);
122
+            logger.logCompileException(error);
122
         }
123
         }
123
 		return new SemanticModule(
124
 		return new SemanticModule(
124
 				pkg.module,
125
 				pkg.module,
132
 				registry.registry,
133
 				registry.registry,
133
 				expansions,
134
 				expansions,
134
 				registry.getAnnotations(),
135
 				registry.getAnnotations(),
135
-				registry.getStorageTypes());
136
+				registry.getStorageTypes(), logger);
136
 	}
137
 	}
137
 	
138
 	
138
 	public static ParsedFile parse(CompilingPackage compilingPackage, BracketExpressionParser bracketParser, File file) throws ParseException {
139
 	public static ParsedFile parse(CompilingPackage compilingPackage, BracketExpressionParser bracketParser, File file) throws ParseException {
294
             List<ScriptBlock> scripts,
295
             List<ScriptBlock> scripts,
295
             Map<String, ISymbol> globals,
296
             Map<String, ISymbol> globals,
296
             FunctionHeader scriptHeader,
297
             FunctionHeader scriptHeader,
297
-            Consumer<CompileException> exceptionLogger, Map<String, CompileException> importErrors) {
298
+            CompileExceptionLogger exceptionLogger,
299
+            Map<String, CompileException> importErrors) {
298
 		FileResolutionContext context = new FileResolutionContext(moduleContext, rootPackage, modulePackage);
300
 		FileResolutionContext context = new FileResolutionContext(moduleContext, rootPackage, modulePackage);
299
 		loadImports(context, rootPackage, modulePackage, importErrors);
301
 		loadImports(context, rootPackage, modulePackage, importErrors);
300
 		
302
 		
303
 			try {
305
 			try {
304
 				definition.compile(scope);
306
 				definition.compile(scope);
305
 			} catch (CompileException ex) {
307
 			} catch (CompileException ex) {
306
-				exceptionLogger.accept(ex);
308
+				exceptionLogger.logCompileException(ex);
307
 			}
309
 			}
308
 		}
310
 		}
309
 		
311
 		

+ 5
- 4
Parser/src/main/java/org/openzen/zenscript/parser/ZippedPackage.java 查看文件

24
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
24
 import org.openzen.zenscript.codemodel.context.CompilingPackage;
25
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
25
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
26
 import org.openzen.zenscript.lexer.ParseException;
26
 import org.openzen.zenscript.lexer.ParseException;
27
+import org.openzen.zenscript.parser.logger.*;
27
 
28
 
28
 /**
29
 /**
29
  *
30
  *
57
 		}
58
 		}
58
 	}
59
 	}
59
 	
60
 	
60
-	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters) throws ParseException {
61
-		return loadModule(space, name, bracketParser, dependencies, scriptParameters, new ZSPackage(space.rootPackage, name));
61
+	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ParserLogger logger) throws ParseException {
62
+		return loadModule(space, name, bracketParser, dependencies, scriptParameters, new ZSPackage(space.rootPackage, name), logger);
62
 	}
63
 	}
63
 	
64
 	
64
-	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ZSPackage pkg) throws ParseException {
65
+	public SemanticModule loadModule(ModuleSpace space, String name, BracketExpressionParser bracketParser, SemanticModule[] dependencies, FunctionParameter[] scriptParameters, ZSPackage pkg, ParserLogger logger) throws ParseException {
65
 		List<SourceFile> sourceFiles = files.get(name);
66
 		List<SourceFile> sourceFiles = files.get(name);
66
 		if (sourceFiles == null)
67
 		if (sourceFiles == null)
67
 			return null; // no such module
68
 			return null; // no such module
78
 				files,
79
 				files,
79
 				space,
80
 				space,
80
 				scriptParameters,
81
 				scriptParameters,
81
-				ex -> ex.printStackTrace());
82
+				logger);
82
 		return scripts.normalize();
83
 		return scripts.normalize();
83
 	}
84
 	}
84
 }
85
 }

+ 0
- 4
Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedNewExpression.java 查看文件

52
 		try {
52
 		try {
53
 			TypeMembers members = scope.getTypeMembers(type);
53
 			TypeMembers members = scope.getTypeMembers(type);
54
 			TypeMemberGroup constructors = members.getOrCreateGroup(OperatorType.CONSTRUCTOR);
54
 			TypeMemberGroup constructors = members.getOrCreateGroup(OperatorType.CONSTRUCTOR);
55
-			/*for (TypeMember<FunctionalMemberRef> member : constructors.getMethodMembers()) {
56
-				if (member.member.getBuiltin() == BuiltinID.ARRAY_CONSTRUCTOR_PROJECTED)
57
-					System.out.println("X");
58
-			}*/
59
 
55
 
60
 			List<StoredType>[] predictedTypes = constructors.predictCallTypes(position, scope, scope.hints, arguments.arguments.size());
56
 			List<StoredType>[] predictedTypes = constructors.predictCallTypes(position, scope, scope.hints, arguments.arguments.size());
61
 			CallArguments compiledArguments = arguments.compileCall(position, scope, null, constructors);
57
 			CallArguments compiledArguments = arguments.compileCall(position, scope, null, constructors);

+ 5
- 0
Parser/src/main/java/org/openzen/zenscript/parser/logger/ParserLogger.java 查看文件

1
+package org.openzen.zenscript.parser.logger;
2
+
3
+import org.openzen.zencode.shared.logging.*;
4
+
5
+public interface ParserLogger extends IZSLogger, CompileExceptionLogger {}

+ 0
- 58
ScriptingExample/src/main/java/org/openzen/zenscript/scriptingexample/logging/StreamLogger.java 查看文件

1
-package org.openzen.zenscript.scriptingexample.logging;
2
-
3
-import org.openzen.zencode.java.IZSLogger;
4
-
5
-import java.io.PrintStream;
6
-
7
-public class StreamLogger implements IZSLogger {
8
-    private final PrintStream infoStream, debugStream, warningStream, errorStream;
9
-
10
-    public StreamLogger(PrintStream debugStream, PrintStream infoStream, PrintStream warningStream, PrintStream errorStream) {
11
-        this.infoStream = infoStream;
12
-        this.debugStream = debugStream;
13
-        this.warningStream = warningStream;
14
-        this.errorStream = errorStream;
15
-    }
16
-
17
-    public StreamLogger(PrintStream normalStream, PrintStream errorStream) {
18
-        this(normalStream, normalStream, normalStream, errorStream);
19
-    }
20
-
21
-    public StreamLogger(){
22
-        this(System.out, System.err);
23
-    }
24
-
25
-    @Override
26
-    public void info(String message) {
27
-        System.out.println("INFO: " + message);
28
-    }
29
-
30
-    @Override
31
-    public void debug(String message) {
32
-        System.out.println("DEBUG:   " + message);
33
-    }
34
-
35
-    @Override
36
-    public void warning(String message) {
37
-        System.out.println("WARNING: " + message);
38
-    }
39
-
40
-    @Override
41
-    public void error(String message) {
42
-        System.err.println("ERROR:   " + message);
43
-    }
44
-
45
-    @Override
46
-    public void throwingErr(String message, Throwable throwable) {
47
-        System.err.println("ERROR:   " + message);
48
-        throwable.printStackTrace(System.err);
49
-        System.err.flush();
50
-    }
51
-
52
-    @Override
53
-    public void throwingWarn(String message, Throwable throwable) {
54
-        System.err.println("WARNING: " + message);
55
-        throwable.printStackTrace(System.out);
56
-        System.out.flush();
57
-    }
58
-}

+ 7
- 0
Shared/src/main/java/org/openzen/zencode/shared/logging/CompileExceptionLogger.java 查看文件

1
+package org.openzen.zencode.shared.logging;
2
+
3
+import org.openzen.zencode.shared.*;
4
+
5
+public interface CompileExceptionLogger {
6
+    void logCompileException(CompileException exception);
7
+}

JavaIntegration/src/main/java/org/openzen/zencode/java/IZSLogger.java → Shared/src/main/java/org/openzen/zencode/shared/logging/IZSLogger.java 查看文件

1
-package org.openzen.zencode.java;
1
+package org.openzen.zencode.shared.logging;
2
 
2
 
3
 public interface IZSLogger {
3
 public interface IZSLogger {
4
     
4
     

+ 7
- 0
Shared/src/main/java/org/openzen/zencode/shared/logging/SourceFileLogger.java 查看文件

1
+package org.openzen.zencode.shared.logging;
2
+
3
+import org.openzen.zencode.shared.*;
4
+
5
+public interface SourceFileLogger {
6
+    void logSourceFile(SourceFile file);
7
+}

+ 6
- 4
Validator/src/main/java/org/openzen/zenscript/validator/Validator.java 查看文件

8
 import java.util.ArrayList;
8
 import java.util.ArrayList;
9
 import java.util.Collections;
9
 import java.util.Collections;
10
 import java.util.List;
10
 import java.util.List;
11
-import java.util.function.Consumer;
11
+
12
 import org.openzen.zencode.shared.CodePosition;
12
 import org.openzen.zencode.shared.CodePosition;
13
 import org.openzen.zenscript.codemodel.AccessScope;
13
 import org.openzen.zenscript.codemodel.AccessScope;
14
 import org.openzen.zenscript.codemodel.FunctionHeader;
14
 import org.openzen.zenscript.codemodel.FunctionHeader;
20
 import org.openzen.zenscript.codemodel.statement.Statement;
20
 import org.openzen.zenscript.codemodel.statement.Statement;
21
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
21
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
22
 import org.openzen.zenscript.validator.analysis.StatementScope;
22
 import org.openzen.zenscript.validator.analysis.StatementScope;
23
+import org.openzen.zenscript.validator.logger.*;
23
 import org.openzen.zenscript.validator.visitors.DefinitionValidator;
24
 import org.openzen.zenscript.validator.visitors.DefinitionValidator;
24
 import org.openzen.zenscript.validator.visitors.StatementValidator;
25
 import org.openzen.zenscript.validator.visitors.StatementValidator;
25
 
26
 
28
  * @author Hoofdgebruiker
29
  * @author Hoofdgebruiker
29
  */
30
  */
30
 public class Validator {
31
 public class Validator {
31
-	public static SemanticModule validate(SemanticModule module, Consumer<ValidationLogEntry> logger) {
32
+	public static SemanticModule validate(SemanticModule module, ValidatorLogger logger) {
32
 		if (module.state != SemanticModule.State.NORMALIZED)
33
 		if (module.state != SemanticModule.State.NORMALIZED)
33
 			throw new IllegalStateException("Module is not yet normalized");
34
 			throw new IllegalStateException("Module is not yet normalized");
34
 		
35
 		
41
 		}
42
 		}
42
 		
43
 		
43
 		for (ValidationLogEntry entry : validator.getLog()) {
44
 		for (ValidationLogEntry entry : validator.getLog()) {
44
-			logger.accept(entry);
45
+			logger.logValidationLogEntry(entry);
45
 		}
46
 		}
46
 		
47
 		
47
 		SemanticModule.State state = validator.hasErrors() ? SemanticModule.State.INVALID : SemanticModule.State.VALIDATED;
48
 		SemanticModule.State state = validator.hasErrors() ? SemanticModule.State.INVALID : SemanticModule.State.VALIDATED;
57
 				module.registry,
58
 				module.registry,
58
 				module.expansions,
59
 				module.expansions,
59
 				module.annotations,
60
 				module.annotations,
60
-				module.storageTypes);
61
+				module.storageTypes,
62
+                logger);
61
 	}
63
 	}
62
 	
64
 	
63
 	private final List<ValidationLogEntry> log = new ArrayList<>();
65
 	private final List<ValidationLogEntry> log = new ArrayList<>();

+ 21
- 0
Validator/src/main/java/org/openzen/zenscript/validator/logger/IZSValidationLogger.java 查看文件

1
+package org.openzen.zenscript.validator.logger;
2
+
3
+import org.openzen.zenscript.validator.*;
4
+
5
+public interface IZSValidationLogger {
6
+    
7
+    default void logValidationLogEntry(ValidationLogEntry entry) {
8
+        switch(entry.kind) {
9
+            case ERROR:
10
+                logValidationError(entry);
11
+                break;
12
+            case WARNING:
13
+                logValidationWarning(entry);
14
+                break;
15
+        }
16
+    }
17
+    
18
+    void logValidationError(ValidationLogEntry errorEntry);
19
+    
20
+    void logValidationWarning(ValidationLogEntry warningEntry);
21
+}

+ 5
- 0
Validator/src/main/java/org/openzen/zenscript/validator/logger/ValidatorLogger.java 查看文件

1
+package org.openzen.zenscript.validator.logger;
2
+
3
+import org.openzen.zencode.shared.logging.*;
4
+
5
+public interface ValidatorLogger extends IZSValidationLogger, IZSLogger {}

正在加载...
取消
保存