aboutsummaryrefslogtreecommitdiff
path: root/src/interp/compiler.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2008-07-06 18:58:35 +0000
committerdos-reis <gdr@axiomatics.org>2008-07-06 18:58:35 +0000
commit2cb102a281332ac6410c1ae3b14ceeb56d778aae (patch)
treec1a95ce8cc7d01c6a08fb4b127b6157c47996723 /src/interp/compiler.boot
parentb0f950ab3726cf4facbe2b94f97ffbb598963165 (diff)
downloadopen-axiom-2cb102a281332ac6410c1ae3b14ceeb56d778aae.tar.gz
* interp/parse.boot ($normalizeTree): New.
(parseNotEqual): Likewise. * interp/compiler.boot (compCompilerPredicate): New. (compileNot): Use it. * interp/define.boot (compSubDomain1): Likewise. (doItIf): Likewise. * interp/bootlex.lisp (boot): Set $nornamizeTree. * algebra/Makefile.pamphlet (axiom_algebra_layer_9): Move from layer 4 to here.
Diffstat (limited to 'src/interp/compiler.boot')
-rw-r--r--src/interp/compiler.boot32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot
index c759bafa..7c91d4e0 100644
--- a/src/interp/compiler.boot
+++ b/src/interp/compiler.boot
@@ -68,7 +68,8 @@ compUniquely(x,m,e) ==
CATCH("compUniquely",comp(x,m,e))
compOrCroak: (%Form,%Mode,%Env) -> %Maybe %Triple
-compOrCroak(x,m,e) == compOrCroak1(x,m,e,'comp)
+compOrCroak(x,m,e) ==
+ compOrCroak1(x,m,e,'comp)
compOrCroak1: (%Form,%Mode,%Env,%Thing) -> %Maybe %Triple
compOrCroak1(x,m,e,compFn) ==
@@ -99,6 +100,17 @@ compOrCroak1(x,m,e,compFn) ==
tc() ==
comp($x,$m,$f)
+++ The form `x' is intended to be evaluated by the compiler, e.g. in
+++ toplevel conditional definition or as sub-domain predicate.
+++ Normalize operators and compile the form.
+compCompilerPredicate: (%Form,%Env) -> %Maybe %Triple
+compCompilerPredicate(x,e) ==
+ savedNormalizeTree := $normalizeTree
+ $normalizeTree := true
+ t := compOrCroak(parseTran x, $Boolean, e)
+ $normalizeTree := savedNormalizeTree
+ t
+
comp: (%Form,%Mode,%Env) -> %Maybe %Triple
comp(x,m,e) ==
@@ -1132,16 +1144,12 @@ compImport(["import",:doms],m,e) ==
compileNot: (%Form,%Mode,%Env) -> %Maybe %Triple
compileNot(x,m,e) ==
x isnt ["not", y] => nil
- -- If there is a modemap available that can make this work, just use it.
- T := compForm(x,m,e) => T
-
- -- Otherwise, we may be in a case where we might want to apply
- -- built-in Boolean meaning. Eventually, we should not need to
- -- do this special case here.
- [xcode, xmode, xtrueEnv, xfalseEnv] := compBoolean(y, $Boolean, e)
- or return nil
- convert([["NOT", xcode], xmode, xfalseEnv], m)
-
+ -- ??? For the time being compiler values cannot handle operations
+ -- ??? selected through general modemaps, and their semantics
+ -- ??? are quite hardwired with their syntax.
+ -- ??? Eventually, we should not need to do this.
+ $compilerValue => compIf(["IF",y,"false","true"],m,e)
+ compForm(x,m,e)
--% Case
compCase: (%Form,%Mode,%Env) -> %Maybe %Triple
@@ -1562,6 +1570,8 @@ compileSpad2Cmd args ==
throwKeyedMsg("S2IZ0036",[STRCONC('")",object2String optname)])
$InteractiveMode : local := nil
+ -- avoid transformations based on syntax only
+ $normalizeTree := false
if translateOldToNew then
spad2AsTranslatorAutoloadOnceTrigger()
sayKeyedMsg("S2IZ0085", nil)