diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index 87ed5ea529..b9191ac612 100755 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -33,6 +33,7 @@ H{ } clone sub-primitives set ! Bring up a bare cross-compiling vocabulary. "syntax" vocab vocab-words bootstrap-syntax set H{ } clone dictionary set +H{ } clone new-classes set H{ } clone changed-definitions set H{ } clone forgotten-definitions set H{ } clone root-cache set diff --git a/core/classes/classes.factor b/core/classes/classes.factor index 610269f8a3..64a8630f36 100755 --- a/core/classes/classes.factor +++ b/core/classes/classes.factor @@ -119,7 +119,7 @@ M: sequence implementors [ implementors ] gather ; : (define-class) ( word props -- ) >r - dup class? [ dup implementors-map+ ] unless + dup class? [ dup [ implementors-map+ ] [ new-class ] bi ] unless dup reset-class dup deferred? [ dup define-symbol ] when dup props>> diff --git a/core/compiler/units/units.factor b/core/compiler/units/units.factor index a4b10757f6..23e46876fe 100755 --- a/core/compiler/units/units.factor +++ b/core/compiler/units/units.factor @@ -135,6 +135,7 @@ SYMBOL: update-tuples-hook [ H{ } clone changed-definitions set H{ } clone outdated-tuples set + H{ } clone new-classes set [ finish-compilation-unit ] [ ] cleanup ] with-scope ; inline @@ -143,6 +144,7 @@ SYMBOL: update-tuples-hook H{ } clone changed-definitions set H{ } clone forgotten-definitions set H{ } clone outdated-tuples set + H{ } clone new-classes set new-definitions set old-definitions set [ diff --git a/core/definitions/definitions.factor b/core/definitions/definitions.factor index 2aa8b894b5..456bb20410 100755 --- a/core/definitions/definitions.factor +++ b/core/definitions/definitions.factor @@ -35,6 +35,15 @@ SYMBOL: changed-definitions swap changed-definitions get [ set-at ] [ no-compilation-unit ] if* ; +SYMBOL: new-classes + +: new-class ( word -- ) + dup new-classes get + [ set-at ] [ no-compilation-unit ] if* ; + +: new-class? ( word -- ? ) + new-classes get key? ; + GENERIC: where ( defspec -- loc ) M: object where drop f ;