diff options
| author | mryouse | 2022-07-02 03:51:10 +0000 | 
|---|---|---|
| committer | mryouse | 2022-07-02 03:51:10 +0000 | 
| commit | 78398a11828e9affd8be0c83ee16d6283e0a27dc (patch) | |
| tree | 8b1ed32ef876e5cc3fad951d56c3f277885eb073 /neb/__init__.py | |
| parent | 2f43cbc79d5aa5d4677e44377492a3010840b58a (diff) | |
refactor: get rid of deepcopy for performance, pass inner type instead
Diffstat (limited to 'neb/__init__.py')
| -rw-r--r-- | neb/__init__.py | 20 | 
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: | 
