aboutsummaryrefslogtreecommitdiff
path: root/src/interp/fnewmeta.lisp
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-08-14 21:23:34 +0000
committerdos-reis <gdr@axiomatics.org>2011-08-14 21:23:34 +0000
commit7dff09b8cac803d6936887fdfa286a2a25073ac2 (patch)
tree1f82b9c5f57145f6f2234617bb35503666f0b2dc /src/interp/fnewmeta.lisp
parent775f2c3cca11ab64df713afb7f35363afe5d4ce0 (diff)
downloadopen-axiom-7dff09b8cac803d6936887fdfa286a2a25073ac2.tar.gz
* interp/lisp-backend.boot ($freeVarName): New global constant.
(loopVarInit): New. (expandIN): Use it. (expandON): Likewise. (expandSTEP): Likewise. (massageFreeVarInits): New. (expandLoop): Use it. * interp/fnewmeta.lisp (PARSE-QuantifiedVariable): Tidy. (PARSE-AnyId): Likewise. (PARSE-Variable): New. Allow scope-of-type specification for loop variable. (PARSE-Iterator): Use it. * interp/compiler.boot (massage_llop): Don't check $mayHaveFreeIteratorVariables. (compRepeatOrCollect): Don't bind it. (classifyIteratorVariable): New. (complainIfShadowing): Remove as no longer needed. (compStepIterator): Use it. Tidy. (compONIterator, compINIterator): New. Split out of compIterator. (compIterator): Refactor. * interp/functor.boot (optFunctorBody): Fix thinko. * interp/g-opt.boot (optCollectVector): A STEP iterator may have a storage class. * algebra/clip.spad.pamphlet: Fix loop variable scope. * algebra/ffpoly.spad.pamphlet: Likewise. * algebra/fparfrac.spad.pamphlet: Likewise. * algebra/gdpoly.spad.pamphlet: Likewise. * algebra/ghensel.spad.pamphlet: Likewise. * algebra/groebsol.spad.pamphlet: Likewise. * algebra/intfact.spad.pamphlet: Likewise. * algebra/matfuns.spad.pamphlet: Likewise. * algebra/moddfact.spad.pamphlet: Likewise. * algebra/numtheor.spad.pamphlet: Likewise. * algebra/permgrps.spad.pamphlet: Likewise. * algebra/pfbr.spad.pamphlet: Likewise. * algebra/pgcd.spad.pamphlet: Likewise. * algebra/pleqn.spad.pamphlet: Likewise. * algebra/pseudolin.spad.pamphlet: Likewise. * algebra/radeigen.spad.pamphlet: Likewise. * algebra/radix.spad.pamphlet: Likewise. * algebra/regset.spad.pamphlet: Likewise. * algebra/rep2.spad.pamphlet: Likewise. * algebra/sgcf.spad.pamphlet: Likewise. * algebra/smith.spad.pamphlet: Likewise. * algebra/sregset.spad.pamphlet: Likewise. * algebra/syssolp.spad.pamphlet: Likewise. * algebra/zerodim.spad.pamphlet: Likewise. * algebra/crfp.spad.pamphlet: Remove capsule-level declaration of local variables. * algebra/galfact.spad.pamphlet: Likewise. * algebra/mathml.spad.pamphlet: Likewise. * algebra/numode.spad.pamphlet: Likewise. * algebra/tex.spad.pamphlet: Likewise. * algebra/updecomp.spad.pamphlet: Likewise.
Diffstat (limited to 'src/interp/fnewmeta.lisp')
-rw-r--r--src/interp/fnewmeta.lisp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/interp/fnewmeta.lisp b/src/interp/fnewmeta.lisp
index f1cd15e0..28c9e03c 100644
--- a/src/interp/fnewmeta.lisp
+++ b/src/interp/fnewmeta.lisp
@@ -263,7 +263,7 @@
(MUST (MATCH-ADVANCE-STRING ")"))))
(DEFUN |PARSE-QuantifiedVariable| ()
- (AND (PARSE-IDENTIFIER)
+ (AND (|PARSE-Name|)
(MUST (MATCH-ADVANCE-STRING ":"))
(MUST (|PARSE-Application|))
(MUST (PUSH-REDUCTION '|PARSE-QuantifiedVariable|
@@ -437,8 +437,18 @@
(CONS 'REPEAT (CONS (POP-STACK-1) NIL))))))
+(DEFUN |PARSE-Variable| ()
+ (OR (AND (|PARSE-Name|)
+ (OPTIONAL (AND (MATCH-ADVANCE-STRING ":")
+ (MUST (|PARSE-Application|))
+ (MUST (PUSH-REDUCTION '|PARSE-Variable|
+ (CONS '|:|
+ (CONS (POP-STACK-2)
+ (CONS (POP-STACK-1) NIL))))))))
+ (|PARSE-Primary|)))
+
(DEFUN |PARSE-Iterator| ()
- (OR (AND (MATCH-ADVANCE-KEYWORD "for") (MUST (|PARSE-Primary|))
+ (OR (AND (MATCH-ADVANCE-KEYWORD "for") (MUST (|PARSE-Variable|))
(MUST (MATCH-ADVANCE-KEYWORD "in"))
(MUST (|PARSE-Expression|))
(MUST (OR (AND (MATCH-ADVANCE-KEYWORD "by")
@@ -792,7 +802,7 @@
(DEFUN |PARSE-AnyId| ()
- (OR (PARSE-IDENTIFIER)
+ (OR (|PARSE-Name|)
(OR (AND (MATCH-STRING "$")
(PUSH-REDUCTION '|PARSE-AnyId| (CURRENT-SYMBOL))
(ACTION (ADVANCE-TOKEN)))