diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 87825c3f6b..693c93ed52 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -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?) diff --git a/racket/src/racket/src/jitinline.c b/racket/src/racket/src/jitinline.c index 40d969cd72..77ef1fc1a5 100644 --- a/racket/src/racket/src/jitinline.c +++ b/racket/src/racket/src/jitinline.c @@ -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; diff --git a/racket/src/racket/src/symbol.c b/racket/src/racket/src/symbol.c index c90f4024ec..c417d6aeb6 100644 --- a/racket/src/racket/src/symbol.c +++ b/racket/src/racket/src/symbol.c @@ -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("keywordkeyword", string_to_keyword_prim, 1, 1, env); GLOBAL_IMMED_PRIM("keyword->string", keyword_to_string_prim, 1, 1, env);