Skip to content

Commit 6a87ca8

Browse files
fix(vm): verify prev slots for objects.
1 parent ea34c41 commit 6a87ca8

2 files changed

Lines changed: 5 additions & 0 deletions

File tree

compiler/src/modules/parser/types.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ impl SSAChunk {
187187
for (_, body, _, _) in &mut self.functions {
188188
body.finalize_prev_slots();
189189
}
190+
191+
for body in &mut self.classes {
192+
body.finalize_prev_slots();
193+
}
190194

191195
let phi_count = self.instructions.iter().filter(|i| i.opcode == OpCode::Phi).count();
192196
if phi_count > 0 {

compiler/tests/cases/vm.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@
535535
{"src": "class Counter:\n def __init__(self):\n self.n = 0\n def inc(self):\n self.n = self.n + 1\n return self.n\nc = Counter()\nprint(c.inc())\nprint(c.inc())\nprint(c.inc())", "output": ["1", "2", "3"]},
536536
{"src": "class Box:\n def __init__(self, v):\n self.v = v\na = Box(1)\nb = Box(2)\nprint(a.v)\nprint(b.v)", "output": ["1", "2"]},
537537
{"src": "class Calc:\n def __init__(self, base):\n self.base = base\n def add(self, n):\n return self.base + n\nc = Calc(10)\nprint(c.add(5))\nprint(c.add(20))", "output": ["15", "30"]},
538+
{"src": "class Euler:\n def __init__(self, n_terms):\n self.accuracy = n_terms\n self.terms = [1 / self._factorial(n) for n in range(self.accuracy)]\n self.value = sum(self.terms)\n def _factorial(self, n):\n res = 1\n for i in range(2, n + 1):\n res *= i\n return res\ne = Euler(10)\nprint(f\"Result: {e.value}\")", "output": ["Result: 2.7182815255731922"]},
538539
{"src": "class Foo:\n pass\nf = Foo()\nprint(type(f))", "output": ["<class 'object'>"]},
539540
{"src": "def f(**kw):\n return kw\nprint(f(a=1, b=2))", "output": ["{'a': 1, 'b': 2}"]},
540541
{"src": "def f(x, **kw):\n return (x, kw)\nprint(f(1, y=2, z=3))", "output": ["(1, {'y': 2, 'z': 3})"]},

0 commit comments

Comments
 (0)