From a265f933d8bd71ee13ed713eee491099efd6825e Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 8 Oct 2016 17:00:32 +0200 Subject: [PATCH] speedup: use ->car etc. --- mes.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/mes.c b/mes.c index 55256eb1..2cf62a49 100644 --- a/mes.c +++ b/mes.c @@ -35,6 +35,7 @@ #include #define DEBUG 0 +#define COND 1 // 50% speedup for define-syntax/match #define MES_FULL 1 enum type {CHAR, MACRO, NUMBER, PAIR, STRING, SYMBOL, VALUES, VECTOR, @@ -73,8 +74,8 @@ scm *display_helper (FILE*, scm*, bool, char const*, bool); scm scm_nil = {SYMBOL, "()"}; scm scm_dot = {SYMBOL, "."}; -scm scm_t = {SYMBOL, "#t"}; scm scm_f = {SYMBOL, "#f"}; +scm scm_t = {SYMBOL, "#t"}; scm scm_unspecified = {SYMBOL, "*unspecified*"}; scm symbol_closure = {SYMBOL, "*closure*"}; @@ -375,10 +376,10 @@ eval (scm *e, scm *a) return eval (apply_env (cdr (macro), e, a), a); if ((macro = lookup_macro (car (e), a)) != &scm_f) return eval (apply_env (macro, cdr (e), a), a); -#if 1 //COND +#if COND if (car (e) == &symbol_cond) return evcon (cdr (e), a); -#endif +#endif // COND if (car (e) == &symbol_if) return if_env (cdr (e), a); if (eq_p (car (e), &symbol_define) == &scm_t) @@ -395,6 +396,7 @@ eval (scm *e, scm *a) return apply_env (car (e), evlis (cdr (e), a), a); } +#if COND scm * evcon (scm *c, scm *a) { @@ -411,6 +413,7 @@ evcon (scm *c, scm *a) } return evcon (cdr (c), a); } +#endif // COND scm * if_env (scm *e, scm *a) @@ -484,10 +487,38 @@ string_p (scm *x) scm * symbol_p (scm *x) { + // FIXME: use INTERNAL/XSYMBOL or something? return (x->type == SYMBOL && x != &scm_nil + && x != &scm_dot && x != &scm_f - && x != &scm_t) ? &scm_t : &scm_f; + && x != &scm_t + && x != &scm_unspecified + + && x != &symbol_closure + && x != &symbol_circ + && x != &symbol_lambda + && x != &symbol_begin + && x != &symbol_list + && x != &symbol_cond + && x != &symbol_if + && x != &symbol_quote + && x != &symbol_quasiquote + && x != &symbol_unquote + && x != &symbol_unquote_splicing + + && x != &symbol_sc_expand + && x != &symbol_syntax + && x != &symbol_quasisyntax + && x != &symbol_unsyntax + && x != &symbol_unsyntax_splicing + + && x != &symbol_call_with_values + && x != &symbol_current_module + && x != &symbol_define + && x != &symbol_define_macro + && x != &symbol_set_x + ) ? &scm_t : &scm_f; } scm *