Browse Source

Added compile override for ParsedExpressionArray and ParsedExpressionMap

Essentially they are functions that accept the parsedExpression and the compilescope.
They return either null or a PartialExpression.
If they dont return null then the used partialexpression will be used instead of whatever the parsedexpression wouldve compiled to
kindlich 5 years ago
parent
commit
826b8a4a81
No known key found for this signature in database

+ 13
- 1
Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedExpressionArray.java View File

6
 
6
 
7
 package org.openzen.zenscript.parser.expression;
7
 package org.openzen.zenscript.parser.expression;
8
 
8
 
9
+import java.util.ArrayList;
9
 import java.util.List;
10
 import java.util.List;
11
+import java.util.function.BiFunction;
12
+
10
 import org.openzen.zencode.shared.CodePosition;
13
 import org.openzen.zencode.shared.CodePosition;
11
 import org.openzen.zencode.shared.CompileException;
14
 import org.openzen.zencode.shared.CompileException;
12
 import org.openzen.zencode.shared.CompileExceptionCode;
15
 import org.openzen.zencode.shared.CompileExceptionCode;
24
  * @author Stanneke
27
  * @author Stanneke
25
  */
28
  */
26
 public class ParsedExpressionArray extends ParsedExpression {
29
 public class ParsedExpressionArray extends ParsedExpression {
27
-	private final List<ParsedExpression> contents;
30
+    
31
+    public static final List<BiFunction<ParsedExpressionArray, ExpressionScope, IPartialExpression>> compileOverrides = new ArrayList<>(0);
32
+    public final List<ParsedExpression> contents;
28
 
33
 
29
 	public ParsedExpressionArray(CodePosition position, List<ParsedExpression> contents) {
34
 	public ParsedExpressionArray(CodePosition position, List<ParsedExpression> contents) {
30
 		super(position);
35
 		super(position);
34
 
39
 
35
 	@Override
40
 	@Override
36
 	public IPartialExpression compile(ExpressionScope scope) throws CompileException {
41
 	public IPartialExpression compile(ExpressionScope scope) throws CompileException {
42
+        
43
+        for(BiFunction<ParsedExpressionArray, ExpressionScope, IPartialExpression> compileOverride : compileOverrides) {
44
+            final IPartialExpression apply = compileOverride.apply(this, scope);
45
+            if(apply != null)
46
+                return apply;
47
+        }
48
+        
37
 		StoredType asBaseType = null;
49
 		StoredType asBaseType = null;
38
 		StoredType asType = null;
50
 		StoredType asType = null;
39
 		boolean couldHintType = false;
51
 		boolean couldHintType = false;

+ 14
- 2
Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedExpressionMap.java View File

8
 
8
 
9
 import java.util.ArrayList;
9
 import java.util.ArrayList;
10
 import java.util.List;
10
 import java.util.List;
11
+import java.util.function.BiFunction;
12
+import java.util.function.Function;
13
+
11
 import org.openzen.zencode.shared.CodePosition;
14
 import org.openzen.zencode.shared.CodePosition;
12
 import org.openzen.zencode.shared.CompileException;
15
 import org.openzen.zencode.shared.CompileException;
13
 import org.openzen.zencode.shared.CompileExceptionCode;
16
 import org.openzen.zencode.shared.CompileExceptionCode;
30
  * @author Stanneke
33
  * @author Stanneke
31
  */
34
  */
32
 public class ParsedExpressionMap extends ParsedExpression {
35
 public class ParsedExpressionMap extends ParsedExpression {
33
-	private final List<ParsedExpression> keys;
34
-	private final List<ParsedExpression> values;
36
+    
37
+    public static final List<BiFunction<ParsedExpressionMap, ExpressionScope, ? extends IPartialExpression>> compileOverrides = new ArrayList<>(0);
38
+    
39
+	public final List<ParsedExpression> keys;
40
+	public final List<ParsedExpression> values;
35
 
41
 
36
 	public ParsedExpressionMap(
42
 	public ParsedExpressionMap(
37
 			CodePosition position,
43
 			CodePosition position,
45
 
51
 
46
 	@Override
52
 	@Override
47
 	public IPartialExpression compile(ExpressionScope scope) throws CompileException {
53
 	public IPartialExpression compile(ExpressionScope scope) throws CompileException {
54
+        for(BiFunction<ParsedExpressionMap, ExpressionScope, ? extends IPartialExpression> compileOverride : compileOverrides) {
55
+            final IPartialExpression apply = compileOverride.apply(this, scope);
56
+            if(apply != null)
57
+                return apply;
58
+        }
59
+	    
48
 		StoredType usedHint = null;
60
 		StoredType usedHint = null;
49
 		List<StoredType> keyHints = new ArrayList<>();
61
 		List<StoredType> keyHints = new ArrayList<>();
50
 		List<StoredType> valueHints = new ArrayList<>();
62
 		List<StoredType> valueHints = new ArrayList<>();

Loading…
Cancel
Save