From e06d3e790ac8aa583ecd3b44ff6d027466431ebc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 16 May 2016 10:58:17 -0700 Subject: [PATCH] locals.definitions: add subwords support to locals/lambdas. Fix unit test now that local syntax is in syntax by default. --- core/locals/definitions/definitions.factor | 23 +++++++++++++++++++++- core/locals/locals-tests.factor | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/core/locals/definitions/definitions.factor b/core/locals/definitions/definitions.factor index 6fc715ba8d..64f5368c1f 100644 --- a/core/locals/definitions/definitions.factor +++ b/core/locals/definitions/definitions.factor @@ -1,11 +1,32 @@ ! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos. ! See http://factorcode.org/license.txt for BSD license. 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 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 definition diff --git a/core/locals/locals-tests.factor b/core/locals/locals-tests.factor index 228638b5b7..82da44a4b0 100644 --- a/core/locals/locals-tests.factor +++ b/core/locals/locals-tests.factor @@ -194,7 +194,7 @@ CONSTANT: new-definition "USING: math ;\nIN: locals.tests\n: a-word-with-locals new-definition = ] 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 )