From 5194669bd08d7cabefe1e22e72de75df5443af38 Mon Sep 17 00:00:00 2001 From: mryouse Date: Sun, 10 Jul 2022 21:11:52 +0000 Subject: eq? now supports types --- neb/std/boolean.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'neb/std/boolean.py') diff --git a/neb/std/boolean.py b/neb/std/boolean.py index e716a87..b37eaed 100644 --- a/neb/std/boolean.py +++ b/neb/std/boolean.py @@ -1,17 +1,28 @@ -from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic +from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic, TypeWrap from ..structs import * BOOLEAN = Environment() def interpretEq(symbol, args, env, ns): - # NOTE this currently only works for literals - # compare types because 0 != #false in neb - if type(args[0]) == type(args[1]) and args[0].value == args[1].value: - return Bool(True) - else: + # TODO this is a bit hacky + if (isinstance(args[0], Type) or isinstance(args[0], TypeWrap)) and \ + (isinstance(args[1], Type) or isinstance(args[1], TypeWrap)): + if args[0].name == args[1].name: + return Bool(True) + else: + return Bool(False) + elif type(args[0]) != type(args[1]): + print(f"not the same {type(args[0])} {type(args[1])}") return Bool(False) + elif isinstance(args[0], Literal): + if args[0].value == args[1].value: + return Bool(True) + else: + return Bool(False) + else: + raise InterpretPanic(symbol, "unknown comparison type", args[0]) -eq_arg = Arg("value", TypeEnum.LITERAL) +eq_arg = Arg("value", TypeEnum.ANY) BOOLEAN.register("eq?", Builtin("eq?", interpretEq, [eq_arg, eq_arg], return_type=Type(":bool"))) -- cgit v1.2.3 From 0ed39a708e332399b871a88bf6c7a777630f9247 Mon Sep 17 00:00:00 2001 From: mryouse Date: Mon, 11 Jul 2022 01:57:33 +0000 Subject: bugfix: remove extra print statements --- neb/std/boolean.py | 1 - 1 file changed, 1 deletion(-) (limited to 'neb/std/boolean.py') diff --git a/neb/std/boolean.py b/neb/std/boolean.py index b37eaed..e480656 100644 --- a/neb/std/boolean.py +++ b/neb/std/boolean.py @@ -12,7 +12,6 @@ def interpretEq(symbol, args, env, ns): else: return Bool(False) elif type(args[0]) != type(args[1]): - print(f"not the same {type(args[0])} {type(args[1])}") return Bool(False) elif isinstance(args[0], Literal): if args[0].value == args[1].value: -- cgit v1.2.3