/** * 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 ) ) )