diff options
Diffstat (limited to 'neb/__init__.py')
| -rw-r--r-- | neb/__init__.py | 96 |
1 files changed, 1 insertions, 95 deletions
diff --git a/neb/__init__.py b/neb/__init__.py index f1f75d3..bfbea19 100644 --- a/neb/__init__.py +++ b/neb/__init__.py @@ -90,16 +90,6 @@ def evaluate(expr, env, ns=None): raise InterpretPanic(expr.args[0], "unable to evaluate") -# THINGS -# - functions/syntax can have multiple arity definitions -# - functions can have multiple same-arity, different-type definitions - -# callable -# - name -# - implementations -# - signature (arguments (name and type), return type) - - class Signature: def __init__(self, *args, many=None, return_type=None): @@ -123,7 +113,6 @@ class Signature: return out def get_type_by_idx(self, idx): - #print(f"getting type by idx: {idx}") if idx < len(self.args): return self.args[idx] else: @@ -138,16 +127,6 @@ class Signature: return out - - - - - - - - - - class Callable: def __init__(self, name, params, body, args=None, many=None): @@ -156,7 +135,6 @@ class Callable: self.body = body self.args = args self.many = many - #self.type_ = TypeEnum.ANY # TODO no it's not self.type_ = Type(":any") # TODO no it's not self.return_type = Type(":any") @@ -285,33 +263,6 @@ class NebSyntax(Special): return self.body(expr.args[0], expr.args[1:], env, ns) -class Function(Callable): - - def __init__(self, name, params, body, args=None, many=None): - super().__init__(name, params, body, args, many) - - """ - def precall(self, symbol, params, env, ns): - ret = [] - - for idx, param in enumerate(params): - if idx < len(self.args): - arg = self.args[idx] - else: - arg = self.many - ev = evaluate(param, env, ns) - expected_type = evaluate(arg.type_, env, ns) - valid = expected_type.validate_type(ev, env, ns) - if not valid.value: - exp = f"{arg.type_}" - rec = f"{ev.type_}" - raise InterpretPanic(symbol, f"received {rec}, expected {exp}", ev) - ret.append(ev) - return ret - """ - - -#class Builtin(Function): class Builtin(Callable): def __init__(self, name, callable_, args=None, many=None, return_type=None): @@ -323,23 +274,12 @@ class Builtin(Callable): return f"builtin function {self.name}" def call(self, expr, env, ns): - ''' - self.arity_check(expr.args[0], expr.args[1:]) - evaluated_args = self.precall(expr.args[0], expr.args[1:], env, ns) - return self.body(expr.args[0], evaluated_args, env, ns) - ''' - #print(type(expr.args[1])) return self.body(expr.args[0], expr.args[1:], env, ns) -#class UserFunction(Function): class UserFunction(Callable): def __init__(self, name, params, many, body): - #newparams, args, many = self.process_params(name, params) - #super().__init__(name, newparams, body, args, many) - #for p in params: - # print(p) super().__init__(name, params, body, params, many) def __str__(self): @@ -352,41 +292,7 @@ class UserFunction(Callable): out = out + f"{expr} " return out.strip() + ")" - - ''' - def process_params(self, name, params): - newparams = [] - args = [] - many = None - prev_type = False - first = True - for param in params: - if isinstance(param, Symbol): - if many is not None: - raise NebPanic("& must be last argument") - if param.name == "&": - many = Arg(param.name, TypeEnum.ANY) - else: - newparams.append(param) - args.append(Arg(param.name, TypeEnum.ANY)) - prev_type = False - elif isinstance(param, Type) and not prev_type and not first: - if many is None: - #args[-1].type_ = param.name - args[-1].type_ = param - else: - #many.type_ = param.name - many.type_ = param - prev_type = True - else: - raise NebPanic("invalid :func signature", param) - first = False - return newparams, args, many - ''' - def call(self, expr, env, ns): - #self.arity_check(expr.args[0], expr.args[1:]) - #evaluated_args = self.precall(expr.args[0], expr.args[1:], env, ns) evaluated_args = expr.args[1:] this_env = Environment(env) for idx, param in enumerate(self.params): @@ -410,7 +316,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, Function) or isinstance(self.is_func, MultiFunction): + if isinstance(self.is_func, MultiFunction): valid = self.is_func.call(Expr([self.name, target]), env, ns) else: valid = self.is_func(self.name, [target], env, ns) |
