Changeset 13147
- Timestamp:
- 01/14/11 15:57:37 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp
r13118 r13147 1290 1290 (let* ((op (car form)) 1291 1291 (local-function (find-local-function op))) 1292 ( cond (local-function1292 (when local-function 1293 1293 ;; (format t "p1 local call to ~S~%" op) 1294 1294 ;; (format t "inline-p = ~S~%" (inline-p op)) 1295 (when (and *enable-inline-expansion* (inline-p op) 1296 (local-function-definition local-function)) 1297 (let* ((definition (local-function-definition local-function)) 1298 (lambda-list (car definition)) 1299 (body (cdr definition)) 1300 (expansion (generate-inline-expansion op lambda-list body 1301 (cdr form)))) 1302 (when expansion 1303 (let ((explain *explain*)) 1304 (when (and explain (memq :calls explain)) 1305 (format t "; inlining call to local function ~S~%" op))) 1306 (return-from p1-function-call 1307 (let ((*inline-declarations* 1308 (remove op *inline-declarations* :key #'car :test #'equal))) 1309 (p1 expansion)))))) 1310 1311 ;; FIXME 1312 (dformat t "local function assumed not single-valued~%") 1313 (setf (compiland-%single-valued-p *current-compiland*) nil) 1314 1315 (let ((variable (local-function-variable local-function))) 1316 (when variable 1317 (dformat t "p1 ~S used non-locally~%" (variable-name variable)) 1318 (setf (variable-used-non-locally-p variable) t)))) 1319 (t 1320 ;; Not a local function call. 1321 (dformat t "p1 non-local call to ~S~%" op) 1322 (unless (single-valued-p form) 1323 ;; (format t "not single-valued op = ~S~%" op) 1324 (setf (compiland-%single-valued-p *current-compiland*) nil))))) 1295 1296 (when (and *enable-inline-expansion* (inline-p op) 1297 (local-function-definition local-function)) 1298 (let* ((definition (local-function-definition local-function)) 1299 (lambda-list (car definition)) 1300 (body (cdr definition)) 1301 (expansion (generate-inline-expansion op lambda-list body 1302 (cdr form)))) 1303 (when expansion 1304 (let ((explain *explain*)) 1305 (when (and explain (memq :calls explain)) 1306 (format t "; inlining call to local function ~S~%" op))) 1307 (return-from p1-function-call 1308 (let ((*inline-declarations* 1309 (remove op *inline-declarations* :key #'car :test #'equal))) 1310 (p1 expansion)))))) 1311 1312 (let ((variable (local-function-variable local-function))) 1313 (when variable 1314 (dformat t "p1 ~S used non-locally~%" (variable-name variable)) 1315 (setf (variable-used-non-locally-p variable) t))))) 1325 1316 (p1-default form)) 1326 1317 … … 1458 1449 (closure (make-closure `(lambda ,lambda-list nil) nil)) 1459 1450 (syms (sys::varlist closure)) 1460 (vars nil)) 1451 (vars nil) 1452 compiland-result) 1461 1453 (dolist (sym syms) 1462 1454 (let ((var (make-variable :name sym … … 1470 1462 (dolist (var free-specials) 1471 1463 (push var *visible-variables*))) 1464 (setf compiland-result 1465 (list* 'LAMBDA lambda-list (p1-body body))) 1466 (setf (compiland-%single-valued-p compiland) 1467 (single-valued-p compiland-result)) 1472 1468 (setf (compiland-p1-result compiland) 1473 (list* 'LAMBDA lambda-list (p1-body body))))))1469 compiland-result)))) 1474 1470 1475 1471 (provide "COMPILER-PASS1")
Note: See TracChangeset
for help on using the changeset viewer.