src/output-{proto,impl}.lisp: `sequencer''s :constraints initarg takes names.
[sod] / src / module-impl.lisp
index fe6b545..0bf9ff2 100644 (file)
@@ -51,8 +51,7 @@
     ;; exercise the property-set fiddling in `shared-initialize' and we can
     ;; catch unknown-property errors.
     (change-class module class :state t :pset pset)
-    (check-unused-properties pset)
-    module))
+    (check-unused-properties pset)))
 
 ;;;--------------------------------------------------------------------------
 ;;; Module objects.
@@ -87,7 +86,8 @@
         (with-module-environment ()
           (module-import *builtin-module*)
           (funcall thunk)
-          (finalize-module *module*))
+          (finalize-module *module*)
+          *module*)
       (when (and truename (not (eq (module-state *module*) t)))
        (remhash truename *module-map*)))))
 
 ;;;--------------------------------------------------------------------------
 ;;; Code fragments.
 
-(export 'c-fragment)
+(export '(c-fragment c-fragment-text))
 (defclass c-fragment ()
-  ((location :initarg :location :type file-location
-            :accessor c-fragment-location)
-   (text :initarg :text :type string :accessor c-fragment-text))
+  ((location :initarg :location :type file-location :reader file-location)
+   (text :initarg :text :type string :reader c-fragment-text))
   (:documentation
    "Represents a fragment of C code to be written to an output file.
 
 
 (defmethod print-object ((fragment c-fragment) stream)
   (let ((text (c-fragment-text fragment))
-       (location (c-fragment-location fragment)))
+       (location (file-location fragment)))
     (if *print-escape*
        (print-unreadable-object (fragment stream :type t)
          (when location
 (defmethod make-load-form ((fragment c-fragment) &optional environment)
   (make-load-form-saving-slots fragment :environment environment))
 
-(export 'code-fragment-item)
+(export '(code-fragment-item code-fragment code-fragment-reason
+         code-fragment-name code-fragment-constraints))
 (defclass code-fragment-item ()
   ((fragment :initarg :fragment :type c-fragment :reader code-fragment)
    (reason :initarg :reason :type keyword :reader code-fragment-reason)
   (:documentation
    "A plain fragment of C to be dropped in at top-level."))
 
-(defmacro define-fragment ((reason name) &body things)
-  (categorize (thing things)
-      ((constraints (listp thing))
-       (frags (typep thing '(or string c-fragment))))
-    (when (null frags)
-      (error "Missing code fragment"))
-    (when (cdr frags)
-      (error "Multiple code fragments"))
-    `(add-to-module
-      *module*
-      (make-instance 'code-fragment-item
-                    :fragment ',(car frags)
-                    :name ,name
-                    :reason ,reason
-                    :constraints (list ,@(mapcar (lambda (constraint)
-                                                   (cons 'list constraint))
-                                                 constraints))))))
-
 ;;;--------------------------------------------------------------------------
 ;;; File searching.