diff --git a/core/bootstrap/stage1.factor b/core/bootstrap/stage1.factor index 5c55bb15ca..9a0f8f9d1f 100755 --- a/core/bootstrap/stage1.factor +++ b/core/bootstrap/stage1.factor @@ -19,8 +19,13 @@ load-help? off [ [ ! Rehash hashtables, since bootstrap.image creates them - ! using the host image's hashing algorithms - [ hashtable? ] instances [ rehash ] each + ! using the host image's hashing algorithms. We don't + ! use each-object here since the catch stack isn't yet + ! set up. + begin-scan + [ hashtable? ] pusher [ (each-object) ] dip + end-scan + [ rehash ] each boot ] % diff --git a/core/classes/tuple/tuple.factor b/core/classes/tuple/tuple.factor index 4216a5dc3d..42b5826e95 100755 --- a/core/classes/tuple/tuple.factor +++ b/core/classes/tuple/tuple.factor @@ -20,6 +20,10 @@ ERROR: not-a-tuple object ; : all-slots ( class -- slots ) superclasses [ "slots" word-prop ] map concat ; +PREDICATE: immutable-tuple-class < tuple-class ( class -- ? ) + #! Delegation + all-slots rest-slice [ read-only>> ] all? ; + > call diff --git a/core/cpu/ppc/macosx/bootstrap.factor b/core/cpu/ppc/macosx/bootstrap.factor index db5e3a343f..06b02d3182 100755 --- a/core/cpu/ppc/macosx/bootstrap.factor +++ b/core/cpu/ppc/macosx/bootstrap.factor @@ -3,8 +3,8 @@ USING: parser layouts system kernel ; IN: bootstrap.ppc -: c-area-size 14 bootstrap-cells ; -: lr-save 2 bootstrap-cells ; +: c-area-size ( -- n ) 14 bootstrap-cells ; +: lr-save ( -- n ) 2 bootstrap-cells ; << "resource:core/cpu/ppc/bootstrap.factor" parse-file parsed >> call diff --git a/core/kernel/kernel.factor b/core/kernel/kernel.factor index 68feb7a94a..e8d3de4b11 100755 --- a/core/kernel/kernel.factor +++ b/core/kernel/kernel.factor @@ -165,13 +165,9 @@ GENERIC: boa ( ... class -- tuple ) compose compose ; inline ! Booleans -: not ( obj -- ? ) - #! Not inline because its special-cased by compiler. - f eq? ; +: not ( obj -- ? ) f t ? ; inline -: and ( obj1 obj2 -- ? ) - #! Not inline because its special-cased by compiler. - over ? ; +: and ( obj1 obj2 -- ? ) over ? ; inline : >boolean ( obj -- ? ) t f ? ; inline diff --git a/core/math/intervals/intervals.factor b/core/math/intervals/intervals.factor index 1896943a71..8afbee3478 100755 --- a/core/math/intervals/intervals.factor +++ b/core/math/intervals/intervals.factor @@ -135,6 +135,9 @@ TUPLE: interval { from read-only } { to read-only } ; ] } cond ; +: intervals-intersect? ( i1 i2 -- ? ) + interval-intersect empty-interval eq? not ; + : interval-union ( i1 i2 -- i3 ) { { [ dup empty-interval eq? ] [ drop ] } diff --git a/core/memory/memory-tests.factor b/core/memory/memory-tests.factor index 2b5b1333c0..3fe1387582 100755 --- a/core/memory/memory-tests.factor +++ b/core/memory/memory-tests.factor @@ -23,3 +23,6 @@ TUPLE: testing x y z ; ] when* ] each ] unit-test + +! Erg's bug +2 [ [ [ 3 throw ] instances ] must-fail ] times diff --git a/core/memory/memory.factor b/core/memory/memory.factor index 227aa1f9dc..cb5c5bf7e4 100644 --- a/core/memory/memory.factor +++ b/core/memory/memory.factor @@ -1,17 +1,15 @@ -! Copyright (C) 2005, 2007 Slava Pestov. +! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. +USING: kernel continuations sequences arrays system ; IN: memory -USING: arrays kernel sequences vectors system hashtables -kernel.private sbufs growable assocs namespaces quotations -math strings combinators ; : (each-object) ( quot: ( obj -- ) -- ) [ next-object dup ] swap [ drop ] while ; inline : each-object ( quot -- ) - begin-scan (each-object) end-scan ; inline + begin-scan [ (each-object) ] [ end-scan ] [ ] cleanup ; inline : instances ( quot -- seq ) - pusher >r each-object r> >array ; inline + pusher [ each-object ] dip >array ; inline : save ( -- ) image save-image ; diff --git a/core/slots/slots.factor b/core/slots/slots.factor index 73d674782d..8754444ce0 100755 --- a/core/slots/slots.factor +++ b/core/slots/slots.factor @@ -8,13 +8,17 @@ IN: slots TUPLE: slot-spec name offset class initial read-only reader writer ; +PREDICATE: reader < word "reader" word-prop ; + +PREDICATE: writer < word "writer" word-prop ; + : ( -- slot-spec ) slot-spec new object bootstrap-word >>class ; : define-typecheck ( class generic quot props -- ) [ dup define-simple-generic create-method ] 2dip - [ [ props>> ] [ drop ] [ [ t ] H{ } map>assoc ] tri* update ] + [ [ props>> ] [ drop ] [ ] tri* update ] [ drop define ] 3bi ; @@ -31,17 +35,23 @@ TUPLE: slot-spec name offset class initial read-only reader writer ; ] [ ] make ; : reader-word ( name -- word ) - ">>" append (( object -- value )) create-accessor ; + ">>" append (( object -- value )) create-accessor + dup t "reader" set-word-prop ; -: reader-props ( slot-spec -- seq ) - read-only>> { "foldable" "flushable" } { "flushable" } ? ; +: reader-props ( slot-spec -- assoc ) + [ + [ "reading" set ] + [ read-only>> [ t "foldable" set ] when ] bi + t "flushable" set + ] H{ } make-assoc ; : define-reader ( class slot-spec -- ) [ name>> reader-word ] [ reader-quot ] [ reader-props ] tri define-typecheck ; : writer-word ( name -- word ) - "(>>" swap ")" 3append (( value object -- )) create-accessor ; + "(>>" swap ")" 3append (( value object -- )) create-accessor + dup t "writer" set-word-prop ; ERROR: bad-slot-value value class ; @@ -77,8 +87,12 @@ ERROR: bad-slot-value value class ; } cond ] [ ] make ; +: writer-props ( slot-spec -- assoc ) + [ "writing" set ] H{ } make-assoc ; + : define-writer ( class slot-spec -- ) - [ name>> writer-word ] [ writer-quot ] bi { } define-typecheck ; + [ name>> writer-word ] [ writer-quot ] [ writer-props ] tri + define-typecheck ; : setter-word ( name -- word ) ">>" prepend (( object value -- object )) create-accessor ; diff --git a/core/words/words.factor b/core/words/words.factor index 5cf15abfa4..535295007e 100755 --- a/core/words/words.factor +++ b/core/words/words.factor @@ -187,6 +187,7 @@ M: word reset-word "parsing" "inline" "recursive" "foldable" "flushable" "predicating" "reading" "writing" + "reader" "writer" "constructing" "declared-effect" "constructor-quot" "delimiter" } reset-props ; diff --git a/extra/automata/ui/ui.factor b/extra/automata/ui/ui.factor index 8dd3c7ece5..cfb0462877 100644 --- a/extra/automata/ui/ui.factor +++ b/extra/automata/ui/ui.factor @@ -72,13 +72,13 @@ DEFER: automata-window "5 - Random Rule" [ random-rule ] view-button add-gadget "n - New" [ automata-window ] view-button add-gadget - @top grid-add* + @top grid-add C[ display ] { 400 400 } >>pdim dup >slate - @center grid-add* + @center grid-add diff --git a/extra/boids/ui/ui.factor b/extra/boids/ui/ui.factor index 6d57bb32ac..064eda841b 100755 --- a/extra/boids/ui/ui.factor +++ b/extra/boids/ui/ui.factor @@ -100,72 +100,68 @@ VARS: population-label cohesion-label alignment-label separation-label ; : boids-window* ( -- ) init-variables init-world-size init-boids loop on - C[ display ] >slate - t slate> set-gadget-clipped? - { 600 400 } slate> set-slate-pdim - C[ [ run ] in-thread ] slate> set-slate-graft - C[ loop off ] slate> set-slate-ungraft - ""