/**
* Module containing the signature and utility-strategies
* for inclusion-id's
*/
module php/reflect/inclusion/inclusionid
signature
constructors
Inclusionid : String * String -> Inclusionid //for the annotation of terms InclusionId(Path,ID)
Inclusionstatus : InclusionMode -> InclusionStatus // For status of inclusion
MaybeIncluded : InclusionMode
DefIncluded : InclusionMode
NotIncluded : InclusionMode
strategies
/**
* Generates an unique id for inclusion
*
* @type Path -> Inclusionid
*/
new-inclusion-id =
?path
; !"inclusion"
; newname => iid
; !Inclusionid(path,iid)
/**
* Adds an inclusion id to a term.
* The inclusion id is always unique.
*
* @param id Inclusionid representing the ID
* @type Term -> Term
*/
add-inclusion-id(|iid) =
?t{a*}
; a' := <remove-all(?Inclusionid(_,_))> a*
; annos* := [ iid | a']
; !t{annos*}
/**
* Gets an inclusion id from a term.
*
* @type Term -> Inclusionid
*/
get-inclusion-id =
?t{a*}
; <fetch-elem(?Inclusionid(_,_))> a*
rules
/**
* Merge rules for InclusionStatus
*/
inclusion-combine-unit: (NotIncluded(),NotIncluded()) -> NotIncluded()
inclusion-combine-unit: (NotIncluded(),x) -> MaybeIncluded()
where <not(?NotIncluded())> x
inclusion-combine-unit: (MaybeIncluded(),_) -> MaybeIncluded()
inclusion-combine-unit: (_,MaybeIncluded()) -> MaybeIncluded()
inclusion-combine-unit: (DefIncluded(),DefIncluded()) -> DefIncluded()
strategies
/**
* Get the inclusion status of a certain file
* @type String -> InclusionStatus
*/
get-inclusion-status =
EvalInclusionStatus
<+ !NotIncluded()
/**
* Add included status to a filepath.
* Relies on the value set in the dynamic rule
* InclusionMode to set the mode. If this rule is not set it uses
* the default DefIncluded()
*
* @type String -> String
*/
add-inclusion-status =
?t
; (InclusionMode <+ !DefIncluded()) ; ?stat
; rules(EvalInclusionStatus: t -> stat)
/**
* Redefines the status of a inclusion
* @type (file,stat) -> (file,stat)
*/
redefine-inclusion-status =
?(path,stat)
; rules(EvalInclusionStatus: path -> stat)
/**
* Runs a strategy while the InclusionMode is maybe.
*/
maybe-inclusion-wrap(s) =
{| InclusionMode :
rules(InclusionMode: _ -> MaybeIncluded())
; s
|}