JSBNameVisitor.cpp 5.6 KB

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