aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
authormryouse2022-07-02 03:51:10 +0000
committermryouse2022-07-02 03:51:10 +0000
commit78398a11828e9affd8be0c83ee16d6283e0a27dc (patch)
tree8b1ed32ef876e5cc3fad951d56c3f277885eb073 /neb
parent2f43cbc79d5aa5d4677e44377492a3010840b58a (diff)
refactor: get rid of deepcopy for performance, pass inner type instead
Diffstat (limited to 'neb')
-rw-r--r--neb/__init__.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/neb/__init__.py b/neb/__init__.py
index 3ba9172..0757071 100644
--- a/neb/__init__.py
+++ b/neb/__init__.py
@@ -84,12 +84,12 @@ class Function:
ret.append(param)
continue
ev = evaluate(param, env, ns)
- #expected_name = f"{arg.type_}"
expected_name = arg.type_.name
- expected_type = deepcopy(env.get(expected_name))
+ expected_type = env.get(expected_name)
+ inner = None
if arg.type_.inner is not None:
- expected_type.name.inner = arg.type_.inner
- valid = expected_type.validate_type(ev, env, ns)
+ inner = env.get(arg.type_.inner.name)
+ valid = expected_type.validate_type(ev, env, ns, inner)
if not valid.value:
exp = f"{arg.type_}"
rec = f"{ev.type_}"
@@ -182,7 +182,7 @@ class TypeWrap:
self.parent = parent
self.is_func = is_func
- def validate_type(self, target, env, ns):
+ def validate_type(self, target, env, ns, inner=None):
# if it's an any type, it's valid
if self.parent is None:
return Bool(True)
@@ -191,7 +191,15 @@ class TypeWrap:
else:
valid = self.is_func(self.name, [target], env, ns)
if valid.value == True:
- return valid
+ if inner is None:
+ return valid
+ else:
+ for arg in target.args:
+ valid = inner.validate_type(arg, env, ns)
+ if valid.value == False:
+ return Bool(False)
+ return valid
+
#parent_type = env.get(f"{target.type_}")
parent_type = env.get(target.type_.name)
while valid.value != True and parent_type.parent is not None: