diff options
| author | mryouse | 2022-06-22 03:14:34 +0000 | 
|---|---|---|
| committer | mryouse | 2022-06-22 03:14:34 +0000 | 
| commit | 7e69cf2d253ba12055b827c584380438e2e0a70f (patch) | |
| tree | 6db0c47e4aa913c97cb539c0143355422adcde4f /neb/std/types.py | |
| parent | e74d7437e746ef48bd8cee742412f826d0e7202f (diff) | |
add types to the environment directly
Diffstat (limited to 'neb/std/types.py')
| -rw-r--r-- | neb/std/types.py | 31 | 
1 files changed, 30 insertions, 1 deletions
| diff --git a/neb/std/types.py b/neb/std/types.py index ab099e2..b5fb993 100644 --- a/neb/std/types.py +++ b/neb/std/types.py @@ -1,4 +1,4 @@ -from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic +from .. import TypeEnum, Environment, Arg, Builtin, evaluate, InterpretPanic, NebType  from ..structs import *  TYPES = Environment() @@ -58,3 +58,32 @@ def interpretTypeOf(symbol, args, env, ns):      return Type(f"{args[0].type_}")  TYPES.register("typeof", Builtin("typeof", interpretTypeOf, [Arg("candidate", TypeEnum.ANY)])) + +def interpretIsAny(symbol, args, env, ns): +    return Bool(True) + +TYPES.register("any?", Builtin("any?", interpretIsAny, [Arg("arg", TypeEnum.ANY)])) + +def interpretIsLiteral(symbol, args, env, ns): +    return Bool(isinstance(args[0], Literal)) + +TYPES.register("literal?", Builtin("literal?", interpretIsLiteral, [Arg("arg", TypeEnum.ANY)])) + +# add types to env +any_type = NebType(":any", None, interpretIsAny) +literal_type = NebType(":literal", any_type, interpretIsLiteral) +string_type = NebType(":string", literal_type, interpretIsString) +list_type = NebType(":list", any_type, interpretIsList) +bool_type = NebType(":bool", literal_type, interpretIsBool) +number_type = NebType(":number", literal_type, interpretIsNumber) +int_type = NebType(":int", number_type, interpretIsInt) +float_type = NebType(":float", number_type, interpretIsFloat) + +TYPES.register(":any", any_type) +TYPES.register(":literal", literal_type) +TYPES.register(":string", string_type) +TYPES.register(":list", list_type) +TYPES.register(":bool", bool_type) +TYPES.register(":number", number_type) +TYPES.register(":int", int_type) +TYPES.register(":float", float_type) | 
