aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
Diffstat (limited to 'neb')
-rw-r--r--neb/__init__.py7
-rw-r--r--neb/std/types.py16
2 files changed, 13 insertions, 10 deletions
diff --git a/neb/__init__.py b/neb/__init__.py
index 7e3075b..c9e385e 100644
--- a/neb/__init__.py
+++ b/neb/__init__.py
@@ -177,13 +177,16 @@ class TypeWrap:
# if it's an any type, it's valid
if self.parent is None:
return Bool(True)
- valid = self.is_func.call(List([None, target]), env, ns)
+ if isinstance(self.is_func, UserFunction):
+ valid = self.is_func.call(Expr([None, target]), env, ns)
+ else:
+ valid = self.is_func(None, [target], env, ns)
if valid.value == True:
return valid
parent_type = env.get(f"{target.type_}")
while valid.value != True and parent_type.parent is not None:
parent_type = env.get(f"{parent_type.parent}")
- valid = Bool(self.name == parent_type.name)
+ valid = Bool(self.name == parent_type.name) # TODO wrong
return valid
def __str__(self):
diff --git a/neb/std/types.py b/neb/std/types.py
index 855a1d9..b5fb993 100644
--- a/neb/std/types.py
+++ b/neb/std/types.py
@@ -70,14 +70,14 @@ def interpretIsLiteral(symbol, args, env, ns):
TYPES.register("literal?", Builtin("literal?", interpretIsLiteral, [Arg("arg", TypeEnum.ANY)]))
# add types to env
-any_type = NebType(":any", None, Builtin("any?", interpretIsAny, [Arg("arg", TypeEnum.ANY)]))
-literal_type = NebType(":literal", any_type, Builtin("literal?", interpretIsLiteral, [Arg("arg", TypeEnum.ANY)]))
-string_type = NebType(":string", literal_type, Builtin("string?", interpretIsString, [Arg("arg", TypeEnum.ANY)]))
-list_type = NebType(":list", any_type, Builtin("list?", interpretIsList, [Arg("arg", TypeEnum.ANY)]))
-bool_type = NebType(":bool", literal_type, Builtin("bool?", interpretIsBool, [Arg("arg", TypeEnum.ANY)]))
-number_type = NebType(":number", literal_type, Builtin("number?", interpretIsNumber, [Arg("arg", TypeEnum.ANY)]))
-int_type = NebType(":int", number_type, Builtin("int?", interpretIsInt, [Arg("arg", TypeEnum.ANY)]))
-float_type = NebType(":float", number_type, Builtin("float?", interpretIsFloat, [Arg("arg", TypeEnum.ANY)]))
+any_type = NebType(":any", None, interpretIsAny)
+literal_type = NebType(":literal", any_type, interpretIsLiteral)
+string_type = NebType(":string", literal_type, interpretIsString)
+list_type = NebType(":list", any_type, interpretIsList)
+bool_type = NebType(":bool", literal_type, interpretIsBool)
+number_type = NebType(":number", literal_type, interpretIsNumber)
+int_type = NebType(":int", number_type, interpretIsInt)
+float_type = NebType(":float", number_type, interpretIsFloat)
TYPES.register(":any", any_type)
TYPES.register(":literal", literal_type)