From c5396ca30c67b9d55b8ebe33afdbfe920a12b4b9 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 4 Jul 2008 04:18:40 -0500 Subject: [PATCH] Expand boa constructors later to avoid issue where compiler inserts calls to 'curry' in unsafe code --- core/inference/transforms/transforms.factor | 11 ----------- core/optimizer/known-words/known-words.factor | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/core/inference/transforms/transforms.factor b/core/inference/transforms/transforms.factor index 53e34d62b0..c56c8ed080 100755 --- a/core/inference/transforms/transforms.factor +++ b/core/inference/transforms/transforms.factor @@ -94,17 +94,6 @@ M: duplicated-slots-error summary ] if ] 1 define-transform -: [tuple-boa] ( layout -- quot ) - [ [ (tuple) ] curry ] - [ - size>> 1 - [ 3 + ] map - [ [ set-slot ] curry [ keep ] curry ] map concat - ] bi - [ f over 2 set-slot ] - 3append ; - -\ [ [tuple-boa] ] 1 define-transform - \ (call-next-method) [ [ [ +inlined+ depends-on ] bi@ ] [ next-method-quot ] 2bi ] 2 define-transform diff --git a/core/optimizer/known-words/known-words.factor b/core/optimizer/known-words/known-words.factor index ae391b9904..76ad0009cb 100755 --- a/core/optimizer/known-words/known-words.factor +++ b/core/optimizer/known-words/known-words.factor @@ -1,6 +1,5 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: optimizer.known-words USING: accessors alien arrays generic hashtables definitions inference.dataflow inference.state inference.class kernel assocs math math.order math.private kernel.private sequences words @@ -9,7 +8,9 @@ sequences.private io.binary io.streams.string layouts splitting math.intervals math.floats.private classes.tuple classes.predicate classes.tuple.private classes classes.algebra optimizer.def-use optimizer.backend optimizer.pattern-match optimizer.inlining -sequences.private combinators byte-arrays byte-vectors ; +sequences.private combinators byte-arrays byte-vectors +slots.private ; +IN: optimizer.known-words { (tuple) } [ [ @@ -41,6 +42,20 @@ sequences.private combinators byte-arrays byte-vectors ; { [ dup literal-new? ] [ expand-new ] } } define-optimizers +: tuple-boa-quot ( layout -- quot ) + [ (tuple) ] + swap size>> 1 - [ 3 + ] map + [ [ set-slot ] curry [ keep ] curry ] map concat + [ f over 2 set-slot ] + 3append ; + +: expand-tuple-boa ( #call -- node ) + dup in-d>> peek value-literal tuple-boa-quot f splice-quot ; + +\ { + { [ t ] [ expand-tuple-boa ] } +} define-optimizers + ! the output of clone has the same type as the input { clone (clone) } [ [