Cleaning up mixins
parent
825601ccc7
commit
5f5270ae90
|
@ -2,7 +2,7 @@ USING: alien arrays definitions generic assocs hashtables io
|
||||||
kernel math namespaces parser prettyprint sequences strings
|
kernel math namespaces parser prettyprint sequences strings
|
||||||
tools.test vectors words quotations classes io.streams.string
|
tools.test vectors words quotations classes io.streams.string
|
||||||
classes.private classes.union classes.mixin classes.predicate
|
classes.private classes.union classes.mixin classes.predicate
|
||||||
vectors definitions ;
|
vectors definitions source-files ;
|
||||||
IN: temporary
|
IN: temporary
|
||||||
|
|
||||||
H{ } "s" set
|
H{ } "s" set
|
||||||
|
@ -176,6 +176,8 @@ FORGET: forget-class-bug-2
|
||||||
|
|
||||||
DEFER: mixin-forget-test-g
|
DEFER: mixin-forget-test-g
|
||||||
|
|
||||||
|
[ "mixin-forget-test" forget-source ] with-compilation-unit
|
||||||
|
|
||||||
[ ] [
|
[ ] [
|
||||||
{
|
{
|
||||||
"USING: sequences ;"
|
"USING: sequences ;"
|
||||||
|
|
|
@ -263,7 +263,7 @@ PRIVATE>
|
||||||
uncache-classes
|
uncache-classes
|
||||||
dupd (define-class)
|
dupd (define-class)
|
||||||
] keep cache-classes
|
] keep cache-classes
|
||||||
r> [ changed-class ] [ drop ] if ;
|
r> [ update-methods ] [ drop ] if ;
|
||||||
|
|
||||||
GENERIC: class ( object -- class ) inline
|
GENERIC: class ( object -- class ) inline
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2004, 2008 Slava Pestov.
|
! Copyright (C) 2004, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: classes classes.union words kernel sequences
|
USING: classes classes.union words kernel sequences
|
||||||
definitions prettyprint.backend combinators ;
|
definitions prettyprint.backend combinators arrays ;
|
||||||
IN: classes.mixin
|
IN: classes.mixin
|
||||||
|
|
||||||
PREDICATE: union-class mixin-class "mixin" word-prop ;
|
PREDICATE: union-class mixin-class "mixin" word-prop ;
|
||||||
|
@ -52,6 +52,10 @@ M: mixin-instance equal?
|
||||||
{ [ t ] [ t ] }
|
{ [ t ] [ t ] }
|
||||||
} cond 2nip ;
|
} cond 2nip ;
|
||||||
|
|
||||||
|
M: mixin-instance hashcode*
|
||||||
|
{ mixin-instance-class mixin-instance-mixin } get-slots
|
||||||
|
2array hashcode* ;
|
||||||
|
|
||||||
: <mixin-instance> ( class mixin -- definition )
|
: <mixin-instance> ( class mixin -- definition )
|
||||||
{ set-mixin-instance-class set-mixin-instance-mixin }
|
{ set-mixin-instance-class set-mixin-instance-mixin }
|
||||||
mixin-instance construct ;
|
mixin-instance construct ;
|
||||||
|
@ -71,5 +75,5 @@ M: mixin-instance definition drop f ;
|
||||||
|
|
||||||
M: mixin-instance forget
|
M: mixin-instance forget
|
||||||
dup mixin-instance-class
|
dup mixin-instance-class
|
||||||
swap mixin-instance-mixin
|
swap mixin-instance-mixin dup mixin-class?
|
||||||
remove-mixin-instance ;
|
[ remove-mixin-instance ] [ 2drop ] if ;
|
||||||
|
|
|
@ -47,7 +47,7 @@ M: object redefined* drop ;
|
||||||
GENERIC: update-methods ( class -- )
|
GENERIC: update-methods ( class -- )
|
||||||
|
|
||||||
SYMBOL: changed-words
|
SYMBOL: changed-words
|
||||||
SYMBOL: changed-classes
|
! SYMBOL: changed-classes
|
||||||
SYMBOL: old-definitions
|
SYMBOL: old-definitions
|
||||||
SYMBOL: new-definitions
|
SYMBOL: new-definitions
|
||||||
|
|
||||||
|
@ -94,19 +94,19 @@ TUPLE: no-compilation-unit word ;
|
||||||
[ no-compilation-unit ] unless*
|
[ no-compilation-unit ] unless*
|
||||||
set-at ;
|
set-at ;
|
||||||
|
|
||||||
: changed-class ( class -- )
|
! : changed-class ( class -- )
|
||||||
dup changed-classes get
|
! dup changed-classes get
|
||||||
[ no-compilation-unit ] unless*
|
! [ no-compilation-unit ] unless*
|
||||||
set-at ;
|
! set-at ;
|
||||||
|
|
||||||
: with-compilation-unit ( quot -- )
|
: with-compilation-unit ( quot -- )
|
||||||
[
|
[
|
||||||
H{ } clone changed-words set
|
H{ } clone changed-words set
|
||||||
H{ } clone changed-classes set
|
! H{ } clone changed-classes set
|
||||||
<definitions> new-definitions set
|
<definitions> new-definitions set
|
||||||
<definitions> old-definitions set
|
<definitions> old-definitions set
|
||||||
[
|
[
|
||||||
changed-classes get keys [ update-methods ] each
|
! changed-classes get keys [ update-methods ] each
|
||||||
changed-words get keys recompile-hook get call
|
changed-words get keys recompile-hook get call
|
||||||
] [ ] cleanup
|
] [ ] cleanup
|
||||||
] with-scope ; inline
|
] with-scope ; inline
|
||||||
|
|
Loading…
Reference in New Issue