From f436fd0c0f1645b69c0152eeb9d6f2a4f953f4aa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 7 Oct 2008 16:16:50 -0500 Subject: [PATCH 001/318] Merging in new codegen --- {unfinished => basis}/compiler/alien/alien.factor | 0 {unfinished => basis}/compiler/cfg/builder/authors.txt | 0 {unfinished => basis}/compiler/cfg/builder/builder-tests.factor | 0 {unfinished => basis}/compiler/cfg/builder/builder.factor | 0 {unfinished => basis}/compiler/cfg/builder/summary.txt | 0 {unfinished => basis}/compiler/cfg/builder/tags.txt | 0 {unfinished => basis}/compiler/cfg/cfg.factor | 0 {unfinished => basis}/compiler/cfg/debugger/debugger.factor | 0 .../compiler/cfg/instructions/instructions.factor | 0 .../compiler/cfg/instructions/syntax/syntax.factor | 0 {unfinished => basis}/compiler/cfg/iterator/iterator.factor | 0 .../compiler/cfg/linear-scan/allocation/allocation.factor | 0 .../compiler/cfg/linear-scan/assignment/assignment-tests.factor | 0 .../compiler/cfg/linear-scan/assignment/assignment.factor | 0 .../compiler/cfg/linear-scan/debugger/debugger.factor | 0 .../compiler/cfg/linear-scan/linear-scan-tests.factor | 0 {unfinished => basis}/compiler/cfg/linear-scan/linear-scan.factor | 0 .../compiler/cfg/linear-scan/live-intervals/live-intervals.factor | 0 .../compiler/cfg/linearization/linearization.factor | 0 {unfinished => basis}/compiler/cfg/registers/registers.factor | 0 {unfinished => basis}/compiler/cfg/rpo/rpo.factor | 0 {unfinished => basis}/compiler/cfg/stack-frame/stack-frame.factor | 0 {unfinished => basis}/compiler/cfg/stacks/authors.txt | 0 {unfinished => basis}/compiler/cfg/stacks/stacks.factor | 0 {unfinished => basis}/compiler/cfg/templates/templates.factor | 0 {unfinished => basis}/compiler/codegen/codegen.factor | 0 {unfinished => basis}/compiler/codegen/fixup/authors.txt | 0 {unfinished => basis}/compiler/codegen/fixup/fixup.factor | 0 {unfinished => basis}/compiler/codegen/fixup/summary.txt | 0 29 files changed, 0 insertions(+), 0 deletions(-) rename {unfinished => basis}/compiler/alien/alien.factor (100%) rename {unfinished => basis}/compiler/cfg/builder/authors.txt (100%) rename {unfinished => basis}/compiler/cfg/builder/builder-tests.factor (100%) rename {unfinished => basis}/compiler/cfg/builder/builder.factor (100%) rename {unfinished => basis}/compiler/cfg/builder/summary.txt (100%) rename {unfinished => basis}/compiler/cfg/builder/tags.txt (100%) rename {unfinished => basis}/compiler/cfg/cfg.factor (100%) rename {unfinished => basis}/compiler/cfg/debugger/debugger.factor (100%) rename {unfinished => basis}/compiler/cfg/instructions/instructions.factor (100%) rename {unfinished => basis}/compiler/cfg/instructions/syntax/syntax.factor (100%) rename {unfinished => basis}/compiler/cfg/iterator/iterator.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/allocation/allocation.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/assignment/assignment-tests.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/assignment/assignment.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/debugger/debugger.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/linear-scan-tests.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/linear-scan.factor (100%) rename {unfinished => basis}/compiler/cfg/linear-scan/live-intervals/live-intervals.factor (100%) rename {unfinished => basis}/compiler/cfg/linearization/linearization.factor (100%) rename {unfinished => basis}/compiler/cfg/registers/registers.factor (100%) rename {unfinished => basis}/compiler/cfg/rpo/rpo.factor (100%) rename {unfinished => basis}/compiler/cfg/stack-frame/stack-frame.factor (100%) rename {unfinished => basis}/compiler/cfg/stacks/authors.txt (100%) rename {unfinished => basis}/compiler/cfg/stacks/stacks.factor (100%) rename {unfinished => basis}/compiler/cfg/templates/templates.factor (100%) rename {unfinished => basis}/compiler/codegen/codegen.factor (100%) rename {unfinished => basis}/compiler/codegen/fixup/authors.txt (100%) rename {unfinished => basis}/compiler/codegen/fixup/fixup.factor (100%) rename {unfinished => basis}/compiler/codegen/fixup/summary.txt (100%) diff --git a/unfinished/compiler/alien/alien.factor b/basis/compiler/alien/alien.factor similarity index 100% rename from unfinished/compiler/alien/alien.factor rename to basis/compiler/alien/alien.factor diff --git a/unfinished/compiler/cfg/builder/authors.txt b/basis/compiler/cfg/builder/authors.txt similarity index 100% rename from unfinished/compiler/cfg/builder/authors.txt rename to basis/compiler/cfg/builder/authors.txt diff --git a/unfinished/compiler/cfg/builder/builder-tests.factor b/basis/compiler/cfg/builder/builder-tests.factor similarity index 100% rename from unfinished/compiler/cfg/builder/builder-tests.factor rename to basis/compiler/cfg/builder/builder-tests.factor diff --git a/unfinished/compiler/cfg/builder/builder.factor b/basis/compiler/cfg/builder/builder.factor similarity index 100% rename from unfinished/compiler/cfg/builder/builder.factor rename to basis/compiler/cfg/builder/builder.factor diff --git a/unfinished/compiler/cfg/builder/summary.txt b/basis/compiler/cfg/builder/summary.txt similarity index 100% rename from unfinished/compiler/cfg/builder/summary.txt rename to basis/compiler/cfg/builder/summary.txt diff --git a/unfinished/compiler/cfg/builder/tags.txt b/basis/compiler/cfg/builder/tags.txt similarity index 100% rename from unfinished/compiler/cfg/builder/tags.txt rename to basis/compiler/cfg/builder/tags.txt diff --git a/unfinished/compiler/cfg/cfg.factor b/basis/compiler/cfg/cfg.factor similarity index 100% rename from unfinished/compiler/cfg/cfg.factor rename to basis/compiler/cfg/cfg.factor diff --git a/unfinished/compiler/cfg/debugger/debugger.factor b/basis/compiler/cfg/debugger/debugger.factor similarity index 100% rename from unfinished/compiler/cfg/debugger/debugger.factor rename to basis/compiler/cfg/debugger/debugger.factor diff --git a/unfinished/compiler/cfg/instructions/instructions.factor b/basis/compiler/cfg/instructions/instructions.factor similarity index 100% rename from unfinished/compiler/cfg/instructions/instructions.factor rename to basis/compiler/cfg/instructions/instructions.factor diff --git a/unfinished/compiler/cfg/instructions/syntax/syntax.factor b/basis/compiler/cfg/instructions/syntax/syntax.factor similarity index 100% rename from unfinished/compiler/cfg/instructions/syntax/syntax.factor rename to basis/compiler/cfg/instructions/syntax/syntax.factor diff --git a/unfinished/compiler/cfg/iterator/iterator.factor b/basis/compiler/cfg/iterator/iterator.factor similarity index 100% rename from unfinished/compiler/cfg/iterator/iterator.factor rename to basis/compiler/cfg/iterator/iterator.factor diff --git a/unfinished/compiler/cfg/linear-scan/allocation/allocation.factor b/basis/compiler/cfg/linear-scan/allocation/allocation.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/allocation/allocation.factor rename to basis/compiler/cfg/linear-scan/allocation/allocation.factor diff --git a/unfinished/compiler/cfg/linear-scan/assignment/assignment-tests.factor b/basis/compiler/cfg/linear-scan/assignment/assignment-tests.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/assignment/assignment-tests.factor rename to basis/compiler/cfg/linear-scan/assignment/assignment-tests.factor diff --git a/unfinished/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/assignment/assignment.factor rename to basis/compiler/cfg/linear-scan/assignment/assignment.factor diff --git a/unfinished/compiler/cfg/linear-scan/debugger/debugger.factor b/basis/compiler/cfg/linear-scan/debugger/debugger.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/debugger/debugger.factor rename to basis/compiler/cfg/linear-scan/debugger/debugger.factor diff --git a/unfinished/compiler/cfg/linear-scan/linear-scan-tests.factor b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/linear-scan-tests.factor rename to basis/compiler/cfg/linear-scan/linear-scan-tests.factor diff --git a/unfinished/compiler/cfg/linear-scan/linear-scan.factor b/basis/compiler/cfg/linear-scan/linear-scan.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/linear-scan.factor rename to basis/compiler/cfg/linear-scan/linear-scan.factor diff --git a/unfinished/compiler/cfg/linear-scan/live-intervals/live-intervals.factor b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor similarity index 100% rename from unfinished/compiler/cfg/linear-scan/live-intervals/live-intervals.factor rename to basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor diff --git a/unfinished/compiler/cfg/linearization/linearization.factor b/basis/compiler/cfg/linearization/linearization.factor similarity index 100% rename from unfinished/compiler/cfg/linearization/linearization.factor rename to basis/compiler/cfg/linearization/linearization.factor diff --git a/unfinished/compiler/cfg/registers/registers.factor b/basis/compiler/cfg/registers/registers.factor similarity index 100% rename from unfinished/compiler/cfg/registers/registers.factor rename to basis/compiler/cfg/registers/registers.factor diff --git a/unfinished/compiler/cfg/rpo/rpo.factor b/basis/compiler/cfg/rpo/rpo.factor similarity index 100% rename from unfinished/compiler/cfg/rpo/rpo.factor rename to basis/compiler/cfg/rpo/rpo.factor diff --git a/unfinished/compiler/cfg/stack-frame/stack-frame.factor b/basis/compiler/cfg/stack-frame/stack-frame.factor similarity index 100% rename from unfinished/compiler/cfg/stack-frame/stack-frame.factor rename to basis/compiler/cfg/stack-frame/stack-frame.factor diff --git a/unfinished/compiler/cfg/stacks/authors.txt b/basis/compiler/cfg/stacks/authors.txt similarity index 100% rename from unfinished/compiler/cfg/stacks/authors.txt rename to basis/compiler/cfg/stacks/authors.txt diff --git a/unfinished/compiler/cfg/stacks/stacks.factor b/basis/compiler/cfg/stacks/stacks.factor similarity index 100% rename from unfinished/compiler/cfg/stacks/stacks.factor rename to basis/compiler/cfg/stacks/stacks.factor diff --git a/unfinished/compiler/cfg/templates/templates.factor b/basis/compiler/cfg/templates/templates.factor similarity index 100% rename from unfinished/compiler/cfg/templates/templates.factor rename to basis/compiler/cfg/templates/templates.factor diff --git a/unfinished/compiler/codegen/codegen.factor b/basis/compiler/codegen/codegen.factor similarity index 100% rename from unfinished/compiler/codegen/codegen.factor rename to basis/compiler/codegen/codegen.factor diff --git a/unfinished/compiler/codegen/fixup/authors.txt b/basis/compiler/codegen/fixup/authors.txt similarity index 100% rename from unfinished/compiler/codegen/fixup/authors.txt rename to basis/compiler/codegen/fixup/authors.txt diff --git a/unfinished/compiler/codegen/fixup/fixup.factor b/basis/compiler/codegen/fixup/fixup.factor similarity index 100% rename from unfinished/compiler/codegen/fixup/fixup.factor rename to basis/compiler/codegen/fixup/fixup.factor diff --git a/unfinished/compiler/codegen/fixup/summary.txt b/basis/compiler/codegen/fixup/summary.txt similarity index 100% rename from unfinished/compiler/codegen/fixup/summary.txt rename to basis/compiler/codegen/fixup/summary.txt From e69278b8fc24a81f1d3ad983ca789e04436f49ac Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 7 Oct 2008 16:17:55 -0500 Subject: [PATCH 002/318] Merging in new codegen --- basis/compiler/compiler.factor | 70 +- basis/compiler/generator/authors.txt | 1 - basis/compiler/generator/fixup/authors.txt | 1 - .../generator/fixup/fixup-docs.factor | 19 - basis/compiler/generator/fixup/fixup.factor | 154 ---- basis/compiler/generator/fixup/summary.txt | 1 - .../compiler/generator/generator-docs.factor | 85 --- basis/compiler/generator/generator.factor | 581 --------------- .../generator/iterator/iterator.factor | 45 -- .../compiler/generator/registers/authors.txt | 1 - .../generator/registers/registers.factor | 672 ------------------ .../compiler/generator/registers/summary.txt | 1 - basis/compiler/generator/summary.txt | 1 - basis/compiler/generator/tags.txt | 1 - basis/cpu/architecture/architecture.factor | 12 + basis/cpu/x86/allot/allot.factor | 37 +- .../cpu/x86/architecture/architecture.factor | 5 + basis/cpu/x86/sse2/sse2.factor | 5 +- .../compiler/cfg.bluesky/alias/alias.factor | 293 -------- unfinished/compiler/cfg.bluesky/authors.txt | 1 - .../cfg.bluesky/builder/builder-tests.factor | 4 - .../cfg.bluesky/builder/builder.factor | 256 ------- unfinished/compiler/cfg.bluesky/cfg.factor | 47 -- .../elaboration/elaboration.factor | 49 -- .../cfg.bluesky/kill-nops/kill-nops.factor | 9 - .../live-ranges/live-ranges.factor | 40 -- .../predecessors/predecessors.factor | 12 - .../cfg.bluesky/simplifier/simplifier.factor | 25 - .../compiler/cfg.bluesky/stack/stack.factor | 42 -- unfinished/compiler/cfg.bluesky/summary.txt | 1 - .../vn/conditions/conditions.factor | 53 -- .../vn/constant-fold/constant-fold.factor | 17 - .../vn/expressions/expressions.factor | 64 -- .../cfg.bluesky/vn/graph/graph.factor | 37 - .../cfg.bluesky/vn/liveness/liveness.factor | 37 - .../cfg.bluesky/vn/propagate/propagate.factor | 43 -- .../cfg.bluesky/vn/simplify/simplify.factor | 220 ------ unfinished/compiler/cfg.bluesky/vn/vn.factor | 31 - .../write-barrier/write-barrier.factor | 26 - .../compiler/lvops.bluesky/lvops.factor | 21 - .../machine.bluesky/builder/builder.factor | 50 -- .../machine.bluesky/debugger/debugger.factor | 45 -- .../simplifier/simplifier.factor | 18 - unfinished/compiler/new/new.factor | 122 ---- .../vops.bluesky/builder/builder.factor | 202 ------ unfinished/compiler/vops.bluesky/vops.factor | 181 ----- 46 files changed, 108 insertions(+), 3530 deletions(-) delete mode 100644 basis/compiler/generator/authors.txt delete mode 100644 basis/compiler/generator/fixup/authors.txt delete mode 100644 basis/compiler/generator/fixup/fixup-docs.factor delete mode 100644 basis/compiler/generator/fixup/fixup.factor delete mode 100644 basis/compiler/generator/fixup/summary.txt delete mode 100644 basis/compiler/generator/generator-docs.factor delete mode 100644 basis/compiler/generator/generator.factor delete mode 100644 basis/compiler/generator/iterator/iterator.factor delete mode 100644 basis/compiler/generator/registers/authors.txt delete mode 100644 basis/compiler/generator/registers/registers.factor delete mode 100644 basis/compiler/generator/registers/summary.txt delete mode 100644 basis/compiler/generator/summary.txt delete mode 100644 basis/compiler/generator/tags.txt delete mode 100644 unfinished/compiler/cfg.bluesky/alias/alias.factor delete mode 100644 unfinished/compiler/cfg.bluesky/authors.txt delete mode 100644 unfinished/compiler/cfg.bluesky/builder/builder-tests.factor delete mode 100644 unfinished/compiler/cfg.bluesky/builder/builder.factor delete mode 100644 unfinished/compiler/cfg.bluesky/cfg.factor delete mode 100644 unfinished/compiler/cfg.bluesky/elaboration/elaboration.factor delete mode 100644 unfinished/compiler/cfg.bluesky/kill-nops/kill-nops.factor delete mode 100644 unfinished/compiler/cfg.bluesky/live-ranges/live-ranges.factor delete mode 100644 unfinished/compiler/cfg.bluesky/predecessors/predecessors.factor delete mode 100644 unfinished/compiler/cfg.bluesky/simplifier/simplifier.factor delete mode 100644 unfinished/compiler/cfg.bluesky/stack/stack.factor delete mode 100644 unfinished/compiler/cfg.bluesky/summary.txt delete mode 100644 unfinished/compiler/cfg.bluesky/vn/conditions/conditions.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/constant-fold/constant-fold.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/expressions/expressions.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/graph/graph.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/liveness/liveness.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/propagate/propagate.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/simplify/simplify.factor delete mode 100644 unfinished/compiler/cfg.bluesky/vn/vn.factor delete mode 100644 unfinished/compiler/cfg.bluesky/write-barrier/write-barrier.factor delete mode 100644 unfinished/compiler/lvops.bluesky/lvops.factor delete mode 100644 unfinished/compiler/machine.bluesky/builder/builder.factor delete mode 100644 unfinished/compiler/machine.bluesky/debugger/debugger.factor delete mode 100644 unfinished/compiler/machine.bluesky/simplifier/simplifier.factor delete mode 100644 unfinished/compiler/new/new.factor delete mode 100644 unfinished/compiler/vops.bluesky/builder/builder.factor delete mode 100644 unfinished/compiler/vops.bluesky/vops.factor diff --git a/basis/compiler/compiler.factor b/basis/compiler/compiler.factor index 1558127293..5235f68eca 100644 --- a/basis/compiler/compiler.factor +++ b/basis/compiler/compiler.factor @@ -1,12 +1,30 @@ ! Copyright (C) 2004, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel namespaces arrays sequences io debugger words fry -compiler.units continuations vocabs assocs dlists definitions -math threads graphs generic combinators deques search-deques -stack-checker stack-checker.state compiler.generator -compiler.errors compiler.tree.builder compiler.tree.optimizer ; +USING: accessors kernel namespaces arrays sequences io debugger +words fry continuations vocabs assocs dlists definitions math +threads graphs generic combinators deques search-deques +stack-checker stack-checker.state stack-checker.inlining +compiler.errors compiler.units compiler.tree.builder +compiler.tree.optimizer compiler.cfg.builder +compiler.cfg.linearization compiler.cfg.linear-scan +compiler.cfg.stack-frame compiler.codegen ; IN: compiler +SYMBOL: compile-queue +SYMBOL: compiled + +: queue-compile ( word -- ) + { + { [ dup "forgotten" word-prop ] [ ] } + { [ dup compiled get key? ] [ ] } + { [ dup inlined-block? ] [ ] } + { [ dup primitive? ] [ ] } + [ dup compile-queue get push-front ] + } cond drop ; + +: maybe-compile ( word -- ) + dup compiled>> [ drop ] [ queue-compile ] if ; + SYMBOL: +failed+ : ripple-up ( words -- ) @@ -24,10 +42,12 @@ SYMBOL: +failed+ [ "compiled-effect" set-word-prop ] 2bi ; -: compile-begins ( word -- ) +: start ( word -- ) + H{ } clone dependencies set + H{ } clone generic-dependencies set f swap compiler-error ; -: compile-failed ( word error -- ) +: fail ( word error -- ) [ swap compiler-error ] [ drop @@ -35,9 +55,13 @@ SYMBOL: +failed+ [ f swap compiled get set-at ] [ +failed+ save-effect ] tri - ] 2bi ; + ] 2bi + return ; -: compile-succeeded ( effect word -- ) +: frontend ( word -- effect nodes ) + [ build-tree-from-word ] [ fail ] recover optimize-tree ; + +: finish ( effect word -- ) [ swap save-effect ] [ compiled-unxref ] [ @@ -49,19 +73,27 @@ SYMBOL: +failed+ ] [ drop ] if ] tri ; +: save-asm ( asm -- ) + [ [ code>> ] [ label>> ] bi compiled get set-at ] + [ calls>> [ queue-compile ] each ] + bi ; + +: backend ( nodes word -- ) + build-cfg [ + build-mr + linear-scan + build-stack-frame + generate + save-asm + ] each ; + : (compile) ( word -- ) '[ - H{ } clone dependencies set - H{ } clone generic-dependencies set - _ { - [ compile-begins ] - [ - [ build-tree-from-word ] [ compile-failed return ] recover - optimize-tree - ] - [ dup generate ] - [ compile-succeeded ] + [ start ] + [ frontend ] + [ backend ] + [ finish ] } cleave ] with-return ; diff --git a/basis/compiler/generator/authors.txt b/basis/compiler/generator/authors.txt deleted file mode 100644 index 1901f27a24..0000000000 --- a/basis/compiler/generator/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Slava Pestov diff --git a/basis/compiler/generator/fixup/authors.txt b/basis/compiler/generator/fixup/authors.txt deleted file mode 100644 index 1901f27a24..0000000000 --- a/basis/compiler/generator/fixup/authors.txt +++ /dev/null @@ -1 +0,0 @@ -Slava Pestov diff --git a/basis/compiler/generator/fixup/fixup-docs.factor b/basis/compiler/generator/fixup/fixup-docs.factor deleted file mode 100644 index a119d153e6..0000000000 --- a/basis/compiler/generator/fixup/fixup-docs.factor +++ /dev/null @@ -1,19 +0,0 @@ -USING: help.syntax help.markup math kernel -words strings alien compiler.generator ; -IN: compiler.generator.fixup - -HELP: frame-required -{ $values { "n" "a non-negative integer" } } -{ $description "Notify the code generator that the currently compiling code block needs a stack frame with room for at least " { $snippet "n" } " parameters." } ; - -HELP: add-literal -{ $values { "obj" object } { "n" integer } } -{ $description "Adds a literal to the " { $link literal-table } ", if it is not already there, and outputs the index of the literal in the table. This literal can then be used as an argument for a " { $link rt-literal } " relocation with " { $link rel-fixup } "." } ; - -HELP: rel-dlsym -{ $values { "name" string } { "dll" "a " { $link dll } " or " { $link f } } { "class" "a relocation class" } } -{ $description "Records that the most recently assembled instruction contains a reference to the " { $snippet "name" } " symbol from " { $snippet "dll" } ". The correct " { $snippet "class" } " to use depends on instruction formats." -} ; - -HELP: literal-table -{ $var-description "Holds a vector of literal objects referenced from the currently compiling word. If " { $link compiled-stack-traces? } " is on, " { $link begin-compiling } " ensures that the first entry is the word being compiled." } ; diff --git a/basis/compiler/generator/fixup/fixup.factor b/basis/compiler/generator/fixup/fixup.factor deleted file mode 100644 index e8bdc561b7..0000000000 --- a/basis/compiler/generator/fixup/fixup.factor +++ /dev/null @@ -1,154 +0,0 @@ -! Copyright (C) 2007, 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: arrays byte-arrays generic assocs hashtables io.binary -kernel kernel.private math namespaces make sequences words -quotations strings alien.accessors alien.strings layouts system -combinators math.bitwise words.private cpu.architecture -math.order accessors growable ; -IN: compiler.generator.fixup - -: no-stack-frame -1 ; inline - -TUPLE: frame-required n ; - -: frame-required ( n -- ) \ frame-required boa , ; - -: compute-stack-frame-size ( code -- n ) - no-stack-frame [ - dup frame-required? [ n>> max ] [ drop ] if - ] reduce ; - -GENERIC: fixup* ( frame-size obj -- frame-size ) - -: code-format 22 getenv ; - -: compiled-offset ( -- n ) building get length code-format * ; - -TUPLE: label offset ; - -: