+Parentheses work again.master
authorAlex Klinkhamer <grencez@gmail.com>
Wed, 8 Oct 2008 20:47:36 +0000 (8 16:47 -0400)
committerAlex Klinkhamer <grencez@gmail.com>
Wed, 8 Oct 2008 20:47:36 +0000 (8 16:47 -0400)
This went untested for a while. Sorry about that.

src/infix-parser.lisp

index 59bfaa7..d601345 100644 (file)
@@ -23,6 +23,9 @@
 ; complex because I don't require ONE function parameter to be
 ; enclosed in parentheses, multiple parameters require them.
 
+#+(or) ; Uncomment to see results of parsing.
+(trace eval-parsed)
+
 ;;; Define variables as constant integers
 (defmacro enumerate-constants (&rest syms &aux (v 0))
   (declare (integer v))
 (defun paren-scope (paramsp)
   (declare (special *last-read*))
   (multn-if-last-read)
-  (catch 'break-paren-scope
-         (parse-infix))
-  (when (and (not paramsp) (consp *last-read*))
+  (catch 'break-paren-scope (parse-infix))
+  (when (and (not paramsp)
+             (consp *last-read*)
+             (not (and (symbolp (car *last-read*))
+                       (fboundp (car *last-read*)))))
     ;; Convert the list into a tuple
     ;; since it's not a function's parameters.
     (setq *last-read*
              (cdr (rplacd tail (cons val nil))))
            (throw 'break-fn-scope (values)))
           ((< +comma-rank+ op-rank)
-           ;todo: figure out what this does
+           ;; This is now the base rank,
            (setq *unwind-rank-fn*
                  this-unwind-rank-fn)
            val)