INSTANCE: vocab-spec definition-mixin
-: call-require-hook ( name -- )
- require-hook get call( name -- ) ;
-
GENERIC: require ( object -- )
M: vocab require name>> require ;
M: vocab-link require name>> require ;
-! When calling "foo.private" require, load "foo" instead, but only when
-! "foo.private" does not exist. The reason for this is that stage1 bootstrap
-! starts out with some .private vocabs that contain primitives, and
-! loading the public vocabs would cause circularity issues.
-M: string require ( vocab -- )
- dup ".private" ?tail [
- over lookup-vocab
- [ 2drop ]
- [ nip call-require-hook ]
- if
- ] [
- nip call-require-hook
- ] if ;
+! When calling "foo.private" require, load "foo" instead, but
+! only when "foo.private" does not exist. The reason for this is
+! that stage1 bootstrap starts out with some .private vocabs
+! that contain primitives, and loading the public vocabs would
+! cause circularity issues.
+M: string require
+ [ ".private" ?tail ] keep swap [ lookup-vocab not ] when
+ [ require-hook get call( name -- ) ] [ drop ] if ;
: load-vocab ( name -- vocab )
[ require ] [ lookup-vocab ] bi ;