/**
* Main module for constant-propogation.
*/
module php/strategy/const-prop/common/main
imports
php/strategy/const-prop/analysis/common/literals
php/strategy/const-prop/analysis/common/variables
php/strategy/const-prop/analysis/common/operators
php/strategy/const-prop/analysis/common/expressions
php/strategy/const-prop/analysis/common/statements
php/strategy/const-prop/analysis/common/main
php/strategy/const-prop/analysis/wrappers
php/strategy/const-prop/analysis/special
php/strategy/const-prop/analysis/utilities
php/strategy/const-prop/analysis/ruleset
strategies
/**
* Main analysis for the constant propogation. This strategy calls the
* more generic functionality without a second analysis.
*/
main-analyse-const-prop =
try(
plug-main-analyse-const-prop(main-analyse-const-prop // main
,fail // getter
,fail // setter
,fail // value-id getter
,fail // value-id setter
,fail // value-id remover
,!"" // value-id name-maker
,id // literals strategy
,id // operators strategy
,php-union-const-prop // rules union
,php-intersect-const-prop // rules intersect
)
)
/**
* Pluggable analysis for contant propgation.
* This strategy receives some strategies which are used to
* perform an analysis which is interleaved with the constant-propogation.
*/
plug-main-analyse-const-prop(main,get,set
,valid-get,valid-put,valid-remove,valid-name
,literal
,operators
,rule-union
,rule-intersect) =
try( special-const-prop(main|)
<+ wrapper-const-prop(main,get,set)
<+ variable-const-prop(main,set,get,valid-get)
<+ expression-const-prop(main,get,set,valid-get,valid-put,valid-remove|)
<+ assign-operator-const-prop(main,get,set,valid-get,valid-put,valid-remove|)
<+ statement-const-prop(main,rule-union,rule-intersect|)
<+ document-const-prop(main|)
<+ ( inclusion-const-prop(main,get,set,rule-union|)
<+ no-inclusion-const-prop(main|<valid-name>)
)
// is does not matter that this always succeeds
// but keeps the term created by literal or operators!
<+ (try( literal-const-prop(main|) <+ operator-const-prop(main|))
;try( literal <+ operators )
)
)