JIT: Inline keyword?

This commit is contained in:
Gustavo Massaccesi 2015-07-29 16:05:03 -03:00
parent cdea0da566
commit a1f04604df
3 changed files with 13 additions and 2 deletions

View File

@ -34,7 +34,7 @@
(unless (memq name '(eq? eqv? equal?
not null? pair? list?
real? number? boolean?
procedure? symbol?
procedure? symbol? keyword?
string? bytes?
vector? box?
eof-object?
@ -205,6 +205,8 @@
(un #t 'procedure? (lambda (x) 10))
(un #t 'symbol? 'ok)
(un #f 'symbol? #f)
(un #t 'keyword? '#:ok)
(un #f 'keyword? #f)
(un #t 'vector? (vector 1 2 3))
(un #f 'vector? #f)
(un #t 'box? (box 10))
@ -2590,6 +2592,7 @@
(test-pred 'null?)
(test-pred 'void?)
(test-pred 'symbol?)
(test-pred 'keyword?)
(test-pred 'string?)
(test-pred 'bytes?)
(test-pred 'path?)

View File

@ -999,6 +999,9 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
} else if (IS_NAMED_PRIM(rator, "symbol?")) {
generate_inlined_type_test(jitter, app, scheme_symbol_type, scheme_symbol_type, 0, for_branch, branch_short, need_sync, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "keyword?")) {
generate_inlined_type_test(jitter, app, scheme_keyword_type, scheme_keyword_type, 0, for_branch, branch_short, need_sync, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "syntax?")) {
generate_inlined_type_test(jitter, app, scheme_stx_type, scheme_stx_type, 0, for_branch, branch_short, need_sync, dest);
return 1;

View File

@ -340,7 +340,12 @@ scheme_init_symbol (Scheme_Env *env)
GLOBAL_IMMED_PRIM("string->uninterned-symbol", string_to_uninterned_symbol_prim, 1, 1, env);
GLOBAL_IMMED_PRIM("string->unreadable-symbol", string_to_unreadable_symbol_prim, 1, 1, env);
GLOBAL_IMMED_PRIM("symbol->string", symbol_to_string_prim, 1, 1, env);
GLOBAL_FOLDING_PRIM("keyword?", keyword_p_prim, 1, 1, 1, env);
p = scheme_make_folding_prim(keyword_p_prim, "keyword?", 1, 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED
| SCHEME_PRIM_IS_OMITABLE);
scheme_add_global_constant("keyword?", p, env);
GLOBAL_FOLDING_PRIM("keyword<?", keyword_lt, 2, -1, 1, env);
GLOBAL_IMMED_PRIM("string->keyword", string_to_keyword_prim, 1, 1, env);
GLOBAL_IMMED_PRIM("keyword->string", keyword_to_string_prim, 1, 1, env);