UnicodeArrayRotateFunctionNode.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. "use strict";
  2. const estraverse = require('estraverse');
  3. const NodeType_1 = require("../enums/NodeType");
  4. const Node_1 = require('./Node');
  5. const Utils_1 = require('../Utils');
  6. class UnicodeArrayRotateFunctionNode extends Node_1.Node {
  7. constructor(astTree, unicodeArrayRotateFunctionName, unicodeArrayName) {
  8. super();
  9. this.astTree = astTree;
  10. this.unicodeArrayRotateFunctionName = unicodeArrayRotateFunctionName;
  11. this.unicodeArrayName = unicodeArrayName;
  12. this.node = this.getNodeStructure();
  13. }
  14. appendNode() {
  15. estraverse.replace(this.astTree, {
  16. leave: (node, parent) => {
  17. switch (node.type) {
  18. case NodeType_1.NodeType.Program:
  19. node.body.push(this.getNode());
  20. break;
  21. default:
  22. break;
  23. }
  24. }
  25. });
  26. }
  27. getNodeIdentifier() {
  28. return this.unicodeArrayRotateFunctionName;
  29. }
  30. getNodeStructure() {
  31. return {
  32. 'type': NodeType_1.NodeType.FunctionExpression,
  33. 'id': {
  34. 'type': NodeType_1.NodeType.Identifier,
  35. 'name': this.unicodeArrayRotateFunctionName
  36. },
  37. 'params': [
  38. {
  39. 'type': NodeType_1.NodeType.Identifier,
  40. 'name': 'array'
  41. },
  42. {
  43. 'type': NodeType_1.NodeType.Identifier,
  44. 'name': 'times'
  45. },
  46. {
  47. 'type': NodeType_1.NodeType.Identifier,
  48. 'name': 'reverse'
  49. }
  50. ],
  51. 'defaults': [],
  52. 'body': {
  53. 'type': NodeType_1.NodeType.BlockStatement,
  54. 'body': [
  55. {
  56. 'type': NodeType_1.NodeType.IfStatement,
  57. 'test': {
  58. 'type': NodeType_1.NodeType.BinaryExpression,
  59. 'operator': '<',
  60. 'left': {
  61. 'type': NodeType_1.NodeType.Identifier,
  62. 'name': 'times'
  63. },
  64. 'right': {
  65. 'type': NodeType_1.NodeType.Literal,
  66. 'value': 0,
  67. 'raw': '0'
  68. }
  69. },
  70. 'consequent': {
  71. 'type': NodeType_1.NodeType.BlockStatement,
  72. 'body': [
  73. {
  74. 'type': NodeType_1.NodeType.ReturnStatement,
  75. 'argument': null
  76. }
  77. ]
  78. },
  79. 'alternate': null
  80. },
  81. {
  82. 'type': NodeType_1.NodeType.ExpressionStatement,
  83. 'expression': {
  84. 'type': NodeType_1.NodeType.AssignmentExpression,
  85. 'operator': '=',
  86. 'left': {
  87. 'type': NodeType_1.NodeType.Identifier,
  88. 'name': 'reverse'
  89. },
  90. 'right': {
  91. 'type': NodeType_1.NodeType.LogicalExpression,
  92. 'operator': '||',
  93. 'left': {
  94. 'type': NodeType_1.NodeType.Identifier,
  95. 'name': 'reverse'
  96. },
  97. 'right': {
  98. 'type': NodeType_1.NodeType.Literal,
  99. 'value': false,
  100. 'raw': 'false'
  101. }
  102. }
  103. }
  104. },
  105. {
  106. 'type': NodeType_1.NodeType.VariableDeclaration,
  107. 'declarations': [
  108. {
  109. 'type': NodeType_1.NodeType.VariableDeclarator,
  110. 'id': {
  111. 'type': NodeType_1.NodeType.Identifier,
  112. 'name': 'temp'
  113. },
  114. 'init': null
  115. }
  116. ],
  117. 'kind': 'var'
  118. },
  119. {
  120. 'type': NodeType_1.NodeType.WhileStatement,
  121. 'test': {
  122. 'type': NodeType_1.NodeType.UpdateExpression,
  123. 'operator': '--',
  124. 'argument': {
  125. 'type': NodeType_1.NodeType.Identifier,
  126. 'name': 'times'
  127. },
  128. 'prefix': false
  129. },
  130. 'body': {
  131. 'type': NodeType_1.NodeType.BlockStatement,
  132. 'body': [
  133. {
  134. 'type': NodeType_1.NodeType.IfStatement,
  135. 'test': {
  136. 'type': NodeType_1.NodeType.UnaryExpression,
  137. 'operator': '!',
  138. 'argument': {
  139. 'type': NodeType_1.NodeType.Identifier,
  140. 'name': 'reverse'
  141. },
  142. 'prefix': true
  143. },
  144. 'consequent': {
  145. 'type': NodeType_1.NodeType.BlockStatement,
  146. 'body': [
  147. {
  148. 'type': NodeType_1.NodeType.ExpressionStatement,
  149. 'expression': {
  150. 'type': NodeType_1.NodeType.AssignmentExpression,
  151. 'operator': '=',
  152. 'left': {
  153. 'type': NodeType_1.NodeType.Identifier,
  154. 'name': 'temp'
  155. },
  156. 'right': {
  157. 'type': NodeType_1.NodeType.CallExpression,
  158. 'callee': {
  159. 'type': NodeType_1.NodeType.MemberExpression,
  160. 'computed': true,
  161. 'object': {
  162. 'type': NodeType_1.NodeType.Identifier,
  163. 'name': 'array'
  164. },
  165. 'property': {
  166. 'type': NodeType_1.NodeType.Literal,
  167. 'name': 'pop',
  168. 'x-verbatim-property': Utils_1.Utils.stringToUnicode('pop')
  169. }
  170. },
  171. 'arguments': []
  172. }
  173. }
  174. },
  175. {
  176. 'type': NodeType_1.NodeType.ExpressionStatement,
  177. 'expression': {
  178. 'type': NodeType_1.NodeType.CallExpression,
  179. 'callee': {
  180. 'type': NodeType_1.NodeType.MemberExpression,
  181. 'computed': true,
  182. 'object': {
  183. 'type': NodeType_1.NodeType.Identifier,
  184. 'name': 'array'
  185. },
  186. 'property': {
  187. 'type': NodeType_1.NodeType.Literal,
  188. 'name': 'unshift',
  189. 'x-verbatim-property': Utils_1.Utils.stringToUnicode('unshift')
  190. }
  191. },
  192. 'arguments': [
  193. {
  194. 'type': NodeType_1.NodeType.Identifier,
  195. 'name': 'temp'
  196. }
  197. ]
  198. }
  199. }
  200. ]
  201. },
  202. 'alternate': {
  203. 'type': NodeType_1.NodeType.BlockStatement,
  204. 'body': [
  205. {
  206. 'type': NodeType_1.NodeType.ExpressionStatement,
  207. 'expression': {
  208. 'type': NodeType_1.NodeType.AssignmentExpression,
  209. 'operator': '=',
  210. 'left': {
  211. 'type': NodeType_1.NodeType.Identifier,
  212. 'name': 'temp'
  213. },
  214. 'right': {
  215. 'type': NodeType_1.NodeType.CallExpression,
  216. 'callee': {
  217. 'type': NodeType_1.NodeType.MemberExpression,
  218. 'computed': true,
  219. 'object': {
  220. 'type': NodeType_1.NodeType.Identifier,
  221. 'name': 'array'
  222. },
  223. 'property': {
  224. 'type': NodeType_1.NodeType.Literal,
  225. 'name': 'shift',
  226. 'x-verbatim-property': Utils_1.Utils.stringToUnicode('shift')
  227. }
  228. },
  229. 'arguments': []
  230. }
  231. }
  232. },
  233. {
  234. 'type': NodeType_1.NodeType.ExpressionStatement,
  235. 'expression': {
  236. 'type': NodeType_1.NodeType.CallExpression,
  237. 'callee': {
  238. 'type': NodeType_1.NodeType.MemberExpression,
  239. 'computed': true,
  240. 'object': {
  241. 'type': NodeType_1.NodeType.Identifier,
  242. 'name': 'array'
  243. },
  244. 'property': {
  245. 'type': NodeType_1.NodeType.Literal,
  246. 'name': 'push',
  247. 'x-verbatim-property': Utils_1.Utils.stringToUnicode('push')
  248. }
  249. },
  250. 'arguments': [
  251. {
  252. 'type': NodeType_1.NodeType.Identifier,
  253. 'name': 'temp'
  254. }
  255. ]
  256. }
  257. }
  258. ]
  259. }
  260. }
  261. ]
  262. }
  263. }
  264. ]
  265. },
  266. 'generator': false,
  267. 'expression': false
  268. };
  269. }
  270. }
  271. exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode;