]> gitweb.factorcode.org Git - factor.git/commitdiff
locals.rewrite: merge all locals.rewrite.* code...
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 20 Mar 2021 03:59:22 +0000 (20:59 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 20 Mar 2021 04:09:20 +0000 (21:09 -0700)
core/locals/parser/parser.factor
core/locals/rewrite/closures/closures.factor [deleted file]
core/locals/rewrite/closures/summary.txt [deleted file]
core/locals/rewrite/point-free/point-free.factor [deleted file]
core/locals/rewrite/point-free/summary.txt [deleted file]
core/locals/rewrite/sugar/sugar.factor [deleted file]
core/locals/rewrite/sugar/summary.txt [deleted file]
core/locals/rewrite/summary.txt [new file with mode: 0644]
extra/smalltalk/compiler/compiler-tests.factor
extra/smalltalk/compiler/return/return.factor
extra/smalltalk/listener/listener.factor

index 45dfaa815fdd01f84ba61d2c132149a2ca52e207..06be0bff163a1f7d648766a906e3bae2dd366aaa 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2007, 2009 Slava Pestov, Eduardo Cavazos.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays assocs effects.parser generic.parser
-kernel lexer locals.errors locals.rewrite.closures locals.types
+kernel lexer locals.errors locals.rewrite locals.types
 make namespaces parser quotations sequences splitting
 vocabs.parser words ;
 IN: locals.parser
diff --git a/core/locals/rewrite/closures/closures.factor b/core/locals/rewrite/closures/closures.factor
deleted file mode 100644 (file)
index 3676257..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel locals.rewrite.point-free
-locals.rewrite.sugar locals.types macros.expander make
-quotations sequences sets words ;
-IN: locals.rewrite.closures
-
-! Step 2: identify free variables and make them into explicit
-! parameters of lambdas which are curried on
-
-GENERIC: rewrite-closures* ( obj -- )
-
-: (rewrite-closures) ( form -- form' )
-    [ [ rewrite-closures* ] each ] [ ] make ;
-
-: rewrite-closures ( form -- form' )
-    expand-macros (rewrite-sugar) (rewrite-closures) point-free ;
-
-GENERIC: defs-vars* ( seq form -- seq' )
-
-: defs-vars ( form -- vars ) { } [ defs-vars* ] reduce members ;
-
-M: multi-def defs-vars* locals>> [ unquote suffix ] each ;
-
-M: quotation defs-vars* [ defs-vars* ] each ;
-
-M: object defs-vars* drop ;
-
-GENERIC: uses-vars* ( seq form -- seq' )
-
-: uses-vars ( form -- vars ) { } [ uses-vars* ] reduce members ;
-
-M: local-writer uses-vars* "local-reader" word-prop suffix ;
-
-M: lexical uses-vars* suffix ;
-
-M: quote uses-vars* local>> uses-vars* ;
-
-M: object uses-vars* drop ;
-
-M: quotation uses-vars* [ uses-vars* ] each ;
-
-: free-vars ( form -- seq )
-    [ uses-vars ] [ defs-vars ] bi diff ;
-
-M: callable rewrite-closures*
-    ! Turn free variables into bound variables, curry them
-    ! onto the body
-    dup free-vars [ <quote> ] map
-    [ % ]
-    [ var-defs prepend (rewrite-closures) point-free , ]
-    [ length \ curry <repetition> % ]
-    tri ;
-
-M: object rewrite-closures* , ;
diff --git a/core/locals/rewrite/closures/summary.txt b/core/locals/rewrite/closures/summary.txt
deleted file mode 100644 (file)
index d0a28aa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Rewriting closures to not have any free variables
diff --git a/core/locals/rewrite/point-free/point-free.factor b/core/locals/rewrite/point-free/point-free.factor
deleted file mode 100644 (file)
index e956062..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays combinators fry.private kernel
-locals.backend locals.errors locals.types make math quotations
-sequences words ;
-IN: locals.rewrite.point-free
-
-! Step 3: rewrite locals usage within a single quotation into
-! retain stack manipulation
-
-: local-index ( args obj -- n )
-    2dup '[ unquote _ eq? ] find drop
-    [ 2nip ] [ bad-local ] if* ;
-
-: read-local-quot ( args obj -- quot )
-    local-index neg [ get-local ] curry ;
-
-GENERIC: localize ( args obj -- args quot )
-
-M: local localize dupd read-local-quot ;
-
-M: quote localize dupd local>> read-local-quot ;
-
-M: local-reader localize dupd read-local-quot [ local-value ] append ;
-
-M: local-writer localize
-    dupd "local-reader" word-prop
-    read-local-quot [ set-local-value ] append ;
-
-M: multi-def localize
-    locals>> <reversed>
-    [ prepend ]
-    [ [ [ local-reader? ] dip '[ [ 1array ] _ [ndip] ] [ [ ] ] if ] map-index concat ]
-    [
-        length {
-            { [ dup 1 > ] [ [ load-locals ] curry ] }
-            { [ dup 1 = ] [ drop [ load-local ] ] }
-            [ drop [ ] ]
-        } cond
-    ] tri append ;
-
-M: object localize 1quotation ;
-
-: drop-locals-quot ( args -- )
-    [ length , [ drop-locals ] % ] unless-empty ;
-
-: point-free ( quot -- newquot )
-    [ { } swap [ localize % ] each drop-locals-quot ] [ ] make ;
diff --git a/core/locals/rewrite/point-free/summary.txt b/core/locals/rewrite/point-free/summary.txt
deleted file mode 100644 (file)
index 40ab193..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Rewriting applicative code to use the retain stack instead of named values
diff --git a/core/locals/rewrite/sugar/sugar.factor b/core/locals/rewrite/sugar/sugar.factor
deleted file mode 100644 (file)
index 8dc3bab..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-! Copyright (C) 2007, 2008 Slava Pestov, Eduardo Cavazos.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays assocs classes classes.tuple fry
-sequences.generalizations hashtables kernel locals locals.backend
-locals.errors locals.types make math quotations sequences vectors
-words ;
-IN: locals.rewrite.sugar
-
-! Step 1: rewrite [| into :> forms, turn
-! literals with locals in them into code which constructs
-! the literal after pushing locals on the stack
-
-GENERIC: rewrite-sugar* ( obj -- )
-
-: (rewrite-sugar) ( form -- form' )
-    [ rewrite-sugar* ] [ ] make ;
-
-GENERIC: quotation-rewrite ( form -- form' )
-
-M: callable quotation-rewrite [ [ rewrite-sugar* ] each ] [ ] make ;
-
-: var-defs ( vars -- defs )
-    [ [ ] ] [ <multi-def> 1quotation ] if-empty ;
-
-M: lambda quotation-rewrite
-    [ body>> ] [ vars>> var-defs ] bi prepend quotation-rewrite ;
-
-M: callable rewrite-sugar* quotation-rewrite , ;
-
-M: lambda rewrite-sugar* quotation-rewrite , ;
-
-GENERIC: rewrite-literal? ( obj -- ? )
-
-M: special rewrite-literal? drop t ;
-
-M: array rewrite-literal? [ rewrite-literal? ] any? ;
-
-M: quotation rewrite-literal? [ rewrite-literal? ] any? ;
-
-M: vector rewrite-literal? [ rewrite-literal? ] any? ;
-
-M: wrapper rewrite-literal? wrapped>> rewrite-literal? ;
-
-M: hashtable rewrite-literal? >alist rewrite-literal? ;
-
-M: tuple rewrite-literal? tuple>array rewrite-literal? ;
-
-M: object rewrite-literal? drop f ;
-
-GENERIC: rewrite-element ( obj -- )
-
-: rewrite-elements ( seq -- )
-    [ rewrite-element ] each ;
-
-: rewrite-sequence ( seq -- )
-    [ rewrite-elements ] [ length ] [ 0 head ] tri '[ _ _ nsequence ] % ;
-
-M: array rewrite-element
-    dup rewrite-literal? [ rewrite-sequence ] [ , ] if ;
-
-M: vector rewrite-element
-    dup rewrite-literal? [ rewrite-sequence ] [ , ] if ;
-
-M: hashtable rewrite-element
-    dup rewrite-literal? [ >alist rewrite-sequence \ >hashtable , ] [ , ] if ;
-
-M: tuple rewrite-element
-    dup rewrite-literal? [
-        [ tuple-slots rewrite-elements ] [ class-of ] bi '[ _ boa ] %
-    ] [ , ] if ;
-
-M: quotation rewrite-element rewrite-sugar* ;
-
-M: lambda rewrite-element rewrite-sugar* ;
-
-M: let rewrite-element let-form-in-literal-error ;
-
-M: local rewrite-element , ;
-
-M: local-reader rewrite-element , ;
-
-M: local-writer rewrite-element
-    local-writer-in-literal-error ;
-
-M: word rewrite-element <wrapper> , ;
-
-: rewrite-wrapper ( wrapper -- )
-    dup rewrite-literal? [ wrapped>> rewrite-element ] [ , ] if ;
-
-M: wrapper rewrite-element
-    rewrite-wrapper \ <wrapper> , ;
-
-M: object rewrite-element , ;
-
-M: array rewrite-sugar* rewrite-element ;
-
-M: vector rewrite-sugar* rewrite-element ;
-
-M: tuple rewrite-sugar* rewrite-element ;
-
-M: multi-def rewrite-sugar* , ;
-
-M: hashtable rewrite-sugar* rewrite-element ;
-
-M: wrapper rewrite-sugar*
-    rewrite-wrapper ;
-
-M: word rewrite-sugar*
-    dup { load-locals get-local drop-locals } member-eq?
-    [ >r/r>-in-lambda-error ] [ call-next-method ] if ;
-
-M: object rewrite-sugar* , ;
-
-M: let rewrite-sugar*
-    body>> quotation-rewrite % ;
diff --git a/core/locals/rewrite/sugar/summary.txt b/core/locals/rewrite/sugar/summary.txt
deleted file mode 100644 (file)
index 485bb84..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Desugaring locals in literals and let binding
diff --git a/core/locals/rewrite/summary.txt b/core/locals/rewrite/summary.txt
new file mode 100644 (file)
index 0000000..04070f1
--- /dev/null
@@ -0,0 +1 @@
+Rewriting locals to bindings, closures, and retain stack usage.
index 5b558a8b4f2696fa99f28108438cb71f1d7d0e38..60b24c56446bd41e12943b7790c4e1ce479a2f74 100644 (file)
@@ -1,5 +1,5 @@
 USING: smalltalk.compiler tools.test prettyprint smalltalk.ast
-smalltalk.compiler.lexenv stack-checker locals.rewrite.closures
+smalltalk.compiler.lexenv stack-checker locals.rewrite
 kernel accessors compiler.units sequences arrays ;
 IN: smalltalk.compiler.tests
 
index f34aba012b143924762bbf2b3e7a1b9a7726ba13..673628ae6d143848750a5b1872d3616046f4cb72 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays combinators.short-circuit continuations
-fry generalizations kernel locals locals.types locals.rewrite.closures
+fry generalizations kernel locals locals.types locals.rewrite
 namespaces make sequences smalltalk.ast ;
 IN: smalltalk.compiler.return
 
index dd65a7a95bc7546f2cb544ea829157a05ee80b1c..37418f9ef79e83983e1013e576c8d411664442b1 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel prettyprint io io.styles colors.constants compiler.units
-fry debugger sequences locals.rewrite.closures smalltalk.ast
+fry debugger sequences locals.rewrite smalltalk.ast
 smalltalk.eval smalltalk.printer smalltalk.listener ;
 IN: smalltalk.listener