diff --git a/basis/locals/locals-tests.factor b/basis/locals/locals-tests.factor index 66551d83f3..8796721b1b 100644 --- a/basis/locals/locals-tests.factor +++ b/basis/locals/locals-tests.factor @@ -429,6 +429,8 @@ M:: integer lambda-method-forget-test ( a -- b ) ; \ FAILdog-2 must-infer +[ 3 ] [ 3 [| a | \ a ] call ] unit-test + ! :: wlet-&&-test ( a -- ? ) ! [wlet | is-integer? [ a integer? ] ! is-even? [ a even? ] diff --git a/basis/locals/locals.factor b/basis/locals/locals.factor index 3b23795d90..df713a50e7 100644 --- a/basis/locals/locals.factor +++ b/basis/locals/locals.factor @@ -206,6 +206,8 @@ M: array rewrite-literal? [ rewrite-literal? ] contains? ; M: quotation rewrite-literal? [ rewrite-literal? ] contains? ; +M: wrapper rewrite-literal? drop t ; + M: hashtable rewrite-literal? drop t ; M: vector rewrite-literal? drop t ; @@ -243,6 +245,9 @@ M: local-reader rewrite-element , ; M: word rewrite-element literalize , ; +M: wrapper rewrite-element + dup rewrite-literal? [ wrapped>> rewrite-element ] [ , ] if ; + M: object rewrite-element , ; M: array local-rewrite* rewrite-element ; @@ -253,6 +258,8 @@ M: tuple local-rewrite* rewrite-element ; M: hashtable local-rewrite* rewrite-element ; +M: wrapper local-rewrite* rewrite-element ; + M: word local-rewrite* dup { >r r> load-locals get-local drop-locals } memq? [ >r/r>-in-lambda-error ] [ call-next-method ] if ;