diff options
author | dos-reis <gdr@axiomatics.org> | 2011-12-15 08:56:47 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-12-15 08:56:47 +0000 |
commit | d2bb8c8d376da707b0d95198ee447a5eafb80af4 (patch) | |
tree | 3674ddfbf8019bd647c9eb18c12f0736b626ce5d /src/interp/g-opt.boot | |
parent | 91d2034c53d206c701d5902c9a3879af4a0f16bd (diff) | |
download | open-axiom-d2bb8c8d376da707b0d95198ee447a5eafb80af4.tar.gz |
* interp/g-opt.boot (modified?): Tidy.
Diffstat (limited to 'src/interp/g-opt.boot')
-rw-r--r-- | src/interp/g-opt.boot | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot index c2e18d41..0236e4f4 100644 --- a/src/interp/g-opt.boot +++ b/src/interp/g-opt.boot @@ -657,13 +657,18 @@ findVMFreeVars form == setUnion(findVMFreeVars op,vars) ++ Return true is `var' is the left hand side of an assignment -++ in `form'. +++ or a sort of binding in `form'. modified?(var,form) == atomic? form => false form is [op,var',expr,:.] and op in '(%LET LETT SETQ %store) => modified?(var,expr) => true symbol? var' => var' = var -- whole var is assigned - var' is [.,=var] -- only part of it is modified + var' is [.,=var,:.] -- only part of it is modified + form is ['%bind,:.] and + (or/[symbolEq?(var,var') for [var',.] in form.absParms]) => true + form is ['%loop,:iters,.,.] and + (or/[symbolEq?(var,iteratorName i) for i in iters]) => true + abstraction? form and symbolMember?(var,form.absParms) => true or/[modified?(var,f) for f in form] @@ -695,6 +700,7 @@ canInlineVarDefinition(var,expr,body) == or/[modified?(x,body) for x in dependentVars expr] => false -- If the initializer is a variable and not modified in body, -- and the new var is not modified, then we can inline. + -- FIXME: except if the modification is done via normal function calls. ident? expr => true -- Conversatively stay out of loops cons? body and body.op in '(%loop %collect) => false |