[movitz-cvs] CVS movitz/losp/muerte

ffjeld ffjeld at common-lisp.net
Wed Apr 9 18:02:32 UTC 2008


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv8362

Modified Files:
	symbols.lisp 
Log Message:
Fix buggy copy-symbol.


--- /project/movitz/cvsroot/movitz/losp/muerte/symbols.lisp	2007/04/07 08:02:35	1.29
+++ /project/movitz/cvsroot/movitz/losp/muerte/symbols.lisp	2008/04/09 18:02:31	1.30
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Tue Sep  4 23:55:41 2001
 ;;;;                
-;;;; $Id: symbols.lisp,v 1.29 2007/04/07 08:02:35 ffjeld Exp $
+;;;; $Id: symbols.lisp,v 1.30 2008/04/09 18:02:31 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -139,10 +139,10 @@
 	   (load-global-constant movitz::unbound-function))))
 
 (defun %create-symbol (name &optional (package nil)
-				      (plist nil)
-				      (value (load-global-constant new-unbound-value))
-				      (function (load-global-constant movitz::unbound-function))
-				      (flags 0))
+		       (value (load-global-constant new-unbound-value))
+		       (flags 0)
+		       (plist nil)
+		       (function (load-global-constant movitz::unbound-function)))
   (eval-when (:compile-toplevel)
     (assert (= 1 (- (movitz:tag :symbol) (movitz:tag :other)))))
   (let ((sxhash (sxhash name)))
@@ -179,31 +179,29 @@
   "copy-symbol returns a fresh, uninterned symbol, the name of which
   is string= to and possibly the same as the name of the given
   symbol."
-  (if (or (eq nil symbol)
-	  (not copy-properties))
-      (%create-symbol (symbol-name symbol))
-    (with-non-header-allocation-assembly
-	(6 :object-register :eax :fixed-size-p t)
-      (:addl 1 :eax)
-      (:load-lexical (:lexical-binding symbol) :ebx)
-      ;; 0
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 0) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 0))
-      ;; 1
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 4) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 4))
-      ;; 2
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 8) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 8))
-      ;; 3
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 12) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 12))
-      ;; 4
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 16) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 16))
-      ;; 5
-      (:movl (:ebx #.(cl:- (movitz:tag :symbol)) 20) :ecx)
-      (:movl :ecx (:eax #.(cl:- (movitz:tag :symbol)) 20)))))
+  (cond
+    ((not copy-properties)
+     (%create-symbol (symbol-name symbol)))
+    ((eq symbol nil)
+     (%create-symbol (symbol-name symbol)
+		     nil
+		     nil
+		     (symbol-flags nil)))
+    (t (with-non-header-allocation-assembly
+	   (6 :object-register :eax :fixed-size-p t)
+	 (:addl 1 :eax)
+	 (:load-lexical (:lexical-binding symbol) :ebx)
+	 (:movl (:ebx (:offset movitz-symbol function-value)) :ecx)
+	 (:movl :ecx (:eax (:offset movitz-symbol function-value) 0))
+	 (:movl (:ebx (:offset movitz-symbol value)) :ecx)
+	 (:movl :ecx (:eax (:offset movitz-symbol value)))
+	 (:movl (:ebx (:offset movitz-symbol plist)) :ecx)
+	 (:movl :ecx (:eax (:offset movitz-symbol plist)))
+	 (:movl (:ebx (:offset movitz-symbol name)) :ecx)
+	 (:movl :ecx (:eax (:offset movitz-symbol name)))
+	 (:movl :edi (:eax (:offset movitz-symbol package))) ; no package
+	 (:movl (:ebx (:offset movitz-symbol flags)) :ecx)
+	 (:movl :ecx (:eax (:offset movitz-symbol flags)))))))
 
 (defun symbol-flags (symbol)
   (etypecase symbol




More information about the Movitz-cvs mailing list