;;;--------------------------------------------------------------------------
;;; 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.