diff options
Diffstat (limited to 'neb')
| -rw-r--r-- | neb/__init__.py | 9 | ||||
| -rw-r--r-- | neb/std/core.py | 4 |
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): |
