Skip to content

Commit 20ef0dd

Browse files
committed
add some more tests for is
1 parent 4ddd4cb commit 20ef0dd

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

compiler/types/classvaluetype.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def getWasmName(self):
102102
elif self.className == "int":
103103
return "i64"
104104
else:
105-
raise Exception("TODO")
105+
return "i32"
106106

107107
def __str__(self):
108108
return self.className

compiler/wasm_backend.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ def Program(self, node: Program):
119119
self.instr('(import "imports" "logString" (func $log_str (param i32)))')
120120
self.instr('(import "imports" "assert" (func $assert (param i32)))')
121121
self.instr('(memory (import "js" "mem") 1)')
122+
# initialize all globals to 0 for now, since we don't statically allocate strings or arrays
122123
for v in var_decls:
123124
self.instr(f"(global ${v.var.identifier.name} (mut {v.var.t.getWasmName()})")
124125
self.instr(f"{v.var.t.getWasmName()}.const 0")
@@ -131,9 +132,11 @@ def Program(self, node: Program):
131132
self.builder.func("main")
132133
self.defaultToGlobals = True
133134
self.locals = self.builder.newBlock()
135+
# initialize memory counter
134136
self.instr("i32.const 0") # addr 0
135137
self.instr("i32.const 8") # store value 8
136138
self.instr("i32.store")
139+
# initialize globals
137140
for v in var_decls:
138141
self.visit(v.value)
139142
self.instr(f"global.set ${v.getIdentifier().name}")
@@ -256,18 +259,19 @@ def BinaryExpr(self, node: BinaryExpr):
256259
self.instr("i64.lt_s")
257260
self.instr("i64.eqz")
258261
elif operator == "==":
259-
# TODO: refs
260-
if leftType == BoolType():
261-
self.instr("i32.eq")
262-
else:
262+
# TODO: refs, string
263+
if leftType == IntType():
263264
self.instr("i64.eq")
264-
elif operator == "!=":
265-
if leftType == BoolType():
266-
self.instr("i32.ne")
267265
else:
266+
self.instr("i32.eq")
267+
elif operator == "!=":
268+
if leftType == IntType():
268269
self.instr("i64.ne")
270+
else:
271+
self.instr("i32.ne")
269272
elif operator == "is":
270-
raise Exception("TODO")
273+
# pointer comparisons
274+
self.instr("i32.eq")
271275
# logical operators
272276
elif operator == "and":
273277
self.instr("i32.and")

tests/runtime/lists.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ def getNestedIdx(lst:[[int]], idx:int)->[int]:
2525
a = []
2626
b = []
2727

28+
assert b is b
29+
assert not (a is b)
30+
assert not (a is None)
31+
2832
assert len(x) == 0
2933
assert len([]) == 0
3034
assert len([1, 2, 3]) == 3

tests/runtime/operators.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
assert w * x == x
2222
assert 5 // 2 == y
2323
assert 5 % 2 == x
24-
assert z is z
2524
assert not False
2625
assert not (w != x)
2726
assert -x == -1
@@ -32,3 +31,10 @@
3231
assert True if x != y else False
3332
assert False if x == y else True
3433

34+
assert z is z
35+
assert None is None
36+
assert not (object() is object())
37+
assert z is None
38+
z = object()
39+
assert z is z
40+

0 commit comments

Comments
 (0)