]> gitweb.factorcode.org Git - factor.git/commitdiff
locals: simplify by merging def and multi-def (again).
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Mar 2021 23:11:09 +0000 (16:11 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Mar 2021 23:11:09 +0000 (16:11 -0700)
basis/locals/prettyprint/prettyprint.factor
core/locals/parser/parser-tests.factor
core/locals/rewrite/closures/closures.factor
core/locals/rewrite/point-free/point-free.factor
core/locals/rewrite/sugar/sugar.factor
core/locals/types/types.factor

index ac72801d91fc1cafc197e1a79e3f6a9ef8085d6b..3a6e601dea97a8054047e247c236c554e3c4b2f6 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel locals locals.types prettyprint.backend
-prettyprint.custom prettyprint.sections sequences words ;
+USING: accessors combinators kernel locals locals.types math
+prettyprint.backend prettyprint.custom prettyprint.sections
+sequences words ;
 IN: locals.prettyprint
 
 : pprint-var ( var -- )
@@ -29,12 +30,11 @@ M: lambda pprint*
 
 M: let pprint* \ [let pprint-let ;
 
-M: def pprint*
-    dup local>> word?
-    [ <block \ :> pprint-word local>> pprint-var block> ]
-    [ pprint-tuple ] if ;
-
 M: multi-def pprint*
-    dup locals>> [ word? ] all?
-    [ <block \ :> pprint-word "(" text locals>> [ pprint-var ] each ")" text block> ]
-    [ pprint-tuple ] if ;
+    dup locals>> [ word? ] all? [
+        <block \ :> pprint-word locals>> {
+            [ length 1 > [ "(" text ] when ]
+            [ [ pprint-var ] each ]
+            [ length 1 > [ ")" text ] when ]
+        } cleave block>
+    ] [ pprint-tuple ] if ;
index 85a6913d08f3c6324a69d485f1b7965e0c8c1b3b..adb1d16a657aba47278eb38b0875a4193b9b3599 100644 (file)
@@ -30,7 +30,7 @@ IN: locals.parser.tests
 { "um" t } [
     [
         "um" parse-def
-        local>> name>>
+        locals>> first name>>
         qualified-vocabs last words>> keys "um" swap member?
     ] with-compilation-unit
 ] unit-test
index 71cc8bbf9503f998d2b0d1a19402a83cd98bde4c..36762575cf9d939b7c159468aa16f0569e228339 100644 (file)
@@ -20,8 +20,6 @@ GENERIC: defs-vars* ( seq form -- seq' )
 
 : defs-vars ( form -- vars ) { } [ defs-vars* ] reduce members ;
 
-M: def defs-vars* local>> unquote suffix ;
-
 M: multi-def defs-vars* locals>> [ unquote suffix ] each ;
 
 M: quotation defs-vars* [ defs-vars* ] each ;
index 090bc817b4563f9fb51f92aea4b80d61edd25aef..e956062956c4631bece789c33d1d70ce99806872 100644 (file)
@@ -27,17 +27,17 @@ M: local-writer localize
     dupd "local-reader" word-prop
     read-local-quot [ set-local-value ] append ;
 
-M: def localize
-    local>>
-    [ prefix ]
-    [ local-reader? [ 1array load-local ] [ load-local ] ? ]
-    bi ;
-
 M: multi-def localize
     locals>> <reversed>
     [ prepend ]
     [ [ [ local-reader? ] dip '[ [ 1array ] _ [ndip] ] [ [ ] ] if ] map-index concat ]
-    [ length [ load-locals ] curry ] tri append ;
+    [
+        length {
+            { [ dup 1 > ] [ [ load-locals ] curry ] }
+            { [ dup 1 = ] [ drop [ load-local ] ] }
+            [ drop [ ] ]
+        } cond
+    ] tri append ;
 
 M: object localize 1quotation ;
 
index 5ce22c567f996e241fd00b78bd4c4dd5ce130fa1..8dc3babed45ef4130d77b7a401900a6781b883f4 100644 (file)
@@ -20,11 +20,7 @@ GENERIC: quotation-rewrite ( form -- form' )
 M: callable quotation-rewrite [ [ rewrite-sugar* ] each ] [ ] make ;
 
 : var-defs ( vars -- defs )
-    dup length 1 > [
-        <multi-def> 1quotation
-    ] [
-        <reversed> [ <def> ] [ ] map-as
-    ] if ;
+    [ [ ] ] [ <multi-def> 1quotation ] if-empty ;
 
 M: lambda quotation-rewrite
     [ body>> ] [ vars>> var-defs ] bi prepend quotation-rewrite ;
@@ -102,8 +98,6 @@ M: vector rewrite-sugar* rewrite-element ;
 
 M: tuple rewrite-sugar* rewrite-element ;
 
-M: def rewrite-sugar* , ;
-
 M: multi-def rewrite-sugar* , ;
 
 M: hashtable rewrite-sugar* rewrite-element ;
index 9f401bbf9c6d1c6aa4dfcce1e2be4b2e168852f8..ba7c974945d984c638a71ee33384b1b8b4c0bdcb 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007, 2010 Slava Pestov, Eduardo Cavazos.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators kernel sequences words
-quotations ;
+USING: accessors arrays combinators kernel sequences
+quotations words ;
 IN: locals.types
 
 TUPLE: lambda vars body ;
@@ -18,14 +18,12 @@ C: <quote> quote
 
 : unquote ( quote -- local ) dup quote? [ local>> ] when ; inline
 
-TUPLE: def local ;
-
-C: <def> def
-
 TUPLE: multi-def locals ;
 
 C: <multi-def> multi-def
 
+: <def> ( local -- def ) 1array <multi-def> ;
+
 PREDICATE: local < word "local?" word-prop ;
 
 : <local> ( name -- word )
@@ -53,4 +51,4 @@ PREDICATE: local-writer < word "local-writer?" word-prop ;
     } 2cleave ;
 
 UNION: lexical local local-reader local-writer ;
-UNION: special lexical quote def ;
+UNION: special lexical quote ;