syntax: make it so PRIMITIVE: verifies primitives

It's a bit strange for disparate vocabs to reference words that get created out of thin air during bootstrap, so this lets there be some trace in the seeded vocab source that there was a word created there.
db4
Joe Groff 2011-10-30 23:05:31 -07:00
parent eac90675c0
commit c0b26a2781
1 changed files with 6 additions and 2 deletions

View File

@ -8,7 +8,7 @@ generic.standard generic.hook generic.math generic.parser classes
io.pathnames vocabs vocabs.parser classes.parser classes.union io.pathnames vocabs vocabs.parser classes.parser classes.union
classes.intersection classes.mixin classes.predicate classes.intersection classes.mixin classes.predicate
classes.singleton classes.tuple.parser compiler.units classes.singleton classes.tuple.parser compiler.units
combinators effects.parser slots hash-sets source-files ; combinators effects effects.parser slots hash-sets source-files ;
IN: bootstrap.syntax IN: bootstrap.syntax
! These words are defined as a top-level form, instead of with ! These words are defined as a top-level form, instead of with
@ -26,11 +26,15 @@ IN: bootstrap.syntax
[ dup "syntax" lookup [ ] [ no-word-error ] ?if ] dip [ dup "syntax" lookup [ ] [ no-word-error ] ?if ] dip
define-syntax ; define-syntax ;
: verify-primitive ( word vocab effect -- )
[ lookup ] dip [ swap stack-effect effect= ] curry [ f ] if*
[ "Primitive definition is not correct" throw ] unless ;
[ [
{ "]" "}" ";" ">>" } [ define-delimiter ] each { "]" "}" ";" ">>" } [ define-delimiter ] each
"PRIMITIVE:" [ "PRIMITIVE:" [
"Primitive definition is not supported" throw scan-token current-vocab scan-object verify-primitive
] define-core-syntax ] define-core-syntax
"CS{" [ "CS{" [