Keywords have a tc7
authorAndy Wingo <wingo@pobox.com>
Mon, 19 Jan 2015 15:57:42 +0000 (16:57 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 22 Jan 2015 12:03:11 +0000 (13:03 +0100)
commite2fafeb9012cbe5e3ec63326692a4cc3a22c318e
treec056156667ddc699727789114a75f1589a66237f
parent27b3b5b92d22cbf672d5b0ad20b4efe6cfa80ecf
Keywords have a tc7

* libguile/tags.h (scm_tc7_keyword): Allocate a tc7, so that the VM can
  have cheap keyword? tests.

* libguile/keywords.c:
* libguile/keywords.h: Adapt.

* libguile/goops.c (scm_class_of, scm_sys_goops_early_init): Capture
  <keyword>.

* libguile/print.c (iprin1): Inline keyword printer.

* libguile/evalext.c (scm_self_evaluating_p): Add keywords here.

* libguile/deprecated.h:
* libguile/deprecated.c (scm_tc16_keyword): Deprecate.

* module/language/cps/compile-bytecode.scm (compile-fun): Add keyword?
  case, and bitvector? case while we're at it.
* module/language/cps/effects-analysis.scm (define-primitive-effects):
  Add bytevector?, keyword?, and bitvector? cases.

* module/language/cps/primitives.scm (*branching-primcall-arities*): Add
  keyword?.

* module/language/cps/types.scm (bitvector?, keyword?, bytevector?): Add
  branch inferrers.

* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
  (*effect-free-primitives*):
  (*effect+exception-free-primitives*): Add bytevector?, keyword?, and
  bitvector?.

* module/oop/goops.scm (<keyword>): New class.

* module/system/base/types.scm (%tc7-keyword, cell->object): Add cases.

* module/system/vm/assembler.scm (br-if-keyword): New definition.
* module/system/vm/disassembler.scm (code-annotation): Add br-if-tc7
  case for keywords.

* test-suite/tests/types.test ("clonable objects"): Update now that
  keywords are cloneable.
18 files changed:
libguile/evalext.c
libguile/goops.c
libguile/keywords.c
libguile/keywords.h
libguile/print.c
libguile/tags.h
module/language/cps/compile-bytecode.scm
module/language/cps/effects-analysis.scm
module/language/cps/primitives.scm
module/language/cps/specialize-primcalls.scm
module/language/cps/types.scm
module/language/tree-il/compile-cps.scm
module/language/tree-il/primitives.scm
module/oop/goops.scm
module/system/base/types.scm
module/system/vm/assembler.scm
module/system/vm/disassembler.scm
test-suite/tests/types.test