Add basic lexenv support
This commit is contained in:
+5
-5
@@ -106,7 +106,7 @@ void parse_lambda_list(LambdaListParseResult *result, LispVal *list) {
|
||||
out->kw = Qnil;
|
||||
out->rest = Qnil;
|
||||
size_t cur_idx = 0; // for keyword args
|
||||
FOREACH_TAIL(list, tail) {
|
||||
DOTAILS(tail, list) {
|
||||
if (!LISTP(tail)) {
|
||||
RETURN_ERROR(LLPS_DOTTED, list);
|
||||
} else if (out->allow_other_keys) {
|
||||
@@ -178,7 +178,7 @@ void parse_lambda_list(LambdaListParseResult *result, LispVal *list) {
|
||||
}
|
||||
#undef RETURN_ERROR
|
||||
|
||||
LispVal *make_builtin_function(LispVal *name, LispVal *(*cfunc)(),
|
||||
LispVal *make_builtin_function(LispVal *name, LispVal *(*cfunc)(void),
|
||||
const char *lisp_args, size_t args_len,
|
||||
LispVal *docstr) {
|
||||
LispFunction *obj = lisp_alloc_object(sizeof(LispFunction), TYPE_FUNCTION);
|
||||
@@ -230,11 +230,11 @@ call_simple_native(LispVal *orig_func, LispFunction *fobj, LispVal *args) {
|
||||
}
|
||||
LispVal *arg_arr[MAX_NATIVE_FUNCTION_ARGS];
|
||||
size_t acount = 0;
|
||||
FOREACH(args, arg) {
|
||||
DOLIST(arg, args) {
|
||||
if (fobj->flags.no_eval_args) {
|
||||
arg_arr[acount] = arg;
|
||||
} else {
|
||||
arg_arr[acount] = Feval(arg);
|
||||
arg_arr[acount] = Feval(arg, PARENT_LEXENV());
|
||||
}
|
||||
add_local_reference(arg_arr[acount++]);
|
||||
}
|
||||
@@ -361,7 +361,7 @@ call_complex_native(LispVal *orig_func, LispFunction *fobj, LispVal *args) {
|
||||
if (!arg_arr[i]) {
|
||||
arg_arr[i] = Qnil;
|
||||
} else if (!fobj->flags.no_eval_args) {
|
||||
arg_arr[i] = Feval(arg_arr[i]);
|
||||
arg_arr[i] = Feval(arg_arr[i], PARENT_LEXENV());
|
||||
}
|
||||
add_local_reference(arg_arr[i]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user