diff options
| author | mryouse | 2022-07-11 02:00:24 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-11 02:00:24 +0000 |
| commit | 6cb8aa19bc47301ae34eecf8c119723c12da34bd (patch) | |
| tree | bd31d0b6a1a458d04a9488c0f69f8f10472fccb1 /neb/std/boolean.py | |
| parent | 3b2907af59fb7ed451dc4a73ae645d466f62ba13 (diff) | |
| parent | 0ed39a708e332399b871a88bf6c7a777630f9247 (diff) | |
Merge branch 'master' into feature/listtypes
Diffstat (limited to 'neb/std/boolean.py')
| -rw-r--r-- | neb/std/boolean.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/neb/std/boolean.py b/neb/std/boolean.py index e716a87..e480656 100644 --- a/neb/std/boolean.py +++ b/neb/std/boolean.py @@ -1,17 +1,27 @@ -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]): 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"))) |
