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))
-        (arguments (cons (format nil "(~A *)&sod__obj.~A" class
+        (arguments (cons (format nil "&sod__obj.~A.~A"
                                  (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
@@ -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."))
 
-(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
@@ -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)))
-    (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)
@@ -724,4 +725,15 @@ (defmethod make-method-entry ((method basic-effective-method)
                 :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 --------------------------------------------------