Bug fixes
							parent
							
								
									a5bc8363c6
								
							
						
					
					
						commit
						ec71ee0940
					
				| 
						 | 
					@ -166,6 +166,6 @@ GENERIC: method-forget-test
 | 
				
			||||||
TUPLE: method-forget-class ;
 | 
					TUPLE: method-forget-class ;
 | 
				
			||||||
M: method-forget-class method-forget-test ;
 | 
					M: method-forget-class method-forget-test ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ f ] [ \ method-forget-test "methods" assoc-empty? ] unit-test
 | 
					[ f ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test
 | 
				
			||||||
[ ] [ [ \ method-forget-class forget ] with-compilation-unit ] unit-test
 | 
					[ ] [ [ \ method-forget-class forget ] with-compilation-unit ] unit-test
 | 
				
			||||||
[ t ] [ \ method-forget-test "methods" assoc-empty? ] unit-test
 | 
					[ t ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ namespaces quotations sequences.private classes continuations
 | 
				
			||||||
generic.standard effects classes.tuple classes.tuple.private
 | 
					generic.standard effects classes.tuple classes.tuple.private
 | 
				
			||||||
arrays vectors strings compiler.units accessors classes.algebra
 | 
					arrays vectors strings compiler.units accessors classes.algebra
 | 
				
			||||||
calendar prettyprint io.streams.string splitting inspector
 | 
					calendar prettyprint io.streams.string splitting inspector
 | 
				
			||||||
columns math.order ;
 | 
					columns math.order classes.private ;
 | 
				
			||||||
IN: classes.tuple.tests
 | 
					IN: classes.tuple.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TUPLE: rect x y w h ;
 | 
					TUPLE: rect x y w h ;
 | 
				
			||||||
| 
						 | 
					@ -543,6 +543,7 @@ TUPLE: another-forget-accessors-test ;
 | 
				
			||||||
! Missing error check
 | 
					! Missing error check
 | 
				
			||||||
[ "IN: classes.tuple.tests USE: words TUPLE: wrong-superclass < word ;" eval ] must-fail
 | 
					[ "IN: classes.tuple.tests USE: words TUPLE: wrong-superclass < word ;" eval ] must-fail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Class forget messyness
 | 
				
			||||||
TUPLE: subclass-forget-test ;
 | 
					TUPLE: subclass-forget-test ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TUPLE: subclass-forget-test-1 < subclass-forget-test ;
 | 
					TUPLE: subclass-forget-test-1 < subclass-forget-test ;
 | 
				
			||||||
| 
						 | 
					@ -551,6 +552,14 @@ TUPLE: subclass-forget-test-3 < subclass-forget-test-2 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ ] [ "IN: classes.tuple.tests FORGET: subclass-forget-test" eval ] unit-test
 | 
					[ ] [ "IN: classes.tuple.tests FORGET: subclass-forget-test" eval ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ H{ { subclass-forget-test-2 subclass-forget-test-2 } } ]
 | 
				
			||||||
 | 
					[ subclass-forget-test-2 class-usages ]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ H{ { subclass-forget-test-3 subclass-forget-test-3 } } ]
 | 
				
			||||||
 | 
					[ subclass-forget-test-3 class-usages ]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ f ] [ subclass-forget-test-1 tuple-class? ] unit-test
 | 
					[ f ] [ subclass-forget-test-1 tuple-class? ] unit-test
 | 
				
			||||||
[ f ] [ subclass-forget-test-2 tuple-class? ] unit-test
 | 
					[ f ] [ subclass-forget-test-2 tuple-class? ] unit-test
 | 
				
			||||||
[ subclass-forget-test-3 new ] must-fail
 | 
					[ subclass-forget-test-3 new ] must-fail
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -226,12 +226,6 @@ M: tuple-class reset-class
 | 
				
			||||||
        } reset-props
 | 
					        } reset-props
 | 
				
			||||||
    ] bi ;
 | 
					    ] bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: reset-tuple-class ( class -- )
 | 
					 | 
				
			||||||
    [ [ reset-class ] [ update-map- ] bi ] each-subclass ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
M: tuple-class forget*
 | 
					 | 
				
			||||||
    [ reset-tuple-class ] [ call-next-method ] bi ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
M: tuple-class rank-class drop 0 ;
 | 
					M: tuple-class rank-class drop 0 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: tuple clone
 | 
					M: tuple clone
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,14 @@ SYMBOL: update-tuples-hook
 | 
				
			||||||
    call-recompile-hook
 | 
					    call-recompile-hook
 | 
				
			||||||
    call-update-tuples-hook
 | 
					    call-update-tuples-hook
 | 
				
			||||||
    dup [ drop compiled-crossref? ] assoc-contains? modify-code-heap
 | 
					    dup [ drop compiled-crossref? ] assoc-contains? modify-code-heap
 | 
				
			||||||
    updated-definitions notify-definition-observers ;
 | 
					     ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: with-nested-compilation-unit ( quot -- )
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        H{ } clone changed-definitions set
 | 
				
			||||||
 | 
					        H{ } clone outdated-tuples set
 | 
				
			||||||
 | 
					        [ finish-compilation-unit ] [ ] cleanup
 | 
				
			||||||
 | 
					    ] with-scope ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: with-compilation-unit ( quot -- )
 | 
					: with-compilation-unit ( quot -- )
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
| 
						 | 
					@ -92,8 +99,11 @@ SYMBOL: update-tuples-hook
 | 
				
			||||||
        H{ } clone outdated-tuples set
 | 
					        H{ } clone outdated-tuples set
 | 
				
			||||||
        <definitions> new-definitions set
 | 
					        <definitions> new-definitions set
 | 
				
			||||||
        <definitions> old-definitions set
 | 
					        <definitions> old-definitions set
 | 
				
			||||||
        [ finish-compilation-unit ]
 | 
					        [
 | 
				
			||||||
        [ ] cleanup
 | 
					            finish-compilation-unit
 | 
				
			||||||
 | 
					            updated-definitions
 | 
				
			||||||
 | 
					            notify-definition-observers
 | 
				
			||||||
 | 
					        ] [ ] cleanup
 | 
				
			||||||
    ] with-scope ; inline
 | 
					    ] with-scope ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: compile-call ( quot -- )
 | 
					: compile-call ( quot -- )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,12 +147,16 @@ M: method-body forget*
 | 
				
			||||||
    [ implementors ] [ [ swap 2array ] curry ] bi map forget-all ;
 | 
					    [ implementors ] [ [ swap 2array ] curry ] bi map forget-all ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: class forget* ( class -- )
 | 
					M: class forget* ( class -- )
 | 
				
			||||||
    {
 | 
					    [
 | 
				
			||||||
 | 
					        class-usages [
 | 
				
			||||||
 | 
					            drop
 | 
				
			||||||
            [ forget-methods ]
 | 
					            [ forget-methods ]
 | 
				
			||||||
            [ update-map- ]
 | 
					            [ update-map- ]
 | 
				
			||||||
            [ reset-class ]
 | 
					            [ reset-class ]
 | 
				
			||||||
        [ call-next-method ]
 | 
					            tri
 | 
				
			||||||
    } cleave ;
 | 
					        ] assoc-each
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    [ call-next-method ] bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: assoc update-methods ( assoc -- )
 | 
					M: assoc update-methods ( assoc -- )
 | 
				
			||||||
    implementors* [ make-generic ] each ;
 | 
					    implementors* [ make-generic ] each ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -461,10 +461,10 @@ must-fail-with
 | 
				
			||||||
    "methods" word-prop assoc-size
 | 
					    "methods" word-prop assoc-size
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ [ ] ] [
 | 
					[ ] [
 | 
				
			||||||
    2 [
 | 
					    2 [
 | 
				
			||||||
        "IN: parser.tests DEFER: twice-fails FORGET: twice-fails MIXIN: twice-fails"
 | 
					        "IN: parser.tests DEFER: twice-fails FORGET: twice-fails MIXIN: twice-fails"
 | 
				
			||||||
        <string-reader> "twice-fails-test" parse-stream
 | 
					        <string-reader> "twice-fails-test" parse-stream drop
 | 
				
			||||||
    ] times
 | 
					    ] times
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -357,10 +357,9 @@ M: staging-violation summary
 | 
				
			||||||
    "A parsing word cannot be used in the same file it is defined in." ;
 | 
					    "A parsing word cannot be used in the same file it is defined in." ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: execute-parsing ( word -- )
 | 
					: execute-parsing ( word -- )
 | 
				
			||||||
    new-definitions get [
 | 
					    [ changed-definitions get key? [ staging-violation ] when ]
 | 
				
			||||||
        dupd first key? [ staging-violation ] when
 | 
					    [ execute ]
 | 
				
			||||||
    ] when*
 | 
					    bi ;
 | 
				
			||||||
    execute ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
: parse-step ( accum end -- accum ? )
 | 
					: parse-step ( accum end -- accum ? )
 | 
				
			||||||
    scan-word {
 | 
					    scan-word {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -215,12 +215,6 @@ unit-test
 | 
				
			||||||
    3 V{ 1 2 3 4 5 6 } clone [ delete-nth ] keep
 | 
					    3 V{ 1 2 3 4 5 6 } clone [ delete-nth ] keep
 | 
				
			||||||
] unit-test
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ V{ 1 2 3 } ]
 | 
					 | 
				
			||||||
[ 3 V{ 1 2 } clone [ adjoin ] keep ] unit-test
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[ V{ 1 2 3 } ]
 | 
					 | 
				
			||||||
[ 3 V{ 1 3 2 } clone [ adjoin ] keep ] unit-test
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
! erg's random tester found this one
 | 
					! erg's random tester found this one
 | 
				
			||||||
[ SBUF" 12341234" ] [
 | 
					[ SBUF" 12341234" ] [
 | 
				
			||||||
    9 <sbuf> dup "1234" swap push-all dup dup swap push-all
 | 
					    9 <sbuf> dup "1234" swap push-all dup dup swap push-all
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,3 +15,9 @@ IN: sets.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ V{ } ] [ { } { } union ] unit-test
 | 
					[ V{ } ] [ { } { } union ] unit-test
 | 
				
			||||||
[ V{ 1 2 3 4 } ] [ { 1 2 3 } { 2 3 4 } union ] unit-test
 | 
					[ V{ 1 2 3 4 } ] [ { 1 2 3 } { 2 3 4 } union ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ V{ 1 2 3 } ]
 | 
				
			||||||
 | 
					[ 3 V{ 1 2 } clone [ adjoin ] keep ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ V{ 1 2 3 } ]
 | 
				
			||||||
 | 
					[ 3 V{ 1 3 2 } clone [ adjoin ] keep ] unit-test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,7 @@ IN: bootstrap.syntax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    "DEFER:" [
 | 
					    "DEFER:" [
 | 
				
			||||||
        scan in get create
 | 
					        scan in get create
 | 
				
			||||||
        dup old-definitions get first delete-at
 | 
					        dup old-definitions get [ delete-at ] with each
 | 
				
			||||||
        set-word
 | 
					        set-word
 | 
				
			||||||
    ] define-syntax
 | 
					    ] define-syntax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -189,8 +189,9 @@ IN: bootstrap.syntax
 | 
				
			||||||
    "MAIN:" [ scan-word in get vocab set-vocab-main ] define-syntax
 | 
					    "MAIN:" [ scan-word in get vocab set-vocab-main ] define-syntax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    "<<" [
 | 
					    "<<" [
 | 
				
			||||||
        [ \ >> parse-until >quotation ] with-compilation-unit
 | 
					        [
 | 
				
			||||||
        call
 | 
					            \ >> parse-until >quotation
 | 
				
			||||||
 | 
					        ] with-nested-compilation-unit call
 | 
				
			||||||
    ] define-syntax
 | 
					    ] define-syntax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    "call-next-method" [
 | 
					    "call-next-method" [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,7 +175,9 @@ PRIVATE>
 | 
				
			||||||
: define-symbol ( word -- )
 | 
					: define-symbol ( word -- )
 | 
				
			||||||
    dup [ ] curry define-inline ;
 | 
					    dup [ ] curry define-inline ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: reset-word ( word -- )
 | 
					GENERIC: reset-word ( word -- )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: word reset-word
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "unannotated-def"
 | 
					        "unannotated-def"
 | 
				
			||||||
        "parsing" "inline" "foldable" "flushable"
 | 
					        "parsing" "inline" "foldable" "flushable"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue