locals.definitions: add subwords support to locals/lambdas.
Fix unit test now that local syntax is in syntax by default.locals-and-roots
parent
10f33905dd
commit
e06d3e790a
|
@ -1,11 +1,32 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
|
! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors definitions effects generic kernel locals
|
USING: accessors definitions effects generic kernel locals
|
||||||
macros memoize prettyprint prettyprint.backend see words ;
|
macros memoize prettyprint prettyprint.backend see words
|
||||||
|
locals.types sequences make quotations ;
|
||||||
IN: locals.definitions
|
IN: locals.definitions
|
||||||
|
|
||||||
PREDICATE: lambda-word < word "lambda" word-prop >boolean ;
|
PREDICATE: lambda-word < word "lambda" word-prop >boolean ;
|
||||||
|
|
||||||
|
! Lambdas/locals need to expose their uninterned subwords in order
|
||||||
|
! to make a boot image.
|
||||||
|
GENERIC: lambda-subwords ( obj -- )
|
||||||
|
|
||||||
|
M: object lambda-subwords drop ;
|
||||||
|
|
||||||
|
M: lambda lambda-subwords [ vars>> % ] [ body>> [ lambda-subwords ] each ] bi ;
|
||||||
|
|
||||||
|
M: def lambda-subwords local>> , ;
|
||||||
|
|
||||||
|
M: callable lambda-subwords [ lambda-subwords ] each ;
|
||||||
|
|
||||||
|
|
||||||
|
M: lambda-word subwords
|
||||||
|
[
|
||||||
|
"lambda" word-prop
|
||||||
|
[ vars>> % ] [ body>> [ lambda-subwords ] each ] bi
|
||||||
|
] { } make ;
|
||||||
|
|
||||||
|
|
||||||
M: lambda-word definer drop \ :: \ ; ;
|
M: lambda-word definer drop \ :: \ ; ;
|
||||||
|
|
||||||
M: lambda-word definition
|
M: lambda-word definition
|
||||||
|
|
|
@ -194,7 +194,7 @@ CONSTANT: new-definition "USING: math ;\nIN: locals.tests\n: a-word-with-locals
|
||||||
new-definition =
|
new-definition =
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
CONSTANT: method-definition "USING: locals locals.tests sequences ;\nM:: sequence method-with-locals ( a -- y ) a reverse ;\n"
|
CONSTANT: method-definition "USING: locals.tests sequences ;\nM:: sequence method-with-locals ( a -- y ) a reverse ;\n"
|
||||||
|
|
||||||
GENERIC: method-with-locals ( x -- y )
|
GENERIC: method-with-locals ( x -- y )
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue