JSBNameVisitor.cpp 5.4 KB

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