mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-04-25 02:50:24 -07:00
Slight optimization of si_process_lambda_list() (removing ecl_endp, ECL_CONSP, etc).
This commit is contained in:
parent
62956ab982
commit
7193e17f18
1 changed files with 23 additions and 22 deletions
|
|
@ -2415,7 +2415,7 @@ c_listA(cl_env_ptr env, cl_object args, int flags)
|
|||
#define push(v,l) l = CONS(v, l)
|
||||
#define push_var(v, list) \
|
||||
if (context == @'function') { \
|
||||
if (ecl_symbol_type(v) & stp_constant) \
|
||||
unlikely_if (ecl_symbol_type(v) & stp_constant) \
|
||||
FEillegal_variable_name(v); } \
|
||||
push(v, list)
|
||||
|
||||
|
|
@ -2526,24 +2526,22 @@ si_process_lambda_list(cl_object org_lambda_list, cl_object context)
|
|||
cl_object allow_other_keys = Cnil;
|
||||
cl_object key_flag = Cnil;
|
||||
|
||||
if (!CONSP(lambda_list) && lambda_list != Cnil)
|
||||
if (!ECL_LISTP(lambda_list))
|
||||
goto ILLEGAL_LAMBDA;
|
||||
LOOP:
|
||||
if (ATOM(lambda_list)) {
|
||||
if (lambda_list == Cnil)
|
||||
goto OUTPUT;
|
||||
else if (context == @'function' || context == @'ftype')
|
||||
if (Null(lambda_list))
|
||||
goto OUTPUT;
|
||||
if (!ECL_LISTP(lambda_list)) {
|
||||
unlikely_if (context == @'function' || context == @'ftype')
|
||||
goto ILLEGAL_LAMBDA;
|
||||
else {
|
||||
v = lambda_list;
|
||||
lambda_list = Cnil;
|
||||
goto REST;
|
||||
}
|
||||
v = lambda_list;
|
||||
lambda_list = Cnil;
|
||||
goto REST;
|
||||
}
|
||||
v = ECL_CONS_CAR(lambda_list);
|
||||
lambda_list = ECL_CONS_CDR(lambda_list);
|
||||
if (v == @'&optional') {
|
||||
if (stage >= AT_OPTIONALS)
|
||||
unlikely_if (stage >= AT_OPTIONALS)
|
||||
goto ILLEGAL_LAMBDA;
|
||||
stage = AT_OPTIONALS;
|
||||
goto LOOP;
|
||||
|
|
@ -2553,28 +2551,28 @@ LOOP:
|
|||
goto ILLEGAL_LAMBDA;
|
||||
v = ECL_CONS_CAR(lambda_list);
|
||||
lambda_list = ECL_CONS_CDR(lambda_list);
|
||||
REST: if (stage >= AT_REST)
|
||||
REST: unlikely_if (stage >= AT_REST)
|
||||
goto ILLEGAL_LAMBDA;
|
||||
stage = AT_REST;
|
||||
rest = v;
|
||||
goto LOOP;
|
||||
}
|
||||
if (v == @'&key') {
|
||||
if (stage >= AT_KEYS)
|
||||
unlikely_if (stage >= AT_KEYS)
|
||||
goto ILLEGAL_LAMBDA;
|
||||
key_flag = Ct;
|
||||
stage = AT_KEYS;
|
||||
goto LOOP;
|
||||
}
|
||||
if (v == @'&aux') {
|
||||
if (stage >= AT_AUXS)
|
||||
unlikely_if (stage >= AT_AUXS)
|
||||
goto ILLEGAL_LAMBDA;
|
||||
stage = AT_AUXS;
|
||||
goto LOOP;
|
||||
}
|
||||
if (v == @'&allow-other-keys') {
|
||||
allow_other_keys = Ct;
|
||||
if (stage != AT_KEYS)
|
||||
unlikely_if (stage != AT_KEYS)
|
||||
goto ILLEGAL_LAMBDA;
|
||||
stage = AT_OTHER_KEYS;
|
||||
goto LOOP;
|
||||
|
|
@ -2596,7 +2594,8 @@ REST: if (stage >= AT_REST)
|
|||
x = ECL_CONS_CDR(x);
|
||||
if (!ecl_endp(x)) {
|
||||
spp = ECL_CONS_CAR(x);
|
||||
if (!ecl_endp(ECL_CONS_CDR(x)))
|
||||
x = ECL_CONS_CDR(x);
|
||||
unlikely_if (!Null(x))
|
||||
goto ILLEGAL_LAMBDA;
|
||||
}
|
||||
}
|
||||
|
|
@ -2618,7 +2617,7 @@ REST: if (stage >= AT_REST)
|
|||
init = Cnil;
|
||||
spp = Cnil;
|
||||
if (context == @'ftype') {
|
||||
if (!CONSP(v))
|
||||
unlikely_if (ATOM(v))
|
||||
goto ILLEGAL_LAMBDA;
|
||||
key = ECL_CONS_CAR(v);
|
||||
v = CADR(v);
|
||||
|
|
@ -2633,16 +2632,18 @@ REST: if (stage >= AT_REST)
|
|||
x = ECL_CONS_CDR(x);
|
||||
if (!ecl_endp(x)) {
|
||||
spp = ECL_CONS_CAR(x);
|
||||
if (!ecl_endp(ECL_CONS_CDR(x)))
|
||||
x = ECL_CONS_CDR(x);
|
||||
unlikely_if (!Null(x))
|
||||
goto ILLEGAL_LAMBDA;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CONSP(v)) {
|
||||
key = ECL_CONS_CAR(v);
|
||||
if (ecl_endp(ECL_CONS_CDR(v)) || !ecl_endp(CDDR(v)))
|
||||
v = ECL_CONS_CDR(v);
|
||||
unlikely_if (ATOM(v) || !Null(ECL_CONS_CDR(v)))
|
||||
goto ILLEGAL_LAMBDA;
|
||||
v = CADR(v);
|
||||
v = ECL_CONS_CAR(v);
|
||||
if (context == @'function')
|
||||
assert_type_symbol(v);
|
||||
assert_type_symbol(key);
|
||||
|
|
@ -2665,7 +2666,7 @@ REST: if (stage >= AT_REST)
|
|||
default:
|
||||
if (ATOM(v)) {
|
||||
init = Cnil;
|
||||
} else if (ecl_endp(CDDR(v))) {
|
||||
} else if (Null(CDDR(v))) {
|
||||
cl_object x = v;
|
||||
v = ECL_CONS_CAR(x);
|
||||
init = CADR(x);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue