(make-instance 'temporary-name :tag "sod__ap"))
(defparameter *sod-master-ap*
(make-instance 'temporary-name :tag "sod__master_ap"))
+(defparameter *sod-tmp-ap*
+ (make-instance 'temporary-name :tag "sod__tmp_ap"))
;;;--------------------------------------------------------------------------
;;; Instructions.
;; Effective method function details.
(emf-name (effective-method-function-name method))
(ilayout-type (c-type (* (struct (ilayout-struct-tag class)))))
- (emf-arg-tail (mapcar (lambda (arg)
- (if (eq (argument-name arg) *sod-ap*)
- (make-argument *sod-master-ap*
- (c-type va-list))
- arg))
- (sod-message-no-varargs-tail message)))
+ (emf-arg-tail (sod-message-no-varargs-tail message))
(emf-type (c-type (fun (lisp return-type)
("sod__obj" (lisp ilayout-type))
- . (sod-message-no-varargs-tail message))))
+ . emf-arg-tail)))
;; Method entry details.
(chain-tails (remove-if-not (lambda (super)
(make-convert-to-ilayout-inst class
head "me"))))
(varargs-prologue ()
- (ensure-var codegen *sod-master-ap* (c-type va-list))
+ (ensure-var codegen *sod-ap* (c-type va-list))
(emit-inst codegen
- (make-va-start-inst *sod-master-ap*
+ (make-va-start-inst *sod-ap*
(argument-name parm-n))))
(varargs-epilogue ()
- (emit-inst codegen (make-va-end-inst *sod-master-ap*)))
+ (emit-inst codegen (make-va-end-inst *sod-ap*)))
(finish-entry (tail)
(let* ((head (sod-class-chain-head tail))
(name (method-entry-function-name method head))
CLASS where CLASS is the class on which the method was defined.
If the message accepts a variable-length argument list then a copy of the
- prevailing master argument pointer is provided in place of the
- `:ellipsis'."
+ prevailing argument pointer is provided in place of the `:ellipsis'."
(let* ((message (sod-method-message direct-method))
(class (sod-method-class direct-method))
(convert-stmts codegen target
(c-type-subtype (sod-method-type direct-method))
(lambda (var)
- (ensure-var codegen *sod-ap* (c-type va-list))
+ (ensure-var codegen *sod-tmp-ap* (c-type va-list))
(emit-inst codegen
- (make-va-copy-inst *sod-ap*
- *sod-master-ap*))
+ (make-va-copy-inst *sod-tmp-ap*
+ *sod-ap*))
(deliver-expr codegen var
(make-call-inst function arguments))
(emit-inst codegen
- (make-va-end-inst *sod-ap*))))
+ (make-va-end-inst *sod-tmp-ap*))))
(deliver-expr codegen target (make-call-inst function arguments)))))
(export 'ensure-ilayout-var)
(return-type (c-type-subtype message-type))
(raw-args (sod-message-argument-tail message))
(arguments (if (varargs-message-p message)
- (cons (make-argument *sod-master-ap*
- (c-type va-list))
+ (cons (make-argument *sod-ap* (c-type va-list))
(butlast raw-args))
raw-args)))
(codegen-push codegen)
(let* ((message (codegen-message codegen))
(argument-tail (if (varargs-message-p message)
- (cons *sod-master-ap* basic-tail)
+ (cons *sod-tmp-ap* basic-tail)
basic-tail)))
(labels ((next-trampoline (method chain)
(if (or kernel chain)