From 22d59eaf17976cd975bce0a1263dac0eab04be41 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 5 May 2010 13:17:20 -0400 Subject: [PATCH] compiler.cfg.intrinsics.allot: fix intrinsic for real. Don't ever check in code without testing it --- basis/compiler/cfg/intrinsics/allot/allot.factor | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/basis/compiler/cfg/intrinsics/allot/allot.factor b/basis/compiler/cfg/intrinsics/allot/allot.factor index 47f5be962e..dd3288cec3 100644 --- a/basis/compiler/cfg/intrinsics/allot/allot.factor +++ b/basis/compiler/cfg/intrinsics/allot/allot.factor @@ -4,7 +4,8 @@ USING: kernel math math.order sequences accessors arrays byte-arrays layouts classes.tuple.private fry locals compiler.tree.propagation.info compiler.cfg.hats compiler.cfg.instructions compiler.cfg.stacks -compiler.cfg.utilities compiler.cfg.builder.blocks ; +compiler.cfg.utilities compiler.cfg.builder.blocks +compiler.constants cpu.architecture alien.c-types ; IN: compiler.cfg.intrinsics.allot : ##set-slots ( regs obj class -- ) @@ -73,10 +74,16 @@ IN: compiler.cfg.intrinsics.allot dup node-input-infos first literal>> dup expand-(byte-array)? [ nip emit-allot-byte-array drop ] [ drop emit-primitive ] if ; +:: zero-byte-array ( len reg -- ) + 0 ^^load-literal :> elt + reg ^^tagged>integer :> reg + len 3 + 4 /i iota [ + [ elt reg ] dip 4 * byte-array-offset + int-rep uint ##store-memory-imm + ] each ; + :: emit- ( node -- ) node node-input-infos first literal>> dup expand-? [ :> len - 0 ^^load-literal :> elt len emit-allot-byte-array :> reg - len cell align cell /i reg elt byte-array store-initial-element + len reg zero-byte-array ] [ drop node emit-primitive ] if ;