Skip to content

Commit

Permalink
[interval] Add typing for interval
Browse files Browse the repository at this point in the history
  • Loading branch information
Hazurl authored and 5pilow committed Jul 21, 2023
1 parent 4c0793d commit ba3e820
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/main/java/leekscript/compiler/bloc/MainLeekBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ public MainLeekBlock(IACompiler compiler, WordCompiler wordCompiler, AIFile ai)
addClass(new ClassDeclarationInstruction(new Token("Array"), 0, ai, true, this, Type.ARRAY));
if (ai.getVersion() >= 4) {
addClass(new ClassDeclarationInstruction(new Token("Map"), 0, ai, true, this, Type.MAP));
addClass(new ClassDeclarationInstruction(new Token("Interval"), 0, ai, true, this, Type.INTERVAL));
}
addClass(new ClassDeclarationInstruction(new Token("String"), 0, ai, true, this, Type.STRING));
var objectClass = new ClassDeclarationInstruction(new Token("Object"), 0, ai, true, this, Type.OBJECT);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/leekscript/runner/AI.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public abstract class AI {
public final ClassLeekValue arrayClass;
public final ClassLeekValue legacyArrayClass;
public final ClassLeekValue mapClass;
public final ClassLeekValue intervalClass;
public final ClassLeekValue stringClass;
public final ClassLeekValue objectClass;
public final ClassLeekValue functionClass;
Expand Down Expand Up @@ -268,6 +269,7 @@ public double getDouble() {
arrayClass = new ClassLeekValue(this, "Array", valueClass);
legacyArrayClass = new ClassLeekValue(this, "Array", valueClass);
mapClass = new ClassLeekValue(this, "Map", valueClass);
intervalClass = new ClassLeekValue(this, "Interval", valueClass);
stringClass = new ClassLeekValue(this, "String", valueClass);
objectClass = new ClassLeekValue(this, "Object", valueClass);
functionClass = new ClassLeekValue(this, "Function", valueClass);
Expand Down Expand Up @@ -2980,6 +2982,7 @@ public ClassLeekValue classOf(Object value) {
if (value instanceof LegacyArrayLeekValue) return legacyArrayClass;
if (value instanceof ArrayLeekValue) return arrayClass;
if (value instanceof MapLeekValue) return mapClass;
if (value instanceof IntervalLeekValue) return intervalClass;
if (value instanceof String) return stringClass;
if (value instanceof ObjectLeekValue) return ((ObjectLeekValue) value).clazz;
if (value instanceof NativeObjectLeekValue)
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/leekscript/runner/values/ClassLeekValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,10 @@ public Object run(AI ai, Object thiz, Object... arguments) throws LeekRunExcepti
if (this == ai.mapClass) {
return new MapLeekValue(ai);
}
if (this == ai.integerClass) {
// TODO: construct empty interval
return null;
}
if (this == ai.objectClass) return new ObjectLeekValue(ai, ai.objectClass);

// Create the actual object
Expand Down
3 changes: 3 additions & 0 deletions src/test/java/test/TestInterval.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,8 @@ public void run() throws Exception {
code_v4_("return 1 in [1..1];").equals("true");
code_v4_("return 1 in [2..1];").equals("false");
code_strict_v4_("boolean x = 1 in [1..1]; return x").equals("true");

section("Interval typing");
code_strict_v4_("Interval i = [0..10]; return i instanceof Interval").equals("true");
}
}

0 comments on commit ba3e820

Please sign in to comment.