Skip to content

Commit cabd7ba

Browse files
committed
Fixed more bugs in the new type system; fixed bugs in function calls; fixed normalization bugs.
1 parent bd90cfe commit cabd7ba

18 files changed

Lines changed: 131 additions & 32 deletions

File tree

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,11 @@ public boolean isDestructible() {
117117
for (IDefinitionMember member : members) {
118118
if (member instanceof DestructorMember)
119119
isDestructible = true;
120-
if ((member instanceof FieldMember) && ((FieldMember)member).type.isDestructible())
121-
isDestructible = true;
120+
if (member instanceof FieldMember) {
121+
FieldMember field = (FieldMember)member;
122+
if (!field.type.isDefinition(this) && field.type.isDestructible())
123+
isDestructible = true;
124+
}
122125
if ((member instanceof ImplementationMember) && ((ImplementationMember)member).type.isDestructible())
123126
isDestructible = true;
124127
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/ScriptBlock.java‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@ public ScriptBlock withStatements(List<Statement> newStatements) {
3434
}
3535

3636
public ScriptBlock normalize(TypeScope scope) {
37-
List<Statement> result = new ArrayList<>();
37+
List<Statement> normalized = new ArrayList<>();
3838
for (Statement statement : statements) {
39-
result.add(statement.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class)));
39+
normalized.add(statement.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class)));
4040
}
41-
return new ScriptBlock(pkg, result);
41+
ScriptBlock result = new ScriptBlock(pkg, normalized);
42+
result.addAllTagsFrom(this);
43+
return result;
4244
}
4345
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ConditionalExpression(
2626
StoredType type) {
2727
super(position, type, binaryThrow(position, condition.thrownType, binaryThrow(position, ifThen.thrownType, ifElse.thrownType)));
2828

29-
if (ifThen.type != ifElse.type)
29+
if (!ifThen.type.equals(ifElse.type))
3030
throw new AssertionError();
3131

3232
this.condition = condition;

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@
88
import java.util.List;
99
import org.openzen.zencode.shared.CodePosition;
1010
import org.openzen.zencode.shared.CompileException;
11+
import org.openzen.zencode.shared.CompileExceptionCode;
1112
import org.openzen.zenscript.codemodel.annotations.AnnotationDefinition;
1213
import org.openzen.zenscript.codemodel.FunctionHeader;
1314
import org.openzen.zenscript.codemodel.FunctionParameter;
1415
import org.openzen.zenscript.codemodel.GenericMapper;
1516
import org.openzen.zenscript.codemodel.expression.GetFunctionParameterExpression;
17+
import org.openzen.zenscript.codemodel.expression.InvalidExpression;
1618
import org.openzen.zenscript.codemodel.expression.LambdaClosure;
1719
import org.openzen.zenscript.codemodel.partial.IPartialExpression;
1820
import org.openzen.zenscript.codemodel.statement.LoopStatement;
21+
import org.openzen.zenscript.codemodel.type.BasicTypeID;
1922
import org.openzen.zenscript.codemodel.type.GenericName;
2023
import org.openzen.zenscript.codemodel.type.StoredType;
2124
import org.openzen.zenscript.codemodel.type.TypeID;
@@ -49,8 +52,12 @@ public IPartialExpression get(CodePosition position, GenericName name) throws Co
4952
if (outer == null) {
5053
if (name.hasNoArguments()) {
5154
for (FunctionParameter parameter : header.parameters) {
52-
if (parameter.name.equals(name.name))
55+
if (parameter.name.equals(name.name)) {
56+
if (parameter.type.isBasic(BasicTypeID.UNDETERMINED))
57+
throw new CompileException(position, CompileExceptionCode.CALL_NO_VALID_METHOD, "parameter with undetermined type");
58+
5359
return new GetFunctionParameterExpression(position, parameter);
60+
}
5461
}
5562
}
5663

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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.statement;
7+
8+
import org.openzen.zencode.shared.Taggable;
9+
10+
/**
11+
*
12+
* @author Hoofdgebruiker
13+
*/
14+
public class VariableID extends Taggable {
15+
16+
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/GenericTypeID.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public boolean isConst() {
5959
public boolean isDestructible() {
6060
return false; // TODO: actually depends on the type..?
6161
}
62+
63+
@Override
64+
public boolean isGeneric() {
65+
return true;
66+
}
6267

6368
@Override
6469
public boolean hasInferenceBlockingTypeParameters(TypeParameter[] parameters) {

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/StoredType.java‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import java.util.Map;
99
import java.util.Objects;
1010
import org.openzen.zenscript.codemodel.GenericMapper;
11+
import org.openzen.zenscript.codemodel.HighLevelDefinition;
1112
import org.openzen.zenscript.codemodel.generic.TypeParameter;
1213
import org.openzen.zenscript.codemodel.type.member.LocalMemberCache;
1314
import org.openzen.zenscript.codemodel.type.storage.StorageTag;
14-
import org.openzen.zenscript.codemodel.type.storage.ValueStorageTag;
1515

1616
/**
1717
*
@@ -66,6 +66,10 @@ public boolean isBasic(BasicTypeID type) {
6666
return this.type == type;
6767
}
6868

69+
public boolean isGeneric() {
70+
return type.isGeneric();
71+
}
72+
6973
public StoredType withoutOptional() {
7074
return new StoredType(type.withoutOptional(), storage);
7175
}
@@ -96,6 +100,10 @@ public boolean isEnum() {
96100
return type.isEnum();
97101
}
98102

103+
public boolean isDefinition(HighLevelDefinition definition) {
104+
return type.isDefinition(definition);
105+
}
106+
99107
public DefinitionTypeID asDefinition() {
100108
return (DefinitionTypeID)type;
101109
}

‎CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/TypeID.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.List;
99
import java.util.Map;
1010
import org.openzen.zenscript.codemodel.GenericMapper;
11+
import org.openzen.zenscript.codemodel.HighLevelDefinition;
1112
import org.openzen.zenscript.codemodel.generic.TypeParameter;
1213
import org.openzen.zenscript.codemodel.type.member.LocalMemberCache;
1314
import org.openzen.zenscript.codemodel.type.storage.StorageTag;
@@ -62,6 +63,10 @@ default boolean isImmutable() {
6263
return false;
6364
}
6465

66+
default boolean isGeneric() {
67+
return false;
68+
}
69+
6570
default TypeID withoutOptional() {
6671
throw new UnsupportedOperationException("Not an optional type");
6772
}
@@ -82,6 +87,10 @@ default boolean isEnum() {
8287
return false;
8388
}
8489

90+
default boolean isDefinition(HighLevelDefinition definition) {
91+
return false;
92+
}
93+
8594
default String toString(StorageTag storage) {
8695
if (storage == ValueStorageTag.INSTANCE)
8796
return toString();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public enum BuiltinID {
152152
INT_INC,
153153
INT_DEC,
154154
INT_ADD_INT,
155+
INT_ADD_USIZE,
155156
INT_SUB_INT,
156157
INT_MUL_INT,
157158
INT_DIV_INT,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,6 @@ private void visitInt() {
771771
dec(builtin, INT_INC, INT);
772772

773773
add(builtin, INT_ADD_INT, INT, INT);
774-
add(builtin, LONG_ADD_LONG, USIZE, LONG, INT_TO_LONG);
775774
add(builtin, LONG_ADD_LONG, LONG, LONG, INT_TO_LONG);
776775
add(builtin, FLOAT_ADD_FLOAT, FLOAT, FLOAT, INT_TO_FLOAT);
777776
add(builtin, DOUBLE_ADD_DOUBLE, DOUBLE, DOUBLE, INT_TO_DOUBLE);

0 commit comments

Comments
 (0)