diff options
author | dos-reis <gdr@axiomatics.org> | 2010-02-15 20:15:14 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2010-02-15 20:15:14 +0000 |
commit | 2500d294739cab36d600fc911c91579d3402a4d9 (patch) | |
tree | 94ebbe3d89b5b0c302736509d6431b5ac5a980a6 /src/interp | |
parent | dbe91668915a487380cfbde6e0036264b5d766d6 (diff) | |
download | open-axiom-2500d294739cab36d600fc911c91579d3402a4d9.tar.gz |
* interp/compiler.boot (transImplementation): Loose last argument.
(compAtomWithModemap): Adjust call.
Diffstat (limited to 'src/interp')
-rw-r--r-- | src/interp/compiler.boot | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot index 28a4cbf3..1c5808d4 100644 --- a/src/interp/compiler.boot +++ b/src/interp/compiler.boot @@ -58,7 +58,6 @@ compExpression: (%Form,%Mode,%Env) -> %Maybe %Triple compAtom: (%Form,%Mode,%Env) -> %Maybe %Triple compSymbol: (%Form,%Mode,%Env) -> %Maybe %Triple compString: (%Form,%Mode,%Env) -> %Maybe %Triple -compAtomWithModemap: (%Form,%Mode,%Env,%Thing) -> %Maybe %Triple compTypeOf: (%Form,%Mode,%Env) -> %Maybe %Triple compForm: (%Form,%Mode,%Env) -> %Maybe %Triple compForm1: (%Form,%Mode,%Env) -> %Maybe %Triple @@ -77,7 +76,6 @@ modeEqual: (%Form,%Form) -> %Boolean hasUniqueCaseView: (%Form,%Mode,%Env) -> %Boolean convertOrCroak: (%Triple,%Mode) -> %Maybe %Triple getFormModemaps: (%Form,%Env) -> %List -transImplementation: (%Form,%Modemap,%Thing) -> %Code reshapeArgumentList: (%Form,%Signature) -> %Form applyMapping: (%Form,%Mode,%Env,%List) -> %Maybe %Triple @@ -382,24 +380,31 @@ compExpression(x,m,e) == FUNCALL(fn,x,m,e) compForm(x,m,e) +++ Subroutine of compAtomWithModemap. +++ Record a local reference to an overload constant, and return +++ corresponding middle-end form. +transImplementation: (%Form,%Modemap) -> %Code +transImplementation(op,map) == + fn := genDeltaEntry [op,:map] + fn is ["XLAM",:.] => [fn] + ["call",fn] + +++ Subroutine of compAtom. +++ Elaborate use of an overloaded constant. +compAtomWithModemap: (%Symbol,%Mode,%Env,%List) -> %Maybe %Triple compAtomWithModemap(x,m,e,v) == Tl := - [[transImplementation(x,map,fn),target,e] + [[transImplementation(x,map),target,e] for map in v | map is [[.,target],[.,fn]]] => --accept only monadic operators T:= or/[t for (t:= [.,target,.]) in Tl | modeEqual(m,target)] => T 1=#(Tl:= [y for t in Tl | (y:= convert(t,m))]) => first Tl nil -transImplementation(op,map,fn) == - fn := genDeltaEntry [op,:map] - fn is ["XLAM",:.] => [fn] - ["call",fn] - compAtom(x,m,e) == x = "break" => compBreak(x,m,e) x = "iterate" => compIterate(x,m,e) - T:= compAtomWithModemap(x,m,e,get(x,"modemap",e)) => T + T:= IDENTP x and compAtomWithModemap(x,m,e,get(x,"modemap",e)) => T t:= isSymbol x => compSymbol(x,m,e) or return nil member(m,$IOFormDomains) and primitiveType x => [x,m,e] |