aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
Diffstat (limited to 'neb')
-rw-r--r--neb/__init__.py9
-rw-r--r--neb/std/core.py4
2 files changed, 9 insertions, 4 deletions
diff --git a/neb/__init__.py b/neb/__init__.py
index 0757071..735e4db 100644
--- a/neb/__init__.py
+++ b/neb/__init__.py
@@ -186,7 +186,7 @@ class TypeWrap:
# if it's an any type, it's valid
if self.parent is None:
return Bool(True)
- if isinstance(self.is_func, UserFunction):
+ if isinstance(self.is_func, Function):
valid = self.is_func.call(Expr([self.name, target]), env, ns)
else:
valid = self.is_func(self.name, [target], env, ns)
@@ -215,4 +215,9 @@ class NebType(TypeWrap):
pass
class UserType(TypeWrap):
- pass
+
+ def __init__(self, name, parent, is_func):
+ if name in ALL_TYPES:
+ raise NebPanic(f"already a type called {name}")
+ ALL_TYPES[name] = Type(name)
+ super().__init__(name, parent, is_func)
diff --git a/neb/std/core.py b/neb/std/core.py
index 1c3c4b4..d846498 100644
--- a/neb/std/core.py
+++ b/neb/std/core.py
@@ -201,9 +201,9 @@ def interpretType(symbol, args, env, ns):
if not isinstance(args[1], TypeWrap):
raise InterpretPanic(symbol, "parent must be a valid type", args[1])
- elif not env.contains(args[1].name):
+ elif not env.contains(args[1].name.name):
raise InterpretPanic(symbol, f"no such type {args[1]}")
- parent = env.get(args[1].name)
+ parent = env.get(args[1].name.name)
func = args[2]
if not isinstance(func, Function):