[movitz-cvs] CVS update: movitz/compiler.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Mon Jan 10 08:18:51 UTC 2005
Update of /project/movitz/cvsroot/movitz
In directory common-lisp.net:/tmp/cvs-serv26009
Modified Files:
compiler.lisp
Log Message:
Use copy-funobj-code-vector-slots to initialize stack-allocated funobjs.
Date: Mon Jan 10 09:18:49 2005
Author: ffjeld
Index: movitz/compiler.lisp
diff -u movitz/compiler.lisp:1.127 movitz/compiler.lisp:1.128
--- movitz/compiler.lisp:1.127 Tue Jan 4 21:21:11 2005
+++ movitz/compiler.lisp Mon Jan 10 09:18:49 2005
@@ -8,7 +8,7 @@
;;;; Created at: Wed Oct 25 12:30:49 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: compiler.lisp,v 1.127 2005/01/04 20:21:11 ffjeld Exp $
+;;;; $Id: compiler.lisp,v 1.128 2005/01/10 08:18:49 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -84,6 +84,10 @@
(defvar *compiler-produce-defensive-code* t
"Try to make code be extra cautious.")
+(defvar *compiler-relink-recursive-funcall* t
+ "If true, also recursive function calls look up the function through the function name,
+which enables tracing of recursive functions.")
+
(defvar *compiler-trust-user-type-declarations-p* t)
(defvar *compiling-function-name* nil)
@@ -5409,8 +5413,9 @@
:functional-p nil
:modifies arguments-modifies
:code (append arguments-code
- (if (eq (movitz-read operator)
- (movitz-read (movitz-funobj-name funobj))) ; recursive?
+ (if (and (not *compiler-relink-recursive-funcall*)
+ (eq (movitz-read operator)
+ (movitz-read (movitz-funobj-name funobj)))) ; recursive?
(make-compiled-funcall-by-esi (length arg-forms))
(make-compiled-funcall-by-symbol operator (length arg-forms) funobj))
stack-restore-code))))))
@@ -6908,22 +6913,21 @@
collect `(:pushl (:eax ,(slot-offset 'movitz-funobj 'constant0)
,(* 4 i))))
(loop repeat (movitz-funobj-num-jumpers object)
- do (error "Can't handle jumpers.")
collect `(:pushl 0))
`((:pushl (:eax ,(slot-offset 'movitz-funobj 'num-jumpers)))
(:pushl (:eax ,(slot-offset 'movitz-funobj 'name)))
(:pushl (:eax ,(slot-offset 'movitz-funobj 'lambda-list)))
-;;; (:pushl 0) ; %3op
-;;; (:pushl 0) ; %2op
-;;; (:pushl 0) ; %1op
-;;; (:pushl 0) ; (default)
- (:pushl (:eax ,(slot-offset 'movitz-funobj 'code-vector%3op)))
- (:pushl (:eax ,(slot-offset 'movitz-funobj 'code-vector%2op)))
- (:pushl (:eax ,(slot-offset 'movitz-funobj 'code-vector%1op)))
- (:pushl (:eax ,(slot-offset 'movitz-funobj 'code-vector)))
+ (:pushl 0) ; %3op
+ (:pushl 0) ; %2op
+ (:pushl 0) ; %1op
+ (:pushl 0) ; (default)
- (:pushl (:eax ,(slot-offset 'movitz-funobj 'type))))))))))))
+ (:pushl (:eax ,(slot-offset 'movitz-funobj 'type)))
+ (:leal (:esp ,(tag :other)) :ebx)
+ (,*compiler-local-segment-prefix*
+ :call (:edi ,(global-constant-offset 'copy-funobj-code-vector-slots)))
+ )))))))))
;;;(define-extended-code-expander :exit-dynamic-scope (instruction funobj frame-map)
;;; nil)
More information about the Movitz-cvs
mailing list