aboutsummaryrefslogtreecommitdiff
path: root/src/interp/slam.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2010-05-27 05:43:57 +0000
committerdos-reis <gdr@axiomatics.org>2010-05-27 05:43:57 +0000
commit8f5399e77de0741651b0d058b1aa7f57f43aedb0 (patch)
tree99afff91fbcc1a5b0668cb62c703bd52e3ecbbd6 /src/interp/slam.boot
parenta7e98a2ab2fcc87c3505ab11708d5bf24607ae85 (diff)
downloadopen-axiom-8f5399e77de0741651b0d058b1aa7f57f43aedb0.tar.gz
* interp/i-map.boot (compileCoerceMap): Minivectors are global
variables. Generate appropriate code. * interp/i-spec1.boot (compileTargetedADEF): Likewise. (compileADEFBody): Likewise. * interp/slam.boot (isRecurrenceRelation): Likewise. Adjust patterns to match minivectors. (mkDiffAssoc): Likewise. (reportFunctionCompilation): Don't declare minivectors.
Diffstat (limited to 'src/interp/slam.boot')
-rw-r--r--src/interp/slam.boot37
1 files changed, 20 insertions, 17 deletions
diff --git a/src/interp/slam.boot b/src/interp/slam.boot
index 3da6c906..3c94696e 100644
--- a/src/interp/slam.boot
+++ b/src/interp/slam.boot
@@ -60,11 +60,12 @@ isRecurrenceRelation(op,body,minivectorName) ==
lesspSlot:=compiledLookupCheck("<",[$Boolean,"$","$"],integer)
notpSlot:= compiledLookupCheck("not",["$","$"],eval $Boolean)
for [p,c] in pcl repeat
- p is ['SPADCALL,sharpVar,n1,['ELT,=minivectorName,slot]]
- and EQ(iequalSlot,$minivector.slot) =>
- initList:= [[n1,:c],:initList]
- sharpList := insert(sharpVar,sharpList)
- n:=n1
+ p is ['SPADCALL,sharpVar,n1,
+ ["ELT",["%dynval",=MKQ minivectorName],slot]]
+ and EQ(iequalSlot,$minivector.slot) =>
+ initList:= [[n1,:c],:initList]
+ sharpList := insert(sharpVar,sharpList)
+ n:=n1
miscList:= [[p,c],:miscList]
miscList isnt [[generalPred,generalTerm]] or sharpList isnt [sharpArg] =>
return false
@@ -86,14 +87,17 @@ isRecurrenceRelation(op,body,minivectorName) ==
--Check general predicate
predOk :=
generalPred is '(QUOTE T) => true
- generalPred is ['SPADCALL,m,=sharpArg,['ELT,=minivectorName,slot]]
- and EQ(lesspSlot,$minivector.slot)=> m+1
+ generalPred is ['SPADCALL,m,=sharpArg,
+ ["ELT",["%dynval",=MKQ minivectorName],slot]]
+ and EQ(lesspSlot,$minivector.slot)=> m+1
generalPred is ['SPADCALL,['SPADCALL,=sharpArg,m,
- ['ELT,=minivectorName,slot]], ['ELT,=minivectorName,notSlot]]
- and EQ(lesspSlot,$minivector.slot)
- and EQ(notpSlot,$minivector.notSlot) => m
- generalPred is ['NOT,['SPADCALL,=sharpArg,m,['ELT,=minivectorName, =lesspSlot]]]
- and EQ(lesspSlot,$minivector.slot) => m
+ ["ELT",["%dynval",=MKQ minivectorName],slot]],
+ ["ELT",["%dynval",=MKQ minivectorName],notSlot]]
+ and EQ(lesspSlot,$minivector.slot)
+ and EQ(notpSlot,$minivector.notSlot) => m
+ generalPred is ['NOT,['SPADCALL,=sharpArg,m,
+ ["ELT",["%dynval",=MKQ minivectorName], =lesspSlot]]]
+ and EQ(lesspSlot,$minivector.slot) => m
return nil
integer? predOk and predOk ~= n =>
sayKeyedMsg("S2IX0006",[n,m])
@@ -125,7 +129,7 @@ mkDiffAssoc(op,body,k,sharpPosition,sharpArg,diffSlot,vecname) ==
"union"/[mkDiffAssoc(op,c,k,sharpPosition,sharpArg,diffSlot,vecname) for [p,c] in pl]
body is [fn,:argl] =>
(fn = op) and argl.(sharpPosition-1) is
- ['SPADCALL,=sharpArg,n,['ELT,=vecname,=diffSlot]] =>
+ ['SPADCALL,=sharpArg,n,["ELT",["%dynval",=MKQ vecname],=diffSlot]] =>
NUMP n and n > 0 and n <= k =>
[[body,:$TriangleVariableList.n]]
['$failed]
@@ -137,8 +141,8 @@ reportFunctionCompilation(op,nam,argl,body,isRecursive) ==
-- dynamic caching, see SLAMOLD BOOT
--+
$compiledOpNameList := [nam]
- minivectorName := makeInternalMapMinivectorName(nam)
- body := substitute(minivectorName,"$$$",body)
+ minivectorName := makeInternalMapMinivectorName nam
+ body := substitute(["%dynval",MKQ minivectorName],"$$$",body)
setDynamicBinding(minivectorName,LIST2VEC $minivector)
argl := COPY argl -- play it safe for optimization
init :=
@@ -149,8 +153,7 @@ reportFunctionCompilation(op,nam,argl,body,isRecursive) ==
cacheCount = "all" => reportFunctionCacheAll(op,nam,argl,body)
parms := [:argl,"envArg"]
cacheCount = 0 or null argl =>
- fun:= [nam,["LAMBDA",parms,declareGlobalVariables [minivectorName],
- :declareUnusedParameters(parms,body)]]
+ fun:= [nam,["LAMBDA",parms,:declareUnusedParameters(parms,body)]]
compileInteractive fun
nam
num :=