X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/b2983f3591981a916f748362d91ff0e2817552cb..e45a106df3272c787444bc6f7b8920016b7fc677:/src/builtin.lisp diff --git a/src/builtin.lisp b/src/builtin.lisp index 563766c..4d5b5cd 100644 --- a/src/builtin.lisp +++ b/src/builtin.lisp @@ -85,6 +85,9 @@ (define-class-slot "initsz" (class) size-t (format nil "sizeof(struct ~A)" (ilayout-struct-tag class))) +(define-class-slot "align" (class) size-t + (format nil "SOD__ALIGNOF(struct ~A)" (ilayout-struct-tag class))) + (define-class-slot "imprint" (class stream) (* (fun (* void) ("/*p*/" (* void)))) (format nil "~A__imprint" class) @@ -294,17 +297,15 @@ static const SodClass *const ~A__cpl[] = { (defmethod method-keyword-argument-lists ((method initialization-effective-method) direct-methods) (append (call-next-method) - (delete-duplicates - (mapcan (lambda (class) - (let ((initargs (sod-class-initargs class))) - (and initargs - (list (cons (mapcar #'sod-initarg-argument - initargs) - (format nil "initargs for ~A" - class)))))) - (sod-class-precedence-list - (effective-method-class method))) - :key #'argument-name))) + (mapcan (lambda (class) + (let ((initargs (sod-class-initargs class))) + (and initargs + (list (cons (mapcar #'sod-initarg-argument + initargs) + (format nil "initargs for ~A" + class)))))) + (sod-class-precedence-list + (effective-method-class method))))) (defmethod lifecycle-method-kernel ((method initialization-effective-method) codegen target) @@ -538,11 +539,12 @@ static const SodClass *const ~A__cpl[] = { ;; Done. (dolist (class classes) - (finalize-sod-class class) + (unless (finalize-sod-class class) + (error "Failed to finalize built-in class")) (add-to-module module class)))) (export '*builtin-module*) -(defvar *builtin-module* nil +(defvar-unbound *builtin-module* "The builtin module.") (export 'make-builtin-module) @@ -561,8 +563,6 @@ static const SodClass *const ~A__cpl[] = { :case :common) :state nil))) (with-module-environment (module) - (dolist (name '("va_list" "size_t" "ptrdiff_t" "wchar_t")) - (add-to-module module (make-instance 'type-item :name name))) (flet ((header-name (name) (concatenate 'string "\"" (string-downcase name) ".h\"")) (add-includes (reason &rest names) @@ -581,6 +581,6 @@ static const SodClass *const ~A__cpl[] = { (setf *builtin-module* module))) (define-clear-the-decks builtin-module - (unless *builtin-module* (make-builtin-module))) + (unless (boundp '*builtin-module*) (make-builtin-module))) ;;;----- That's all, folks --------------------------------------------------