Minor restructure for platformio compatibility
This commit is contained in:
@@ -7,7 +7,7 @@ from dataclasses import dataclass
|
|||||||
# File lists
|
# File lists
|
||||||
#
|
#
|
||||||
|
|
||||||
PROGRAM_SOURCES = ["src/main.c"]
|
PROGRAM_SOURCES = ["examples/repl/main.c"]
|
||||||
LIB_SRCS = [
|
LIB_SRCS = [
|
||||||
"src/arena.c",
|
"src/arena.c",
|
||||||
"src/builtins.c",
|
"src/builtins.c",
|
||||||
@@ -67,7 +67,8 @@ class BuildVariant:
|
|||||||
repl_env = self.env.Clone()
|
repl_env = self.env.Clone()
|
||||||
repl_env.Append(LIBS=[self.static_lib])
|
repl_env.Append(LIBS=[self.static_lib])
|
||||||
self.repl_program = repl_env.Program(
|
self.repl_program = repl_env.Program(
|
||||||
self.built("uclisp"), pgm_objs,
|
self.built("uclisp"),
|
||||||
|
pgm_objs,
|
||||||
)
|
)
|
||||||
|
|
||||||
def configure_tests(self):
|
def configure_tests(self):
|
||||||
|
|||||||
@@ -51,10 +51,8 @@ int main(int argc, const char **argv) {
|
|||||||
struct ucl_object *sexp = ucl_parse(ucl, argv[1]);
|
struct ucl_object *sexp = ucl_parse(ucl, argv[1]);
|
||||||
struct ucl_object *result = ucl_evaluate(ucl, ucl_car(ucl, sexp));
|
struct ucl_object *result = ucl_evaluate(ucl, ucl_car(ucl, sexp));
|
||||||
|
|
||||||
if (result->type == UCL_TYPE_ERROR) {
|
ucl_print_obj(result);
|
||||||
printf("%s", result->error);
|
printf("\n");
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
26
library.json
Normal file
26
library.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "ucLISP",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "A toy LISP implementation for microcontrollers",
|
||||||
|
"keywords": "lisp, language, scripting, garbage collector",
|
||||||
|
"repository":
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://gitlab.maxregan.me/max/uclisp.git"
|
||||||
|
},
|
||||||
|
"authors":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Max Regan",
|
||||||
|
"email": "mgregan2@gmail.com",
|
||||||
|
"url": "https://www.gitlab.maxregan.me/max",
|
||||||
|
"maintainer": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"homepage": "https://gitlab.maxregan.me/max/uclisp",
|
||||||
|
"dependencies": {
|
||||||
|
},
|
||||||
|
"frameworks": "*",
|
||||||
|
"platforms": "*"
|
||||||
|
}
|
||||||
@@ -272,8 +272,7 @@ LISP_FUNC_2(ucl_builtin_append, state, scope, list, elem) {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: publicize
|
void ucl_add_builtin(struct ucl* ucl, const char *name, ucl_lisp fun) {
|
||||||
static void ucl_add_builtin(struct ucl* ucl, const char *name, ucl_lisp fun) {
|
|
||||||
ucl_scope_put(ucl, ucl->global_scope, name, ucl_builtin_create(ucl, fun));
|
ucl_scope_put(ucl, ucl->global_scope, name, ucl_builtin_create(ucl, fun));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ struct ucl_object *ucl_evaluate_list(struct ucl* state, struct ucl_scope *scope,
|
|||||||
return ucl_evaluate_builtin_form(state, scope, list);
|
return ucl_evaluate_builtin_form(state, scope, list);
|
||||||
} else {
|
} else {
|
||||||
assert(0);
|
assert(0);
|
||||||
|
UCL_COND_OR_RET_ERROR(false, "Unreachable error in ucl_evaluate_list");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
#define UNUSED __attribute__((unused))
|
#define UNUSED __attribute__((unused))
|
||||||
|
|
||||||
|
void ucl_add_builtin(struct ucl *state, const char *name, ucl_lisp fun);
|
||||||
|
void ucl_add_special(struct ucl *state, const char *name, ucl_lisp fun);
|
||||||
|
|
||||||
#define LISP_FUNC_0(func_name, ucl_name, scope_name) \
|
#define LISP_FUNC_0(func_name, ucl_name, scope_name) \
|
||||||
static struct ucl_object *func_name##_impl(struct ucl* ucl, struct ucl_scope *scope); \
|
static struct ucl_object *func_name##_impl(struct ucl* ucl, struct ucl_scope *scope); \
|
||||||
struct ucl_object *func_name(struct ucl* ucl, struct ucl_scope *scope, struct ucl_object *args) { \
|
struct ucl_object *func_name(struct ucl* ucl, struct ucl_scope *scope, struct ucl_object *args) { \
|
||||||
|
|||||||
@@ -90,10 +90,11 @@ struct ucl_object *ucl_token_next(struct ucl* state, const char **curr_src) {
|
|||||||
goto symbol_case;
|
goto symbol_case;
|
||||||
}
|
}
|
||||||
|
|
||||||
*curr_src = end;
|
|
||||||
if (!ucl_is_delimiter(*end)) {
|
if (!ucl_is_delimiter(*end)) {
|
||||||
return ucl_error_create(state, "Integer value contained non-digits");
|
goto symbol_case;
|
||||||
|
//return ucl_error_create(state, "Integer value contained non-digits");
|
||||||
}
|
}
|
||||||
|
*curr_src = end;
|
||||||
return ucl_int_create(state, value);
|
return ucl_int_create(state, value);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ struct ucl_object *ucl_progn(struct ucl* state, struct ucl_scope *scope, struct
|
|||||||
|
|
||||||
void ucl_print_obj(struct ucl_object *obj);
|
void ucl_print_obj(struct ucl_object *obj);
|
||||||
|
|
||||||
|
struct ucl_object* ucl_evaluate_in_scope(struct ucl *state, struct ucl_scope *scope, struct ucl_object* sexp);
|
||||||
|
|
||||||
void ucl_add_builtins(struct ucl *state);
|
void ucl_add_builtins(struct ucl *state);
|
||||||
void ucl_add_specials(struct ucl *state);
|
void ucl_add_specials(struct ucl *state);
|
||||||
|
|
||||||
struct ucl_object* ucl_evaluate_in_scope(struct ucl *state, struct ucl_scope *scope, struct ucl_object* sexp);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user