Skip to content

Commit f04850f

Browse files
committed
- Renamed enum constant index to ordinal
- Added ordinal to variant options - Added GetMatchingVariantField; from now on values retrieved from variant option fields in a match or case will result in such expression. This may make it easier for compilers.
1 parent fcbeffd commit f04850f

30 files changed

Lines changed: 287 additions & 200 deletions

File tree

‎CodeFormatter/src/main/java/org/openzen/zenscript/formatter/ExpressionFormatter.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.openzen.zenscript.codemodel.expression.GetFieldExpression;
4646
import org.openzen.zenscript.codemodel.expression.GetFunctionParameterExpression;
4747
import org.openzen.zenscript.codemodel.expression.GetLocalVariableExpression;
48+
import org.openzen.zenscript.codemodel.expression.GetMatchingVariantField;
4849
import org.openzen.zenscript.codemodel.expression.GetStaticFieldExpression;
4950
import org.openzen.zenscript.codemodel.expression.GetterExpression;
5051
import org.openzen.zenscript.codemodel.expression.GlobalCallExpression;
@@ -480,6 +481,11 @@ public ExpressionString visitGetFunctionParameter(GetFunctionParameterExpression
480481
public ExpressionString visitGetLocalVariable(GetLocalVariableExpression expression) {
481482
return new ExpressionString(expression.variable.name, ZenScriptOperator.PRIMARY);
482483
}
484+
485+
@Override
486+
public ExpressionString visitGetMatchingVariantField(GetMatchingVariantField expression) {
487+
return new ExpressionString(expression.value.parameters[expression.index], ZenScriptOperator.PRIMARY);
488+
}
483489

484490
@Override
485491
public ExpressionString visitGetStaticField(GetStaticFieldExpression expression) {

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/definition/VariantDefinition.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ public <T> T accept(DefinitionVisitor<T> visitor) {
3232

3333
public static class Option extends Taggable {
3434
public final String name;
35+
public final int ordinal;
3536
public final ITypeID[] types;
3637

37-
public Option(String name, ITypeID[] types) {
38+
public Option(String name, int ordinal, ITypeID[] types) {
3839
this.name = name;
40+
this.ordinal = ordinal;
3941
this.types = types;
4042
}
4143

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/ExpressionVisitor.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ public interface ExpressionVisitor<T> {
8080

8181
public T visitGetLocalVariable(GetLocalVariableExpression expression);
8282

83+
public T visitGetMatchingVariantField(GetMatchingVariantField expression);
84+
8385
public T visitGetStaticField(GetStaticFieldExpression expression);
8486

8587
public T visitGetter(GetterExpression expression);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package org.openzen.zenscript.codemodel.expression;
7+
8+
import org.openzen.zencode.shared.CodePosition;
9+
import org.openzen.zenscript.codemodel.expression.switchvalue.VariantOptionSwitchValue;
10+
import org.openzen.zenscript.codemodel.scope.TypeScope;
11+
12+
/**
13+
*
14+
* @author Hoofdgebruiker
15+
*/
16+
public class GetMatchingVariantField extends Expression {
17+
public final VariantOptionSwitchValue value;
18+
public final int index;
19+
20+
public GetMatchingVariantField(CodePosition position, VariantOptionSwitchValue value, int index) {
21+
super(position, value.option.types[index], null);
22+
23+
this.value = value;
24+
this.index = index;
25+
}
26+
27+
@Override
28+
public <T> T accept(ExpressionVisitor<T> visitor) {
29+
return visitor.visitGetMatchingVariantField(this);
30+
}
31+
32+
@Override
33+
public Expression transform(ExpressionTransformer transformer) {
34+
return this;
35+
}
36+
37+
@Override
38+
public Expression normalize(TypeScope scope) {
39+
return this;
40+
}
41+
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/switchvalue/VariantOptionSwitchValue.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@
66
package org.openzen.zenscript.codemodel.expression.switchvalue;
77

88
import org.openzen.zenscript.codemodel.member.ref.VariantOptionRef;
9-
import org.openzen.zenscript.codemodel.statement.VarStatement;
109

1110
/**
1211
*
1312
* @author Hoofdgebruiker
1413
*/
1514
public class VariantOptionSwitchValue implements SwitchValue {
1615
public final VariantOptionRef option;
17-
public final VarStatement[] parameters;
16+
public final String[] parameters;
1817

19-
public VariantOptionSwitchValue(VariantOptionRef option, VarStatement[] parameters) {
18+
public VariantOptionSwitchValue(VariantOptionRef option, String[] parameters) {
2019
this.option = option;
2120
this.parameters = parameters;
2221
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/EnumConstantMember.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public class EnumConstantMember {
1717
public final CodePosition position;
1818
public final HighLevelDefinition definition;
1919
public final String name;
20-
public final int value;
20+
public final int ordinal;
2121

2222
public NewExpression constructor;
2323

24-
public EnumConstantMember(CodePosition position, HighLevelDefinition definition, String name, int value) {
24+
public EnumConstantMember(CodePosition position, HighLevelDefinition definition, String name, int ordinal) {
2525
this.position = position;
2626
this.definition = definition;
2727
this.name = name;
28-
this.value = value;
28+
this.ordinal = ordinal;
2929
}
3030
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/scope/ExpressionScope.java‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.openzen.zenscript.codemodel.GenericMapper;
1717
import org.openzen.zenscript.codemodel.expression.Expression;
1818
import org.openzen.zenscript.codemodel.expression.GetLocalVariableExpression;
19+
import org.openzen.zenscript.codemodel.expression.GetMatchingVariantField;
20+
import org.openzen.zenscript.codemodel.expression.switchvalue.VariantOptionSwitchValue;
1921
import org.openzen.zenscript.codemodel.generic.TypeParameter;
2022
import org.openzen.zenscript.codemodel.partial.IPartialExpression;
2123
import org.openzen.zenscript.codemodel.statement.LoopStatement;
@@ -35,7 +37,7 @@ public class ExpressionScope extends BaseScope {
3537

3638
public final List<ITypeID> hints;
3739
public final Map<TypeParameter, ITypeID> genericInferenceMap;
38-
public final Map<String, VarStatement> innerVariables = new HashMap<>();
40+
public final Map<String, Function<CodePosition, Expression>> innerVariables = new HashMap<>();
3941

4042
public ExpressionScope(BaseScope outer) {
4143
this.outer = outer;
@@ -70,7 +72,7 @@ private ExpressionScope(
7072
List<ITypeID> hints,
7173
Function<CodePosition, Expression> dollar,
7274
Map<TypeParameter, ITypeID> genericInferenceMap,
73-
Map<String, VarStatement> innerVariables) {
75+
Map<String, Function<CodePosition, Expression>> innerVariables) {
7476
this.outer = scope;
7577
this.hints = hints;
7678
this.dollar = dollar;
@@ -79,7 +81,11 @@ private ExpressionScope(
7981
}
8082

8183
public void addInnerVariable(VarStatement variable) {
82-
innerVariables.put(variable.name, variable);
84+
innerVariables.put(variable.name, position -> new GetLocalVariableExpression(position, variable));
85+
}
86+
87+
public void addMatchingVariantOption(String name, int index, VariantOptionSwitchValue value) {
88+
innerVariables.put(name, position -> new GetMatchingVariantField(position, value, index));
8389
}
8490

8591
public List<ITypeID> getResultTypeHints() {
@@ -121,7 +127,7 @@ public LocalMemberCache getMemberCache() {
121127
@Override
122128
public IPartialExpression get(CodePosition position, GenericName name) {
123129
if (name.hasNoArguments() && innerVariables.containsKey(name.name))
124-
return new GetLocalVariableExpression(position, innerVariables.get(name.name));
130+
return innerVariables.get(name.name).apply(position);
125131

126132
return outer.get(position, name);
127133
}

‎JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/JavaCompiler.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public JavaCompiler(boolean debug) {
4848

4949
@Override
5050
public void addDefinition(HighLevelDefinition definition, SemanticModule module) {
51-
String className = getClassName(definition.position.filename);
51+
String className = getClassName(definition.position.getFilename());
5252
JavaScriptFile scriptFile = getScriptFile(className);
5353
target.register(definition.name, definition.accept(new JavaDefinitionVisitor(scriptFile.classWriter)));
5454
}

‎JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/CompilerUtils.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static int calcAccess(int modifiers) {
9090
}
9191

9292
public static String calcClasName(CodePosition position) {
93-
return position.filename.substring(0, position.filename.lastIndexOf('.')).replace("/", "_");
93+
return position.getFilename().substring(0, position.getFilename().lastIndexOf('.')).replace("/", "_");
9494
}
9595

9696
public static void tagMethodParameters(FunctionHeader header, boolean isStatic) {
@@ -197,7 +197,7 @@ public Integer acceptString(StringSwitchValue value) {
197197

198198
@Override
199199
public Integer acceptEnumConstant(EnumConstantSwitchValue value) {
200-
return value.constant.value;
200+
return value.constant.ordinal;
201201
}
202202

203203
@Override

‎JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,6 +1703,11 @@ public Void visitGetLocalVariable(GetLocalVariableExpression expression) {
17031703
javaWriter.label(label);
17041704
return null;
17051705
}
1706+
1707+
@Override
1708+
public Void visitGetMatchingVariantField(GetMatchingVariantField expression) {
1709+
throw new UnsupportedOperationException(); // TODO
1710+
}
17061711

17071712
@Override
17081713
public Void visitGetStaticField(GetStaticFieldExpression expression) {

0 commit comments

Comments
 (0)