diff --git a/src/builtins.c b/src/builtins.c index c78eeee..abb0010 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -8,10 +8,6 @@ #include #include -LISP_FUNC_0(ucl_builtin_hello_world) { - return ucl_string_create(strdup("Hello, world!")); -} - LISP_FUNC_1(ucl_builtin_type, arg) { switch (arg->type) { case UCL_TYPE_CELL: diff --git a/src/builtins.h b/src/builtins.h index fe2ce5e..a1e8908 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -46,7 +46,6 @@ static struct ucl_object *func_name##_impl(struct ucl_object *arg0_name, struct ucl_object *arg1_name) -struct ucl_object *ucl_builtin_hello_world(struct ucl_object *args); struct ucl_object *ucl_builtin_error(struct ucl_object *args); struct ucl_object *ucl_builtin_type(struct ucl_object *args); struct ucl_object *ucl_builtin_symbol_p(struct ucl_object *args); diff --git a/src/main.c b/src/main.c index 385d5fe..ad3c32b 100644 --- a/src/main.c +++ b/src/main.c @@ -17,13 +17,32 @@ int main(int argc, const char **argv) { ucl_state_put(state, "/", ucl_builtin_create(ucl_builtin_div)); ucl_state_put(state, "%", ucl_builtin_create(ucl_builtin_mod)); + ucl_state_put(state, "concat", ucl_builtin_create(ucl_builtin_concat)); + + ucl_state_put(state, "error", ucl_builtin_create(ucl_builtin_error)); + ucl_state_put(state, "type", ucl_builtin_create(ucl_builtin_type)); + ucl_state_put(state, "symbol-p", ucl_builtin_create(ucl_builtin_symbol_p)); + ucl_state_put(state, "string-p", ucl_builtin_create(ucl_builtin_string_p)); + ucl_state_put(state, "int-p", ucl_builtin_create(ucl_builtin_int_p)); + ucl_state_put(state, "list-p", ucl_builtin_create(ucl_builtin_list_p)); + struct ucl_object *sexp = ucl_parse(argv[1]); struct ucl_object *result = ucl_evaluate(state, ucl_car(sexp)); - assert(result != NULL); - assert(result->type == UCL_TYPE_INT); - - printf("%d\n", result->integer); + switch (result->type) { + case UCL_TYPE_INT: + printf("%d\n", result->integer); + break; + case UCL_TYPE_STRING: + printf("\"%s\"\n", result->string); + break; + case UCL_TYPE_SYMBOL: + printf("%s\n", result->string); + break; + case UCL_TYPE_ERROR: + printf("ERROR: %s\n", result->error); + return 1; + } return 0; }