chiark / gitweb /
It lives!
[sod] / methods.lisp
index 67033daf159ce65baee02c85f6809fb121f447f8..b54887a311b9faf222e0f7fca66f0d2a72634958 100644 (file)
@@ -382,9 +382,10 @@ (defun invoke-method (codegen target arguments-tail direct-method)
   (let* ((message (sod-method-message direct-method))
         (class (sod-method-class direct-method))
         (function (sod-method-function-name direct-method))
   (let* ((message (sod-method-message direct-method))
         (class (sod-method-class direct-method))
         (function (sod-method-function-name direct-method))
-        (arguments (cons (format nil "(~A *)&sod__obj.~A" class
+        (arguments (cons (format nil "&sod__obj.~A.~A"
                                  (sod-class-nickname
                                  (sod-class-nickname
-                                  (sod-class-chain-head class)))
+                                  (sod-class-chain-head class))
+                                 (sod-class-nickname class))
                          arguments-tail)))
     (if (varargs-message-p message)
        (convert-stmts codegen target
                          arguments-tail)))
     (if (varargs-message-p message)
        (convert-stmts codegen target
@@ -533,7 +534,7 @@ (defgeneric compute-method-entry-functions (method)
    method entries.  Returns a list of functions (i.e., FUNCTION-INST objects)
    which need to be defined in the generated source code."))
 
    method entries.  Returns a list of functions (i.e., FUNCTION-INST objects)
    which need to be defined in the generated source code."))
 
-(defparameter *method-entry-inline-threshold* 20
+(defparameter *method-entry-inline-threshold* 200
   "Threshold below which effective method bodies are inlined into entries.
 
    After the effective method body has been computed, we calculate its
   "Threshold below which effective method bodies are inlined into entries.
 
    After the effective method body has been computed, we calculate its
@@ -568,7 +569,7 @@ (defmethod method-entry-function-name
   (let* ((class (effective-method-class method))
         (message (effective-method-message method))
         (message-class (sod-message-class message)))
   (let* ((class (effective-method-class method))
         (message (effective-method-message method))
         (message-class (sod-message-class message)))
-    (format nil "~A__mentry_~A__~A__~A"
+    (format nil "~A__mentry_~A__~A__chain_~A"
            class
            (sod-class-nickname message-class)
            (sod-message-name message)
            class
            (sod-class-nickname message-class)
            (sod-message-name message)
@@ -724,4 +725,15 @@ (defmethod make-method-entry ((method basic-effective-method)
                 :chain-head chain-head
                 :chain-tail chain-tail))
 
                 :chain-head chain-head
                 :chain-tail chain-tail))
 
+;;;--------------------------------------------------------------------------
+;;; Output.
+
+(defmethod add-output-hooks progn
+    ((method basic-effective-method) (reason (eql :c)) sequencer)
+  (with-slots (class functions) method
+    (sequence-output (stream sequencer)
+      ((class :effective-methods)
+       (dolist (func functions)
+        (write func :stream stream :escape nil :circle nil))))))
+
 ;;;----- That's all, folks --------------------------------------------------
 ;;;----- That's all, folks --------------------------------------------------