ppScope.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // Filename: ppScope.h
  2. // Created by: drose (25Sep00)
  3. //
  4. ////////////////////////////////////////////////////////////////////
  5. #ifndef PPSCOPE_H
  6. #define PPSCOPE_H
  7. #include "ppremake.h"
  8. #include <map>
  9. #include <vector>
  10. class PPNamedScopes;
  11. class PPDirectory;
  12. class PPSubroutine;
  13. ///////////////////////////////////////////////////////////////////
  14. // Class : PPScope
  15. // Description : Defines a (possibly nested) scope for variable
  16. // definitions. Variables may be defined in a
  17. // system-wide variable file, in a template file, or in
  18. // an individual source file.
  19. ////////////////////////////////////////////////////////////////////
  20. class PPScope {
  21. public:
  22. typedef map<string, PPScope *> MapVariableDefinition;
  23. PPScope(PPNamedScopes *named_scopes);
  24. PPNamedScopes *get_named_scopes() const;
  25. void set_parent(PPScope *parent);
  26. PPScope *get_parent() const;
  27. void define_variable(const string &varname, const string &definition);
  28. bool set_variable(const string &varname, const string &definition);
  29. void define_map_variable(const string &varname, const string &definition);
  30. void define_map_variable(const string &varname, const string &key_varname,
  31. const string &scope_names);
  32. void add_to_map_variable(const string &varname, const string &key,
  33. PPScope *scope);
  34. void define_formals(const string &subroutine_name,
  35. const vector<string> &formals, const string &actuals);
  36. string get_variable(const string &varname) const;
  37. string expand_variable(const string &varname) const;
  38. MapVariableDefinition &find_map_variable(const string &varname) const;
  39. PPDirectory *get_directory() const;
  40. void set_directory(PPDirectory *directory);
  41. string expand_string(const string &str) const;
  42. string expand_self_reference(const string &str, const string &varname) const;
  43. static void push_scope(PPScope *scope);
  44. static PPScope *pop_scope();
  45. static PPScope *get_bottom_scope();
  46. void tokenize_params(const string &str, vector<string> &tokens,
  47. bool expand) const;
  48. bool tokenize_numeric_pair(const string &str, double &a, double &b) const;
  49. static MapVariableDefinition _null_map_def;
  50. private:
  51. class ExpandedVariable {
  52. public:
  53. string _varname;
  54. ExpandedVariable *_next;
  55. };
  56. bool p_set_variable(const string &varname, const string &definition);
  57. bool p_get_variable(const string &varname, string &result) const;
  58. string r_expand_string(const string &str, ExpandedVariable *expanded) const;
  59. string r_scan_variable(const string &str, size_t &vp) const;
  60. string r_expand_variable(const string &str, size_t &vp,
  61. PPScope::ExpandedVariable *expanded) const;
  62. string expand_variable_nested(const string &varname,
  63. const string &scope_names) const;
  64. string expand_isfullpath(const string &params) const;
  65. string expand_osfilename(const string &params) const;
  66. string expand_unixfilename(const string &params) const;
  67. string expand_cygpath_w(const string &params) const;
  68. string expand_cygpath_p(const string &params) const;
  69. string expand_wildcard(const string &params) const;
  70. string expand_isdir(const string &params) const;
  71. string expand_isfile(const string &params) const;
  72. string expand_libtest(const string &params) const;
  73. string expand_bintest(const string &params) const;
  74. string expand_shell(const string &params) const;
  75. string expand_standardize(const string &params) const;
  76. string expand_length(const string &params) const;
  77. string expand_substr(const string &params) const;
  78. string expand_dir(const string &params) const;
  79. string expand_notdir(const string &params) const;
  80. string expand_suffix(const string &params) const;
  81. string expand_basename(const string &params) const;
  82. string expand_word(const string &params) const;
  83. string expand_wordlist(const string &params) const;
  84. string expand_words(const string &params) const;
  85. string expand_firstword(const string &params) const;
  86. string expand_patsubst(const string &params) const;
  87. string expand_filter(const string &params) const;
  88. string expand_filter_out(const string &params) const;
  89. string expand_subst(const string &params) const;
  90. string expand_sort(const string &params) const;
  91. string expand_unique(const string &params) const;
  92. string expand_if(const string &params) const;
  93. string expand_eq(const string &params) const;
  94. string expand_ne(const string &params) const;
  95. string expand_eqn(const string &params) const;
  96. string expand_nen(const string &params) const;
  97. string expand_ltn(const string &params) const;
  98. string expand_len(const string &params) const;
  99. string expand_gtn(const string &params) const;
  100. string expand_gen(const string &params) const;
  101. string expand_not(const string &params) const;
  102. string expand_or(const string &params) const;
  103. string expand_and(const string &params) const;
  104. string expand_upcase(const string &params) const;
  105. string expand_downcase(const string &params) const;
  106. string expand_cdefine(const string &params) const;
  107. string expand_closure(const string &params) const;
  108. string expand_unmapped(const string &params) const;
  109. string expand_dependencies(const string &params) const;
  110. string expand_function(const string &funcname, const PPSubroutine *sub,
  111. const string &params) const;
  112. string expand_map_variable(const string &varname, const string &params) const;
  113. string expand_map_variable(const string &varname, const string &expression,
  114. const vector<string> &keys) const;
  115. MapVariableDefinition &
  116. p_find_map_variable(const string &varname) const;
  117. void glob_string(const string &str, vector<string> &results) const;
  118. PPNamedScopes *_named_scopes;
  119. PPDirectory *_directory;
  120. typedef map<string, string> Variables;
  121. Variables _variables;
  122. typedef map<string, MapVariableDefinition> MapVariables;
  123. MapVariables _map_variables;
  124. PPScope *_parent_scope;
  125. typedef vector<PPScope *> ScopeStack;
  126. static ScopeStack _scope_stack;
  127. };
  128. #endif