diff options
author | dos-reis <gdr@axiomatics.org> | 2010-05-27 23:53:34 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2010-05-27 23:53:34 +0000 |
commit | e8df6a1fe9e9f218b8d9147a3de55f6d60fcc080 (patch) | |
tree | f46a06b99b7e3fe8c9990530c19e8f80ac64325b /src/interp/i-map.boot | |
parent | 307e4ad0a2676ef94b42121e79e71888f4778883 (diff) | |
download | open-axiom-e8df6a1fe9e9f218b8d9147a3de55f6d60fcc080.tar.gz |
* interp/sys-macros.lisp (eval): Expand opcodes before calling EVAL.
* interp/slam.boot (reportFunctionCompilation): Tidy. Take extra
care when generating code that access global variables.
(reportFunctionCacheAll): Likewise.
* interp/i-util.boot (isLocallyBound): Define.
* interp/i-spec1.boot (upCOLLECT1): Bind $iteratorVars to nil.
(upLoopIterSTEP): Call mkIteratorVariable instead of mkLocalVar.
(upLoopIterIN): Likewise.
(upStreamIterIN): Likewise.
(upStreamIterSTEP): Likewise.
(collectOneStream): Tidy.
(mkAndApplyPredicates): Likewise.
(mkIterFun): Lose last parameter. Tidy.
(declare): Use isLocallyBound.
(getAndEvalConstructorArgument): Likewise.
(mkIteratorVariable): New.
($iteratorVars): New.
* interp/i-spec2.boot (upREPEAT1): Bind $iteratorVars to nil.
(isLocalPred): Use isLocallyBound.
(compileIs): Likewise.
(evalLETput): Likewise.
(evalLETchangeValue): Likewise.
(isType): Likewise.
* interp/i-analy.boot (bottomUp): Likewise.
(bottomUpDefaultCompile): Likewise.
* interp/i-eval.boot (evalForm): Likewise.
(getMappingArgValue): Likewise.
* interp/i-map.boot (findLocalVars1): Likewise.
(findLocalsInLoop): Tidy. Filter out iterator variables.
(isLocalVar): Remove.
* interp/g-util.boot (mkCacheName): Define here.
(mkAuxiliaryName): Likewise.
* interp/c-util.boot (backendCompileSLAM): Use mkCacheName.
(backendCompileSPADSLAM): Likewise.
* interp/clam.boot (compClam): Likewise.
(clearCategoryCaches): Likewise.
(clearCategoryCache): Likewise.
* interp/g-timer.boot (timedEVALFUN): expandToVMForm is now
implicitly called by eval.
Diffstat (limited to 'src/interp/i-map.boot')
-rw-r--r-- | src/interp/i-map.boot | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/interp/i-map.boot b/src/interp/i-map.boot index 713f32d2..91f41976 100644 --- a/src/interp/i-map.boot +++ b/src/interp/i-map.boot @@ -70,10 +70,6 @@ makeInternalMapMinivectorName(name) == INTERN strconc(name,'";MV") INTERN strconc(PNAME name,'";MV") -mkCacheName(name) == INTERNL(STRINGIMAGE name,'";AL") - -mkAuxiliaryName(name) == INTERNL(STRINGIMAGE name,'";AUX") - --% Adding a function definition isMapExpr x == x is ["%Map",:.] @@ -685,7 +681,7 @@ compileDeclaredMap(op,sig,mapDef) == -- creates a local modemap and puts it into the environment $localVars: local := nil $freeVars: local := nil - $env:local:= [[nil]] + $env: local:= [[nil]] parms:=[var for var in $FormalMapVariableList for m in rest sig] for m in rest sig for var in parms repeat $env:= put(var,'mode,m,$env) @@ -736,7 +732,7 @@ genMapCode(op,body,sig,fnName,parms,isRecursive) == -- loop variables and variables that do have %LET expressions, but that -- can be finessed later. - locals := SETDIFFERENCE(COPY $localVars, parms) + locals := setDifference($localVars,parms) if locals then lets := [["%LET", l, ''UNINITIALIZED__VARIABLE, op] for l in locals] body := ['PROGN, :lets, body] @@ -798,9 +794,9 @@ mapRecurDepth(opName,opList,body) == analyzeUndeclaredMap(op,argTypes,mapDef,$mapList) == -- Computes the signature of the map named op, and compiles the body - $freeVars:local := NIL + $freeVars: local := NIL $localVars: local := NIL - $env:local:= [[nil]] + $env: local:= [[nil]] $mapList := [op,:$mapList] parms:=[var for var in $FormalMapVariableList for m in argTypes] for m in argTypes for var in parms repeat @@ -1006,7 +1002,7 @@ findLocalVars1(op,form) == -- sets the two lists $localVars and $freeVars atom form => not IDENTP form or isSharpVarWithNum form => nil - isLocalVar(form) or isFreeVar(form) => nil + isLocallyBound form or isFreeVar form => nil mkFreeVar($mapName,form) form is ['local, :vars] => for x in vars repeat @@ -1042,13 +1038,18 @@ findLocalVars1(op,form) == keyedSystemError("S2IM0020",[op]) findLocalsInLoop(op,itrl,body) == + savedLocalVars := $localVars + iterVars := nil for it in itrl repeat it is ['STEP,index,lower,step,:upperList] => + iterVars := [index,:iterVars] mkLocalVar(op,index) findLocalVars1(op,lower) for up in upperList repeat findLocalVars1(op,up) it is ['IN,index,s] => - mkLocalVar(op,index) ; findLocalVars1(op,s) + iterVars := [index,:iterVars] + mkLocalVar(op,index) + findLocalVars1(op,s) it is ['WHILE,b] => findLocalVars1(op,b) it is ['_|,pred] => @@ -1057,16 +1058,16 @@ findLocalsInLoop(op,itrl,body) == for it in itrl repeat it is [op,b] and (op in '(UNTIL)) => findLocalVars1(op,b) + $localVars := setUnion(savedLocalVars,setDifference($localVars,iterVars)) -isLocalVar(var) == member(var,$localVars) +isFreeVar(var) == + member(var,$freeVars) mkLocalVar(op,var) == -- add var to the local variable list isFreeVar(var) => $localVars $localVars:= insert(var,$localVars) -isFreeVar(var) == member(var,$freeVars) - mkFreeVar(op,var) == -- op here for symmetry with mkLocalVar $freeVars:= insert(var,$freeVars) |