summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uscript/uscript.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/uscript/uscript.c b/uscript/uscript.c
index ee02f15..a7e3ca1 100644
--- a/uscript/uscript.c
+++ b/uscript/uscript.c
@@ -8,9 +8,40 @@
#include "vm.h"
#include "parser.h"
+void core_print(int argc)
+{
+ (void)argc;
+
+ char *str = val_to_str(vm_peek(), NULL);
+ olog(str);
+ mem_free(str);
+
+ vm_push(create_zilch());
+}
+
+void core_len(int argc)
+{
+ (void)argc;
+
+ struct us_val val = vm_peek();
+ switch (val.type) {
+ case VAL_ARR:
+ vm_push(create_num(da_len(get_arr(val)->e)));
+ break;
+ case VAL_STR:
+ vm_push(create_num(get_str(val)->len));
+ break;
+ default:
+ vm_push(create_zilch());
+ }
+}
+
void us_init(void)
{
init_vm();
+
+ us_set_cfunc("core:len", core_len, 1);
+ us_set_cfunc("core:log", core_print, 1);
}
void us_deinit(void)