diff options
Diffstat (limited to 'src/interp')
-rw-r--r-- | src/interp/c-util.boot | 7 | ||||
-rw-r--r-- | src/interp/compiler.boot | 20 | ||||
-rw-r--r-- | src/interp/define.boot | 4 | ||||
-rw-r--r-- | src/interp/g-opt.boot | 4 | ||||
-rw-r--r-- | src/interp/wi1.boot | 4 | ||||
-rw-r--r-- | src/interp/wi2.boot | 8 |
6 files changed, 27 insertions, 20 deletions
diff --git a/src/interp/c-util.boot b/src/interp/c-util.boot index 1403eaf8..5a42c2f0 100644 --- a/src/interp/c-util.boot +++ b/src/interp/c-util.boot @@ -46,6 +46,7 @@ module c_-util where getFunctionReplacement: %Symbol -> %Form getSuccessEnvironment: (%Form,%Env) -> %Env getInverseEnvironment: (%Form,%Env) -> %Env + giveVariableSomeValue: (%Symbol,%Mode,%Env) -> %Env --% @@ -465,6 +466,12 @@ getInverseEnvironment(a,e) == a is ["not",a'] => getSuccessEnvironment(a',e) e +++ Give some abstract value to the variable `v' of mode `m' in `e'. +++ Return the resulting environment. +giveVariableSomeValue(x,m,e) == + put(x,'value,[genSomeVariable(),m,nil],e) + + printEnv E == for x in E for i in 1.. repeat for y in x for j in 1.. repeat diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot index 6fa7b699..f412c078 100644 --- a/src/interp/compiler.boot +++ b/src/interp/compiler.boot @@ -865,7 +865,7 @@ setqMultiple(nameList,val,m,e) == -- 1.1. exit if result is a list m1 is ["List",D] => for y in nameList repeat - e:= put(y,"value",[genSomeVariable(),D,$noEnv],e) + e:= giveVariableSomeValue(y,D,e) convert([["PROGN",x,["%LET",nameList,g],g],m',e],m) -- 2. verify that the #nameList = number of parts of right-hand-side selectorModePairs:= @@ -1536,7 +1536,7 @@ compColon([":",f,t],m,e) == put(f,"mode",t,e) if not $bootStrapMode and $insideFunctorIfTrue and makeCategoryForm(t,e) is [catform,e] then - e:= put(f,"value",[genSomeVariable(),t,$noEnv],e) + e := giveVariableSomeValue(f,t,e) ["/throwAway",getmode(f,e),e] unknownTypeError name == @@ -1738,7 +1738,7 @@ coerceSuperset(T,sub) == T'.rest.first := "$" T' pred := isSubset(sub,T.mode,T.env) => - [["%Retract",T.expr,sub,pred],sub,T.env] + [["%retract",T.expr,sub,pred],sub,T.env] nil compCoerce1(x,m',e) == @@ -1983,7 +1983,7 @@ compRetractGuard(x,t,sn,sm,e) == else return stackAndThrow('"%1bp is not retractable to %2bp",[sm,t]) -- 2. Now declare `x'. [.,.,e] := compMakeDeclaration(x,t,e) or return nil - e := put(x,"value",[genSomeVariable(),t,$noEnv],e) + e := giveVariableSomeValue(x,t,e) -- 3. Assemble result. [caseCode, [[x,restrictCode]],e,envFalse] @@ -2000,7 +2000,7 @@ compRecoverDomain(x,t,sn,e) == -- 2. Declare `x'. originalEnv := e [.,.,e] := compMakeDeclaration(x,t,e) or return nil - e := put(x,"value",[genSomeVariable(),t,$noEnv],e) + e := giveVariableSomeValue(x,t,e) -- 3. Assemble the result [caseCode,[[x,['%tail,sn]]],e,originalEnv] @@ -2082,7 +2082,7 @@ defineMatchScrutinee(m,e) == where defTemp(m,e) == t := gensym() [.,.,e] := compMakeDeclaration(t,m,e) - [t,put(t,"value",[genSomeVariable(),m,$noEnv],e)] + [t,giveVariableSomeValue(t,m,e)] ++ Generate code for guard in a simple pattern where ++ `sn' is the name of the temporary holding the scrutinee value, @@ -2415,7 +2415,7 @@ compStepIterator(index,start,final,inc,e) == joinIntegerModes(startMode,finalMode,e) if get(index,"mode",e) = nil then [.,.,e] := compMakeDeclaration(index,indexMode,e) or return nil - e:= put(index,"value",[genSomeVariable(),indexMode,$noEnv],e) + e := giveVariableSomeValue(index,indexMode,e) [["STEP",index,start,inc,:final],e] compIterator(it,e) == @@ -2432,7 +2432,7 @@ compIterator(it,e) == stackMessage('"mode: %1pb must be a list of some mode",[m]) if null get(x,"mode",e) then [.,.,e]:= compMakeDeclaration(x,mUnder,e) or return nil - e:= put(x,"value",[genSomeVariable(),mUnder,$noEnv],e) + e:= giveVariableSomeValue(x,mUnder,e) [y'',m'',e] := coerce([y',m,e], mOver) or return nil [["IN",x,y''],e] it is ["ON",x,y] => @@ -2445,7 +2445,7 @@ compIterator(it,e) == stackMessage('"mode: %1pb must be a list of other modes",[m]) if null get(x,"mode",e) then [.,.,e]:= compMakeDeclaration(x,m,e) or return nil - e:= put(x,"value",[genSomeVariable(),m,$noEnv],e) + e:= giveVariableSomeValue(x,m,e) [y'',m'',e] := coerce([y',m,e], mOver) or return nil [["ON",x,y''],e] it is ["STEP",index,start,inc,:optFinal] => @@ -2516,7 +2516,7 @@ compUnnamedMapping(parms,source,target,body,env) == savedEnv := env for p in parms for s in source repeat [.,.,env] := compMakeDeclaration(p,s,env) - env := put(p,'value,[genSomeVariable(),get(p,'mode,env),nil],env) + env := giveVariableSomeValue(p,get(p,'mode,env),env) T := comp(body,target,env) or return nil [.,fun] := optimizeFunctionDef [nil,["LAMBDA",parms,T.expr]] fun := finishLambdaExpression(fun,env) diff --git a/src/interp/define.boot b/src/interp/define.boot index ad52ec88..039f1618 100644 --- a/src/interp/define.boot +++ b/src/interp/define.boot @@ -332,8 +332,8 @@ getTargetFromRhs(lhs,rhs,e) == (compOrCroak(rhs,$EmptyMode,e)).mode giveFormalParametersValues(argl,e) == - for x in argl repeat - e:= put(x,'value,[genSomeVariable(),get(x,'mode,e),nil],e) + for x in argl | IDENTP x repeat + e := giveVariableSomeValue(x,get(x,'mode,e),e) e diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot index 6786bbbf..1670e994 100644 --- a/src/interp/g-opt.boot +++ b/src/interp/g-opt.boot @@ -659,7 +659,7 @@ optCollectVector form == ++ Translate retraction of a value denoted by `e' to sub-domain `m' ++ defined by predicate `pred', -optRetract ["%Retract",e,m,pred] == +optRetract ["%retract",e,m,pred] == atom e => ["check-subtype",substitute(e,"#1",pred),MKQ m,e] g := gensym() ["LET",[[g,e]],["check-subtype",substitute(g,"#1",pred),MKQ m,g]] @@ -682,7 +682,7 @@ for x in '( (%call optCall) _ (_| optSuchthat)_ (CATCH optCatch)_ (COND optCond)_ - (%Retract optRetract)_ + (%retract optRetract)_ (%CollectV optCollectVector)_ (mkRecord optMkRecord)_ (RECORDELT optRECORDELT)_ diff --git a/src/interp/wi1.boot b/src/interp/wi1.boot index e67cc234..f8f7c5c9 100644 --- a/src/interp/wi1.boot +++ b/src/interp/wi1.boot @@ -605,7 +605,7 @@ setqMultiple(nameList,val,m,e) == [x,m',e]:= convert(T,m) or return nil --1.1 exit if result is a list m1 is ["List",D] => - for y in nameList repeat e:= put(y,"value",[genSomeVariable(),D,$noEnv],e) + for y in nameList repeat e := giveVariableSomeValue(y,D,e) convert([["PROGN",x,["%LET",nameList,g],g],m',e],m) --2. verify that the #nameList = number of parts of right-hand-side selectorModePairs:= @@ -730,7 +730,7 @@ compColon([":",f,t],m,e) == put(f,"mode",t,e) if not $bootStrapMode and $insideFunctorIfTrue and makeCategoryForm(t,e) is [catform,e] then - e:= put(f,"value",[genSomeVariable(),t,$noEnv],e) + e:= giveVariableSomeValue(f,t,e) ["/throwAway",getmode(f,e),e] compConstruct(form,m,e) == (T := compConstruct1(form,m,e)) and markConstruct(form,T) diff --git a/src/interp/wi2.boot b/src/interp/wi2.boot index 451a4b70..1bd25e3b 100644 --- a/src/interp/wi2.boot +++ b/src/interp/wi2.boot @@ -761,7 +761,7 @@ compIterator(it,e) == stackMessage ["mode: ",m," must be a list or vector of some mode"] if null get(x,"mode",e) then [.,.,e]:= compMakeDeclaration(x,mUnder,e) or return nil - e:= put(x,"value",[genSomeVariable(),mUnder,e],e) + e:= giveVariableSomeValue(x,mUnder,e) markReduceIn(it, [["IN",x,y'],e]) it is ["ON",x,y] => ---------------> new <--------------------- @@ -777,7 +777,7 @@ compIterator(it,e) == stackMessage ["mode: ",m," must be a list of other modes"] if null get(x,"mode",e) then [.,.,e]:= compMakeDeclaration(x,m,e) or return nil - e:= put(x,"value",[genSomeVariable(),m,e],e) + e:= giveVariableSomeValue(x,m,e) [["ON",x,y'],e] it is ["STEP",oindex,start,inc,:optFinal] => index := markKillAll oindex @@ -805,7 +805,7 @@ compIterator(it,e) == -- markImport ['Segment,indexmode] if null get(index,"mode",e) then [.,.,e]:= compMakeDeclaration(index,indexmode,e) or return nil - e:= put(index,"value",[genSomeVariable(),indexmode,e],e) + e:= giveVariableSomeValue(index,indexmode,e) markReduceStep(it, [["STEP",markStep(index),start,inc,:optFinal],e]) it is ["WHILE",p] => [p',m,e]:= @@ -853,7 +853,7 @@ smallIntegerStep(it,index,start,inc,optFinal,e) == givenRange => givenRange nil e:= put(index,"range",range,e) - e:= put(index,"value",[genSomeVariable(),indexmode,e],e) + e:= giveVariableSomeValue(index,indexmode,e) noptFinal := final' => [final'.expr] |