aboutsummaryrefslogtreecommitdiff
path: root/src/interp/compiler.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2012-02-27 02:16:00 +0000
committerdos-reis <gdr@axiomatics.org>2012-02-27 02:16:00 +0000
commit5a8ab1eee58ce44dbdadc47b079b5925cbbf46b4 (patch)
tree3a5e28c98c2bc510e2765d4dececce7f34318c59 /src/interp/compiler.boot
parentf719c82a459f911b71b8f9e445c7d1c872ead927 (diff)
downloadopen-axiom-5a8ab1eee58ce44dbdadc47b079b5925cbbf46b4.tar.gz
* interp/compiler.boot (compFormWithModemap): Mark implementation
resolution as appropriate.
Diffstat (limited to 'src/interp/compiler.boot')
-rw-r--r--src/interp/compiler.boot14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot
index f3420579..5692bc63 100644
--- a/src/interp/compiler.boot
+++ b/src/interp/compiler.boot
@@ -616,21 +616,23 @@ compFormWithModemap(form,m,e,modemap) ==
T :=
[x',target,e'] where
x':=
- form':= [f,:[t.expr for t in Tl]]
+ args := [t.expr for t in Tl]
target = $Category or isCategoryForm(target,e) =>
-- Constructor instantiations are direct calls
- ident? f and constructorDB f ~= nil => form'
+ ident? f and constructorDB f ~= nil => [f,:args]
-- Otherwise, this is an indirect call
- ['%call,:form']
+ ['%call,f,:args]
-- try to deal with new-style Unions where we know the conditions
op = "elt" and f is ['XLAM,:.] and ident?(z := first argl) and
(c := get(z,'condition,e)) and
c is [["case",=z,c1]] and
(c1 is [":",=(second argl),=m] or sameObject?(c1,second argl) ) =>
- -- first is a full tag, as placed by getInverseEnvironment
- -- second is what getSuccessEnvironment will place there
+ -- first is a full tag, as placed by getInverseEnvironment
+ -- second is what getSuccessEnvironment will place there
['%tail,z]
- ['%call,:form']
+ -- Mark atomic implementations as external
+ f isnt [.,:.] => ['%call,['%external,f],:args]
+ ['%call,f,:args]
e':=
Tl ~= nil => last(Tl).env
e