1

restructure + syntactic sugar implementation

This commit is contained in:
Christoph
2021-08-11 21:11:35 +02:00
parent 7365c41e11
commit 3a6814a850
27 changed files with 145 additions and 86 deletions

81
tests/test_method.py Normal file
View File

@ -0,0 +1,81 @@
from simpleparser import parse
from objmodel import W_NormalObject
from interpreter import Interpreter
def test_assign():
ast = parse("""
object a:
b = 5
def set(n):
self b = n
a set(7)
i = a b
""")
w_module = W_NormalObject()
interpreter = Interpreter()
interpreter.eval(ast, w_module)
assert w_module.getvalue("i").value == 7
def test_method_simple():
ast = parse("""
object a:
x = 11
def f:
self x
object b:
__parent__ = a
x = 22
af = a f # a is the receiver, therefore self is a in the method
bf = b f # b is the receiver, therefore self is b in the method
""")
interpreter = Interpreter()
w_module = interpreter.make_module()
interpreter.eval(ast, w_module)
assert w_module.getvalue("af").value == 11
assert w_module.getvalue("bf").value == 22
def test_method_complex():
ast = parse("""
k = 10
object a:
x = 11
y = 22
def f(a, b):
if a:
if b:
a
else:
k
else:
if b:
self x
else:
self y
object b:
__parent__ = a
y = 55
af11 = a f(1, 1)
af10 = a f(1, 0)
af01 = a f(0, 1)
af00 = a f(0, 0)
k = 908
bf11 = b f(1, 1)
bf10 = b f(1, 0)
bf01 = b f(0, 1)
bf00 = b f(0, 0)
""")
interpreter = Interpreter()
w_module = interpreter.make_module()
interpreter.eval(ast, w_module)
assert w_module.getvalue("af11").value == 1
assert w_module.getvalue("af10").value == 10
assert w_module.getvalue("af01").value == 11
assert w_module.getvalue("af00").value == 22
assert w_module.getvalue("bf11").value == 1
assert w_module.getvalue("bf10").value == 908
assert w_module.getvalue("bf01").value == 11
assert w_module.getvalue("bf00").value == 55