therubyracer 0.4.9-x86-linux

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (637) hide show
  1. data/.gitignore +11 -0
  2. data/.gitmodules +3 -0
  3. data/Doxyfile +1514 -0
  4. data/History.txt +43 -0
  5. data/README.rdoc +157 -0
  6. data/Rakefile +51 -0
  7. data/docs/data_conversion.txt +18 -0
  8. data/ext/v8/callbacks.cpp +160 -0
  9. data/ext/v8/callbacks.h +14 -0
  10. data/ext/v8/convert_ruby.cpp +8 -0
  11. data/ext/v8/convert_ruby.h +99 -0
  12. data/ext/v8/convert_string.cpp +10 -0
  13. data/ext/v8/convert_string.h +73 -0
  14. data/ext/v8/convert_v8.cpp +9 -0
  15. data/ext/v8/convert_v8.h +121 -0
  16. data/ext/v8/converters.cpp +83 -0
  17. data/ext/v8/converters.h +23 -0
  18. data/ext/v8/extconf.rb +36 -0
  19. data/ext/v8/upstream/2.0.6/.gitignore +26 -0
  20. data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
  21. data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
  22. data/ext/v8/upstream/2.0.6/LICENSE +55 -0
  23. data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
  24. data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
  25. data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
  26. data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
  27. data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
  28. data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
  29. data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
  30. data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
  31. data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
  32. data/ext/v8/upstream/2.0.6/src/api.h +479 -0
  33. data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
  34. data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
  35. data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
  36. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
  37. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
  38. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
  39. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
  40. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
  41. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
  42. data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
  43. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
  44. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
  45. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
  46. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
  47. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
  48. data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
  49. data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
  50. data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
  51. data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
  52. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
  53. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
  54. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
  55. data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
  56. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
  57. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
  58. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
  59. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
  60. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
  61. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
  62. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
  63. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
  64. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
  65. data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
  66. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
  67. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
  68. data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
  69. data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
  70. data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
  71. data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
  72. data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
  73. data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
  74. data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
  75. data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
  76. data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
  77. data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
  78. data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
  79. data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
  80. data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
  81. data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
  82. data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
  83. data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
  84. data/ext/v8/upstream/2.0.6/src/code.h +68 -0
  85. data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
  86. data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
  87. data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
  88. data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
  89. data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
  90. data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
  91. data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
  92. data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
  93. data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
  94. data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
  95. data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
  96. data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
  97. data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
  98. data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
  99. data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
  100. data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
  101. data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
  102. data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
  103. data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
  104. data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
  105. data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
  106. data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
  107. data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
  108. data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
  109. data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
  110. data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
  111. data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
  112. data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
  113. data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
  114. data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
  115. data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
  116. data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
  117. data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
  118. data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
  119. data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
  120. data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
  121. data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
  122. data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
  123. data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
  124. data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
  125. data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
  126. data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
  127. data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
  128. data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
  129. data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
  130. data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
  131. data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
  132. data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
  133. data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
  134. data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
  135. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
  136. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
  137. data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
  138. data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
  139. data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
  140. data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
  141. data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
  142. data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
  143. data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
  144. data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
  145. data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
  146. data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
  147. data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
  148. data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
  149. data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
  150. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
  151. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
  152. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
  153. data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
  154. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
  155. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
  156. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
  157. data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
  158. data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
  159. data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
  160. data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
  161. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
  162. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
  163. data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
  164. data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
  165. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
  166. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
  167. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
  168. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
  169. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
  170. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
  171. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
  172. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
  173. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
  174. data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
  175. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
  176. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
  177. data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
  178. data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
  179. data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
  180. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
  181. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
  182. data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
  183. data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
  184. data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
  185. data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
  186. data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
  187. data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
  188. data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
  189. data/ext/v8/upstream/2.0.6/src/list.h +158 -0
  190. data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
  191. data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
  192. data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
  193. data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
  194. data/ext/v8/upstream/2.0.6/src/log.h +371 -0
  195. data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
  196. data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
  197. data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
  198. data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
  199. data/ext/v8/upstream/2.0.6/src/math.js +263 -0
  200. data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
  201. data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
  202. data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
  203. data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
  204. data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
  205. data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
  206. data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
  207. data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
  208. data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
  209. data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
  210. data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
  211. data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
  212. data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
  213. data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
  214. data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
  215. data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
  216. data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
  217. data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
  218. data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
  219. data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
  220. data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
  221. data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
  222. data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
  223. data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
  224. data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
  225. data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
  226. data/ext/v8/upstream/2.0.6/src/property.h +327 -0
  227. data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
  228. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  229. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
  230. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
  231. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
  232. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
  233. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
  234. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
  235. data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
  236. data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
  237. data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
  238. data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
  239. data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
  240. data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
  241. data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
  242. data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
  243. data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
  244. data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
  245. data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
  246. data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
  247. data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
  248. data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
  249. data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
  250. data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
  251. data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
  252. data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
  253. data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
  254. data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
  255. data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
  256. data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
  257. data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
  258. data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
  259. data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
  260. data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
  261. data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
  262. data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
  263. data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
  264. data/ext/v8/upstream/2.0.6/src/string.js +901 -0
  265. data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
  266. data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
  267. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
  268. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
  269. data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
  270. data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
  271. data/ext/v8/upstream/2.0.6/src/token.h +270 -0
  272. data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
  273. data/ext/v8/upstream/2.0.6/src/top.h +459 -0
  274. data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
  275. data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
  276. data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
  277. data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
  278. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
  279. data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
  280. data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
  281. data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
  282. data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
  283. data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
  284. data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
  285. data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
  286. data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
  287. data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
  288. data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
  289. data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
  290. data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
  291. data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
  292. data/ext/v8/upstream/2.0.6/src/version.h +64 -0
  293. data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
  294. data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
  295. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
  296. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
  297. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
  298. data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
  299. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
  300. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
  301. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
  302. data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
  303. data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
  304. data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
  305. data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
  306. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
  307. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
  308. data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
  309. data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
  310. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
  311. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
  312. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
  313. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
  314. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
  315. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
  316. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
  317. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
  318. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
  319. data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
  320. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
  321. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
  322. data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
  323. data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
  324. data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
  325. data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
  326. data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
  327. data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
  328. data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
  329. data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
  330. data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
  331. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
  332. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
  333. data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
  334. data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
  335. data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
  336. data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
  337. data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
  338. data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
  339. data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
  340. data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
  341. data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
  342. data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
  343. data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
  344. data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
  345. data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
  346. data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
  347. data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
  348. data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
  349. data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
  350. data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
  351. data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
  352. data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
  353. data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
  354. data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
  355. data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
  356. data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
  357. data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
  358. data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
  359. data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
  360. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
  361. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
  362. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
  363. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
  364. data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
  365. data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
  366. data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
  367. data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
  368. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
  369. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
  370. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
  371. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
  372. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
  373. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
  374. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
  375. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
  376. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
  377. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  378. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
  379. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
  380. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
  381. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
  382. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
  383. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
  384. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
  385. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
  386. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
  387. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  388. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  389. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  390. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
  391. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
  392. data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
  393. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
  394. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
  395. data/ext/v8/upstream/Makefile +31 -0
  396. data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
  397. data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
  398. data/ext/v8/upstream/scons/LICENSE.txt +20 -0
  399. data/ext/v8/upstream/scons/MANIFEST +202 -0
  400. data/ext/v8/upstream/scons/PKG-INFO +13 -0
  401. data/ext/v8/upstream/scons/README.txt +273 -0
  402. data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
  403. data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
  404. data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
  405. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
  406. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
  407. data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
  408. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
  409. data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
  410. data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
  411. data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
  412. data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
  413. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
  414. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
  415. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
  416. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
  417. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
  418. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
  419. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
  420. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
  421. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
  422. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
  423. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
  424. data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
  425. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
  426. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
  427. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
  428. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
  429. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
  430. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
  431. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
  432. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
  433. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
  434. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
  435. data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
  436. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
  437. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
  438. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
  439. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
  440. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
  441. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
  442. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  443. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
  444. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
  445. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
  446. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
  447. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
  448. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
  449. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
  450. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
  451. data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
  452. data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
  453. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
  454. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
  455. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  456. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
  457. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  458. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  459. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  460. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  461. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  462. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  463. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  464. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  465. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  466. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
  467. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  468. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
  469. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
  470. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
  471. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
  472. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
  473. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
  474. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
  475. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
  476. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
  477. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
  478. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
  479. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
  480. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
  481. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
  482. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
  483. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
  484. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
  485. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
  486. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
  487. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
  488. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
  489. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
  490. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
  491. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
  492. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
  493. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
  494. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
  495. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
  496. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
  497. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
  498. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
  499. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
  500. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
  501. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
  502. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
  503. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
  504. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
  505. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
  506. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
  507. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
  508. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
  509. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
  510. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
  511. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
  512. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
  513. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
  514. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
  515. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
  516. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
  517. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
  518. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
  519. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
  520. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
  521. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
  522. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
  523. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
  524. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
  525. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
  526. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
  527. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
  528. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
  529. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
  530. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
  531. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  532. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  533. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  534. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  535. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  536. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  537. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  538. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  539. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  540. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  541. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
  542. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
  543. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
  544. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
  545. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
  546. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
  547. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
  548. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
  549. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
  550. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
  551. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
  552. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
  553. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
  554. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
  555. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
  556. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
  557. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
  558. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
  559. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
  560. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
  561. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
  562. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
  563. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
  564. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
  565. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
  566. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
  567. data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
  568. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  569. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  570. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
  571. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  572. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
  573. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
  574. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
  575. data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
  576. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
  577. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  578. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  579. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  580. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  581. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
  582. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  583. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  584. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  585. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  586. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
  587. data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
  588. data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
  589. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
  590. data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
  591. data/ext/v8/upstream/scons/scons-time.1 +1017 -0
  592. data/ext/v8/upstream/scons/scons.1 +15179 -0
  593. data/ext/v8/upstream/scons/sconsign.1 +208 -0
  594. data/ext/v8/upstream/scons/script/scons +184 -0
  595. data/ext/v8/upstream/scons/script/scons-time +1529 -0
  596. data/ext/v8/upstream/scons/script/scons.bat +31 -0
  597. data/ext/v8/upstream/scons/script/sconsign +508 -0
  598. data/ext/v8/upstream/scons/setup.cfg +6 -0
  599. data/ext/v8/upstream/scons/setup.py +427 -0
  600. data/ext/v8/v8.cpp +89 -0
  601. data/ext/v8/v8_cxt.cpp +92 -0
  602. data/ext/v8/v8_cxt.h +20 -0
  603. data/ext/v8/v8_func.cpp +10 -0
  604. data/ext/v8/v8_func.h +11 -0
  605. data/ext/v8/v8_msg.cpp +54 -0
  606. data/ext/v8/v8_msg.h +18 -0
  607. data/ext/v8/v8_obj.cpp +52 -0
  608. data/ext/v8/v8_obj.h +13 -0
  609. data/ext/v8/v8_ref.cpp +26 -0
  610. data/ext/v8/v8_ref.h +31 -0
  611. data/ext/v8/v8_script.cpp +20 -0
  612. data/ext/v8/v8_script.h +8 -0
  613. data/ext/v8/v8_standalone.cpp +69 -0
  614. data/ext/v8/v8_standalone.h +31 -0
  615. data/ext/v8/v8_str.cpp +17 -0
  616. data/ext/v8/v8_str.h +9 -0
  617. data/ext/v8/v8_template.cpp +53 -0
  618. data/ext/v8/v8_template.h +13 -0
  619. data/lib/v8.rb +10 -0
  620. data/lib/v8/context.rb +101 -0
  621. data/lib/v8/object.rb +38 -0
  622. data/lib/v8/to.rb +33 -0
  623. data/lib/v8/v8.so +0 -0
  624. data/script/console +10 -0
  625. data/script/destroy +14 -0
  626. data/script/generate +14 -0
  627. data/spec/ext/cxt_spec.rb +25 -0
  628. data/spec/ext/obj_spec.rb +13 -0
  629. data/spec/redjs/jsapi_spec.rb +405 -0
  630. data/spec/redjs/tap.rb +8 -0
  631. data/spec/redjs_helper.rb +3 -0
  632. data/spec/spec.opts +1 -0
  633. data/spec/spec_helper.rb +14 -0
  634. data/spec/v8/to_spec.rb +15 -0
  635. data/tasks/rspec.rake +21 -0
  636. data/therubyracer.gemspec +680 -0
  637. metadata +697 -0
@@ -0,0 +1,1511 @@
1
+ // Copyright 2006-2008 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #include <stdarg.h>
29
+
30
+ #include "v8.h"
31
+
32
+ #include "prettyprinter.h"
33
+ #include "scopes.h"
34
+ #include "platform.h"
35
+
36
+ namespace v8 {
37
+ namespace internal {
38
+
39
+ #ifdef DEBUG
40
+
41
+ PrettyPrinter::PrettyPrinter() {
42
+ output_ = NULL;
43
+ size_ = 0;
44
+ pos_ = 0;
45
+ }
46
+
47
+
48
+ PrettyPrinter::~PrettyPrinter() {
49
+ DeleteArray(output_);
50
+ }
51
+
52
+
53
+ void PrettyPrinter::VisitBlock(Block* node) {
54
+ if (!node->is_initializer_block()) Print("{ ");
55
+ PrintStatements(node->statements());
56
+ if (node->statements()->length() > 0) Print(" ");
57
+ if (!node->is_initializer_block()) Print("}");
58
+ }
59
+
60
+
61
+ void PrettyPrinter::VisitDeclaration(Declaration* node) {
62
+ Print("var ");
63
+ PrintLiteral(node->proxy()->name(), false);
64
+ if (node->fun() != NULL) {
65
+ Print(" = ");
66
+ PrintFunctionLiteral(node->fun());
67
+ }
68
+ Print(";");
69
+ }
70
+
71
+
72
+ void PrettyPrinter::VisitExpressionStatement(ExpressionStatement* node) {
73
+ Visit(node->expression());
74
+ Print(";");
75
+ }
76
+
77
+
78
+ void PrettyPrinter::VisitEmptyStatement(EmptyStatement* node) {
79
+ Print(";");
80
+ }
81
+
82
+
83
+ void PrettyPrinter::VisitIfStatement(IfStatement* node) {
84
+ Print("if (");
85
+ Visit(node->condition());
86
+ Print(") ");
87
+ Visit(node->then_statement());
88
+ if (node->HasElseStatement()) {
89
+ Print(" else ");
90
+ Visit(node->else_statement());
91
+ }
92
+ }
93
+
94
+
95
+ void PrettyPrinter::VisitContinueStatement(ContinueStatement* node) {
96
+ Print("continue");
97
+ ZoneStringList* labels = node->target()->labels();
98
+ if (labels != NULL) {
99
+ Print(" ");
100
+ ASSERT(labels->length() > 0); // guaranteed to have at least one entry
101
+ PrintLiteral(labels->at(0), false); // any label from the list is fine
102
+ }
103
+ Print(";");
104
+ }
105
+
106
+
107
+ void PrettyPrinter::VisitBreakStatement(BreakStatement* node) {
108
+ Print("break");
109
+ ZoneStringList* labels = node->target()->labels();
110
+ if (labels != NULL) {
111
+ Print(" ");
112
+ ASSERT(labels->length() > 0); // guaranteed to have at least one entry
113
+ PrintLiteral(labels->at(0), false); // any label from the list is fine
114
+ }
115
+ Print(";");
116
+ }
117
+
118
+
119
+ void PrettyPrinter::VisitReturnStatement(ReturnStatement* node) {
120
+ Print("return ");
121
+ Visit(node->expression());
122
+ Print(";");
123
+ }
124
+
125
+
126
+ void PrettyPrinter::VisitWithEnterStatement(WithEnterStatement* node) {
127
+ Print("<enter with> (");
128
+ Visit(node->expression());
129
+ Print(") ");
130
+ }
131
+
132
+
133
+ void PrettyPrinter::VisitWithExitStatement(WithExitStatement* node) {
134
+ Print("<exit with>");
135
+ }
136
+
137
+
138
+ void PrettyPrinter::VisitSwitchStatement(SwitchStatement* node) {
139
+ PrintLabels(node->labels());
140
+ Print("switch (");
141
+ Visit(node->tag());
142
+ Print(") { ");
143
+ ZoneList<CaseClause*>* cases = node->cases();
144
+ for (int i = 0; i < cases->length(); i++)
145
+ PrintCaseClause(cases->at(i));
146
+ Print("}");
147
+ }
148
+
149
+
150
+ void PrettyPrinter::VisitDoWhileStatement(DoWhileStatement* node) {
151
+ PrintLabels(node->labels());
152
+ Print("do ");
153
+ Visit(node->body());
154
+ Print(" while (");
155
+ Visit(node->cond());
156
+ Print(");");
157
+ }
158
+
159
+
160
+ void PrettyPrinter::VisitWhileStatement(WhileStatement* node) {
161
+ PrintLabels(node->labels());
162
+ Print("while (");
163
+ Visit(node->cond());
164
+ Print(") ");
165
+ Visit(node->body());
166
+ }
167
+
168
+
169
+ void PrettyPrinter::VisitForStatement(ForStatement* node) {
170
+ PrintLabels(node->labels());
171
+ Print("for (");
172
+ if (node->init() != NULL) {
173
+ Visit(node->init());
174
+ Print(" ");
175
+ } else {
176
+ Print("; ");
177
+ }
178
+ if (node->cond() != NULL) Visit(node->cond());
179
+ Print("; ");
180
+ if (node->next() != NULL) {
181
+ Visit(node->next()); // prints extra ';', unfortunately
182
+ // to fix: should use Expression for next
183
+ }
184
+ Print(") ");
185
+ Visit(node->body());
186
+ }
187
+
188
+
189
+ void PrettyPrinter::VisitForInStatement(ForInStatement* node) {
190
+ PrintLabels(node->labels());
191
+ Print("for (");
192
+ Visit(node->each());
193
+ Print(" in ");
194
+ Visit(node->enumerable());
195
+ Print(") ");
196
+ Visit(node->body());
197
+ }
198
+
199
+
200
+ void PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) {
201
+ Print("try ");
202
+ Visit(node->try_block());
203
+ Print(" catch (");
204
+ Visit(node->catch_var());
205
+ Print(") ");
206
+ Visit(node->catch_block());
207
+ }
208
+
209
+
210
+ void PrettyPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) {
211
+ Print("try ");
212
+ Visit(node->try_block());
213
+ Print(" finally ");
214
+ Visit(node->finally_block());
215
+ }
216
+
217
+
218
+ void PrettyPrinter::VisitDebuggerStatement(DebuggerStatement* node) {
219
+ Print("debugger ");
220
+ }
221
+
222
+
223
+ void PrettyPrinter::VisitFunctionLiteral(FunctionLiteral* node) {
224
+ Print("(");
225
+ PrintFunctionLiteral(node);
226
+ Print(")");
227
+ }
228
+
229
+
230
+ void PrettyPrinter::VisitFunctionBoilerplateLiteral(
231
+ FunctionBoilerplateLiteral* node) {
232
+ Print("(");
233
+ PrintLiteral(node->boilerplate(), true);
234
+ Print(")");
235
+ }
236
+
237
+
238
+ void PrettyPrinter::VisitConditional(Conditional* node) {
239
+ Visit(node->condition());
240
+ Print(" ? ");
241
+ Visit(node->then_expression());
242
+ Print(" : ");
243
+ Visit(node->else_expression());
244
+ }
245
+
246
+
247
+ void PrettyPrinter::VisitLiteral(Literal* node) {
248
+ PrintLiteral(node->handle(), true);
249
+ }
250
+
251
+
252
+ void PrettyPrinter::VisitRegExpLiteral(RegExpLiteral* node) {
253
+ Print(" RegExp(");
254
+ PrintLiteral(node->pattern(), false);
255
+ Print(",");
256
+ PrintLiteral(node->flags(), false);
257
+ Print(") ");
258
+ }
259
+
260
+
261
+ void PrettyPrinter::VisitObjectLiteral(ObjectLiteral* node) {
262
+ Print("{ ");
263
+ for (int i = 0; i < node->properties()->length(); i++) {
264
+ if (i != 0) Print(",");
265
+ ObjectLiteral::Property* property = node->properties()->at(i);
266
+ Print(" ");
267
+ Visit(property->key());
268
+ Print(": ");
269
+ Visit(property->value());
270
+ }
271
+ Print(" }");
272
+ }
273
+
274
+
275
+ void PrettyPrinter::VisitArrayLiteral(ArrayLiteral* node) {
276
+ Print("[ ");
277
+ for (int i = 0; i < node->values()->length(); i++) {
278
+ if (i != 0) Print(",");
279
+ Visit(node->values()->at(i));
280
+ }
281
+ Print(" ]");
282
+ }
283
+
284
+
285
+ void PrettyPrinter::VisitCatchExtensionObject(CatchExtensionObject* node) {
286
+ Print("{ ");
287
+ Visit(node->key());
288
+ Print(": ");
289
+ Visit(node->value());
290
+ Print(" }");
291
+ }
292
+
293
+
294
+ void PrettyPrinter::VisitSlot(Slot* node) {
295
+ switch (node->type()) {
296
+ case Slot::PARAMETER:
297
+ Print("parameter[%d]", node->index());
298
+ break;
299
+ case Slot::LOCAL:
300
+ Print("frame[%d]", node->index());
301
+ break;
302
+ case Slot::CONTEXT:
303
+ Print(".context[%d]", node->index());
304
+ break;
305
+ case Slot::LOOKUP:
306
+ Print(".context[");
307
+ PrintLiteral(node->var()->name(), false);
308
+ Print("]");
309
+ break;
310
+ default:
311
+ UNREACHABLE();
312
+ }
313
+ }
314
+
315
+
316
+ void PrettyPrinter::VisitVariableProxy(VariableProxy* node) {
317
+ PrintLiteral(node->name(), false);
318
+ }
319
+
320
+
321
+ void PrettyPrinter::VisitAssignment(Assignment* node) {
322
+ Visit(node->target());
323
+ Print(" %s ", Token::String(node->op()));
324
+ Visit(node->value());
325
+ }
326
+
327
+
328
+ void PrettyPrinter::VisitThrow(Throw* node) {
329
+ Print("throw ");
330
+ Visit(node->exception());
331
+ }
332
+
333
+
334
+ void PrettyPrinter::VisitProperty(Property* node) {
335
+ Expression* key = node->key();
336
+ Literal* literal = key->AsLiteral();
337
+ if (literal != NULL && literal->handle()->IsSymbol()) {
338
+ Print("(");
339
+ Visit(node->obj());
340
+ Print(").");
341
+ PrintLiteral(literal->handle(), false);
342
+ } else {
343
+ Visit(node->obj());
344
+ Print("[");
345
+ Visit(key);
346
+ Print("]");
347
+ }
348
+ }
349
+
350
+
351
+ void PrettyPrinter::VisitCall(Call* node) {
352
+ Visit(node->expression());
353
+ PrintArguments(node->arguments());
354
+ }
355
+
356
+
357
+ void PrettyPrinter::VisitCallNew(CallNew* node) {
358
+ Print("new (");
359
+ Visit(node->expression());
360
+ Print(")");
361
+ PrintArguments(node->arguments());
362
+ }
363
+
364
+
365
+ void PrettyPrinter::VisitCallRuntime(CallRuntime* node) {
366
+ Print("%%");
367
+ PrintLiteral(node->name(), false);
368
+ PrintArguments(node->arguments());
369
+ }
370
+
371
+
372
+ void PrettyPrinter::VisitUnaryOperation(UnaryOperation* node) {
373
+ Print("(%s", Token::String(node->op()));
374
+ Visit(node->expression());
375
+ Print(")");
376
+ }
377
+
378
+
379
+ void PrettyPrinter::VisitCountOperation(CountOperation* node) {
380
+ Print("(");
381
+ if (node->is_prefix()) Print("%s", Token::String(node->op()));
382
+ Visit(node->expression());
383
+ if (node->is_postfix()) Print("%s", Token::String(node->op()));
384
+ Print(")");
385
+ }
386
+
387
+
388
+ void PrettyPrinter::VisitBinaryOperation(BinaryOperation* node) {
389
+ Print("(");
390
+ Visit(node->left());
391
+ Print("%s", Token::String(node->op()));
392
+ Visit(node->right());
393
+ Print(")");
394
+ }
395
+
396
+
397
+ void PrettyPrinter::VisitCompareOperation(CompareOperation* node) {
398
+ Print("(");
399
+ Visit(node->left());
400
+ Print("%s", Token::String(node->op()));
401
+ Visit(node->right());
402
+ Print(")");
403
+ }
404
+
405
+
406
+ void PrettyPrinter::VisitThisFunction(ThisFunction* node) {
407
+ Print("<this-function>");
408
+ }
409
+
410
+
411
+ const char* PrettyPrinter::Print(AstNode* node) {
412
+ Init();
413
+ Visit(node);
414
+ return output_;
415
+ }
416
+
417
+
418
+ const char* PrettyPrinter::PrintExpression(FunctionLiteral* program) {
419
+ Init();
420
+ ExpressionStatement* statement =
421
+ program->body()->at(0)->AsExpressionStatement();
422
+ Visit(statement->expression());
423
+ return output_;
424
+ }
425
+
426
+
427
+ const char* PrettyPrinter::PrintProgram(FunctionLiteral* program) {
428
+ Init();
429
+ PrintStatements(program->body());
430
+ Print("\n");
431
+ return output_;
432
+ }
433
+
434
+
435
+ void PrettyPrinter::PrintOut(AstNode* node) {
436
+ PrettyPrinter printer;
437
+ PrintF("%s", printer.Print(node));
438
+ }
439
+
440
+
441
+ void PrettyPrinter::Init() {
442
+ if (size_ == 0) {
443
+ ASSERT(output_ == NULL);
444
+ const int initial_size = 256;
445
+ output_ = NewArray<char>(initial_size);
446
+ size_ = initial_size;
447
+ }
448
+ output_[0] = '\0';
449
+ pos_ = 0;
450
+ }
451
+
452
+
453
+ void PrettyPrinter::Print(const char* format, ...) {
454
+ for (;;) {
455
+ va_list arguments;
456
+ va_start(arguments, format);
457
+ int n = OS::VSNPrintF(Vector<char>(output_, size_) + pos_,
458
+ format,
459
+ arguments);
460
+ va_end(arguments);
461
+
462
+ if (n >= 0) {
463
+ // there was enough space - we are done
464
+ pos_ += n;
465
+ return;
466
+ } else {
467
+ // there was not enough space - allocate more and try again
468
+ const int slack = 32;
469
+ int new_size = size_ + (size_ >> 1) + slack;
470
+ char* new_output = NewArray<char>(new_size);
471
+ memcpy(new_output, output_, pos_);
472
+ DeleteArray(output_);
473
+ output_ = new_output;
474
+ size_ = new_size;
475
+ }
476
+ }
477
+ }
478
+
479
+
480
+ void PrettyPrinter::PrintStatements(ZoneList<Statement*>* statements) {
481
+ for (int i = 0; i < statements->length(); i++) {
482
+ if (i != 0) Print(" ");
483
+ Visit(statements->at(i));
484
+ }
485
+ }
486
+
487
+
488
+ void PrettyPrinter::PrintLabels(ZoneStringList* labels) {
489
+ if (labels != NULL) {
490
+ for (int i = 0; i < labels->length(); i++) {
491
+ PrintLiteral(labels->at(i), false);
492
+ Print(": ");
493
+ }
494
+ }
495
+ }
496
+
497
+
498
+ void PrettyPrinter::PrintArguments(ZoneList<Expression*>* arguments) {
499
+ Print("(");
500
+ for (int i = 0; i < arguments->length(); i++) {
501
+ if (i != 0) Print(", ");
502
+ Visit(arguments->at(i));
503
+ }
504
+ Print(")");
505
+ }
506
+
507
+
508
+ void PrettyPrinter::PrintLiteral(Handle<Object> value, bool quote) {
509
+ Object* object = *value;
510
+ if (object->IsString()) {
511
+ String* string = String::cast(object);
512
+ if (quote) Print("\"");
513
+ for (int i = 0; i < string->length(); i++) {
514
+ Print("%c", string->Get(i));
515
+ }
516
+ if (quote) Print("\"");
517
+ } else if (object == Heap::null_value()) {
518
+ Print("null");
519
+ } else if (object == Heap::true_value()) {
520
+ Print("true");
521
+ } else if (object == Heap::false_value()) {
522
+ Print("false");
523
+ } else if (object == Heap::undefined_value()) {
524
+ Print("undefined");
525
+ } else if (object->IsNumber()) {
526
+ Print("%g", object->Number());
527
+ } else if (object->IsJSObject()) {
528
+ // regular expression
529
+ if (object->IsJSFunction()) {
530
+ Print("JS-Function");
531
+ } else if (object->IsJSArray()) {
532
+ Print("JS-array[%u]", JSArray::cast(object)->length());
533
+ } else if (object->IsJSObject()) {
534
+ Print("JS-Object");
535
+ } else {
536
+ Print("?UNKNOWN?");
537
+ }
538
+ } else if (object->IsFixedArray()) {
539
+ Print("FixedArray");
540
+ } else {
541
+ Print("<unknown literal %p>", object);
542
+ }
543
+ }
544
+
545
+
546
+ void PrettyPrinter::PrintParameters(Scope* scope) {
547
+ Print("(");
548
+ for (int i = 0; i < scope->num_parameters(); i++) {
549
+ if (i > 0) Print(", ");
550
+ PrintLiteral(scope->parameter(i)->name(), false);
551
+ }
552
+ Print(")");
553
+ }
554
+
555
+
556
+ void PrettyPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) {
557
+ for (int i = 0; i < declarations->length(); i++) {
558
+ if (i > 0) Print(" ");
559
+ Visit(declarations->at(i));
560
+ }
561
+ }
562
+
563
+
564
+ void PrettyPrinter::PrintFunctionLiteral(FunctionLiteral* function) {
565
+ Print("function ");
566
+ PrintLiteral(function->name(), false);
567
+ PrintParameters(function->scope());
568
+ Print(" { ");
569
+ PrintDeclarations(function->scope()->declarations());
570
+ PrintStatements(function->body());
571
+ Print(" }");
572
+ }
573
+
574
+
575
+ void PrettyPrinter::PrintCaseClause(CaseClause* clause) {
576
+ if (clause->is_default()) {
577
+ Print("default");
578
+ } else {
579
+ Print("case ");
580
+ Visit(clause->label());
581
+ }
582
+ Print(": ");
583
+ PrintStatements(clause->statements());
584
+ if (clause->statements()->length() > 0)
585
+ Print(" ");
586
+ }
587
+
588
+
589
+ //-----------------------------------------------------------------------------
590
+
591
+ class IndentedScope BASE_EMBEDDED {
592
+ public:
593
+ IndentedScope() {
594
+ ast_printer_->inc_indent();
595
+ }
596
+
597
+ explicit IndentedScope(const char* txt, StaticType* type = NULL) {
598
+ ast_printer_->PrintIndented(txt);
599
+ if ((type != NULL) && (type->IsKnown())) {
600
+ ast_printer_->Print(" (type = ");
601
+ ast_printer_->Print(StaticType::Type2String(type));
602
+ ast_printer_->Print(")");
603
+ }
604
+ ast_printer_->Print("\n");
605
+ ast_printer_->inc_indent();
606
+ }
607
+
608
+ virtual ~IndentedScope() {
609
+ ast_printer_->dec_indent();
610
+ }
611
+
612
+ static void SetAstPrinter(AstPrinter* a) { ast_printer_ = a; }
613
+
614
+ private:
615
+ static AstPrinter* ast_printer_;
616
+ };
617
+
618
+
619
+ AstPrinter* IndentedScope::ast_printer_ = NULL;
620
+
621
+
622
+ //-----------------------------------------------------------------------------
623
+
624
+ int AstPrinter::indent_ = 0;
625
+
626
+
627
+ AstPrinter::AstPrinter() {
628
+ ASSERT(indent_ == 0);
629
+ IndentedScope::SetAstPrinter(this);
630
+ }
631
+
632
+
633
+ AstPrinter::~AstPrinter() {
634
+ ASSERT(indent_ == 0);
635
+ IndentedScope::SetAstPrinter(NULL);
636
+ }
637
+
638
+
639
+ void AstPrinter::PrintIndented(const char* txt) {
640
+ for (int i = 0; i < indent_; i++) {
641
+ Print(". ");
642
+ }
643
+ Print(txt);
644
+ }
645
+
646
+
647
+ void AstPrinter::PrintLiteralIndented(const char* info,
648
+ Handle<Object> value,
649
+ bool quote) {
650
+ PrintIndented(info);
651
+ Print(" ");
652
+ PrintLiteral(value, quote);
653
+ Print("\n");
654
+ }
655
+
656
+
657
+ void AstPrinter::PrintLiteralWithModeIndented(const char* info,
658
+ Variable* var,
659
+ Handle<Object> value,
660
+ StaticType* type) {
661
+ if (var == NULL) {
662
+ PrintLiteralIndented(info, value, true);
663
+ } else {
664
+ EmbeddedVector<char, 256> buf;
665
+ if (type->IsKnown()) {
666
+ OS::SNPrintF(buf, "%s (mode = %s, type = %s)", info,
667
+ Variable::Mode2String(var->mode()),
668
+ StaticType::Type2String(type));
669
+ } else {
670
+ OS::SNPrintF(buf, "%s (mode = %s)", info,
671
+ Variable::Mode2String(var->mode()));
672
+ }
673
+ PrintLiteralIndented(buf.start(), value, true);
674
+ }
675
+ }
676
+
677
+
678
+ void AstPrinter::PrintLabelsIndented(const char* info, ZoneStringList* labels) {
679
+ if (labels != NULL && labels->length() > 0) {
680
+ if (info == NULL) {
681
+ PrintIndented("LABELS ");
682
+ } else {
683
+ PrintIndented(info);
684
+ Print(" ");
685
+ }
686
+ PrintLabels(labels);
687
+ } else if (info != NULL) {
688
+ PrintIndented(info);
689
+ }
690
+ Print("\n");
691
+ }
692
+
693
+
694
+ void AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) {
695
+ IndentedScope indent(s);
696
+ Visit(node);
697
+ }
698
+
699
+
700
+ const char* AstPrinter::PrintProgram(FunctionLiteral* program) {
701
+ Init();
702
+ { IndentedScope indent("FUNC");
703
+ PrintLiteralIndented("NAME", program->name(), true);
704
+ PrintLiteralIndented("INFERRED NAME", program->inferred_name(), true);
705
+ PrintParameters(program->scope());
706
+ PrintDeclarations(program->scope()->declarations());
707
+ PrintStatements(program->body());
708
+ }
709
+ return Output();
710
+ }
711
+
712
+
713
+ void AstPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) {
714
+ if (declarations->length() > 0) {
715
+ IndentedScope indent("DECLS");
716
+ for (int i = 0; i < declarations->length(); i++) {
717
+ Visit(declarations->at(i));
718
+ }
719
+ }
720
+ }
721
+
722
+
723
+ void AstPrinter::PrintParameters(Scope* scope) {
724
+ if (scope->num_parameters() > 0) {
725
+ IndentedScope indent("PARAMS");
726
+ for (int i = 0; i < scope->num_parameters(); i++) {
727
+ PrintLiteralWithModeIndented("VAR", scope->parameter(i),
728
+ scope->parameter(i)->name(),
729
+ scope->parameter(i)->type());
730
+ }
731
+ }
732
+ }
733
+
734
+
735
+ void AstPrinter::PrintStatements(ZoneList<Statement*>* statements) {
736
+ for (int i = 0; i < statements->length(); i++) {
737
+ Visit(statements->at(i));
738
+ }
739
+ }
740
+
741
+
742
+ void AstPrinter::PrintArguments(ZoneList<Expression*>* arguments) {
743
+ for (int i = 0; i < arguments->length(); i++) {
744
+ Visit(arguments->at(i));
745
+ }
746
+ }
747
+
748
+
749
+ void AstPrinter::PrintCaseClause(CaseClause* clause) {
750
+ if (clause->is_default()) {
751
+ IndentedScope indent("DEFAULT");
752
+ PrintStatements(clause->statements());
753
+ } else {
754
+ IndentedScope indent("CASE");
755
+ Visit(clause->label());
756
+ PrintStatements(clause->statements());
757
+ }
758
+ }
759
+
760
+
761
+ void AstPrinter::VisitBlock(Block* node) {
762
+ const char* block_txt = node->is_initializer_block() ? "BLOCK INIT" : "BLOCK";
763
+ IndentedScope indent(block_txt);
764
+ PrintStatements(node->statements());
765
+ }
766
+
767
+
768
+ void AstPrinter::VisitDeclaration(Declaration* node) {
769
+ if (node->fun() == NULL) {
770
+ // var or const declarations
771
+ PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()),
772
+ node->proxy()->AsVariable(),
773
+ node->proxy()->name(),
774
+ node->proxy()->AsVariable()->type());
775
+ } else {
776
+ // function declarations
777
+ PrintIndented("FUNCTION ");
778
+ PrintLiteral(node->proxy()->name(), true);
779
+ Print(" = function ");
780
+ PrintLiteral(node->fun()->name(), false);
781
+ Print("\n");
782
+ }
783
+ }
784
+
785
+
786
+ void AstPrinter::VisitExpressionStatement(ExpressionStatement* node) {
787
+ Visit(node->expression());
788
+ }
789
+
790
+
791
+ void AstPrinter::VisitEmptyStatement(EmptyStatement* node) {
792
+ PrintIndented("EMPTY\n");
793
+ }
794
+
795
+
796
+ void AstPrinter::VisitIfStatement(IfStatement* node) {
797
+ PrintIndentedVisit("IF", node->condition());
798
+ PrintIndentedVisit("THEN", node->then_statement());
799
+ if (node->HasElseStatement()) {
800
+ PrintIndentedVisit("ELSE", node->else_statement());
801
+ }
802
+ }
803
+
804
+
805
+ void AstPrinter::VisitContinueStatement(ContinueStatement* node) {
806
+ PrintLabelsIndented("CONTINUE", node->target()->labels());
807
+ }
808
+
809
+
810
+ void AstPrinter::VisitBreakStatement(BreakStatement* node) {
811
+ PrintLabelsIndented("BREAK", node->target()->labels());
812
+ }
813
+
814
+
815
+ void AstPrinter::VisitReturnStatement(ReturnStatement* node) {
816
+ PrintIndentedVisit("RETURN", node->expression());
817
+ }
818
+
819
+
820
+ void AstPrinter::VisitWithEnterStatement(WithEnterStatement* node) {
821
+ PrintIndentedVisit("WITH ENTER", node->expression());
822
+ }
823
+
824
+
825
+ void AstPrinter::VisitWithExitStatement(WithExitStatement* node) {
826
+ PrintIndented("WITH EXIT\n");
827
+ }
828
+
829
+
830
+ void AstPrinter::VisitSwitchStatement(SwitchStatement* node) {
831
+ IndentedScope indent("SWITCH");
832
+ PrintLabelsIndented(NULL, node->labels());
833
+ PrintIndentedVisit("TAG", node->tag());
834
+ for (int i = 0; i < node->cases()->length(); i++) {
835
+ PrintCaseClause(node->cases()->at(i));
836
+ }
837
+ }
838
+
839
+
840
+ void AstPrinter::VisitDoWhileStatement(DoWhileStatement* node) {
841
+ IndentedScope indent("DO");
842
+ PrintLabelsIndented(NULL, node->labels());
843
+ PrintIndentedVisit("BODY", node->body());
844
+ PrintIndentedVisit("COND", node->cond());
845
+ }
846
+
847
+
848
+ void AstPrinter::VisitWhileStatement(WhileStatement* node) {
849
+ IndentedScope indent("WHILE");
850
+ PrintLabelsIndented(NULL, node->labels());
851
+ PrintIndentedVisit("COND", node->cond());
852
+ PrintIndentedVisit("BODY", node->body());
853
+ }
854
+
855
+
856
+ void AstPrinter::VisitForStatement(ForStatement* node) {
857
+ IndentedScope indent("FOR");
858
+ PrintLabelsIndented(NULL, node->labels());
859
+ if (node->init()) PrintIndentedVisit("INIT", node->init());
860
+ if (node->cond()) PrintIndentedVisit("COND", node->cond());
861
+ PrintIndentedVisit("BODY", node->body());
862
+ if (node->next()) PrintIndentedVisit("NEXT", node->next());
863
+ }
864
+
865
+
866
+ void AstPrinter::VisitForInStatement(ForInStatement* node) {
867
+ IndentedScope indent("FOR IN");
868
+ PrintIndentedVisit("FOR", node->each());
869
+ PrintIndentedVisit("IN", node->enumerable());
870
+ PrintIndentedVisit("BODY", node->body());
871
+ }
872
+
873
+
874
+ void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) {
875
+ IndentedScope indent("TRY CATCH");
876
+ PrintIndentedVisit("TRY", node->try_block());
877
+ PrintIndentedVisit("CATCHVAR", node->catch_var());
878
+ PrintIndentedVisit("CATCH", node->catch_block());
879
+ }
880
+
881
+
882
+ void AstPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) {
883
+ IndentedScope indent("TRY FINALLY");
884
+ PrintIndentedVisit("TRY", node->try_block());
885
+ PrintIndentedVisit("FINALLY", node->finally_block());
886
+ }
887
+
888
+
889
+ void AstPrinter::VisitDebuggerStatement(DebuggerStatement* node) {
890
+ IndentedScope indent("DEBUGGER");
891
+ }
892
+
893
+
894
+ void AstPrinter::VisitFunctionLiteral(FunctionLiteral* node) {
895
+ IndentedScope indent("FUNC LITERAL");
896
+ PrintLiteralIndented("NAME", node->name(), false);
897
+ PrintLiteralIndented("INFERRED NAME", node->inferred_name(), false);
898
+ PrintParameters(node->scope());
899
+ // We don't want to see the function literal in this case: it
900
+ // will be printed via PrintProgram when the code for it is
901
+ // generated.
902
+ // PrintStatements(node->body());
903
+ }
904
+
905
+
906
+ void AstPrinter::VisitFunctionBoilerplateLiteral(
907
+ FunctionBoilerplateLiteral* node) {
908
+ IndentedScope indent("FUNC LITERAL");
909
+ PrintLiteralIndented("BOILERPLATE", node->boilerplate(), true);
910
+ }
911
+
912
+
913
+ void AstPrinter::VisitConditional(Conditional* node) {
914
+ IndentedScope indent("CONDITIONAL");
915
+ PrintIndentedVisit("?", node->condition());
916
+ PrintIndentedVisit("THEN", node->then_expression());
917
+ PrintIndentedVisit("ELSE", node->else_expression());
918
+ }
919
+
920
+
921
+ void AstPrinter::VisitLiteral(Literal* node) {
922
+ PrintLiteralIndented("LITERAL", node->handle(), true);
923
+ }
924
+
925
+
926
+ void AstPrinter::VisitRegExpLiteral(RegExpLiteral* node) {
927
+ IndentedScope indent("REGEXP LITERAL");
928
+ PrintLiteralIndented("PATTERN", node->pattern(), false);
929
+ PrintLiteralIndented("FLAGS", node->flags(), false);
930
+ }
931
+
932
+
933
+ void AstPrinter::VisitObjectLiteral(ObjectLiteral* node) {
934
+ IndentedScope indent("OBJ LITERAL");
935
+ for (int i = 0; i < node->properties()->length(); i++) {
936
+ const char* prop_kind = NULL;
937
+ switch (node->properties()->at(i)->kind()) {
938
+ case ObjectLiteral::Property::CONSTANT:
939
+ prop_kind = "PROPERTY - CONSTANT";
940
+ break;
941
+ case ObjectLiteral::Property::COMPUTED:
942
+ prop_kind = "PROPERTY - COMPUTED";
943
+ break;
944
+ case ObjectLiteral::Property::MATERIALIZED_LITERAL:
945
+ prop_kind = "PROPERTY - MATERIALIZED_LITERAL";
946
+ break;
947
+ case ObjectLiteral::Property::PROTOTYPE:
948
+ prop_kind = "PROPERTY - PROTOTYPE";
949
+ break;
950
+ case ObjectLiteral::Property::GETTER:
951
+ prop_kind = "PROPERTY - GETTER";
952
+ break;
953
+ case ObjectLiteral::Property::SETTER:
954
+ prop_kind = "PROPERTY - SETTER";
955
+ break;
956
+ default:
957
+ UNREACHABLE();
958
+ }
959
+ IndentedScope prop(prop_kind);
960
+ PrintIndentedVisit("KEY", node->properties()->at(i)->key());
961
+ PrintIndentedVisit("VALUE", node->properties()->at(i)->value());
962
+ }
963
+ }
964
+
965
+
966
+ void AstPrinter::VisitArrayLiteral(ArrayLiteral* node) {
967
+ IndentedScope indent("ARRAY LITERAL");
968
+ if (node->values()->length() > 0) {
969
+ IndentedScope indent("VALUES");
970
+ for (int i = 0; i < node->values()->length(); i++) {
971
+ Visit(node->values()->at(i));
972
+ }
973
+ }
974
+ }
975
+
976
+
977
+ void AstPrinter::VisitCatchExtensionObject(CatchExtensionObject* node) {
978
+ IndentedScope indent("CatchExtensionObject");
979
+ PrintIndentedVisit("KEY", node->key());
980
+ PrintIndentedVisit("VALUE", node->value());
981
+ }
982
+
983
+
984
+ void AstPrinter::VisitSlot(Slot* node) {
985
+ PrintIndented("SLOT ");
986
+ switch (node->type()) {
987
+ case Slot::PARAMETER:
988
+ Print("parameter[%d]", node->index());
989
+ break;
990
+ case Slot::LOCAL:
991
+ Print("frame[%d]", node->index());
992
+ break;
993
+ case Slot::CONTEXT:
994
+ Print(".context[%d]", node->index());
995
+ break;
996
+ case Slot::LOOKUP:
997
+ Print(".context[");
998
+ PrintLiteral(node->var()->name(), false);
999
+ Print("]");
1000
+ break;
1001
+ default:
1002
+ UNREACHABLE();
1003
+ }
1004
+ Print("\n");
1005
+ }
1006
+
1007
+
1008
+ void AstPrinter::VisitVariableProxy(VariableProxy* node) {
1009
+ PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(),
1010
+ node->type());
1011
+ Variable* var = node->var();
1012
+ if (var != NULL && var->rewrite() != NULL) {
1013
+ IndentedScope indent;
1014
+ Visit(var->rewrite());
1015
+ }
1016
+ }
1017
+
1018
+
1019
+ void AstPrinter::VisitAssignment(Assignment* node) {
1020
+ IndentedScope indent(Token::Name(node->op()), node->type());
1021
+ Visit(node->target());
1022
+ Visit(node->value());
1023
+ }
1024
+
1025
+
1026
+ void AstPrinter::VisitThrow(Throw* node) {
1027
+ PrintIndentedVisit("THROW", node->exception());
1028
+ }
1029
+
1030
+
1031
+ void AstPrinter::VisitProperty(Property* node) {
1032
+ IndentedScope indent("PROPERTY");
1033
+ Visit(node->obj());
1034
+ Literal* literal = node->key()->AsLiteral();
1035
+ if (literal != NULL && literal->handle()->IsSymbol()) {
1036
+ PrintLiteralIndented("NAME", literal->handle(), false);
1037
+ } else {
1038
+ PrintIndentedVisit("KEY", node->key());
1039
+ }
1040
+ }
1041
+
1042
+
1043
+ void AstPrinter::VisitCall(Call* node) {
1044
+ IndentedScope indent("CALL");
1045
+ Visit(node->expression());
1046
+ PrintArguments(node->arguments());
1047
+ }
1048
+
1049
+
1050
+ void AstPrinter::VisitCallNew(CallNew* node) {
1051
+ IndentedScope indent("CALL NEW");
1052
+ Visit(node->expression());
1053
+ PrintArguments(node->arguments());
1054
+ }
1055
+
1056
+
1057
+ void AstPrinter::VisitCallRuntime(CallRuntime* node) {
1058
+ PrintLiteralIndented("CALL RUNTIME ", node->name(), false);
1059
+ IndentedScope indent;
1060
+ PrintArguments(node->arguments());
1061
+ }
1062
+
1063
+
1064
+ void AstPrinter::VisitUnaryOperation(UnaryOperation* node) {
1065
+ PrintIndentedVisit(Token::Name(node->op()), node->expression());
1066
+ }
1067
+
1068
+
1069
+ void AstPrinter::VisitCountOperation(CountOperation* node) {
1070
+ EmbeddedVector<char, 128> buf;
1071
+ if (node->type()->IsKnown()) {
1072
+ OS::SNPrintF(buf, "%s %s (type = %s)",
1073
+ (node->is_prefix() ? "PRE" : "POST"),
1074
+ Token::Name(node->op()),
1075
+ StaticType::Type2String(node->type()));
1076
+ } else {
1077
+ OS::SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"),
1078
+ Token::Name(node->op()));
1079
+ }
1080
+ PrintIndentedVisit(buf.start(), node->expression());
1081
+ }
1082
+
1083
+
1084
+ void AstPrinter::VisitBinaryOperation(BinaryOperation* node) {
1085
+ IndentedScope indent(Token::Name(node->op()), node->type());
1086
+ Visit(node->left());
1087
+ Visit(node->right());
1088
+ }
1089
+
1090
+
1091
+ void AstPrinter::VisitCompareOperation(CompareOperation* node) {
1092
+ IndentedScope indent(Token::Name(node->op()), node->type());
1093
+ Visit(node->left());
1094
+ Visit(node->right());
1095
+ }
1096
+
1097
+
1098
+ void AstPrinter::VisitThisFunction(ThisFunction* node) {
1099
+ IndentedScope indent("THIS-FUNCTION");
1100
+ }
1101
+
1102
+
1103
+ TagScope::TagScope(JsonAstBuilder* builder, const char* name)
1104
+ : builder_(builder), next_(builder->tag()), has_body_(false) {
1105
+ if (next_ != NULL) {
1106
+ next_->use();
1107
+ builder->Print(",\n");
1108
+ }
1109
+ builder->set_tag(this);
1110
+ builder->PrintIndented("[");
1111
+ builder->Print("\"%s\"", name);
1112
+ builder->increase_indent(JsonAstBuilder::kTagIndentSize);
1113
+ }
1114
+
1115
+
1116
+ TagScope::~TagScope() {
1117
+ builder_->decrease_indent(JsonAstBuilder::kTagIndentSize);
1118
+ if (has_body_) {
1119
+ builder_->Print("\n");
1120
+ builder_->PrintIndented("]");
1121
+ } else {
1122
+ builder_->Print("]");
1123
+ }
1124
+ builder_->set_tag(next_);
1125
+ }
1126
+
1127
+
1128
+ AttributesScope::AttributesScope(JsonAstBuilder* builder)
1129
+ : builder_(builder), attribute_count_(0) {
1130
+ builder->set_attributes(this);
1131
+ builder->tag()->use();
1132
+ builder->Print(",\n");
1133
+ builder->PrintIndented("{");
1134
+ builder->increase_indent(JsonAstBuilder::kAttributesIndentSize);
1135
+ }
1136
+
1137
+
1138
+ AttributesScope::~AttributesScope() {
1139
+ builder_->decrease_indent(JsonAstBuilder::kAttributesIndentSize);
1140
+ if (attribute_count_ > 1) {
1141
+ builder_->Print("\n");
1142
+ builder_->PrintIndented("}");
1143
+ } else {
1144
+ builder_->Print("}");
1145
+ }
1146
+ builder_->set_attributes(NULL);
1147
+ }
1148
+
1149
+
1150
+ const char* JsonAstBuilder::BuildProgram(FunctionLiteral* program) {
1151
+ Init();
1152
+ Visit(program);
1153
+ Print("\n");
1154
+ return Output();
1155
+ }
1156
+
1157
+
1158
+ void JsonAstBuilder::AddAttributePrefix(const char* name) {
1159
+ if (attributes()->is_used()) {
1160
+ Print(",\n");
1161
+ PrintIndented("\"");
1162
+ } else {
1163
+ Print("\"");
1164
+ }
1165
+ Print("%s\":", name);
1166
+ attributes()->use();
1167
+ }
1168
+
1169
+
1170
+ void JsonAstBuilder::AddAttribute(const char* name, Handle<String> value) {
1171
+ SmartPointer<char> value_string = value->ToCString();
1172
+ AddAttributePrefix(name);
1173
+ Print("\"%s\"", *value_string);
1174
+ }
1175
+
1176
+
1177
+ void JsonAstBuilder::AddAttribute(const char* name, const char* value) {
1178
+ AddAttributePrefix(name);
1179
+ Print("\"%s\"", value);
1180
+ }
1181
+
1182
+
1183
+ void JsonAstBuilder::AddAttribute(const char* name, int value) {
1184
+ AddAttributePrefix(name);
1185
+ Print("%d", value);
1186
+ }
1187
+
1188
+
1189
+ void JsonAstBuilder::AddAttribute(const char* name, bool value) {
1190
+ AddAttributePrefix(name);
1191
+ Print(value ? "true" : "false");
1192
+ }
1193
+
1194
+
1195
+ void JsonAstBuilder::VisitBlock(Block* stmt) {
1196
+ TagScope tag(this, "Block");
1197
+ VisitStatements(stmt->statements());
1198
+ }
1199
+
1200
+
1201
+ void JsonAstBuilder::VisitExpressionStatement(ExpressionStatement* stmt) {
1202
+ TagScope tag(this, "ExpressionStatement");
1203
+ Visit(stmt->expression());
1204
+ }
1205
+
1206
+
1207
+ void JsonAstBuilder::VisitEmptyStatement(EmptyStatement* stmt) {
1208
+ TagScope tag(this, "EmptyStatement");
1209
+ }
1210
+
1211
+
1212
+ void JsonAstBuilder::VisitIfStatement(IfStatement* stmt) {
1213
+ TagScope tag(this, "IfStatement");
1214
+ Visit(stmt->condition());
1215
+ Visit(stmt->then_statement());
1216
+ Visit(stmt->else_statement());
1217
+ }
1218
+
1219
+
1220
+ void JsonAstBuilder::VisitContinueStatement(ContinueStatement* stmt) {
1221
+ TagScope tag(this, "ContinueStatement");
1222
+ }
1223
+
1224
+
1225
+ void JsonAstBuilder::VisitBreakStatement(BreakStatement* stmt) {
1226
+ TagScope tag(this, "BreakStatement");
1227
+ }
1228
+
1229
+
1230
+ void JsonAstBuilder::VisitReturnStatement(ReturnStatement* stmt) {
1231
+ TagScope tag(this, "ReturnStatement");
1232
+ Visit(stmt->expression());
1233
+ }
1234
+
1235
+
1236
+ void JsonAstBuilder::VisitWithEnterStatement(WithEnterStatement* stmt) {
1237
+ TagScope tag(this, "WithEnterStatement");
1238
+ Visit(stmt->expression());
1239
+ }
1240
+
1241
+
1242
+ void JsonAstBuilder::VisitWithExitStatement(WithExitStatement* stmt) {
1243
+ TagScope tag(this, "WithExitStatement");
1244
+ }
1245
+
1246
+
1247
+ void JsonAstBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
1248
+ TagScope tag(this, "SwitchStatement");
1249
+ }
1250
+
1251
+
1252
+ void JsonAstBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
1253
+ TagScope tag(this, "DoWhileStatement");
1254
+ Visit(stmt->body());
1255
+ Visit(stmt->cond());
1256
+ }
1257
+
1258
+
1259
+ void JsonAstBuilder::VisitWhileStatement(WhileStatement* stmt) {
1260
+ TagScope tag(this, "WhileStatement");
1261
+ Visit(stmt->cond());
1262
+ Visit(stmt->body());
1263
+ }
1264
+
1265
+
1266
+ void JsonAstBuilder::VisitForStatement(ForStatement* stmt) {
1267
+ TagScope tag(this, "ForStatement");
1268
+ if (stmt->init() != NULL) Visit(stmt->init());
1269
+ if (stmt->cond() != NULL) Visit(stmt->cond());
1270
+ Visit(stmt->body());
1271
+ if (stmt->next() != NULL) Visit(stmt->next());
1272
+ }
1273
+
1274
+
1275
+ void JsonAstBuilder::VisitForInStatement(ForInStatement* stmt) {
1276
+ TagScope tag(this, "ForInStatement");
1277
+ Visit(stmt->each());
1278
+ Visit(stmt->enumerable());
1279
+ Visit(stmt->body());
1280
+ }
1281
+
1282
+
1283
+ void JsonAstBuilder::VisitTryCatchStatement(TryCatchStatement* stmt) {
1284
+ TagScope tag(this, "TryCatchStatement");
1285
+ Visit(stmt->try_block());
1286
+ Visit(stmt->catch_var());
1287
+ Visit(stmt->catch_block());
1288
+ }
1289
+
1290
+
1291
+ void JsonAstBuilder::VisitTryFinallyStatement(TryFinallyStatement* stmt) {
1292
+ TagScope tag(this, "TryFinallyStatement");
1293
+ Visit(stmt->try_block());
1294
+ Visit(stmt->finally_block());
1295
+ }
1296
+
1297
+
1298
+ void JsonAstBuilder::VisitDebuggerStatement(DebuggerStatement* stmt) {
1299
+ TagScope tag(this, "DebuggerStatement");
1300
+ }
1301
+
1302
+
1303
+ void JsonAstBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
1304
+ TagScope tag(this, "FunctionLiteral");
1305
+ {
1306
+ AttributesScope attributes(this);
1307
+ AddAttribute("name", expr->name());
1308
+ }
1309
+ VisitDeclarations(expr->scope()->declarations());
1310
+ VisitStatements(expr->body());
1311
+ }
1312
+
1313
+
1314
+ void JsonAstBuilder::VisitFunctionBoilerplateLiteral(
1315
+ FunctionBoilerplateLiteral* expr) {
1316
+ TagScope tag(this, "FunctionBoilerplateLiteral");
1317
+ }
1318
+
1319
+
1320
+ void JsonAstBuilder::VisitConditional(Conditional* expr) {
1321
+ TagScope tag(this, "Conditional");
1322
+ }
1323
+
1324
+
1325
+ void JsonAstBuilder::VisitSlot(Slot* expr) {
1326
+ TagScope tag(this, "Slot");
1327
+ {
1328
+ AttributesScope attributes(this);
1329
+ switch (expr->type()) {
1330
+ case Slot::PARAMETER:
1331
+ AddAttribute("type", "PARAMETER");
1332
+ break;
1333
+ case Slot::LOCAL:
1334
+ AddAttribute("type", "LOCAL");
1335
+ break;
1336
+ case Slot::CONTEXT:
1337
+ AddAttribute("type", "CONTEXT");
1338
+ break;
1339
+ case Slot::LOOKUP:
1340
+ AddAttribute("type", "LOOKUP");
1341
+ break;
1342
+ }
1343
+ AddAttribute("index", expr->index());
1344
+ }
1345
+ }
1346
+
1347
+
1348
+ void JsonAstBuilder::VisitVariableProxy(VariableProxy* expr) {
1349
+ if (expr->var()->rewrite() == NULL) {
1350
+ TagScope tag(this, "VariableProxy");
1351
+ {
1352
+ AttributesScope attributes(this);
1353
+ AddAttribute("name", expr->name());
1354
+ AddAttribute("mode", Variable::Mode2String(expr->var()->mode()));
1355
+ }
1356
+ } else {
1357
+ Visit(expr->var()->rewrite());
1358
+ }
1359
+ }
1360
+
1361
+
1362
+ void JsonAstBuilder::VisitLiteral(Literal* expr) {
1363
+ TagScope tag(this, "Literal");
1364
+ {
1365
+ AttributesScope attributes(this);
1366
+ Handle<Object> handle = expr->handle();
1367
+ if (handle->IsString()) {
1368
+ AddAttribute("handle", Handle<String>(String::cast(*handle)));
1369
+ } else if (handle->IsSmi()) {
1370
+ AddAttribute("handle", Smi::cast(*handle)->value());
1371
+ }
1372
+ }
1373
+ }
1374
+
1375
+
1376
+ void JsonAstBuilder::VisitRegExpLiteral(RegExpLiteral* expr) {
1377
+ TagScope tag(this, "RegExpLiteral");
1378
+ }
1379
+
1380
+
1381
+ void JsonAstBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
1382
+ TagScope tag(this, "ObjectLiteral");
1383
+ }
1384
+
1385
+
1386
+ void JsonAstBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
1387
+ TagScope tag(this, "ArrayLiteral");
1388
+ }
1389
+
1390
+
1391
+ void JsonAstBuilder::VisitCatchExtensionObject(CatchExtensionObject* expr) {
1392
+ TagScope tag(this, "CatchExtensionObject");
1393
+ Visit(expr->key());
1394
+ Visit(expr->value());
1395
+ }
1396
+
1397
+
1398
+ void JsonAstBuilder::VisitAssignment(Assignment* expr) {
1399
+ TagScope tag(this, "Assignment");
1400
+ {
1401
+ AttributesScope attributes(this);
1402
+ AddAttribute("op", Token::Name(expr->op()));
1403
+ }
1404
+ Visit(expr->target());
1405
+ Visit(expr->value());
1406
+ }
1407
+
1408
+
1409
+ void JsonAstBuilder::VisitThrow(Throw* expr) {
1410
+ TagScope tag(this, "Throw");
1411
+ Visit(expr->exception());
1412
+ }
1413
+
1414
+
1415
+ void JsonAstBuilder::VisitProperty(Property* expr) {
1416
+ TagScope tag(this, "Property");
1417
+ {
1418
+ AttributesScope attributes(this);
1419
+ AddAttribute("type", expr->is_synthetic() ? "SYNTHETIC" : "NORMAL");
1420
+ }
1421
+ Visit(expr->obj());
1422
+ Visit(expr->key());
1423
+ }
1424
+
1425
+
1426
+ void JsonAstBuilder::VisitCall(Call* expr) {
1427
+ TagScope tag(this, "Call");
1428
+ Visit(expr->expression());
1429
+ VisitExpressions(expr->arguments());
1430
+ }
1431
+
1432
+
1433
+ void JsonAstBuilder::VisitCallNew(CallNew* expr) {
1434
+ TagScope tag(this, "CallNew");
1435
+ Visit(expr->expression());
1436
+ VisitExpressions(expr->arguments());
1437
+ }
1438
+
1439
+
1440
+ void JsonAstBuilder::VisitCallRuntime(CallRuntime* expr) {
1441
+ TagScope tag(this, "CallRuntime");
1442
+ {
1443
+ AttributesScope attributes(this);
1444
+ AddAttribute("name", expr->name());
1445
+ }
1446
+ VisitExpressions(expr->arguments());
1447
+ }
1448
+
1449
+
1450
+ void JsonAstBuilder::VisitUnaryOperation(UnaryOperation* expr) {
1451
+ TagScope tag(this, "UnaryOperation");
1452
+ {
1453
+ AttributesScope attributes(this);
1454
+ AddAttribute("op", Token::Name(expr->op()));
1455
+ }
1456
+ Visit(expr->expression());
1457
+ }
1458
+
1459
+
1460
+ void JsonAstBuilder::VisitCountOperation(CountOperation* expr) {
1461
+ TagScope tag(this, "CountOperation");
1462
+ {
1463
+ AttributesScope attributes(this);
1464
+ AddAttribute("is_prefix", expr->is_prefix());
1465
+ AddAttribute("op", Token::Name(expr->op()));
1466
+ }
1467
+ Visit(expr->expression());
1468
+ }
1469
+
1470
+
1471
+ void JsonAstBuilder::VisitBinaryOperation(BinaryOperation* expr) {
1472
+ TagScope tag(this, "BinaryOperation");
1473
+ {
1474
+ AttributesScope attributes(this);
1475
+ AddAttribute("op", Token::Name(expr->op()));
1476
+ }
1477
+ Visit(expr->left());
1478
+ Visit(expr->right());
1479
+ }
1480
+
1481
+
1482
+ void JsonAstBuilder::VisitCompareOperation(CompareOperation* expr) {
1483
+ TagScope tag(this, "CompareOperation");
1484
+ {
1485
+ AttributesScope attributes(this);
1486
+ AddAttribute("op", Token::Name(expr->op()));
1487
+ }
1488
+ Visit(expr->left());
1489
+ Visit(expr->right());
1490
+ }
1491
+
1492
+
1493
+ void JsonAstBuilder::VisitThisFunction(ThisFunction* expr) {
1494
+ TagScope tag(this, "ThisFunction");
1495
+ }
1496
+
1497
+
1498
+ void JsonAstBuilder::VisitDeclaration(Declaration* decl) {
1499
+ TagScope tag(this, "Declaration");
1500
+ {
1501
+ AttributesScope attributes(this);
1502
+ AddAttribute("mode", Variable::Mode2String(decl->mode()));
1503
+ }
1504
+ Visit(decl->proxy());
1505
+ if (decl->fun() != NULL) Visit(decl->fun());
1506
+ }
1507
+
1508
+
1509
+ #endif // DEBUG
1510
+
1511
+ } } // namespace v8::internal