diff --git a/src/builtins.rs b/src/builtins.rs index 66e3121..e7fac2a 100644 --- a/src/builtins.rs +++ b/src/builtins.rs @@ -569,3 +569,13 @@ impl Bool { Float::create(bool_value as i64 as f64).into() } } + +impl Nil { + pub(crate) fn do_call(_vm: &mut Vm, _state: FunctionState) -> FunctionResult { + FunctionResult::ReturnPush(Nil::create()) + } + + pub(crate) fn init(_vm: &mut Vm, _state: FunctionState) -> FunctionResult { + FunctionResult::ReturnPush(Nil::create()) + } +} diff --git a/src/obj.rs b/src/obj.rs index add52f5..7294e42 100644 --- a/src/obj.rs +++ b/src/obj.rs @@ -221,7 +221,15 @@ pub fn init_types() { // Operators }, - Nil { }, + Nil { + // Conversion methods + + // Constructor + __call__ => BuiltinFunction::create("__call__", Nil::do_call, 1), + __init__ => BuiltinFunction::create("__init__", Nil::init, 1), + + // Operators + }, BuiltinFunction { }, UserFunction { }, Method { }, diff --git a/tests/bool.npp b/tests/bool.npp index b4b9bf6..734c3c7 100644 --- a/tests/bool.npp +++ b/tests/bool.npp @@ -70,3 +70,4 @@ println(Bool("true")) println(Bool(1)) println(Bool(1.0)) println(Bool(true)) +println(Bool(nil)) diff --git a/tests/bool.npp.expect b/tests/bool.npp.expect index e210737..f38d980 100644 --- a/tests/bool.npp.expect +++ b/tests/bool.npp.expect @@ -53,3 +53,4 @@ true true true true +false diff --git a/tests/nil.npp b/tests/nil.npp new file mode 100644 index 0000000..6ec69b0 --- /dev/null +++ b/tests/nil.npp @@ -0,0 +1,16 @@ +# Nil type operator and function tests + +a = nil + +println("__not__") +println(!nil) +println(!!nil) + +println("__eq__") +println(nil == nil) + +println("__ne__") +println(nil != nil) + +println("constructor") +println(Nil()) diff --git a/tests/nil.npp.expect b/tests/nil.npp.expect new file mode 100644 index 0000000..d778629 --- /dev/null +++ b/tests/nil.npp.expect @@ -0,0 +1,9 @@ +__not__ +true +false +__eq__ +true +__ne__ +false +constructor +nil