diff options
Diffstat (limited to 'src/propspec.lisp')
-rw-r--r-- | src/propspec.lisp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/propspec.lisp b/src/propspec.lisp index f63958c..51ab8ca 100644 --- a/src/propspec.lisp +++ b/src/propspec.lisp @@ -173,11 +173,31 @@ an atomic property application." for propapp = (compile-propapp form) do (propappapply propapp))) -(defun eval-propspec-hostattrs (propspec) - (loop for form in (slot-value propspec 'applications) +(defmethod %eval-propspec-hostattrs ((host host) (propspec propspec)) + "Modify HOST in-place according to :HOSTATTRS subroutines." + (loop with *host* = host + for form in (propspec-props propspec) for propapp = (compile-propapp form) do (propappattrs propapp))) +;; return values of the following two functions share structure, and thus are +;; not safe to use except on host objects that were just made, or that are +;; going straight into %CONSFIGURE + +(defmethod %union-propspec-into-host ((host host) (propspec propspec)) + (prog1 + (setq host (make-instance 'host + :attrs (hostattrs host) + :props (append-propspecs (host-propspec host) + propspec))) + (%eval-propspec-hostattrs host propspec))) + +(defmethod %replace-propspec-into-host ((host host) (propspec propspec)) + (prog1 + (setq host (make-instance 'host + :attrs (hostattrs host) :props propspec)) + (%eval-propspec-hostattrs host propspec))) + (defun propspec->type (propspec) "Return :lisp if any types of the properties to be applied by PROPSPEC is :lisp, else return :posix." |