ppScope.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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();
  25. void set_parent(PPScope *parent);
  26. PPScope *get_parent();
  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);
  37. string expand_variable(const string &varname);
  38. MapVariableDefinition &find_map_variable(const string &varname);
  39. PPDirectory *get_directory();
  40. void set_directory(PPDirectory *directory);
  41. string expand_string(const string &str);
  42. string expand_self_reference(const string &str, const string &varname);
  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);
  48. bool tokenize_numeric_pair(const string &str, double &a, double &b);
  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);
  58. string r_expand_string(const string &str, ExpandedVariable *expanded);
  59. string r_scan_variable(const string &str, size_t &vp);
  60. string r_expand_variable(const string &str, size_t &vp,
  61. PPScope::ExpandedVariable *expanded);
  62. string expand_variable_nested(const string &varname,
  63. const string &scope_names);
  64. string expand_isfullpath(const string &params);
  65. string expand_osfilename(const string &params);
  66. string expand_unixfilename(const string &params);
  67. string expand_cygpath_w(const string &params);
  68. string expand_cygpath_p(const string &params);
  69. string expand_wildcard(const string &params);
  70. string expand_isdir(const string &params);
  71. string expand_isfile(const string &params);
  72. string expand_libtest(const string &params);
  73. string expand_bintest(const string &params);
  74. string expand_shell(const string &params);
  75. string expand_standardize(const string &params);
  76. string expand_length(const string &params);
  77. string expand_substr(const string &params);
  78. string expand_findstring(const string &params);
  79. string expand_dir(const string &params);
  80. string expand_notdir(const string &params);
  81. string expand_suffix(const string &params);
  82. string expand_basename(const string &params);
  83. string expand_word(const string &params);
  84. string expand_wordlist(const string &params);
  85. string expand_words(const string &params);
  86. string expand_firstword(const string &params);
  87. string expand_patsubst(const string &params, bool separate_words);
  88. string expand_filter(const string &params);
  89. string expand_filter_out(const string &params);
  90. string expand_wordsubst(const string &params);
  91. string expand_subst(const string &params);
  92. string expand_sort(const string &params);
  93. string expand_unique(const string &params);
  94. string expand_matrix(const string &params);
  95. string expand_if(const string &params);
  96. string expand_eq(const string &params);
  97. string expand_ne(const string &params);
  98. string expand_eqn(const string &params);
  99. string expand_nen(const string &params);
  100. string expand_ltn(const string &params);
  101. string expand_len(const string &params);
  102. string expand_gtn(const string &params);
  103. string expand_gen(const string &params);
  104. string expand_not(const string &params);
  105. string expand_or(const string &params);
  106. string expand_and(const string &params);
  107. string expand_upcase(const string &params);
  108. string expand_downcase(const string &params);
  109. string expand_cdefine(const string &params);
  110. string expand_closure(const string &params);
  111. string expand_unmapped(const string &params);
  112. string expand_dependencies(const string &params);
  113. string expand_foreach(const string &params);
  114. string expand_forscopes(const string &params);
  115. string expand_function(const string &funcname, const PPSubroutine *sub,
  116. const string &params);
  117. string expand_map_variable(const string &varname, const string &params);
  118. string expand_map_variable(const string &varname, const string &expression,
  119. const vector<string> &keys);
  120. void
  121. r_expand_matrix(vector<string> &results,
  122. const vector<vector<string> > &words,
  123. int index, const string &prefix);
  124. MapVariableDefinition &
  125. p_find_map_variable(const string &varname);
  126. void glob_string(const string &str, vector<string> &results);
  127. PPNamedScopes *_named_scopes;
  128. PPDirectory *_directory;
  129. typedef map<string, string> Variables;
  130. Variables _variables;
  131. typedef map<string, MapVariableDefinition> MapVariables;
  132. MapVariables _map_variables;
  133. PPScope *_parent_scope;
  134. typedef vector<PPScope *> ScopeStack;
  135. static ScopeStack _scope_stack;
  136. };
  137. #endif