JSBNameVisitor.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #include <Atomic/Atomic.h>
  2. #include "JSBNameVisitor.h"
  3. JSBNameVisitor::JSBNameVisitor()
  4. { }
  5. JSBNameVisitor::~JSBNameVisitor()
  6. { }
  7. String JSBNameVisitor::operator()(const Name *name)
  8. {
  9. String previousName = switchName();
  10. accept(name);
  11. return switchName(previousName);
  12. }
  13. String JSBNameVisitor::switchName(const String &name)
  14. {
  15. String previousName = _name;
  16. _name = name;
  17. return previousName;
  18. }
  19. void JSBNameVisitor::visit(const Identifier *name)
  20. {
  21. const Identifier *id = name->identifier();
  22. if (id)
  23. _name = String(id->chars(), id->size());
  24. else
  25. _name = "anonymous";
  26. }
  27. void JSBNameVisitor::visit(const TemplateNameId *name)
  28. {
  29. _name = "Not Implemented";
  30. }
  31. void JSBNameVisitor::visit(const DestructorNameId *name)
  32. {
  33. const Identifier *id = name->identifier();
  34. _name += "~";
  35. _name += String(id->chars(), id->size());
  36. }
  37. void JSBNameVisitor::visit(const OperatorNameId *name)
  38. {
  39. _name += "operator";
  40. if (true) //_overview->includeWhiteSpaceInOperatorName)
  41. _name += " ";
  42. switch (name->kind()) { // ### i should probably do this in OperatorNameId
  43. case OperatorNameId::InvalidOp:
  44. _name += "<invalid>";
  45. break;
  46. case OperatorNameId::NewOp:
  47. _name += "new";
  48. break;
  49. case OperatorNameId::DeleteOp:
  50. _name += "delete";
  51. break;
  52. case OperatorNameId::NewArrayOp:
  53. _name += "new[]";
  54. break;
  55. case OperatorNameId::DeleteArrayOp:
  56. _name += "delete[]";
  57. break;
  58. case OperatorNameId::PlusOp:
  59. _name += '+';
  60. break;
  61. case OperatorNameId::MinusOp:
  62. _name += '-';
  63. break;
  64. case OperatorNameId::StarOp:
  65. _name += '*';
  66. break;
  67. case OperatorNameId::SlashOp:
  68. _name += '/';
  69. break;
  70. case OperatorNameId::PercentOp:
  71. _name += '%';
  72. break;
  73. case OperatorNameId::CaretOp:
  74. _name += '^';
  75. break;
  76. case OperatorNameId::AmpOp:
  77. _name += '&';
  78. break;
  79. case OperatorNameId::PipeOp:
  80. _name += '|';
  81. break;
  82. case OperatorNameId::TildeOp:
  83. _name += '~';
  84. break;
  85. case OperatorNameId::ExclaimOp:
  86. _name += '!';
  87. break;
  88. case OperatorNameId::EqualOp:
  89. _name += '=';
  90. break;
  91. case OperatorNameId::LessOp:
  92. _name += '<';
  93. break;
  94. case OperatorNameId::GreaterOp:
  95. _name += '>';
  96. break;
  97. case OperatorNameId::PlusEqualOp:
  98. _name += "+=";
  99. break;
  100. case OperatorNameId::MinusEqualOp:
  101. _name += "-=";
  102. break;
  103. case OperatorNameId::StarEqualOp:
  104. _name += "*=";
  105. break;
  106. case OperatorNameId::SlashEqualOp:
  107. _name += "/=";
  108. break;
  109. case OperatorNameId::PercentEqualOp:
  110. _name += "%=";
  111. break;
  112. case OperatorNameId::CaretEqualOp:
  113. _name += "^=";
  114. break;
  115. case OperatorNameId::AmpEqualOp:
  116. _name += "&=";
  117. break;
  118. case OperatorNameId::PipeEqualOp:
  119. _name += "|=";
  120. break;
  121. case OperatorNameId::LessLessOp:
  122. _name += "<<";
  123. break;
  124. case OperatorNameId::GreaterGreaterOp:
  125. _name += ">>";
  126. break;
  127. case OperatorNameId::LessLessEqualOp:
  128. _name += "<<=";
  129. break;
  130. case OperatorNameId::GreaterGreaterEqualOp:
  131. _name += ">>=";
  132. break;
  133. case OperatorNameId::EqualEqualOp:
  134. _name += "==";
  135. break;
  136. case OperatorNameId::ExclaimEqualOp:
  137. _name += "!=";
  138. break;
  139. case OperatorNameId::LessEqualOp:
  140. _name += "<=";
  141. break;
  142. case OperatorNameId::GreaterEqualOp:
  143. _name += ">=";
  144. break;
  145. case OperatorNameId::AmpAmpOp:
  146. _name += "&&";
  147. break;
  148. case OperatorNameId::PipePipeOp:
  149. _name += "||";
  150. break;
  151. case OperatorNameId::PlusPlusOp:
  152. _name += "++";
  153. break;
  154. case OperatorNameId::MinusMinusOp:
  155. _name += "--";
  156. break;
  157. case OperatorNameId::CommaOp:
  158. _name += ',';
  159. break;
  160. case OperatorNameId::ArrowStarOp:
  161. _name += "->*";
  162. break;
  163. case OperatorNameId::ArrowOp:
  164. _name += "->";
  165. break;
  166. case OperatorNameId::FunctionCallOp:
  167. _name += "()";
  168. break;
  169. case OperatorNameId::ArrayAccessOp:
  170. _name += "[]";
  171. break;
  172. } // switch
  173. }
  174. void JSBNameVisitor::visit(const ConversionNameId *name)
  175. {
  176. _name += "operator ";
  177. _name += "UNIMPLEMENTED";//overview()->prettyType(name->type());
  178. }
  179. void JSBNameVisitor::visit(const QualifiedNameId *name)
  180. {
  181. if (name->base())
  182. _name += operator()(name->base());
  183. _name += "::";
  184. _name += operator()(name->name());
  185. }
  186. void JSBNameVisitor::visit(const SelectorNameId *name)
  187. {
  188. for (unsigned i = 0; i < name->nameCount(); ++i) {
  189. const Name *n = name->nameAt(i);
  190. if (!n)
  191. continue;
  192. if (const Identifier *id = n->identifier()) {
  193. _name += String(id->chars(), id->size());
  194. if (name->hasArguments() || name->nameCount() > 1)
  195. _name += ':';
  196. }
  197. }
  198. }
  199. void JSBNameVisitor::visit(const AnonymousNameId *name)
  200. {
  201. _name = "ANONYMOUS_UNIMPLEMENTED";//String::fromLatin1("Anonymous:%1").arg(name->classTokenIndex());
  202. }