Changeset 15307
- Timestamp:
- Apr 9, 2012, 3:41:52 AM (13 years ago)
- Location:
- trunk/source/compiler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/nx-basic.lisp
r15306 r15307 690 690 (:format-error . "~:{~@?~%~}") 691 691 (:program-error . "~a") 692 (:unsure . "Nonspecific warning") 693 (:duplicate-binding . "Multiple bindings of ~S in ~A form") 694 (:shadow-cl-package-definition . "Local function or macro name ~s shadows standard CL definition."))) 692 (:unsure . "Nonspecific warning"))) 695 693 696 694 (defun report-invalid-type-compiler-warning (condition stream) -
trunk/source/compiler/nx.lisp
r15306 r15307 232 232 (:format-error . style-warning) 233 233 (:unused . style-warning) 234 (:type-conflict . style-warning) 235 (:duplicate-binding . style-warning))) 234 (:type-conflict . style-warning))) 236 235 237 236 -
trunk/source/compiler/nx0.lisp
r15306 r15307 1110 1110 (neq (nx-var-root-nsetqs target) (cadr pair))) 1111 1111 (push (cons var target) *nx-punted-vars*))))) 1112 1113 ;;; Someone might be able to come up with a case where (perhaps through1114 ;;; use of (DECLAIM (IGNORE ...))) it might make some sense to bind1115 ;;; the same variable more than once in a parallel binding construct.1116 ;;; Even if that's done intentionally, there's probably some value1117 ;;; in warning about it (and it's hard to guess whether it's done1118 ;;; intentionally.1119 ;;; Something like (LET* ((X 1) (X (1+ X))) ...) is well-defined (even1120 ;;; if it's a bit unaesthetic.1121 ;;; We error if there are duplicate required args in a lambda list,1122 ;;; but let things like (LAMBDA (A &OPTIONAL A) ...) slide. (Those1123 ;;; cases generally generate an unused-variable warning, so we don't1124 1125 (defun nx1-check-duplicate-bindings (syms context)1126 (do* ()1127 ((null syms))1128 (let* ((sym (pop syms)))1129 (when (member sym syms :test #'eq)1130 (nx1-whine :duplicate-binding (maybe-setf-name sym) context)))))1131 1132 1112 1133 1113 (defun nx1-punt-var (var initform) … … 1953 1933 1954 1934 (defun nx1-whine (about &rest forms) 1955 ;; Don't turn STYLE-WARNINGs generated during compilation into 1956 ;; vanilla COMPILER-WARNINGs. 1957 (let* ((c (if (and (eq about :program-error) 1958 (typep (car forms) 'style-warning)) 1959 (let* ((c (car forms))) 1960 (with-slots (source-note function-name) c 1961 (setq source-note *nx-current-note* 1962 function-name (list *nx-cur-func-name*)) 1963 c)) 1964 (make-condition (or (cdr (assq about *compiler-whining-conditions*)) 1965 'compiler-warning) 1966 :function-name (list *nx-cur-func-name*) 1967 :source-note *nx-current-note* 1968 :warning-type about 1969 :args (or forms (list nil)))))) 1970 1971 (push c *nx-warnings*))) 1935 (push (make-condition (or (cdr (assq about *compiler-whining-conditions*)) 'compiler-warning) 1936 :function-name (list *nx-cur-func-name*) 1937 :source-note *nx-current-note* 1938 :warning-type about 1939 :args (or forms (list nil))) 1940 *nx-warnings*)) 1972 1941 1973 1942 (defun p2-whine (afunc about &rest forms) -
trunk/source/compiler/nx1.lisp
r15306 r15307 207 207 (defnx1 nx1-macrolet macrolet context (defs &body body) 208 208 (let* ((old-env *nx-lexical-environment*) 209 (new-env (new-lexical-environment old-env)) 210 (names ())) 209 (new-env (new-lexical-environment old-env))) 211 210 (dolist (def defs) 212 211 (destructuring-bind (name arglist &body mbody) def 213 (push name names)214 212 (push 215 213 (cons … … 222 220 function))) 223 221 (lexenv.functions new-env)))) 224 (nx1-check-duplicate-bindings names 'macrolet)225 222 (let* ((*nx-lexical-environment* new-env)) 226 223 (with-nx-declarations (pending) … … 238 235 (let ((env *nx-lexical-environment*) 239 236 (*nx-bound-vars* *nx-bound-vars*)) 240 (collect ((vars) 241 (symbols)) 242 (dolist (def defs) 243 (destructuring-bind (sym expansion) def 244 (let* ((var (nx-new-var pending sym)) 245 (bits (nx-var-bits var))) 246 (symbols sym) 247 (when (%ilogbitp $vbitspecial bits) 248 (nx-error "SPECIAL declaration applies to symbol macro ~s" sym)) 249 (nx-set-var-bits var (%ilogior (%ilsl $vbitignoreunused 1) bits)) 250 (setf (var-ea var) (cons :symbol-macro expansion)) 251 (vars var)))) 252 (nx1-check-duplicate-bindings (symbols) 'symbol-macrolet)) 237 (dolist (def defs) 238 (destructuring-bind (sym expansion) def 239 (let* ((var (nx-new-var pending sym)) 240 (bits (nx-var-bits var))) 241 (when (%ilogbitp $vbitspecial bits) 242 (nx-error "SPECIAL declaration applies to symbol macro ~s" sym)) 243 (nx-set-var-bits var (%ilogior (%ilsl $vbitignoreunused 1) bits)) 244 (setf (var-ea var) (cons :symbol-macro expansion))))) 253 245 (nx-effect-other-decls pending env) 254 246 (nx1-env-body context body old-env)))))) … … 1781 1773 *nx-new-p2decls*)))) 1782 1774 1783 (defun maybe-warn-about- shadowing-cl-function-name(funcname)1775 (defun maybe-warn-about-nx1-alphatizer-binding (funcname) 1784 1776 (when (and (symbolp funcname) 1785 (fboundp funcname) 1786 (eq (symbol-package funcname) (find-package "CL"))) 1787 (nx1-whine :shadow-cl-package-definition funcname) 1788 t)) 1789 1790 (defun maybe-warn-about-nx1-alphatizer-binding (funcname) 1791 (or (maybe-warn-about-shadowing-cl-function-name funcname) 1792 (when (and (symbolp funcname) 1793 (gethash funcname *nx1-alphatizers*)) 1794 (nx1-whine :special-fbinding funcname)))) 1795 1796 1777 (gethash funcname *nx1-alphatizers*)) 1778 (nx1-whine :special-fbinding funcname))) 1797 1779 1798 1780 (defnx1 nx1-flet flet context (defs &body forms) … … 1806 1788 (pairs nil) 1807 1789 (fname nil) 1808 (name nil) 1809 (fnames ())) 1790 (name nil)) 1810 1791 (multiple-value-bind (body decls) (parse-body forms env nil) 1811 1792 (nx-process-declarations pending decls) … … 1813 1794 (destructuring-bind (funcname lambda-list &body flet-function-body) def 1814 1795 (setq fname (nx-need-function-name funcname)) 1815 (push fname fnames)1816 1796 (maybe-warn-about-nx1-alphatizer-binding funcname) 1817 1797 (multiple-value-bind (body decls) … … 1835 1815 (push (setq name (make-symbol (symbol-name funcname))) names) 1836 1816 (push (cons funcname (cons 'function (cons func name))) (lexenv.functions new-env)))))) 1837 (nx1-check-duplicate-bindings fnames 'flet)1838 1817 (let ((vars nil) 1839 1818 (rvars nil) … … 1895 1874 (blockname nil) 1896 1875 (fname nil) 1897 (name nil) 1898 (fnames ())) 1876 (name nil)) 1899 1877 (multiple-value-bind (body decls) (parse-body forms env nil) 1900 1878 (dolist (def defs (setq funcs (nreverse funcs) bodies (nreverse bodies))) … … 1904 1882 (setq blockname funcname) 1905 1883 (setq fname (nx-need-function-name funcname)) 1906 (push fname fnames)1907 1884 (when (consp funcname) 1908 1885 (setq blockname (%cadr funcname) funcname fname)) … … 1931 1908 (nx-reconcile-inherited-vars funcrefs) 1932 1909 (dolist (f funcrefs) (nx1-afunc-ref f)) 1933 (nx1-check-duplicate-bindings fnames 'labels)1934 1910 (make-acode 1935 1911 (%nx1-operator labels) … … 2491 2467 (nx1-progn-body context (if (or (memq 'eval when) (memq :execute when)) body))) 2492 2468 2493 (defnx1 nx1-misplaced (declare) context (&whole w &rest args) 2494 (declare (ignore args)) 2495 (nx-error "The DECLARE expression ~s is being treated as a form, 2496 possibly because it's the result of macroexpansion. DECLARE expressions 2497 can only appear in specified contexts and must be actual subexressions 2498 of the containing forms." w)) 2499 2500 2469 (defnx1 nx1-misplaced (declare) context (&rest args) 2470 (nx-error "~S not expected in ~S." *nx-sfname* (cons *nx-sfname* args))) 2471
Note:
See TracChangeset
for help on using the changeset viewer.
