From 00d970cf1590be892a316ae93161b8f5aa2491b5 Mon Sep 17 00:00:00 2001 From: slava Date: Wed, 9 Aug 2006 06:12:01 +0000 Subject: [PATCH] Compiled code labels are now first-class --- library/compiler/generator/generator.factor | 34 +++++----- library/compiler/generator/xt.factor | 63 +++++++++++-------- library/compiler/inference/known-words.factor | 2 +- library/compiler/ppc/assembler.factor | 2 + library/compiler/ppc/intrinsics.factor | 28 ++++----- library/compiler/x86/architecture.factor | 4 +- library/compiler/x86/intrinsics.factor | 24 +++---- vm/alien.c | 18 +++--- vm/bignum.c | 1 - vm/factor.c | 1 - vm/image.c | 24 +++++-- vm/image.h | 6 +- vm/run.c | 41 +++++++++--- vm/run.h | 1 - 14 files changed, 150 insertions(+), 99 deletions(-) diff --git a/library/compiler/generator/generator.factor b/library/compiler/generator/generator.factor index f608fd6ae2..677f7d2cc6 100644 --- a/library/compiler/generator/generator.factor +++ b/library/compiler/generator/generator.factor @@ -42,17 +42,23 @@ UNION: #terminal : init-generator ( -- ) V{ } clone relocation-table set - V{ } clone literal-table set ; + V{ } clone literal-table set + V{ } clone label-table set + V{ } clone label-relocation-table set ; : generate-1 ( word node quot -- | quot: node -- ) - [ + #! Generate the code, then dump five vectors to pass to + #! add-compiled-block. + pick f save-xt [ init-generator init-templates generate-code relocation-table get literal-table get + label-table get + label-relocation-table get ] V{ } make - code-format 2swap add-compiled-block swap save-xt ; + code-format add-compiled-block save-xt ; SYMBOL: generate-queue @@ -90,9 +96,6 @@ M: node generate-node ( node -- next ) drop iterate-next ; tail-call? [ %jump f ] [ %call iterate-next ] if ; M: #label generate-node ( node -- next ) - #! We remap the IR node's label to a new label object here, - #! to avoid problems with two IR #label nodes having the - #! same label in different lexical scopes. dup node-param dup generate-call >r swap node-child generate-word r> ; @@ -103,8 +106,8 @@ M: #label generate-node ( node -- next ) : generate-if ( node label -- next )