X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/71ecc48e20c8651175b16f37ee66ca08a36cc1c6..a07d8d005f69c0f9f5da2e09c6ee39cb1e1801aa:/methods.lisp diff --git a/methods.lisp b/methods.lisp index 67033da..b54887a 100644 --- a/methods.lisp +++ b/methods.lisp @@ -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 --------------------------------------------------