src/frontend.lisp: Add `--backtrace' option to expose error context.
[sod] / src / method-impl.lisp
index b9543fd..725a0ec 100644 (file)
@@ -7,7 +7,7 @@
 
 ;;;----- Licensing notice ---------------------------------------------------
 ;;;
-;;; This file is part of the Sensble Object Design, an object system for C.
+;;; This file is part of the Sensible Object Design, an object system for C.
 ;;;
 ;;; SOD is free software; you can redistribute it and/or modify
 ;;; it under the terms of the GNU General Public License as published by
@@ -55,7 +55,7 @@
 (define-on-demand-slot basic-message no-varargs-tail (message)
   (mapcar (lambda (arg)
            (if (eq arg :ellipsis)
-               (make-argument *sod-ap* (c-type va-list))
+               (make-argument *sod-ap* c-type-va-list)
                arg))
          (sod-message-argument-tail message)))
 
                              (message sod-message)
                              (type c-function-type))
   (with-slots ((msgtype %type)) message
-    (unless (c-type-equal-p (c-type-subtype type) (c-type void))
+    (unless (c-type-equal-p (c-type-subtype type) c-type-void)
       (error "Method return type ~A must be `void'" (c-type-subtype type)))
     (unless (argument-lists-compatible-p (c-function-arguments msgtype)
                                         (c-function-arguments type))
         (return-type (c-type-subtype (sod-message-type message)))
         (msgargs (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-master-ap* c-type-va-list)
                              (butlast msgargs))
                        msgargs)))
     (c-type (fun (lisp return-type)
                                           method)))))
                 .
                 (if (varargs-message-p message)
-                    (cons (make-argument *sod-master-ap*
-                                         (c-type va-list))
+                    (cons (make-argument *sod-master-ap* c-type-va-list)
                           method-args)
                     method-args)))))
 
   (declare (ignore slot-names))
   (with-slots (message target) codegen
     (setf target
-         (if (eq (c-type-subtype (sod-message-type message)) (c-type void))
+         (if (eq (c-type-subtype (sod-message-type message)) c-type-void)
              :void
              :return))))
 
                                               ("me" (* (class tail)))
                                               . raw-entry-args))))
                   (codegen-push codegen)
-                  (ensure-var codegen *sod-ap* (c-type va-list))
-                  (emit-inst codegen
-                             (make-va-start-inst *sod-ap*
-                                                 (argument-name parm-n)))
+                  (ensure-var codegen *sod-ap* c-type-va-list)
                   (convert-stmts codegen entry-target return-type
                                  (lambda (target)
-                                   (deliver-expr codegen target call)))
-                  (emit-inst codegen (make-va-end-inst *sod-ap*))
+                                   (emit-inst codegen
+                                              (make-va-start-inst
+                                               *sod-ap*
+                                               (argument-name parm-n)))
+                                   (deliver-expr codegen target call)
+                                   (emit-inst codegen
+                                              (make-va-end-inst *sod-ap*))))
                   (codegen-pop-function codegen main main-type))))))
 
       ;; Generate the method body.  We'll work out what to do with it later.
 (defmethod primary-method-class ((message standard-message))
   'delegating-direct-method)
 
-(defmethod message-effective-method-class ((message standard-message))
+(defmethod sod-message-effective-method-class ((message standard-message))
   'standard-effective-method)
 
 (defmethod simple-method-body