diff options
author | dos-reis <gdr@axiomatics.org> | 2010-05-27 05:43:57 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2010-05-27 05:43:57 +0000 |
commit | 8f5399e77de0741651b0d058b1aa7f57f43aedb0 (patch) | |
tree | 99afff91fbcc1a5b0668cb62c703bd52e3ecbbd6 /src/interp/slam.boot | |
parent | a7e98a2ab2fcc87c3505ab11708d5bf24607ae85 (diff) | |
download | open-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.boot | 37 |
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 := |