module php/reflect/version4/main
imports
php/reflect/version4/php4-environment
php/reflect/version4/function
php/reflect/version4/class
strategies
/**
* Creates a new php-environment and stores it
* It is assumed that the given document is the main
* AST.
*
* @type Document-AST -> PHPEnvironment
*/
init-php4-environment(|doc) =
where(env := <new-php4-environment>)
; fill-php4-environment(|env,doc)
; <set-main-ast(|doc)> env
; set-php4-environment(|env)
; !env
/**
* Fills a given PHP4 environment with the information of
* the given AST. It stores this environment and returns the
* new environment.
*
* @param env The environment to be filled
* @param doc The documents AST to be analyzed
*/
fill-php4-environment(|env,doc) =
<collect-php4-functions(|env)> doc
; <collect-php4-classes(|env)> doc
; set-php4-environment(|env)
; !env
/**
* Collects the function declerations from the current AST.
* This does not include the functions declared within classes.
*
* @param PHPEnvironment
*/
collect-php4-functions(|env) =
collect-all-skip-classes(match-php4-function-decl)
; map({ast, fun:
?ast
; fun := <new-php4-function(|ast)>
; <add-function(|fun)> env
})
match-php4-function-decl =
match-function-decl
<+ ?OldFunctionDecl(_,_,_)
<+ ?OldFunctionDeclRef(_,_,_)
/**
* Collects the class declerations of the current AST.
*
* @param PHPEnvironment
*/
collect-php4-classes(|env) =
collect-all(match-php4-class-decl)
; map({ast, class:
?ast
; class := <new-php4-class(|ast)>
; <add-class(|class)> env
})
match-php4-class-decl =
match-class-decl
strategies
/**
* Returns the current environment if it is a PHP4
* environment.
*
* @type _ -> PHP4Environment
*/
get-php4-environment =
get-php-environment
;instanceof-PHP4Environment
/**
* Sets the current environment to a PHP4
* environment.
*
* @param env PHP4Environment
*/
set-php4-environment(|env) =
<instanceof-PHP4Environment> env
; set-php-environment(|env)