#include "builtins.h" #include "node.h" #include "path.h" #include "module.h" void register_builtins(struct moka* moka) { assert(moka); moka_decl_native(moka, "println", mk_println); moka_decl_native(moka, "define", mk_define); } MOKA mk_println(struct moka* moka, struct vec* args) { assert(moka); assert(args); int line = 0; for (size_t i=0; isize; i++) { MOKA val = (MOKA) args->data[i]; if (i > 0) { printf(" "); } else { line = moka_get_lazy(moka, val)->line; } moka_dump(moka, MK_EVAL(val)); } printf("\n"); return moka_push_int(moka, 0, line); } MOKA mk_define(struct moka* moka, struct vec* args) { assert(moka); assert(args); assert(args->size == 2); MOKA target = (MOKA) args->data[0]; MOKA value = MK_EVAL((MOKA) args->data[1]); struct node* node = moka_get_lazy(moka, target); moka_push(moka, value); assert(node->token); moka_decl_var(moka, node->token->value, value); return value; }