module php/reflect/common/environment imports php/reflect/common/function php/reflect/oo/classes strategies /** * Succeeds if the current term is an instance of PHP Environment. * This class is iself a abstract class. So it has no instance. * subclasses have to implement this. */ instanceof-PHPEnvironment = fail strategies /** * Returns all functions. * * @type Environment Object -> List(Function Object) */ get-functions = instanceof-PHPEnvironment; classes_get-instance-field(|"function-table") ; hashtable-values /** * @param Name of the function (String) * @type Environment Object -> Environment Object */ get-function(|name) = instanceof-PHPEnvironment; classes_get-instance-field(|"function-table") ; hashtable-get(|name) /** * @param Function Object * @type Environment Object -> Environment Object */ add-function(|function) = instanceof-PHPEnvironment; where( classes_get-instance-field(|"function-table") ; where(name := <get-name> function) ; hashtable-put(|<strip-annos> name, function) ) strategies /** * Returns all classes. * * @type Environment Object -> List(Class Object) */ get-classes = instanceof-PHPEnvironment; classes_get-instance-field(|"classes-table") ; hashtable-values /** * @param Name of the class (String) * @type Environment Object -> Environment Object */ get-class(|name) = instanceof-PHPEnvironment; classes_get-instance-field(|"classes-table") ; hashtable-get(|name) /** * @param Class Object * @type Environment Object -> Environment Object */ add-class(|class) = instanceof-PHPEnvironment; where( classes_get-instance-field(|"classes-table") ; where(name := <get-name> class) ; hashtable-put(|<strip-annos> name, class) ) strategies /** * Returns the main AST. This is the initial * file the environment is created on. * * @type _ -> Environment Object */ get-main-ast = instanceof-PHPEnvironment; classes_get-instance-field(|"files-table") ; hashtable-get(|"main-file") /** * Sets the main AST-file. This should be the initial * file the environment is created on. * * @param AST * @type Environment Object -> Environment Object */ set-main-ast(|ast) = instanceof-PHPEnvironment; where( classes_get-instance-field(|"files-table") ; hashtable-put(|"main-file", ast) ; get-input-path ; add-inclusion-status //set status of main input ) /** * Adds a AST of an included file to the environment. * The file is stored with the inclusionid. This id should be * used to get the AST. * * @param AST * @param iid The id of the inclusion * @type Environment Object -> Environment Object */ add-inclusion-file(|ast,iid) = instanceof-PHPEnvironment; ?env; where( classes_get-instance-field(|"files-table") ; hashtable-put(|iid, ast) ; <?Inclusionid(path,_)> iid ; <add-inclusion-filename(|path,iid)> env ) /** * Adds a file-name to the files that are included. This can be used * to question the environment which files are already included. * * @param path String The pathname to add * @param iid InclusionId The ID to store * @type Environment Object -> Environment Object */ add-inclusion-filename(|path,iid) = instanceof-PHPEnvironment; ?env; where( !env ; classes_get-instance-field(|"filenames-table") ; hashtable-put(|path, iid) ; <add-inclusion-status> path ) /** * Checks wheter or not the given path is already included by this environment. * * @param String * @type Environment Object -> Inclusionid */ is-file-included(|path) = instanceof-PHPEnvironment; where(<get-inclusion-status> path ; ?DefIncluded()) ; classes_get-instance-field(|"filenames-table") ; hashtable-get(|path) /** * Checks wheter or not the given path is maybe included by this environment. * * @param String * @type Environment Object -> Inclusionid */ is-file-maybe-included(|path) = instanceof-PHPEnvironment; where(<get-inclusion-status> path ; ?MaybeIncluded()) ; classes_get-instance-field(|"filenames-table") ; hashtable-get(|path) /** * Gets a AST of an included file from the environment. * * @param iid The id of the inclusion * @type Environment Object -> AST */ get-inclusion-file(|iid) = instanceof-PHPEnvironment; classes_get-instance-field(|"files-table") ; hashtable-get(|iid) /** * Get all Id's of the included AST's. * * @type Environment Object -> List((path,desc)) */ get-all-inclusion-ids = instanceof-PHPEnvironment; classes_get-instance-field(|"files-table") ; hashtable-keys