// Filename: ppScope.h // Created by: drose (25Sep00) // //////////////////////////////////////////////////////////////////// #ifndef PPSCOPE_H #define PPSCOPE_H #include "ppremake.h" #include #include class PPNamedScopes; class PPDirectory; class PPSubroutine; /////////////////////////////////////////////////////////////////// // Class : PPScope // Description : Defines a (possibly nested) scope for variable // definitions. Variables may be defined in a // system-wide variable file, in a template file, or in // an individual source file. //////////////////////////////////////////////////////////////////// class PPScope { public: typedef map MapVariableDefinition; PPScope(PPNamedScopes *named_scopes); PPNamedScopes *get_named_scopes() const; void set_parent(PPScope *parent); PPScope *get_parent() const; void define_variable(const string &varname, const string &definition); bool set_variable(const string &varname, const string &definition); void define_map_variable(const string &varname, const string &definition); void define_map_variable(const string &varname, const string &key_varname, const string &scope_names); void add_to_map_variable(const string &varname, const string &key, PPScope *scope); void define_formals(const string &subroutine_name, const vector &formals, const string &actuals); string get_variable(const string &varname) const; string expand_variable(const string &varname) const; MapVariableDefinition &find_map_variable(const string &varname) const; PPDirectory *get_directory() const; void set_directory(PPDirectory *directory); string expand_string(const string &str) const; string expand_self_reference(const string &str, const string &varname) const; static void push_scope(PPScope *scope); static PPScope *pop_scope(); static PPScope *get_bottom_scope(); void tokenize_params(const string &str, vector &tokens, bool expand) const; bool tokenize_numeric_pair(const string &str, double &a, double &b) const; static MapVariableDefinition _null_map_def; private: class ExpandedVariable { public: string _varname; ExpandedVariable *_next; }; bool p_set_variable(const string &varname, const string &definition); bool p_get_variable(const string &varname, string &result) const; string r_expand_string(const string &str, ExpandedVariable *expanded) const; string r_scan_variable(const string &str, size_t &vp) const; string r_expand_variable(const string &str, size_t &vp, PPScope::ExpandedVariable *expanded) const; string expand_variable_nested(const string &varname, const string &scope_names) const; string expand_isfullpath(const string ¶ms) const; string expand_osfilename(const string ¶ms) const; string expand_unixfilename(const string ¶ms) const; string expand_cygpath_w(const string ¶ms) const; string expand_cygpath_p(const string ¶ms) const; string expand_wildcard(const string ¶ms) const; string expand_isdir(const string ¶ms) const; string expand_isfile(const string ¶ms) const; string expand_libtest(const string ¶ms) const; string expand_bintest(const string ¶ms) const; string expand_shell(const string ¶ms) const; string expand_standardize(const string ¶ms) const; string expand_length(const string ¶ms) const; string expand_substr(const string ¶ms) const; string expand_dir(const string ¶ms) const; string expand_notdir(const string ¶ms) const; string expand_suffix(const string ¶ms) const; string expand_basename(const string ¶ms) const; string expand_word(const string ¶ms) const; string expand_wordlist(const string ¶ms) const; string expand_words(const string ¶ms) const; string expand_firstword(const string ¶ms) const; string expand_patsubst(const string ¶ms, bool separate_words) const; string expand_filter(const string ¶ms) const; string expand_filter_out(const string ¶ms) const; string expand_wordsubst(const string ¶ms) const; string expand_subst(const string ¶ms) const; string expand_sort(const string ¶ms) const; string expand_unique(const string ¶ms) const; string expand_if(const string ¶ms) const; string expand_eq(const string ¶ms) const; string expand_ne(const string ¶ms) const; string expand_eqn(const string ¶ms) const; string expand_nen(const string ¶ms) const; string expand_ltn(const string ¶ms) const; string expand_len(const string ¶ms) const; string expand_gtn(const string ¶ms) const; string expand_gen(const string ¶ms) const; string expand_not(const string ¶ms) const; string expand_or(const string ¶ms) const; string expand_and(const string ¶ms) const; string expand_upcase(const string ¶ms) const; string expand_downcase(const string ¶ms) const; string expand_cdefine(const string ¶ms) const; string expand_closure(const string ¶ms) const; string expand_unmapped(const string ¶ms) const; string expand_dependencies(const string ¶ms) const; string expand_function(const string &funcname, const PPSubroutine *sub, const string ¶ms) const; string expand_map_variable(const string &varname, const string ¶ms) const; string expand_map_variable(const string &varname, const string &expression, const vector &keys) const; MapVariableDefinition & p_find_map_variable(const string &varname) const; void glob_string(const string &str, vector &results) const; PPNamedScopes *_named_scopes; PPDirectory *_directory; typedef map Variables; Variables _variables; typedef map MapVariables; MapVariables _map_variables; PPScope *_parent_scope; typedef vector ScopeStack; static ScopeStack _scope_stack; }; #endif