therubyracer 0.9.0beta2 → 0.9.0beta3

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 (920) hide show
  1. data/.gitmodules +3 -0
  2. data/ext/v8/upstream/Makefile +1 -2
  3. data/ext/v8/upstream/v8/.gitignore +33 -0
  4. data/ext/v8/upstream/v8/AUTHORS +42 -0
  5. data/ext/v8/upstream/v8/ChangeLog +2663 -0
  6. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE +0 -0
  7. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.strongtalk +0 -0
  8. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.v8 +0 -0
  9. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.valgrind +0 -0
  10. data/ext/v8/upstream/v8/SConstruct +1473 -0
  11. data/ext/v8/upstream/{3.1.8 → v8}/build/README.txt +0 -0
  12. data/ext/v8/upstream/{3.1.8 → v8}/build/all.gyp +0 -0
  13. data/ext/v8/upstream/{3.1.8 → v8}/build/armu.gypi +0 -0
  14. data/ext/v8/upstream/{3.1.8 → v8}/build/common.gypi +0 -0
  15. data/ext/v8/upstream/{3.1.8 → v8}/build/gyp_v8 +0 -0
  16. data/ext/v8/upstream/v8/include/v8-debug.h +394 -0
  17. data/ext/v8/upstream/v8/include/v8-preparser.h +116 -0
  18. data/ext/v8/upstream/v8/include/v8-profiler.h +505 -0
  19. data/ext/v8/upstream/v8/include/v8-testing.h +104 -0
  20. data/ext/v8/upstream/v8/include/v8.h +4000 -0
  21. data/ext/v8/upstream/{3.1.8 → v8}/include/v8stdint.h +0 -0
  22. data/ext/v8/upstream/v8/preparser/SConscript +38 -0
  23. data/ext/v8/upstream/v8/preparser/preparser-process.cc +169 -0
  24. data/ext/v8/upstream/v8/src/SConscript +380 -0
  25. data/ext/v8/upstream/v8/src/accessors.cc +766 -0
  26. data/ext/v8/upstream/{3.1.8 → v8}/src/accessors.h +0 -0
  27. data/ext/v8/upstream/v8/src/allocation-inl.h +49 -0
  28. data/ext/v8/upstream/v8/src/allocation.cc +122 -0
  29. data/ext/v8/upstream/v8/src/allocation.h +143 -0
  30. data/ext/v8/upstream/v8/src/api.cc +5678 -0
  31. data/ext/v8/upstream/v8/src/api.h +572 -0
  32. data/ext/v8/upstream/{3.1.8 → v8}/src/apinatives.js +0 -0
  33. data/ext/v8/upstream/v8/src/apiutils.h +73 -0
  34. data/ext/v8/upstream/v8/src/arguments.h +116 -0
  35. data/ext/v8/upstream/v8/src/arm/assembler-arm-inl.h +353 -0
  36. data/ext/v8/upstream/v8/src/arm/assembler-arm.cc +2877 -0
  37. data/ext/v8/upstream/v8/src/arm/assembler-arm.h +1382 -0
  38. data/ext/v8/upstream/v8/src/arm/builtins-arm.cc +1634 -0
  39. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.cc +6917 -0
  40. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.h +623 -0
  41. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/codegen-arm-inl.h +0 -0
  42. data/ext/v8/upstream/v8/src/arm/codegen-arm.cc +7437 -0
  43. data/ext/v8/upstream/v8/src/arm/codegen-arm.h +595 -0
  44. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/constants-arm.cc +0 -0
  45. data/ext/v8/upstream/v8/src/arm/constants-arm.h +778 -0
  46. data/ext/v8/upstream/v8/src/arm/cpu-arm.cc +149 -0
  47. data/ext/v8/upstream/v8/src/arm/debug-arm.cc +317 -0
  48. data/ext/v8/upstream/v8/src/arm/deoptimizer-arm.cc +737 -0
  49. data/ext/v8/upstream/v8/src/arm/disasm-arm.cc +1503 -0
  50. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/frames-arm.cc +0 -0
  51. data/ext/v8/upstream/v8/src/arm/frames-arm.h +168 -0
  52. data/ext/v8/upstream/v8/src/arm/full-codegen-arm.cc +4374 -0
  53. data/ext/v8/upstream/v8/src/arm/ic-arm.cc +1793 -0
  54. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/jump-target-arm.cc +0 -0
  55. data/ext/v8/upstream/v8/src/arm/lithium-arm.cc +2120 -0
  56. data/ext/v8/upstream/v8/src/arm/lithium-arm.h +2179 -0
  57. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.cc +4132 -0
  58. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.h +329 -0
  59. data/ext/v8/upstream/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  60. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/lithium-gap-resolver-arm.h +0 -0
  61. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.cc +2939 -0
  62. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.h +1071 -0
  63. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  64. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  65. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm-inl.h +0 -0
  66. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.cc +0 -0
  67. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.h +0 -0
  68. data/ext/v8/upstream/v8/src/arm/simulator-arm.cc +3288 -0
  69. data/ext/v8/upstream/v8/src/arm/simulator-arm.h +413 -0
  70. data/ext/v8/upstream/v8/src/arm/stub-cache-arm.cc +4034 -0
  71. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/virtual-frame-arm-inl.h +0 -0
  72. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.cc +843 -0
  73. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.h +523 -0
  74. data/ext/v8/upstream/v8/src/array.js +1249 -0
  75. data/ext/v8/upstream/v8/src/assembler.cc +1067 -0
  76. data/ext/v8/upstream/v8/src/assembler.h +823 -0
  77. data/ext/v8/upstream/v8/src/ast-inl.h +112 -0
  78. data/ext/v8/upstream/v8/src/ast.cc +1078 -0
  79. data/ext/v8/upstream/v8/src/ast.h +2234 -0
  80. data/ext/v8/upstream/v8/src/atomicops.h +167 -0
  81. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_arm_gcc.h +0 -0
  82. data/ext/v8/upstream/v8/src/atomicops_internals_mips_gcc.h +169 -0
  83. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.cc +0 -0
  84. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.h +0 -0
  85. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_macosx.h +0 -0
  86. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_msvc.h +0 -0
  87. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.cc +0 -0
  88. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.h +0 -0
  89. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.cc +0 -0
  90. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.h +0 -0
  91. data/ext/v8/upstream/v8/src/bootstrapper.cc +2138 -0
  92. data/ext/v8/upstream/v8/src/bootstrapper.h +185 -0
  93. data/ext/v8/upstream/v8/src/builtins.cc +1708 -0
  94. data/ext/v8/upstream/v8/src/builtins.h +368 -0
  95. data/ext/v8/upstream/{3.1.8 → v8}/src/bytecodes-irregexp.h +0 -0
  96. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.cc +0 -0
  97. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.h +0 -0
  98. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates-inl.h +0 -0
  99. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates.h +0 -0
  100. data/ext/v8/upstream/v8/src/checks.cc +110 -0
  101. data/ext/v8/upstream/v8/src/checks.h +296 -0
  102. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue-inl.h +0 -0
  103. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.cc +0 -0
  104. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.h +0 -0
  105. data/ext/v8/upstream/v8/src/code-stubs.cc +240 -0
  106. data/ext/v8/upstream/v8/src/code-stubs.h +971 -0
  107. data/ext/v8/upstream/{3.1.8 → v8}/src/code.h +0 -0
  108. data/ext/v8/upstream/v8/src/codegen-inl.h +68 -0
  109. data/ext/v8/upstream/v8/src/codegen.cc +505 -0
  110. data/ext/v8/upstream/v8/src/codegen.h +245 -0
  111. data/ext/v8/upstream/v8/src/compilation-cache.cc +540 -0
  112. data/ext/v8/upstream/v8/src/compilation-cache.h +287 -0
  113. data/ext/v8/upstream/v8/src/compiler.cc +792 -0
  114. data/ext/v8/upstream/v8/src/compiler.h +307 -0
  115. data/ext/v8/upstream/v8/src/contexts.cc +327 -0
  116. data/ext/v8/upstream/v8/src/contexts.h +382 -0
  117. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions-inl.h +0 -0
  118. data/ext/v8/upstream/v8/src/conversions.cc +1125 -0
  119. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions.h +0 -0
  120. data/ext/v8/upstream/v8/src/counters.cc +93 -0
  121. data/ext/v8/upstream/v8/src/counters.h +254 -0
  122. data/ext/v8/upstream/v8/src/cpu-profiler-inl.h +101 -0
  123. data/ext/v8/upstream/v8/src/cpu-profiler.cc +606 -0
  124. data/ext/v8/upstream/v8/src/cpu-profiler.h +305 -0
  125. data/ext/v8/upstream/v8/src/cpu.h +67 -0
  126. data/ext/v8/upstream/v8/src/d8-debug.cc +367 -0
  127. data/ext/v8/upstream/v8/src/d8-debug.h +158 -0
  128. data/ext/v8/upstream/v8/src/d8-posix.cc +695 -0
  129. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-readline.cc +0 -0
  130. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-windows.cc +0 -0
  131. data/ext/v8/upstream/v8/src/d8.cc +796 -0
  132. data/ext/v8/upstream/v8/src/d8.gyp +88 -0
  133. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.h +0 -0
  134. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.js +0 -0
  135. data/ext/v8/upstream/{3.1.8 → v8}/src/data-flow.cc +0 -0
  136. data/ext/v8/upstream/v8/src/data-flow.h +379 -0
  137. data/ext/v8/upstream/{3.1.8 → v8}/src/date.js +0 -0
  138. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser-inl.h +0 -0
  139. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser.cc +0 -0
  140. data/ext/v8/upstream/v8/src/dateparser.h +265 -0
  141. data/ext/v8/upstream/v8/src/debug-agent.cc +447 -0
  142. data/ext/v8/upstream/v8/src/debug-agent.h +129 -0
  143. data/ext/v8/upstream/{3.1.8 → v8}/src/debug-debugger.js +0 -0
  144. data/ext/v8/upstream/v8/src/debug.cc +3188 -0
  145. data/ext/v8/upstream/v8/src/debug.h +1055 -0
  146. data/ext/v8/upstream/v8/src/deoptimizer.cc +1296 -0
  147. data/ext/v8/upstream/v8/src/deoptimizer.h +629 -0
  148. data/ext/v8/upstream/v8/src/disasm.h +80 -0
  149. data/ext/v8/upstream/v8/src/disassembler.cc +339 -0
  150. data/ext/v8/upstream/{3.1.8 → v8}/src/disassembler.h +0 -0
  151. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.cc +0 -0
  152. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.h +0 -0
  153. data/ext/v8/upstream/{3.1.8 → v8}/src/double.h +0 -0
  154. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.cc +0 -0
  155. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.h +0 -0
  156. data/ext/v8/upstream/v8/src/execution.cc +791 -0
  157. data/ext/v8/upstream/v8/src/execution.h +291 -0
  158. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.cc +250 -0
  159. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.h +89 -0
  160. data/ext/v8/upstream/v8/src/extensions/experimental/experimental.gyp +55 -0
  161. data/ext/v8/upstream/v8/src/extensions/experimental/i18n-extension.cc +284 -0
  162. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/experimental/i18n-extension.h +0 -0
  163. data/ext/v8/upstream/v8/src/extensions/externalize-string-extension.cc +141 -0
  164. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/externalize-string-extension.h +0 -0
  165. data/ext/v8/upstream/v8/src/extensions/gc-extension.cc +58 -0
  166. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/gc-extension.h +0 -0
  167. data/ext/v8/upstream/v8/src/factory.cc +1194 -0
  168. data/ext/v8/upstream/v8/src/factory.h +436 -0
  169. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.cc +0 -0
  170. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.h +0 -0
  171. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.cc +0 -0
  172. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.h +0 -0
  173. data/ext/v8/upstream/v8/src/flag-definitions.h +556 -0
  174. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.cc +0 -0
  175. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.h +0 -0
  176. data/ext/v8/upstream/v8/src/frame-element.cc +37 -0
  177. data/ext/v8/upstream/v8/src/frame-element.h +269 -0
  178. data/ext/v8/upstream/v8/src/frames-inl.h +236 -0
  179. data/ext/v8/upstream/v8/src/frames.cc +1273 -0
  180. data/ext/v8/upstream/v8/src/frames.h +854 -0
  181. data/ext/v8/upstream/v8/src/full-codegen.cc +1385 -0
  182. data/ext/v8/upstream/v8/src/full-codegen.h +753 -0
  183. data/ext/v8/upstream/v8/src/func-name-inferrer.cc +91 -0
  184. data/ext/v8/upstream/v8/src/func-name-inferrer.h +111 -0
  185. data/ext/v8/upstream/v8/src/gdb-jit.cc +1548 -0
  186. data/ext/v8/upstream/{3.1.8 → v8}/src/gdb-jit.h +0 -0
  187. data/ext/v8/upstream/v8/src/global-handles.cc +596 -0
  188. data/ext/v8/upstream/v8/src/global-handles.h +239 -0
  189. data/ext/v8/upstream/v8/src/globals.h +325 -0
  190. data/ext/v8/upstream/v8/src/handles-inl.h +177 -0
  191. data/ext/v8/upstream/v8/src/handles.cc +965 -0
  192. data/ext/v8/upstream/v8/src/handles.h +372 -0
  193. data/ext/v8/upstream/{3.1.8 → v8}/src/hashmap.cc +0 -0
  194. data/ext/v8/upstream/v8/src/hashmap.h +121 -0
  195. data/ext/v8/upstream/v8/src/heap-inl.h +703 -0
  196. data/ext/v8/upstream/v8/src/heap-profiler.cc +1173 -0
  197. data/ext/v8/upstream/v8/src/heap-profiler.h +396 -0
  198. data/ext/v8/upstream/v8/src/heap.cc +5856 -0
  199. data/ext/v8/upstream/v8/src/heap.h +2264 -0
  200. data/ext/v8/upstream/v8/src/hydrogen-instructions.cc +1639 -0
  201. data/ext/v8/upstream/v8/src/hydrogen-instructions.h +3657 -0
  202. data/ext/v8/upstream/v8/src/hydrogen.cc +6011 -0
  203. data/ext/v8/upstream/v8/src/hydrogen.h +1137 -0
  204. data/ext/v8/upstream/v8/src/ia32/assembler-ia32-inl.h +430 -0
  205. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.cc +2846 -0
  206. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.h +1159 -0
  207. data/ext/v8/upstream/v8/src/ia32/builtins-ia32.cc +1596 -0
  208. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.cc +6549 -0
  209. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.h +495 -0
  210. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/codegen-ia32-inl.h +0 -0
  211. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.cc +10385 -0
  212. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.h +801 -0
  213. data/ext/v8/upstream/v8/src/ia32/cpu-ia32.cc +88 -0
  214. data/ext/v8/upstream/v8/src/ia32/debug-ia32.cc +312 -0
  215. data/ext/v8/upstream/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  216. data/ext/v8/upstream/v8/src/ia32/disasm-ia32.cc +1620 -0
  217. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/frames-ia32.cc +0 -0
  218. data/ext/v8/upstream/v8/src/ia32/frames-ia32.h +140 -0
  219. data/ext/v8/upstream/v8/src/ia32/full-codegen-ia32.cc +4357 -0
  220. data/ext/v8/upstream/v8/src/ia32/ic-ia32.cc +1779 -0
  221. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/jump-target-ia32.cc +0 -0
  222. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.cc +4158 -0
  223. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.h +318 -0
  224. data/ext/v8/upstream/v8/src/ia32/lithium-gap-resolver-ia32.cc +466 -0
  225. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/lithium-gap-resolver-ia32.h +0 -0
  226. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.cc +2181 -0
  227. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.h +2235 -0
  228. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.cc +2056 -0
  229. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.h +807 -0
  230. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.cc +1264 -0
  231. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  232. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32-inl.h +0 -0
  233. data/ext/v8/upstream/v8/src/ia32/register-allocator-ia32.cc +157 -0
  234. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32.h +0 -0
  235. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/simulator-ia32.cc +0 -0
  236. data/ext/v8/upstream/v8/src/ia32/simulator-ia32.h +72 -0
  237. data/ext/v8/upstream/v8/src/ia32/stub-cache-ia32.cc +3711 -0
  238. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.cc +1366 -0
  239. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.h +650 -0
  240. data/ext/v8/upstream/v8/src/ic-inl.h +130 -0
  241. data/ext/v8/upstream/v8/src/ic.cc +2389 -0
  242. data/ext/v8/upstream/v8/src/ic.h +675 -0
  243. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.cc +0 -0
  244. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.h +0 -0
  245. data/ext/v8/upstream/v8/src/interpreter-irregexp.cc +659 -0
  246. data/ext/v8/upstream/v8/src/interpreter-irregexp.h +49 -0
  247. data/ext/v8/upstream/v8/src/isolate.cc +883 -0
  248. data/ext/v8/upstream/v8/src/isolate.h +1306 -0
  249. data/ext/v8/upstream/v8/src/json.js +342 -0
  250. data/ext/v8/upstream/v8/src/jsregexp.cc +5371 -0
  251. data/ext/v8/upstream/v8/src/jsregexp.h +1483 -0
  252. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-heavy-inl.h +0 -0
  253. data/ext/v8/upstream/v8/src/jump-target-heavy.cc +427 -0
  254. data/ext/v8/upstream/v8/src/jump-target-heavy.h +238 -0
  255. data/ext/v8/upstream/v8/src/jump-target-inl.h +48 -0
  256. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light-inl.h +0 -0
  257. data/ext/v8/upstream/v8/src/jump-target-light.cc +111 -0
  258. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light.h +0 -0
  259. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.cc +0 -0
  260. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.h +0 -0
  261. data/ext/v8/upstream/{3.1.8 → v8}/src/list-inl.h +0 -0
  262. data/ext/v8/upstream/{3.1.8 → v8}/src/list.h +0 -0
  263. data/ext/v8/upstream/v8/src/lithium-allocator-inl.h +142 -0
  264. data/ext/v8/upstream/v8/src/lithium-allocator.cc +2105 -0
  265. data/ext/v8/upstream/v8/src/lithium-allocator.h +630 -0
  266. data/ext/v8/upstream/v8/src/lithium.cc +169 -0
  267. data/ext/v8/upstream/{3.1.8 → v8}/src/lithium.h +0 -0
  268. data/ext/v8/upstream/{3.1.8 → v8}/src/liveedit-debugger.js +0 -0
  269. data/ext/v8/upstream/v8/src/liveedit.cc +1693 -0
  270. data/ext/v8/upstream/v8/src/liveedit.h +179 -0
  271. data/ext/v8/upstream/{3.1.8 → v8}/src/liveobjectlist-inl.h +0 -0
  272. data/ext/v8/upstream/v8/src/liveobjectlist.cc +2589 -0
  273. data/ext/v8/upstream/v8/src/liveobjectlist.h +322 -0
  274. data/ext/v8/upstream/{3.1.8 → v8}/src/log-inl.h +0 -0
  275. data/ext/v8/upstream/v8/src/log-utils.cc +423 -0
  276. data/ext/v8/upstream/v8/src/log-utils.h +229 -0
  277. data/ext/v8/upstream/v8/src/log.cc +1666 -0
  278. data/ext/v8/upstream/v8/src/log.h +446 -0
  279. data/ext/v8/upstream/{3.1.8 → v8}/src/macro-assembler.h +0 -0
  280. data/ext/v8/upstream/{3.1.8 → v8}/src/macros.py +0 -0
  281. data/ext/v8/upstream/v8/src/mark-compact.cc +3092 -0
  282. data/ext/v8/upstream/v8/src/mark-compact.h +506 -0
  283. data/ext/v8/upstream/{3.1.8 → v8}/src/math.js +0 -0
  284. data/ext/v8/upstream/v8/src/messages.cc +166 -0
  285. data/ext/v8/upstream/{3.1.8 → v8}/src/messages.h +0 -0
  286. data/ext/v8/upstream/v8/src/messages.js +1090 -0
  287. data/ext/v8/upstream/v8/src/mips/assembler-mips-inl.h +335 -0
  288. data/ext/v8/upstream/v8/src/mips/assembler-mips.cc +2093 -0
  289. data/ext/v8/upstream/v8/src/mips/assembler-mips.h +1066 -0
  290. data/ext/v8/upstream/v8/src/mips/builtins-mips.cc +148 -0
  291. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.cc +752 -0
  292. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.h +511 -0
  293. data/ext/v8/upstream/v8/src/mips/codegen-mips-inl.h +64 -0
  294. data/ext/v8/upstream/v8/src/mips/codegen-mips.cc +1213 -0
  295. data/ext/v8/upstream/v8/src/mips/codegen-mips.h +633 -0
  296. data/ext/v8/upstream/v8/src/mips/constants-mips.cc +352 -0
  297. data/ext/v8/upstream/v8/src/mips/constants-mips.h +723 -0
  298. data/ext/v8/upstream/v8/src/mips/cpu-mips.cc +90 -0
  299. data/ext/v8/upstream/v8/src/mips/debug-mips.cc +155 -0
  300. data/ext/v8/upstream/v8/src/mips/deoptimizer-mips.cc +91 -0
  301. data/ext/v8/upstream/v8/src/mips/disasm-mips.cc +1023 -0
  302. data/ext/v8/upstream/v8/src/mips/frames-mips.cc +48 -0
  303. data/ext/v8/upstream/v8/src/mips/frames-mips.h +179 -0
  304. data/ext/v8/upstream/v8/src/mips/full-codegen-mips.cc +727 -0
  305. data/ext/v8/upstream/v8/src/mips/ic-mips.cc +244 -0
  306. data/ext/v8/upstream/v8/src/mips/jump-target-mips.cc +80 -0
  307. data/ext/v8/upstream/v8/src/mips/lithium-codegen-mips.h +65 -0
  308. data/ext/v8/upstream/v8/src/mips/lithium-mips.h +304 -0
  309. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.cc +3327 -0
  310. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.h +1058 -0
  311. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  312. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  313. data/ext/v8/upstream/v8/src/mips/register-allocator-mips-inl.h +134 -0
  314. data/ext/v8/upstream/{3.1.8 → v8}/src/mips/register-allocator-mips.cc +0 -0
  315. data/ext/v8/upstream/v8/src/mips/register-allocator-mips.h +47 -0
  316. data/ext/v8/upstream/v8/src/mips/simulator-mips.cc +2438 -0
  317. data/ext/v8/upstream/v8/src/mips/simulator-mips.h +394 -0
  318. data/ext/v8/upstream/v8/src/mips/stub-cache-mips.cc +601 -0
  319. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips-inl.h +58 -0
  320. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.cc +307 -0
  321. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.h +530 -0
  322. data/ext/v8/upstream/v8/src/mirror-debugger.js +2381 -0
  323. data/ext/v8/upstream/v8/src/mksnapshot.cc +256 -0
  324. data/ext/v8/upstream/{3.1.8 → v8}/src/natives.h +0 -0
  325. data/ext/v8/upstream/v8/src/objects-debug.cc +722 -0
  326. data/ext/v8/upstream/v8/src/objects-inl.h +4166 -0
  327. data/ext/v8/upstream/v8/src/objects-printer.cc +801 -0
  328. data/ext/v8/upstream/v8/src/objects-visiting.cc +142 -0
  329. data/ext/v8/upstream/v8/src/objects-visiting.h +422 -0
  330. data/ext/v8/upstream/v8/src/objects.cc +10296 -0
  331. data/ext/v8/upstream/v8/src/objects.h +6662 -0
  332. data/ext/v8/upstream/v8/src/parser.cc +5168 -0
  333. data/ext/v8/upstream/v8/src/parser.h +823 -0
  334. data/ext/v8/upstream/v8/src/platform-cygwin.cc +811 -0
  335. data/ext/v8/upstream/v8/src/platform-freebsd.cc +854 -0
  336. data/ext/v8/upstream/v8/src/platform-linux.cc +1120 -0
  337. data/ext/v8/upstream/v8/src/platform-macos.cc +865 -0
  338. data/ext/v8/upstream/v8/src/platform-nullos.cc +504 -0
  339. data/ext/v8/upstream/v8/src/platform-openbsd.cc +672 -0
  340. data/ext/v8/upstream/v8/src/platform-posix.cc +424 -0
  341. data/ext/v8/upstream/v8/src/platform-solaris.cc +796 -0
  342. data/ext/v8/upstream/v8/src/platform-tls-mac.h +62 -0
  343. data/ext/v8/upstream/v8/src/platform-tls-win32.h +62 -0
  344. data/ext/v8/upstream/v8/src/platform-tls.h +50 -0
  345. data/ext/v8/upstream/v8/src/platform-win32.cc +2072 -0
  346. data/ext/v8/upstream/v8/src/platform.h +693 -0
  347. data/ext/v8/upstream/v8/src/preparse-data.cc +185 -0
  348. data/ext/v8/upstream/{3.1.8 → v8}/src/preparse-data.h +0 -0
  349. data/ext/v8/upstream/v8/src/preparser-api.cc +219 -0
  350. data/ext/v8/upstream/v8/src/preparser.cc +1205 -0
  351. data/ext/v8/upstream/{3.1.8 → v8}/src/preparser.h +0 -0
  352. data/ext/v8/upstream/v8/src/prettyprinter.cc +1530 -0
  353. data/ext/v8/upstream/v8/src/prettyprinter.h +223 -0
  354. data/ext/v8/upstream/{3.1.8 → v8}/src/profile-generator-inl.h +0 -0
  355. data/ext/v8/upstream/v8/src/profile-generator.cc +3095 -0
  356. data/ext/v8/upstream/v8/src/profile-generator.h +1125 -0
  357. data/ext/v8/upstream/v8/src/property.cc +102 -0
  358. data/ext/v8/upstream/v8/src/property.h +348 -0
  359. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
  360. data/ext/v8/upstream/v8/src/regexp-macro-assembler-irregexp.cc +470 -0
  361. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp.h +0 -0
  362. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.cc +0 -0
  363. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.h +0 -0
  364. data/ext/v8/upstream/v8/src/regexp-macro-assembler.cc +266 -0
  365. data/ext/v8/upstream/v8/src/regexp-macro-assembler.h +236 -0
  366. data/ext/v8/upstream/v8/src/regexp-stack.cc +111 -0
  367. data/ext/v8/upstream/v8/src/regexp-stack.h +147 -0
  368. data/ext/v8/upstream/v8/src/regexp.js +483 -0
  369. data/ext/v8/upstream/v8/src/register-allocator-inl.h +141 -0
  370. data/ext/v8/upstream/v8/src/register-allocator.cc +98 -0
  371. data/ext/v8/upstream/v8/src/register-allocator.h +310 -0
  372. data/ext/v8/upstream/v8/src/rewriter.cc +1024 -0
  373. data/ext/v8/upstream/{3.1.8 → v8}/src/rewriter.h +0 -0
  374. data/ext/v8/upstream/v8/src/runtime-profiler.cc +478 -0
  375. data/ext/v8/upstream/v8/src/runtime-profiler.h +192 -0
  376. data/ext/v8/upstream/v8/src/runtime.cc +11949 -0
  377. data/ext/v8/upstream/v8/src/runtime.h +643 -0
  378. data/ext/v8/upstream/{3.1.8 → v8}/src/runtime.js +0 -0
  379. data/ext/v8/upstream/v8/src/safepoint-table.cc +256 -0
  380. data/ext/v8/upstream/v8/src/safepoint-table.h +269 -0
  381. data/ext/v8/upstream/v8/src/scanner-base.cc +964 -0
  382. data/ext/v8/upstream/v8/src/scanner-base.h +664 -0
  383. data/ext/v8/upstream/v8/src/scanner.cc +584 -0
  384. data/ext/v8/upstream/v8/src/scanner.h +196 -0
  385. data/ext/v8/upstream/v8/src/scopeinfo.cc +631 -0
  386. data/ext/v8/upstream/v8/src/scopeinfo.h +249 -0
  387. data/ext/v8/upstream/v8/src/scopes.cc +1093 -0
  388. data/ext/v8/upstream/v8/src/scopes.h +508 -0
  389. data/ext/v8/upstream/v8/src/serialize.cc +1574 -0
  390. data/ext/v8/upstream/v8/src/serialize.h +589 -0
  391. data/ext/v8/upstream/{3.1.8 → v8}/src/shell.h +0 -0
  392. data/ext/v8/upstream/{3.1.8 → v8}/src/simulator.h +0 -0
  393. data/ext/v8/upstream/v8/src/small-pointer-list.h +163 -0
  394. data/ext/v8/upstream/{3.1.8 → v8}/src/smart-pointer.h +0 -0
  395. data/ext/v8/upstream/v8/src/snapshot-common.cc +82 -0
  396. data/ext/v8/upstream/{3.1.8 → v8}/src/snapshot-empty.cc +0 -0
  397. data/ext/v8/upstream/v8/src/snapshot.h +73 -0
  398. data/ext/v8/upstream/v8/src/spaces-inl.h +529 -0
  399. data/ext/v8/upstream/v8/src/spaces.cc +3147 -0
  400. data/ext/v8/upstream/v8/src/spaces.h +2368 -0
  401. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree-inl.h +0 -0
  402. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree.h +0 -0
  403. data/ext/v8/upstream/v8/src/string-search.cc +41 -0
  404. data/ext/v8/upstream/v8/src/string-search.h +568 -0
  405. data/ext/v8/upstream/v8/src/string-stream.cc +592 -0
  406. data/ext/v8/upstream/{3.1.8 → v8}/src/string-stream.h +0 -0
  407. data/ext/v8/upstream/v8/src/string.js +915 -0
  408. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.cc +0 -0
  409. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.h +0 -0
  410. data/ext/v8/upstream/v8/src/stub-cache.cc +1940 -0
  411. data/ext/v8/upstream/v8/src/stub-cache.h +866 -0
  412. data/ext/v8/upstream/{3.1.8 → v8}/src/third_party/valgrind/valgrind.h +0 -0
  413. data/ext/v8/upstream/v8/src/token.cc +63 -0
  414. data/ext/v8/upstream/v8/src/token.h +288 -0
  415. data/ext/v8/upstream/v8/src/top.cc +983 -0
  416. data/ext/v8/upstream/v8/src/type-info.cc +472 -0
  417. data/ext/v8/upstream/v8/src/type-info.h +290 -0
  418. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue-inl.h +0 -0
  419. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue.h +0 -0
  420. data/ext/v8/upstream/{3.1.8 → v8}/src/unicode-inl.h +0 -0
  421. data/ext/v8/upstream/v8/src/unicode.cc +1624 -0
  422. data/ext/v8/upstream/v8/src/unicode.h +280 -0
  423. data/ext/v8/upstream/{3.1.8 → v8}/src/uri.js +0 -0
  424. data/ext/v8/upstream/{3.1.8 → v8}/src/utils.cc +0 -0
  425. data/ext/v8/upstream/v8/src/utils.h +796 -0
  426. data/ext/v8/upstream/v8/src/v8-counters.cc +62 -0
  427. data/ext/v8/upstream/v8/src/v8-counters.h +311 -0
  428. data/ext/v8/upstream/v8/src/v8.cc +215 -0
  429. data/ext/v8/upstream/v8/src/v8.h +130 -0
  430. data/ext/v8/upstream/{3.1.8 → v8}/src/v8checks.h +0 -0
  431. data/ext/v8/upstream/{3.1.8 → v8}/src/v8dll-main.cc +0 -0
  432. data/ext/v8/upstream/v8/src/v8globals.h +486 -0
  433. data/ext/v8/upstream/{3.1.8/src/memory.h → v8/src/v8memory.h} +0 -0
  434. data/ext/v8/upstream/v8/src/v8natives.js +1293 -0
  435. data/ext/v8/upstream/{3.1.8 → v8}/src/v8preparserdll-main.cc +0 -0
  436. data/ext/v8/upstream/v8/src/v8threads.cc +453 -0
  437. data/ext/v8/upstream/v8/src/v8threads.h +164 -0
  438. data/ext/v8/upstream/v8/src/v8utils.h +317 -0
  439. data/ext/v8/upstream/{3.1.8 → v8}/src/variables.cc +0 -0
  440. data/ext/v8/upstream/v8/src/variables.h +212 -0
  441. data/ext/v8/upstream/v8/src/version.cc +116 -0
  442. data/ext/v8/upstream/v8/src/version.h +68 -0
  443. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy-inl.h +0 -0
  444. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy.cc +0 -0
  445. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-inl.h +0 -0
  446. data/ext/v8/upstream/v8/src/virtual-frame-light-inl.h +171 -0
  447. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-light.cc +0 -0
  448. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.cc +0 -0
  449. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.h +0 -0
  450. data/ext/v8/upstream/v8/src/vm-state-inl.h +138 -0
  451. data/ext/v8/upstream/v8/src/vm-state.h +70 -0
  452. data/ext/v8/upstream/v8/src/win32-headers.h +96 -0
  453. data/ext/v8/upstream/v8/src/x64/assembler-x64-inl.h +456 -0
  454. data/ext/v8/upstream/v8/src/x64/assembler-x64.cc +2954 -0
  455. data/ext/v8/upstream/v8/src/x64/assembler-x64.h +1630 -0
  456. data/ext/v8/upstream/v8/src/x64/builtins-x64.cc +1493 -0
  457. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.cc +5132 -0
  458. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.h +477 -0
  459. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/codegen-x64-inl.h +0 -0
  460. data/ext/v8/upstream/v8/src/x64/codegen-x64.cc +8843 -0
  461. data/ext/v8/upstream/v8/src/x64/codegen-x64.h +753 -0
  462. data/ext/v8/upstream/v8/src/x64/cpu-x64.cc +88 -0
  463. data/ext/v8/upstream/v8/src/x64/debug-x64.cc +318 -0
  464. data/ext/v8/upstream/v8/src/x64/deoptimizer-x64.cc +815 -0
  465. data/ext/v8/upstream/v8/src/x64/disasm-x64.cc +1752 -0
  466. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/frames-x64.cc +0 -0
  467. data/ext/v8/upstream/v8/src/x64/frames-x64.h +130 -0
  468. data/ext/v8/upstream/v8/src/x64/full-codegen-x64.cc +4339 -0
  469. data/ext/v8/upstream/v8/src/x64/ic-x64.cc +1752 -0
  470. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/jump-target-x64.cc +0 -0
  471. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.cc +3970 -0
  472. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.h +318 -0
  473. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.cc +0 -0
  474. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.h +0 -0
  475. data/ext/v8/upstream/v8/src/x64/lithium-x64.cc +2115 -0
  476. data/ext/v8/upstream/v8/src/x64/lithium-x64.h +2161 -0
  477. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.cc +2911 -0
  478. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.h +1984 -0
  479. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  480. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  481. data/ext/v8/upstream/v8/src/x64/register-allocator-x64-inl.h +87 -0
  482. data/ext/v8/upstream/v8/src/x64/register-allocator-x64.cc +95 -0
  483. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/register-allocator-x64.h +0 -0
  484. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/simulator-x64.cc +0 -0
  485. data/ext/v8/upstream/v8/src/x64/simulator-x64.h +71 -0
  486. data/ext/v8/upstream/v8/src/x64/stub-cache-x64.cc +3460 -0
  487. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.cc +1296 -0
  488. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.h +597 -0
  489. data/ext/v8/upstream/v8/src/zone-inl.h +129 -0
  490. data/ext/v8/upstream/v8/src/zone.cc +196 -0
  491. data/ext/v8/upstream/v8/src/zone.h +236 -0
  492. data/ext/v8/upstream/{3.1.8 → v8}/tools/codemap.js +0 -0
  493. data/ext/v8/upstream/{3.1.8 → v8}/tools/consarray.js +0 -0
  494. data/ext/v8/upstream/{3.1.8 → v8}/tools/csvparser.js +0 -0
  495. data/ext/v8/upstream/{3.1.8 → v8}/tools/disasm.py +0 -0
  496. data/ext/v8/upstream/v8/tools/freebsd-tick-processor +10 -0
  497. data/ext/v8/upstream/{3.1.8 → v8}/tools/gc-nvp-trace-processor.py +0 -0
  498. data/ext/v8/upstream/{3.1.8 → v8}/tools/generate-ten-powers.scm +0 -0
  499. data/ext/v8/upstream/{3.1.8 → v8}/tools/grokdump.py +0 -0
  500. data/ext/v8/upstream/v8/tools/gyp/v8.gyp +844 -0
  501. data/ext/v8/upstream/{3.1.8 → v8}/tools/js2c.py +0 -0
  502. data/ext/v8/upstream/{3.1.8 → v8}/tools/jsmin.py +0 -0
  503. data/ext/v8/upstream/v8/tools/linux-tick-processor +35 -0
  504. data/ext/v8/upstream/{3.1.8 → v8}/tools/ll_prof.py +0 -0
  505. data/ext/v8/upstream/{3.1.8 → v8}/tools/logreader.js +0 -0
  506. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-nm +0 -0
  507. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-tick-processor +0 -0
  508. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/README +0 -0
  509. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/SConstruct +0 -0
  510. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/oom_dump.cc +0 -0
  511. data/ext/v8/upstream/{3.1.8 → v8}/tools/presubmit.py +0 -0
  512. data/ext/v8/upstream/{3.1.8 → v8}/tools/process-heap-prof.py +0 -0
  513. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile.js +0 -0
  514. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile_view.js +0 -0
  515. data/ext/v8/upstream/{3.1.8 → v8}/tools/run-valgrind.py +0 -0
  516. data/ext/v8/upstream/{3.1.8 → v8}/tools/splaytree.js +0 -0
  517. data/ext/v8/upstream/{3.1.8 → v8}/tools/stats-viewer.py +0 -0
  518. data/ext/v8/upstream/v8/tools/test.py +1490 -0
  519. data/ext/v8/upstream/{3.1.8 → v8}/tools/tickprocessor-driver.js +0 -0
  520. data/ext/v8/upstream/v8/tools/tickprocessor.js +877 -0
  521. data/ext/v8/upstream/{3.1.8 → v8}/tools/utils.py +0 -0
  522. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/README.txt +0 -0
  523. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/arm.vsprops +0 -0
  524. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/common.vsprops +0 -0
  525. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8.vcproj +0 -0
  526. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_arm.vcproj +0 -0
  527. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_x64.vcproj +0 -0
  528. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8js2c.cmd +0 -0
  529. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/debug.vsprops +0 -0
  530. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/ia32.vsprops +0 -0
  531. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/js2c.cmd +0 -0
  532. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/release.vsprops +0 -0
  533. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.sln +0 -0
  534. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.vcproj +0 -0
  535. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.sln +0 -0
  536. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.vcproj +0 -0
  537. data/ext/v8/upstream/v8/tools/visual_studio/v8_base.vcproj +1308 -0
  538. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_arm.vcproj +1238 -0
  539. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_x64.vcproj +1300 -0
  540. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest.vcproj +0 -0
  541. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
  542. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
  543. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
  544. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
  545. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample.vcproj +0 -0
  546. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
  547. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
  548. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
  549. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
  550. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
  551. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  552. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  553. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  554. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  555. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.sln +0 -0
  556. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.vcproj +0 -0
  557. data/ext/v8/upstream/v8/tools/visual_studio/x64.vsprops +18 -0
  558. data/ext/v8/upstream/{3.1.8 → v8}/tools/windows-tick-processor.bat +0 -0
  559. data/ext/v8/v8_callbacks.cpp +52 -92
  560. data/ext/v8/v8_date.cpp +2 -3
  561. data/ext/v8/v8_object.cpp +4 -0
  562. data/ext/v8/v8_template.cpp +2 -2
  563. data/ext/v8/v8_try_catch.cpp +8 -38
  564. data/lib/v8/version.rb +1 -1
  565. data/spec/ext/ext_spec_helper.rb +2 -20
  566. data/spec/ext/object_spec.rb +0 -12
  567. data/spec/ext/try_catch_spec.rb +29 -1
  568. data/spec/spec_helper.rb +1 -0
  569. data/spec/v8/portal/proxies_spec.rb +1 -84
  570. data/specmem/handle_memspec.rb +41 -0
  571. data/specmem/object_memspec.rb +16 -0
  572. data/specmem/proxies_memspec.rb +86 -0
  573. data/specmem/spec_helper.rb +24 -0
  574. data/therubyracer.gemspec +7 -2
  575. metadata +564 -541
  576. data/ext/v8/upstream/3.1.8/.gitignore +0 -31
  577. data/ext/v8/upstream/3.1.8/AUTHORS +0 -40
  578. data/ext/v8/upstream/3.1.8/ChangeLog +0 -2566
  579. data/ext/v8/upstream/3.1.8/SConstruct +0 -1192
  580. data/ext/v8/upstream/3.1.8/include/v8-debug.h +0 -384
  581. data/ext/v8/upstream/3.1.8/include/v8-preparser.h +0 -116
  582. data/ext/v8/upstream/3.1.8/include/v8-profiler.h +0 -426
  583. data/ext/v8/upstream/3.1.8/include/v8-testing.h +0 -99
  584. data/ext/v8/upstream/3.1.8/include/v8.h +0 -3846
  585. data/ext/v8/upstream/3.1.8/preparser/preparser-process.cc +0 -206
  586. data/ext/v8/upstream/3.1.8/src/SConscript +0 -356
  587. data/ext/v8/upstream/3.1.8/src/accessors.cc +0 -907
  588. data/ext/v8/upstream/3.1.8/src/allocation.cc +0 -204
  589. data/ext/v8/upstream/3.1.8/src/allocation.h +0 -176
  590. data/ext/v8/upstream/3.1.8/src/api.cc +0 -5191
  591. data/ext/v8/upstream/3.1.8/src/api.h +0 -508
  592. data/ext/v8/upstream/3.1.8/src/apiutils.h +0 -80
  593. data/ext/v8/upstream/3.1.8/src/arguments.h +0 -105
  594. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm-inl.h +0 -352
  595. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.cc +0 -2756
  596. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.h +0 -1294
  597. data/ext/v8/upstream/3.1.8/src/arm/builtins-arm.cc +0 -1628
  598. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.cc +0 -6783
  599. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.h +0 -657
  600. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.cc +0 -7403
  601. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.h +0 -595
  602. data/ext/v8/upstream/3.1.8/src/arm/constants-arm.h +0 -769
  603. data/ext/v8/upstream/3.1.8/src/arm/cpu-arm.cc +0 -147
  604. data/ext/v8/upstream/3.1.8/src/arm/debug-arm.cc +0 -315
  605. data/ext/v8/upstream/3.1.8/src/arm/deoptimizer-arm.cc +0 -700
  606. data/ext/v8/upstream/3.1.8/src/arm/disasm-arm.cc +0 -1439
  607. data/ext/v8/upstream/3.1.8/src/arm/frames-arm.h +0 -168
  608. data/ext/v8/upstream/3.1.8/src/arm/full-codegen-arm.cc +0 -4230
  609. data/ext/v8/upstream/3.1.8/src/arm/ic-arm.cc +0 -1799
  610. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.cc +0 -2041
  611. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.h +0 -2046
  612. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.cc +0 -3822
  613. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.h +0 -312
  614. data/ext/v8/upstream/3.1.8/src/arm/lithium-gap-resolver-arm.cc +0 -303
  615. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.cc +0 -2701
  616. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.h +0 -1015
  617. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.cc +0 -1280
  618. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.h +0 -252
  619. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.cc +0 -3165
  620. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.h +0 -402
  621. data/ext/v8/upstream/3.1.8/src/arm/stub-cache-arm.cc +0 -4077
  622. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.cc +0 -843
  623. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.h +0 -520
  624. data/ext/v8/upstream/3.1.8/src/array.js +0 -1231
  625. data/ext/v8/upstream/3.1.8/src/assembler.cc +0 -973
  626. data/ext/v8/upstream/3.1.8/src/assembler.h +0 -787
  627. data/ext/v8/upstream/3.1.8/src/ast-inl.h +0 -107
  628. data/ext/v8/upstream/3.1.8/src/ast.cc +0 -1067
  629. data/ext/v8/upstream/3.1.8/src/ast.h +0 -2177
  630. data/ext/v8/upstream/3.1.8/src/atomicops.h +0 -165
  631. data/ext/v8/upstream/3.1.8/src/bootstrapper.cc +0 -1888
  632. data/ext/v8/upstream/3.1.8/src/bootstrapper.h +0 -118
  633. data/ext/v8/upstream/3.1.8/src/builtins.cc +0 -1586
  634. data/ext/v8/upstream/3.1.8/src/builtins.h +0 -339
  635. data/ext/v8/upstream/3.1.8/src/checks.cc +0 -110
  636. data/ext/v8/upstream/3.1.8/src/checks.h +0 -292
  637. data/ext/v8/upstream/3.1.8/src/code-stubs.cc +0 -230
  638. data/ext/v8/upstream/3.1.8/src/code-stubs.h +0 -950
  639. data/ext/v8/upstream/3.1.8/src/codegen-inl.h +0 -64
  640. data/ext/v8/upstream/3.1.8/src/codegen.cc +0 -495
  641. data/ext/v8/upstream/3.1.8/src/codegen.h +0 -245
  642. data/ext/v8/upstream/3.1.8/src/compilation-cache.cc +0 -654
  643. data/ext/v8/upstream/3.1.8/src/compilation-cache.h +0 -112
  644. data/ext/v8/upstream/3.1.8/src/compiler.cc +0 -806
  645. data/ext/v8/upstream/3.1.8/src/compiler.h +0 -290
  646. data/ext/v8/upstream/3.1.8/src/contexts.cc +0 -320
  647. data/ext/v8/upstream/3.1.8/src/contexts.h +0 -376
  648. data/ext/v8/upstream/3.1.8/src/conversions.cc +0 -1069
  649. data/ext/v8/upstream/3.1.8/src/counters.cc +0 -78
  650. data/ext/v8/upstream/3.1.8/src/counters.h +0 -242
  651. data/ext/v8/upstream/3.1.8/src/cpu-profiler-inl.h +0 -100
  652. data/ext/v8/upstream/3.1.8/src/cpu-profiler.cc +0 -554
  653. data/ext/v8/upstream/3.1.8/src/cpu-profiler.h +0 -291
  654. data/ext/v8/upstream/3.1.8/src/cpu.h +0 -65
  655. data/ext/v8/upstream/3.1.8/src/d8-debug.cc +0 -367
  656. data/ext/v8/upstream/3.1.8/src/d8-debug.h +0 -157
  657. data/ext/v8/upstream/3.1.8/src/d8-posix.cc +0 -693
  658. data/ext/v8/upstream/3.1.8/src/d8.cc +0 -792
  659. data/ext/v8/upstream/3.1.8/src/d8.gyp +0 -85
  660. data/ext/v8/upstream/3.1.8/src/data-flow.h +0 -379
  661. data/ext/v8/upstream/3.1.8/src/dateparser.h +0 -263
  662. data/ext/v8/upstream/3.1.8/src/debug-agent.cc +0 -446
  663. data/ext/v8/upstream/3.1.8/src/debug-agent.h +0 -131
  664. data/ext/v8/upstream/3.1.8/src/debug.cc +0 -3085
  665. data/ext/v8/upstream/3.1.8/src/debug.h +0 -1025
  666. data/ext/v8/upstream/3.1.8/src/deoptimizer.cc +0 -1185
  667. data/ext/v8/upstream/3.1.8/src/deoptimizer.h +0 -529
  668. data/ext/v8/upstream/3.1.8/src/disasm.h +0 -77
  669. data/ext/v8/upstream/3.1.8/src/disassembler.cc +0 -338
  670. data/ext/v8/upstream/3.1.8/src/execution.cc +0 -735
  671. data/ext/v8/upstream/3.1.8/src/execution.h +0 -322
  672. data/ext/v8/upstream/3.1.8/src/extensions/experimental/experimental.gyp +0 -53
  673. data/ext/v8/upstream/3.1.8/src/extensions/experimental/i18n-extension.cc +0 -264
  674. data/ext/v8/upstream/3.1.8/src/extensions/externalize-string-extension.cc +0 -141
  675. data/ext/v8/upstream/3.1.8/src/extensions/gc-extension.cc +0 -58
  676. data/ext/v8/upstream/3.1.8/src/factory.cc +0 -1087
  677. data/ext/v8/upstream/3.1.8/src/factory.h +0 -432
  678. data/ext/v8/upstream/3.1.8/src/flag-definitions.h +0 -552
  679. data/ext/v8/upstream/3.1.8/src/frame-element.cc +0 -42
  680. data/ext/v8/upstream/3.1.8/src/frame-element.h +0 -277
  681. data/ext/v8/upstream/3.1.8/src/frames-inl.h +0 -210
  682. data/ext/v8/upstream/3.1.8/src/frames.cc +0 -1232
  683. data/ext/v8/upstream/3.1.8/src/frames.h +0 -826
  684. data/ext/v8/upstream/3.1.8/src/full-codegen.cc +0 -1382
  685. data/ext/v8/upstream/3.1.8/src/full-codegen.h +0 -751
  686. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.cc +0 -90
  687. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.h +0 -111
  688. data/ext/v8/upstream/3.1.8/src/gdb-jit.cc +0 -1547
  689. data/ext/v8/upstream/3.1.8/src/global-handles.cc +0 -534
  690. data/ext/v8/upstream/3.1.8/src/global-handles.h +0 -181
  691. data/ext/v8/upstream/3.1.8/src/globals.h +0 -325
  692. data/ext/v8/upstream/3.1.8/src/handles-inl.h +0 -80
  693. data/ext/v8/upstream/3.1.8/src/handles.cc +0 -910
  694. data/ext/v8/upstream/3.1.8/src/handles.h +0 -424
  695. data/ext/v8/upstream/3.1.8/src/hashmap.h +0 -121
  696. data/ext/v8/upstream/3.1.8/src/heap-inl.h +0 -587
  697. data/ext/v8/upstream/3.1.8/src/heap-profiler.cc +0 -1128
  698. data/ext/v8/upstream/3.1.8/src/heap-profiler.h +0 -381
  699. data/ext/v8/upstream/3.1.8/src/heap.cc +0 -5610
  700. data/ext/v8/upstream/3.1.8/src/heap.h +0 -2218
  701. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.cc +0 -1490
  702. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.h +0 -3493
  703. data/ext/v8/upstream/3.1.8/src/hydrogen.cc +0 -6056
  704. data/ext/v8/upstream/3.1.8/src/hydrogen.h +0 -1091
  705. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32-inl.h +0 -429
  706. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.cc +0 -2800
  707. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.h +0 -1093
  708. data/ext/v8/upstream/3.1.8/src/ia32/builtins-ia32.cc +0 -1590
  709. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.cc +0 -6624
  710. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.h +0 -536
  711. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.cc +0 -10354
  712. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.h +0 -798
  713. data/ext/v8/upstream/3.1.8/src/ia32/cpu-ia32.cc +0 -87
  714. data/ext/v8/upstream/3.1.8/src/ia32/debug-ia32.cc +0 -309
  715. data/ext/v8/upstream/3.1.8/src/ia32/deoptimizer-ia32.cc +0 -664
  716. data/ext/v8/upstream/3.1.8/src/ia32/disasm-ia32.cc +0 -1597
  717. data/ext/v8/upstream/3.1.8/src/ia32/frames-ia32.h +0 -140
  718. data/ext/v8/upstream/3.1.8/src/ia32/full-codegen-ia32.cc +0 -4278
  719. data/ext/v8/upstream/3.1.8/src/ia32/ic-ia32.cc +0 -1786
  720. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.cc +0 -3880
  721. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.h +0 -309
  722. data/ext/v8/upstream/3.1.8/src/ia32/lithium-gap-resolver-ia32.cc +0 -460
  723. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.cc +0 -2095
  724. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.h +0 -2127
  725. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.cc +0 -2031
  726. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.h +0 -798
  727. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.cc +0 -1253
  728. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.h +0 -215
  729. data/ext/v8/upstream/3.1.8/src/ia32/register-allocator-ia32.cc +0 -157
  730. data/ext/v8/upstream/3.1.8/src/ia32/simulator-ia32.h +0 -72
  731. data/ext/v8/upstream/3.1.8/src/ia32/stub-cache-ia32.cc +0 -3732
  732. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.cc +0 -1360
  733. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.h +0 -646
  734. data/ext/v8/upstream/3.1.8/src/ic-inl.h +0 -129
  735. data/ext/v8/upstream/3.1.8/src/ic.cc +0 -2333
  736. data/ext/v8/upstream/3.1.8/src/ic.h +0 -639
  737. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.cc +0 -655
  738. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.h +0 -48
  739. data/ext/v8/upstream/3.1.8/src/json.js +0 -342
  740. data/ext/v8/upstream/3.1.8/src/jsregexp.cc +0 -5340
  741. data/ext/v8/upstream/3.1.8/src/jsregexp.h +0 -1484
  742. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.cc +0 -430
  743. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.h +0 -244
  744. data/ext/v8/upstream/3.1.8/src/jump-target-inl.h +0 -48
  745. data/ext/v8/upstream/3.1.8/src/jump-target-light.cc +0 -111
  746. data/ext/v8/upstream/3.1.8/src/lithium-allocator-inl.h +0 -140
  747. data/ext/v8/upstream/3.1.8/src/lithium-allocator.cc +0 -2093
  748. data/ext/v8/upstream/3.1.8/src/lithium-allocator.h +0 -644
  749. data/ext/v8/upstream/3.1.8/src/lithium.cc +0 -168
  750. data/ext/v8/upstream/3.1.8/src/liveedit.cc +0 -1650
  751. data/ext/v8/upstream/3.1.8/src/liveedit.h +0 -174
  752. data/ext/v8/upstream/3.1.8/src/liveobjectlist.cc +0 -2527
  753. data/ext/v8/upstream/3.1.8/src/liveobjectlist.h +0 -322
  754. data/ext/v8/upstream/3.1.8/src/log-utils.cc +0 -336
  755. data/ext/v8/upstream/3.1.8/src/log-utils.h +0 -232
  756. data/ext/v8/upstream/3.1.8/src/log.cc +0 -1608
  757. data/ext/v8/upstream/3.1.8/src/log.h +0 -379
  758. data/ext/v8/upstream/3.1.8/src/mark-compact.cc +0 -2957
  759. data/ext/v8/upstream/3.1.8/src/mark-compact.h +0 -433
  760. data/ext/v8/upstream/3.1.8/src/messages.cc +0 -164
  761. data/ext/v8/upstream/3.1.8/src/messages.js +0 -1071
  762. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips-inl.h +0 -215
  763. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.cc +0 -1219
  764. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.h +0 -667
  765. data/ext/v8/upstream/3.1.8/src/mips/builtins-mips.cc +0 -205
  766. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips-inl.h +0 -70
  767. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.cc +0 -1437
  768. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.h +0 -431
  769. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.cc +0 -328
  770. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.h +0 -525
  771. data/ext/v8/upstream/3.1.8/src/mips/cpu-mips.cc +0 -73
  772. data/ext/v8/upstream/3.1.8/src/mips/debug-mips.cc +0 -127
  773. data/ext/v8/upstream/3.1.8/src/mips/disasm-mips.cc +0 -787
  774. data/ext/v8/upstream/3.1.8/src/mips/fast-codegen-mips.cc +0 -77
  775. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.cc +0 -96
  776. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.h +0 -164
  777. data/ext/v8/upstream/3.1.8/src/mips/full-codegen-mips.cc +0 -277
  778. data/ext/v8/upstream/3.1.8/src/mips/ic-mips.cc +0 -208
  779. data/ext/v8/upstream/3.1.8/src/mips/jump-target-mips.cc +0 -175
  780. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.cc +0 -1326
  781. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.h +0 -461
  782. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips-inl.h +0 -137
  783. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips.h +0 -46
  784. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.cc +0 -1650
  785. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.h +0 -311
  786. data/ext/v8/upstream/3.1.8/src/mips/stub-cache-mips.cc +0 -418
  787. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.cc +0 -319
  788. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.h +0 -548
  789. data/ext/v8/upstream/3.1.8/src/mirror-debugger.js +0 -2380
  790. data/ext/v8/upstream/3.1.8/src/mksnapshot.cc +0 -256
  791. data/ext/v8/upstream/3.1.8/src/objects-debug.cc +0 -722
  792. data/ext/v8/upstream/3.1.8/src/objects-inl.h +0 -3946
  793. data/ext/v8/upstream/3.1.8/src/objects-printer.cc +0 -801
  794. data/ext/v8/upstream/3.1.8/src/objects-visiting.cc +0 -142
  795. data/ext/v8/upstream/3.1.8/src/objects-visiting.h +0 -401
  796. data/ext/v8/upstream/3.1.8/src/objects.cc +0 -10044
  797. data/ext/v8/upstream/3.1.8/src/objects.h +0 -6571
  798. data/ext/v8/upstream/3.1.8/src/parser.cc +0 -5165
  799. data/ext/v8/upstream/3.1.8/src/parser.h +0 -802
  800. data/ext/v8/upstream/3.1.8/src/platform-cygwin.cc +0 -745
  801. data/ext/v8/upstream/3.1.8/src/platform-freebsd.cc +0 -702
  802. data/ext/v8/upstream/3.1.8/src/platform-linux.cc +0 -981
  803. data/ext/v8/upstream/3.1.8/src/platform-macos.cc +0 -732
  804. data/ext/v8/upstream/3.1.8/src/platform-nullos.cc +0 -498
  805. data/ext/v8/upstream/3.1.8/src/platform-openbsd.cc +0 -657
  806. data/ext/v8/upstream/3.1.8/src/platform-posix.cc +0 -399
  807. data/ext/v8/upstream/3.1.8/src/platform-solaris.cc +0 -714
  808. data/ext/v8/upstream/3.1.8/src/platform-win32.cc +0 -1974
  809. data/ext/v8/upstream/3.1.8/src/platform.h +0 -636
  810. data/ext/v8/upstream/3.1.8/src/preparse-data.cc +0 -183
  811. data/ext/v8/upstream/3.1.8/src/preparser-api.cc +0 -213
  812. data/ext/v8/upstream/3.1.8/src/preparser.cc +0 -1205
  813. data/ext/v8/upstream/3.1.8/src/prettyprinter.cc +0 -1539
  814. data/ext/v8/upstream/3.1.8/src/prettyprinter.h +0 -223
  815. data/ext/v8/upstream/3.1.8/src/profile-generator.cc +0 -2899
  816. data/ext/v8/upstream/3.1.8/src/profile-generator.h +0 -1151
  817. data/ext/v8/upstream/3.1.8/src/property.cc +0 -96
  818. data/ext/v8/upstream/3.1.8/src/property.h +0 -337
  819. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler-irregexp.cc +0 -470
  820. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.cc +0 -257
  821. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.h +0 -231
  822. data/ext/v8/upstream/3.1.8/src/regexp-stack.cc +0 -103
  823. data/ext/v8/upstream/3.1.8/src/regexp-stack.h +0 -123
  824. data/ext/v8/upstream/3.1.8/src/regexp.js +0 -483
  825. data/ext/v8/upstream/3.1.8/src/register-allocator-inl.h +0 -141
  826. data/ext/v8/upstream/3.1.8/src/register-allocator.cc +0 -104
  827. data/ext/v8/upstream/3.1.8/src/register-allocator.h +0 -320
  828. data/ext/v8/upstream/3.1.8/src/rewriter.cc +0 -1023
  829. data/ext/v8/upstream/3.1.8/src/runtime-profiler.cc +0 -443
  830. data/ext/v8/upstream/3.1.8/src/runtime-profiler.h +0 -77
  831. data/ext/v8/upstream/3.1.8/src/runtime.cc +0 -11592
  832. data/ext/v8/upstream/3.1.8/src/runtime.h +0 -582
  833. data/ext/v8/upstream/3.1.8/src/safepoint-table.cc +0 -253
  834. data/ext/v8/upstream/3.1.8/src/safepoint-table.h +0 -263
  835. data/ext/v8/upstream/3.1.8/src/scanner-base.cc +0 -971
  836. data/ext/v8/upstream/3.1.8/src/scanner-base.h +0 -653
  837. data/ext/v8/upstream/3.1.8/src/scanner.cc +0 -586
  838. data/ext/v8/upstream/3.1.8/src/scanner.h +0 -194
  839. data/ext/v8/upstream/3.1.8/src/scopeinfo.cc +0 -636
  840. data/ext/v8/upstream/3.1.8/src/scopeinfo.h +0 -238
  841. data/ext/v8/upstream/3.1.8/src/scopes.cc +0 -1063
  842. data/ext/v8/upstream/3.1.8/src/scopes.h +0 -494
  843. data/ext/v8/upstream/3.1.8/src/serialize.cc +0 -1535
  844. data/ext/v8/upstream/3.1.8/src/serialize.h +0 -584
  845. data/ext/v8/upstream/3.1.8/src/snapshot-common.cc +0 -82
  846. data/ext/v8/upstream/3.1.8/src/snapshot.h +0 -71
  847. data/ext/v8/upstream/3.1.8/src/spaces-inl.h +0 -524
  848. data/ext/v8/upstream/3.1.8/src/spaces.cc +0 -3254
  849. data/ext/v8/upstream/3.1.8/src/spaces.h +0 -2362
  850. data/ext/v8/upstream/3.1.8/src/string-search.cc +0 -40
  851. data/ext/v8/upstream/3.1.8/src/string-search.h +0 -567
  852. data/ext/v8/upstream/3.1.8/src/string-stream.cc +0 -584
  853. data/ext/v8/upstream/3.1.8/src/string.js +0 -915
  854. data/ext/v8/upstream/3.1.8/src/stub-cache.cc +0 -1878
  855. data/ext/v8/upstream/3.1.8/src/stub-cache.h +0 -849
  856. data/ext/v8/upstream/3.1.8/src/token.cc +0 -63
  857. data/ext/v8/upstream/3.1.8/src/token.h +0 -288
  858. data/ext/v8/upstream/3.1.8/src/top.cc +0 -1152
  859. data/ext/v8/upstream/3.1.8/src/top.h +0 -608
  860. data/ext/v8/upstream/3.1.8/src/type-info.cc +0 -406
  861. data/ext/v8/upstream/3.1.8/src/type-info.h +0 -283
  862. data/ext/v8/upstream/3.1.8/src/unicode.cc +0 -1624
  863. data/ext/v8/upstream/3.1.8/src/unicode.h +0 -280
  864. data/ext/v8/upstream/3.1.8/src/utils.h +0 -793
  865. data/ext/v8/upstream/3.1.8/src/v8-counters.cc +0 -55
  866. data/ext/v8/upstream/3.1.8/src/v8-counters.h +0 -290
  867. data/ext/v8/upstream/3.1.8/src/v8.cc +0 -270
  868. data/ext/v8/upstream/3.1.8/src/v8.h +0 -127
  869. data/ext/v8/upstream/3.1.8/src/v8globals.h +0 -480
  870. data/ext/v8/upstream/3.1.8/src/v8natives.js +0 -1252
  871. data/ext/v8/upstream/3.1.8/src/v8threads.cc +0 -440
  872. data/ext/v8/upstream/3.1.8/src/v8threads.h +0 -157
  873. data/ext/v8/upstream/3.1.8/src/v8utils.h +0 -354
  874. data/ext/v8/upstream/3.1.8/src/variables.h +0 -212
  875. data/ext/v8/upstream/3.1.8/src/version.cc +0 -95
  876. data/ext/v8/upstream/3.1.8/src/version.h +0 -64
  877. data/ext/v8/upstream/3.1.8/src/virtual-frame-light-inl.h +0 -170
  878. data/ext/v8/upstream/3.1.8/src/vm-state-inl.h +0 -134
  879. data/ext/v8/upstream/3.1.8/src/vm-state.h +0 -68
  880. data/ext/v8/upstream/3.1.8/src/win32-headers.h +0 -95
  881. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64-inl.h +0 -455
  882. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.cc +0 -3162
  883. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.h +0 -1584
  884. data/ext/v8/upstream/3.1.8/src/x64/builtins-x64.cc +0 -1492
  885. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.cc +0 -5150
  886. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.h +0 -519
  887. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.cc +0 -8835
  888. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.h +0 -750
  889. data/ext/v8/upstream/3.1.8/src/x64/cpu-x64.cc +0 -86
  890. data/ext/v8/upstream/3.1.8/src/x64/debug-x64.cc +0 -316
  891. data/ext/v8/upstream/3.1.8/src/x64/deoptimizer-x64.cc +0 -781
  892. data/ext/v8/upstream/3.1.8/src/x64/disasm-x64.cc +0 -1737
  893. data/ext/v8/upstream/3.1.8/src/x64/frames-x64.h +0 -130
  894. data/ext/v8/upstream/3.1.8/src/x64/full-codegen-x64.cc +0 -3984
  895. data/ext/v8/upstream/3.1.8/src/x64/ic-x64.cc +0 -1761
  896. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.cc +0 -3639
  897. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.h +0 -305
  898. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.cc +0 -2044
  899. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.h +0 -2052
  900. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.cc +0 -2660
  901. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.h +0 -1852
  902. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.cc +0 -1382
  903. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.h +0 -278
  904. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64-inl.h +0 -87
  905. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64.cc +0 -91
  906. data/ext/v8/upstream/3.1.8/src/x64/simulator-x64.h +0 -71
  907. data/ext/v8/upstream/3.1.8/src/x64/stub-cache-x64.cc +0 -3509
  908. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.cc +0 -1292
  909. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.h +0 -593
  910. data/ext/v8/upstream/3.1.8/src/zone-inl.h +0 -83
  911. data/ext/v8/upstream/3.1.8/src/zone.cc +0 -195
  912. data/ext/v8/upstream/3.1.8/src/zone.h +0 -233
  913. data/ext/v8/upstream/3.1.8/tools/gyp/v8.gyp +0 -869
  914. data/ext/v8/upstream/3.1.8/tools/linux-tick-processor +0 -33
  915. data/ext/v8/upstream/3.1.8/tools/tickprocessor.js +0 -863
  916. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base.vcproj +0 -1296
  917. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_arm.vcproj +0 -1234
  918. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_x64.vcproj +0 -1296
  919. data/ext/v8/upstream/3.1.8/tools/visual_studio/x64.vsprops +0 -17
  920. data/spec/ext/mem_spec.rb +0 -42
@@ -0,0 +1,185 @@
1
+ // Copyright 2010 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 "../include/v8stdint.h"
29
+ #include "globals.h"
30
+ #include "checks.h"
31
+ #include "allocation.h"
32
+ #include "utils.h"
33
+ #include "list-inl.h"
34
+ #include "hashmap.h"
35
+
36
+ #include "preparse-data.h"
37
+
38
+
39
+ namespace v8 {
40
+ namespace internal {
41
+
42
+ // ----------------------------------------------------------------------------
43
+ // FunctionLoggingParserRecorder
44
+
45
+ FunctionLoggingParserRecorder::FunctionLoggingParserRecorder()
46
+ : function_store_(0),
47
+ is_recording_(true),
48
+ pause_count_(0) {
49
+ preamble_[PreparseDataConstants::kMagicOffset] =
50
+ PreparseDataConstants::kMagicNumber;
51
+ preamble_[PreparseDataConstants::kVersionOffset] =
52
+ PreparseDataConstants::kCurrentVersion;
53
+ preamble_[PreparseDataConstants::kHasErrorOffset] = false;
54
+ preamble_[PreparseDataConstants::kFunctionsSizeOffset] = 0;
55
+ preamble_[PreparseDataConstants::kSymbolCountOffset] = 0;
56
+ preamble_[PreparseDataConstants::kSizeOffset] = 0;
57
+ ASSERT_EQ(6, PreparseDataConstants::kHeaderSize);
58
+ #ifdef DEBUG
59
+ prev_start_ = -1;
60
+ #endif
61
+ }
62
+
63
+
64
+ void FunctionLoggingParserRecorder::LogMessage(int start_pos,
65
+ int end_pos,
66
+ const char* message,
67
+ const char* arg_opt) {
68
+ if (has_error()) return;
69
+ preamble_[PreparseDataConstants::kHasErrorOffset] = true;
70
+ function_store_.Reset();
71
+ STATIC_ASSERT(PreparseDataConstants::kMessageStartPos == 0);
72
+ function_store_.Add(start_pos);
73
+ STATIC_ASSERT(PreparseDataConstants::kMessageEndPos == 1);
74
+ function_store_.Add(end_pos);
75
+ STATIC_ASSERT(PreparseDataConstants::kMessageArgCountPos == 2);
76
+ function_store_.Add((arg_opt == NULL) ? 0 : 1);
77
+ STATIC_ASSERT(PreparseDataConstants::kMessageTextPos == 3);
78
+ WriteString(CStrVector(message));
79
+ if (arg_opt) WriteString(CStrVector(arg_opt));
80
+ is_recording_ = false;
81
+ }
82
+
83
+
84
+ void FunctionLoggingParserRecorder::WriteString(Vector<const char> str) {
85
+ function_store_.Add(str.length());
86
+ for (int i = 0; i < str.length(); i++) {
87
+ function_store_.Add(str[i]);
88
+ }
89
+ }
90
+
91
+ // ----------------------------------------------------------------------------
92
+ // PartialParserRecorder - Record both function entries and symbols.
93
+
94
+ Vector<unsigned> PartialParserRecorder::ExtractData() {
95
+ int function_size = function_store_.size();
96
+ int total_size = PreparseDataConstants::kHeaderSize + function_size;
97
+ Vector<unsigned> data = Vector<unsigned>::New(total_size);
98
+ preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
99
+ preamble_[PreparseDataConstants::kSymbolCountOffset] = 0;
100
+ memcpy(data.start(), preamble_, sizeof(preamble_));
101
+ int symbol_start = PreparseDataConstants::kHeaderSize + function_size;
102
+ if (function_size > 0) {
103
+ function_store_.WriteTo(data.SubVector(PreparseDataConstants::kHeaderSize,
104
+ symbol_start));
105
+ }
106
+ return data;
107
+ }
108
+
109
+
110
+ // ----------------------------------------------------------------------------
111
+ // CompleteParserRecorder - Record both function entries and symbols.
112
+
113
+ CompleteParserRecorder::CompleteParserRecorder()
114
+ : FunctionLoggingParserRecorder(),
115
+ literal_chars_(0),
116
+ symbol_store_(0),
117
+ symbol_keys_(0),
118
+ symbol_table_(vector_compare),
119
+ symbol_id_(0) {
120
+ }
121
+
122
+
123
+ void CompleteParserRecorder::LogSymbol(int start,
124
+ int hash,
125
+ bool is_ascii,
126
+ Vector<const byte> literal_bytes) {
127
+ Key key = { is_ascii, literal_bytes };
128
+ HashMap::Entry* entry = symbol_table_.Lookup(&key, hash, true);
129
+ int id = static_cast<int>(reinterpret_cast<intptr_t>(entry->value));
130
+ if (id == 0) {
131
+ // Copy literal contents for later comparison.
132
+ key.literal_bytes =
133
+ Vector<const byte>::cast(literal_chars_.AddBlock(literal_bytes));
134
+ // Put (symbol_id_ + 1) into entry and increment it.
135
+ id = ++symbol_id_;
136
+ entry->value = reinterpret_cast<void*>(id);
137
+ Vector<Key> symbol = symbol_keys_.AddBlock(1, key);
138
+ entry->key = &symbol[0];
139
+ }
140
+ WriteNumber(id - 1);
141
+ }
142
+
143
+
144
+ Vector<unsigned> CompleteParserRecorder::ExtractData() {
145
+ int function_size = function_store_.size();
146
+ // Add terminator to symbols, then pad to unsigned size.
147
+ int symbol_size = symbol_store_.size();
148
+ int padding = sizeof(unsigned) - (symbol_size % sizeof(unsigned));
149
+ symbol_store_.AddBlock(padding, PreparseDataConstants::kNumberTerminator);
150
+ symbol_size += padding;
151
+ int total_size = PreparseDataConstants::kHeaderSize + function_size
152
+ + (symbol_size / sizeof(unsigned));
153
+ Vector<unsigned> data = Vector<unsigned>::New(total_size);
154
+ preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
155
+ preamble_[PreparseDataConstants::kSymbolCountOffset] = symbol_id_;
156
+ memcpy(data.start(), preamble_, sizeof(preamble_));
157
+ int symbol_start = PreparseDataConstants::kHeaderSize + function_size;
158
+ if (function_size > 0) {
159
+ function_store_.WriteTo(data.SubVector(PreparseDataConstants::kHeaderSize,
160
+ symbol_start));
161
+ }
162
+ if (!has_error()) {
163
+ symbol_store_.WriteTo(
164
+ Vector<byte>::cast(data.SubVector(symbol_start, total_size)));
165
+ }
166
+ return data;
167
+ }
168
+
169
+
170
+ void CompleteParserRecorder::WriteNumber(int number) {
171
+ ASSERT(number >= 0);
172
+
173
+ int mask = (1 << 28) - 1;
174
+ for (int i = 28; i > 0; i -= 7) {
175
+ if (number > mask) {
176
+ symbol_store_.Add(static_cast<byte>(number >> i) | 0x80u);
177
+ number &= mask;
178
+ }
179
+ mask >>= 7;
180
+ }
181
+ symbol_store_.Add(static_cast<byte>(number));
182
+ }
183
+
184
+
185
+ } } // namespace v8::internal.
File without changes
@@ -0,0 +1,219 @@
1
+ // Copyright 2010 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 "../include/v8-preparser.h"
29
+
30
+ #include "globals.h"
31
+ #include "checks.h"
32
+ #include "allocation.h"
33
+ #include "utils.h"
34
+ #include "list.h"
35
+ #include "scanner-base.h"
36
+ #include "preparse-data.h"
37
+ #include "preparser.h"
38
+
39
+ namespace v8 {
40
+ namespace internal {
41
+
42
+ // UTF16Buffer based on a v8::UnicodeInputStream.
43
+ class InputStreamUTF16Buffer : public UC16CharacterStream {
44
+ public:
45
+ /* The InputStreamUTF16Buffer maintains an internal buffer
46
+ * that is filled in chunks from the UC16CharacterStream.
47
+ * It also maintains unlimited pushback capability, but optimized
48
+ * for small pushbacks.
49
+ * The pushback_buffer_ pointer points to the limit of pushbacks
50
+ * in the current buffer. There is room for a few pushback'ed chars before
51
+ * the buffer containing the most recently read chunk. If this is overflowed,
52
+ * an external buffer is allocated/reused to hold further pushbacks, and
53
+ * pushback_buffer_ and buffer_cursor_/buffer_end_ now points to the
54
+ * new buffer. When this buffer is read to the end again, the cursor is
55
+ * switched back to the internal buffer
56
+ */
57
+ explicit InputStreamUTF16Buffer(v8::UnicodeInputStream* stream)
58
+ : UC16CharacterStream(),
59
+ stream_(stream),
60
+ pushback_buffer_(buffer_),
61
+ pushback_buffer_end_cache_(NULL),
62
+ pushback_buffer_backing_(NULL),
63
+ pushback_buffer_backing_size_(0) {
64
+ buffer_cursor_ = buffer_end_ = buffer_ + kPushBackSize;
65
+ }
66
+
67
+ virtual ~InputStreamUTF16Buffer() {
68
+ if (pushback_buffer_backing_ != NULL) {
69
+ DeleteArray(pushback_buffer_backing_);
70
+ }
71
+ }
72
+
73
+ virtual void PushBack(uc32 ch) {
74
+ ASSERT(pos_ > 0);
75
+ if (ch == kEndOfInput) {
76
+ pos_--;
77
+ return;
78
+ }
79
+ if (buffer_cursor_ <= pushback_buffer_) {
80
+ // No more room in the current buffer to do pushbacks.
81
+ if (pushback_buffer_end_cache_ == NULL) {
82
+ // We have overflowed the pushback space at the beginning of buffer_.
83
+ // Switch to using a separate allocated pushback buffer.
84
+ if (pushback_buffer_backing_ == NULL) {
85
+ // Allocate a buffer the first time we need it.
86
+ pushback_buffer_backing_ = NewArray<uc16>(kPushBackSize);
87
+ pushback_buffer_backing_size_ = kPushBackSize;
88
+ }
89
+ pushback_buffer_ = pushback_buffer_backing_;
90
+ pushback_buffer_end_cache_ = buffer_end_;
91
+ buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_;
92
+ buffer_cursor_ = buffer_end_ - 1;
93
+ } else {
94
+ // Hit the bottom of the allocated pushback buffer.
95
+ // Double the buffer and continue.
96
+ uc16* new_buffer = NewArray<uc16>(pushback_buffer_backing_size_ * 2);
97
+ memcpy(new_buffer + pushback_buffer_backing_size_,
98
+ pushback_buffer_backing_,
99
+ pushback_buffer_backing_size_);
100
+ DeleteArray(pushback_buffer_backing_);
101
+ buffer_cursor_ = new_buffer + pushback_buffer_backing_size_;
102
+ pushback_buffer_backing_ = pushback_buffer_ = new_buffer;
103
+ buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_;
104
+ }
105
+ }
106
+ pushback_buffer_[buffer_cursor_ - pushback_buffer_- 1] =
107
+ static_cast<uc16>(ch);
108
+ pos_--;
109
+ }
110
+
111
+ protected:
112
+ virtual bool ReadBlock() {
113
+ if (pushback_buffer_end_cache_ != NULL) {
114
+ buffer_cursor_ = buffer_;
115
+ buffer_end_ = pushback_buffer_end_cache_;
116
+ pushback_buffer_end_cache_ = NULL;
117
+ return buffer_end_ > buffer_cursor_;
118
+ }
119
+ // Copy the top of the buffer into the pushback area.
120
+ int32_t value;
121
+ uc16* buffer_start = buffer_ + kPushBackSize;
122
+ buffer_cursor_ = buffer_end_ = buffer_start;
123
+ while ((value = stream_->Next()) >= 0) {
124
+ if (value > static_cast<int32_t>(unibrow::Utf8::kMaxThreeByteChar)) {
125
+ value = unibrow::Utf8::kBadChar;
126
+ }
127
+ // buffer_end_ is a const pointer, but buffer_ is writable.
128
+ buffer_start[buffer_end_++ - buffer_start] = static_cast<uc16>(value);
129
+ if (buffer_end_ == buffer_ + kPushBackSize + kBufferSize) break;
130
+ }
131
+ return buffer_end_ > buffer_start;
132
+ }
133
+
134
+ virtual unsigned SlowSeekForward(unsigned pos) {
135
+ // Seeking in the input is not used by preparsing.
136
+ // It's only used by the real parser based on preparser data.
137
+ UNIMPLEMENTED();
138
+ return 0;
139
+ }
140
+
141
+ private:
142
+ static const unsigned kBufferSize = 512;
143
+ static const unsigned kPushBackSize = 16;
144
+ v8::UnicodeInputStream* const stream_;
145
+ // Buffer holding first kPushBackSize characters of pushback buffer,
146
+ // then kBufferSize chars of read-ahead.
147
+ // The pushback buffer is only used if pushing back characters past
148
+ // the start of a block.
149
+ uc16 buffer_[kPushBackSize + kBufferSize];
150
+ // Limit of pushbacks before new allocation is necessary.
151
+ uc16* pushback_buffer_;
152
+ // Only if that pushback buffer at the start of buffer_ isn't sufficient
153
+ // is the following used.
154
+ const uc16* pushback_buffer_end_cache_;
155
+ uc16* pushback_buffer_backing_;
156
+ unsigned pushback_buffer_backing_size_;
157
+ };
158
+
159
+
160
+ class StandAloneJavaScriptScanner : public JavaScriptScanner {
161
+ public:
162
+ explicit StandAloneJavaScriptScanner(ScannerConstants* scanner_constants)
163
+ : JavaScriptScanner(scanner_constants) { }
164
+
165
+ void Initialize(UC16CharacterStream* source) {
166
+ source_ = source;
167
+ Init();
168
+ // Skip initial whitespace allowing HTML comment ends just like
169
+ // after a newline and scan first token.
170
+ has_line_terminator_before_next_ = true;
171
+ SkipWhiteSpace();
172
+ Scan();
173
+ }
174
+ };
175
+
176
+
177
+ // Functions declared by allocation.h and implemented in both api.cc (for v8)
178
+ // or here (for a stand-alone preparser).
179
+
180
+ void FatalProcessOutOfMemory(const char* reason) {
181
+ V8_Fatal(__FILE__, __LINE__, reason);
182
+ }
183
+
184
+ bool EnableSlowAsserts() { return true; }
185
+
186
+ } // namespace internal.
187
+
188
+
189
+ UnicodeInputStream::~UnicodeInputStream() { }
190
+
191
+
192
+ PreParserData Preparse(UnicodeInputStream* input, size_t max_stack) {
193
+ internal::InputStreamUTF16Buffer buffer(input);
194
+ uintptr_t stack_limit = reinterpret_cast<uintptr_t>(&buffer) - max_stack;
195
+ internal::ScannerConstants scanner_constants;
196
+ internal::StandAloneJavaScriptScanner scanner(&scanner_constants);
197
+ scanner.Initialize(&buffer);
198
+ internal::CompleteParserRecorder recorder;
199
+ preparser::PreParser::PreParseResult result =
200
+ preparser::PreParser::PreParseProgram(&scanner,
201
+ &recorder,
202
+ true,
203
+ stack_limit);
204
+ if (result == preparser::PreParser::kPreParseStackOverflow) {
205
+ return PreParserData::StackOverflow();
206
+ }
207
+ internal::Vector<unsigned> pre_data = recorder.ExtractData();
208
+ size_t size = pre_data.length() * sizeof(pre_data[0]);
209
+ unsigned char* data = reinterpret_cast<unsigned char*>(pre_data.start());
210
+ return PreParserData(size, data);
211
+ }
212
+
213
+ } // namespace v8.
214
+
215
+
216
+ // Used by ASSERT macros and other immediate exits.
217
+ extern "C" void V8_Fatal(const char* file, int line, const char* format, ...) {
218
+ exit(EXIT_FAILURE);
219
+ }
@@ -0,0 +1,1205 @@
1
+ // Copyright 2010 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 "../include/v8stdint.h"
29
+ #include "unicode.h"
30
+ #include "globals.h"
31
+ #include "checks.h"
32
+ #include "allocation.h"
33
+ #include "utils.h"
34
+ #include "list.h"
35
+
36
+ #include "scanner-base.h"
37
+ #include "preparse-data.h"
38
+ #include "preparser.h"
39
+
40
+ namespace v8 {
41
+ namespace preparser {
42
+
43
+ // Preparsing checks a JavaScript program and emits preparse-data that helps
44
+ // a later parsing to be faster.
45
+ // See preparser-data.h for the data.
46
+
47
+ // The PreParser checks that the syntax follows the grammar for JavaScript,
48
+ // and collects some information about the program along the way.
49
+ // The grammar check is only performed in order to understand the program
50
+ // sufficiently to deduce some information about it, that can be used
51
+ // to speed up later parsing. Finding errors is not the goal of pre-parsing,
52
+ // rather it is to speed up properly written and correct programs.
53
+ // That means that contextual checks (like a label being declared where
54
+ // it is used) are generally omitted.
55
+
56
+ namespace i = ::v8::internal;
57
+
58
+ #define CHECK_OK ok); \
59
+ if (!*ok) return -1; \
60
+ ((void)0
61
+ #define DUMMY ) // to make indentation work
62
+ #undef DUMMY
63
+
64
+
65
+ void PreParser::ReportUnexpectedToken(i::Token::Value token) {
66
+ // We don't report stack overflows here, to avoid increasing the
67
+ // stack depth even further. Instead we report it after parsing is
68
+ // over, in ParseProgram.
69
+ if (token == i::Token::ILLEGAL && stack_overflow_) {
70
+ return;
71
+ }
72
+ i::JavaScriptScanner::Location source_location = scanner_->location();
73
+
74
+ // Four of the tokens are treated specially
75
+ switch (token) {
76
+ case i::Token::EOS:
77
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
78
+ "unexpected_eos", NULL);
79
+ case i::Token::NUMBER:
80
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
81
+ "unexpected_token_number", NULL);
82
+ case i::Token::STRING:
83
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
84
+ "unexpected_token_string", NULL);
85
+ case i::Token::IDENTIFIER:
86
+ case i::Token::FUTURE_RESERVED_WORD:
87
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
88
+ "unexpected_token_identifier", NULL);
89
+ default:
90
+ const char* name = i::Token::String(token);
91
+ ReportMessageAt(source_location.beg_pos, source_location.end_pos,
92
+ "unexpected_token", name);
93
+ }
94
+ }
95
+
96
+
97
+ PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
98
+ bool* ok) {
99
+ // SourceElements ::
100
+ // (Statement)* <end_token>
101
+
102
+ while (peek() != end_token) {
103
+ ParseStatement(CHECK_OK);
104
+ }
105
+ return kUnknownSourceElements;
106
+ }
107
+
108
+
109
+ PreParser::Statement PreParser::ParseStatement(bool* ok) {
110
+ // Statement ::
111
+ // Block
112
+ // VariableStatement
113
+ // EmptyStatement
114
+ // ExpressionStatement
115
+ // IfStatement
116
+ // IterationStatement
117
+ // ContinueStatement
118
+ // BreakStatement
119
+ // ReturnStatement
120
+ // WithStatement
121
+ // LabelledStatement
122
+ // SwitchStatement
123
+ // ThrowStatement
124
+ // TryStatement
125
+ // DebuggerStatement
126
+
127
+ // Note: Since labels can only be used by 'break' and 'continue'
128
+ // statements, which themselves are only valid within blocks,
129
+ // iterations or 'switch' statements (i.e., BreakableStatements),
130
+ // labels can be simply ignored in all other cases; except for
131
+ // trivial labeled break statements 'label: break label' which is
132
+ // parsed into an empty statement.
133
+
134
+ // Keep the source position of the statement
135
+ switch (peek()) {
136
+ case i::Token::LBRACE:
137
+ return ParseBlock(ok);
138
+
139
+ case i::Token::CONST:
140
+ case i::Token::VAR:
141
+ return ParseVariableStatement(ok);
142
+
143
+ case i::Token::SEMICOLON:
144
+ Next();
145
+ return kUnknownStatement;
146
+
147
+ case i::Token::IF:
148
+ return ParseIfStatement(ok);
149
+
150
+ case i::Token::DO:
151
+ return ParseDoWhileStatement(ok);
152
+
153
+ case i::Token::WHILE:
154
+ return ParseWhileStatement(ok);
155
+
156
+ case i::Token::FOR:
157
+ return ParseForStatement(ok);
158
+
159
+ case i::Token::CONTINUE:
160
+ return ParseContinueStatement(ok);
161
+
162
+ case i::Token::BREAK:
163
+ return ParseBreakStatement(ok);
164
+
165
+ case i::Token::RETURN:
166
+ return ParseReturnStatement(ok);
167
+
168
+ case i::Token::WITH:
169
+ return ParseWithStatement(ok);
170
+
171
+ case i::Token::SWITCH:
172
+ return ParseSwitchStatement(ok);
173
+
174
+ case i::Token::THROW:
175
+ return ParseThrowStatement(ok);
176
+
177
+ case i::Token::TRY:
178
+ return ParseTryStatement(ok);
179
+
180
+ case i::Token::FUNCTION:
181
+ return ParseFunctionDeclaration(ok);
182
+
183
+ case i::Token::NATIVE:
184
+ return ParseNativeDeclaration(ok);
185
+
186
+ case i::Token::DEBUGGER:
187
+ return ParseDebuggerStatement(ok);
188
+
189
+ default:
190
+ return ParseExpressionOrLabelledStatement(ok);
191
+ }
192
+ }
193
+
194
+
195
+ PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
196
+ // FunctionDeclaration ::
197
+ // 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}'
198
+ Expect(i::Token::FUNCTION, CHECK_OK);
199
+ ParseIdentifier(CHECK_OK);
200
+ ParseFunctionLiteral(CHECK_OK);
201
+ return kUnknownStatement;
202
+ }
203
+
204
+
205
+ // Language extension which is only enabled for source files loaded
206
+ // through the API's extension mechanism. A native function
207
+ // declaration is resolved by looking up the function through a
208
+ // callback provided by the extension.
209
+ PreParser::Statement PreParser::ParseNativeDeclaration(bool* ok) {
210
+ Expect(i::Token::NATIVE, CHECK_OK);
211
+ Expect(i::Token::FUNCTION, CHECK_OK);
212
+ ParseIdentifier(CHECK_OK);
213
+ Expect(i::Token::LPAREN, CHECK_OK);
214
+ bool done = (peek() == i::Token::RPAREN);
215
+ while (!done) {
216
+ ParseIdentifier(CHECK_OK);
217
+ done = (peek() == i::Token::RPAREN);
218
+ if (!done) {
219
+ Expect(i::Token::COMMA, CHECK_OK);
220
+ }
221
+ }
222
+ Expect(i::Token::RPAREN, CHECK_OK);
223
+ Expect(i::Token::SEMICOLON, CHECK_OK);
224
+ return kUnknownStatement;
225
+ }
226
+
227
+
228
+ PreParser::Statement PreParser::ParseBlock(bool* ok) {
229
+ // Block ::
230
+ // '{' Statement* '}'
231
+
232
+ // Note that a Block does not introduce a new execution scope!
233
+ // (ECMA-262, 3rd, 12.2)
234
+ //
235
+ Expect(i::Token::LBRACE, CHECK_OK);
236
+ while (peek() != i::Token::RBRACE) {
237
+ ParseStatement(CHECK_OK);
238
+ }
239
+ Expect(i::Token::RBRACE, CHECK_OK);
240
+ return kUnknownStatement;
241
+ }
242
+
243
+
244
+ PreParser::Statement PreParser::ParseVariableStatement(bool* ok) {
245
+ // VariableStatement ::
246
+ // VariableDeclarations ';'
247
+
248
+ Statement result = ParseVariableDeclarations(true, NULL, CHECK_OK);
249
+ ExpectSemicolon(CHECK_OK);
250
+ return result;
251
+ }
252
+
253
+
254
+ // If the variable declaration declares exactly one non-const
255
+ // variable, then *var is set to that variable. In all other cases,
256
+ // *var is untouched; in particular, it is the caller's responsibility
257
+ // to initialize it properly. This mechanism is also used for the parsing
258
+ // of 'for-in' loops.
259
+ PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
260
+ int* num_decl,
261
+ bool* ok) {
262
+ // VariableDeclarations ::
263
+ // ('var' | 'const') (Identifier ('=' AssignmentExpression)?)+[',']
264
+
265
+ if (peek() == i::Token::VAR) {
266
+ Consume(i::Token::VAR);
267
+ } else if (peek() == i::Token::CONST) {
268
+ Consume(i::Token::CONST);
269
+ } else {
270
+ *ok = false;
271
+ return 0;
272
+ }
273
+
274
+ // The scope of a variable/const declared anywhere inside a function
275
+ // is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). .
276
+ int nvars = 0; // the number of variables declared
277
+ do {
278
+ // Parse variable name.
279
+ if (nvars > 0) Consume(i::Token::COMMA);
280
+ ParseIdentifier(CHECK_OK);
281
+ nvars++;
282
+ if (peek() == i::Token::ASSIGN) {
283
+ Expect(i::Token::ASSIGN, CHECK_OK);
284
+ ParseAssignmentExpression(accept_IN, CHECK_OK);
285
+ }
286
+ } while (peek() == i::Token::COMMA);
287
+
288
+ if (num_decl != NULL) *num_decl = nvars;
289
+ return kUnknownStatement;
290
+ }
291
+
292
+
293
+ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(
294
+ bool* ok) {
295
+ // ExpressionStatement | LabelledStatement ::
296
+ // Expression ';'
297
+ // Identifier ':' Statement
298
+
299
+ Expression expr = ParseExpression(true, CHECK_OK);
300
+ if (peek() == i::Token::COLON && expr == kIdentifierExpression) {
301
+ Consume(i::Token::COLON);
302
+ return ParseStatement(ok);
303
+ }
304
+ // Parsed expression statement.
305
+ ExpectSemicolon(CHECK_OK);
306
+ return kUnknownStatement;
307
+ }
308
+
309
+
310
+ PreParser::Statement PreParser::ParseIfStatement(bool* ok) {
311
+ // IfStatement ::
312
+ // 'if' '(' Expression ')' Statement ('else' Statement)?
313
+
314
+ Expect(i::Token::IF, CHECK_OK);
315
+ Expect(i::Token::LPAREN, CHECK_OK);
316
+ ParseExpression(true, CHECK_OK);
317
+ Expect(i::Token::RPAREN, CHECK_OK);
318
+ ParseStatement(CHECK_OK);
319
+ if (peek() == i::Token::ELSE) {
320
+ Next();
321
+ ParseStatement(CHECK_OK);
322
+ }
323
+ return kUnknownStatement;
324
+ }
325
+
326
+
327
+ PreParser::Statement PreParser::ParseContinueStatement(bool* ok) {
328
+ // ContinueStatement ::
329
+ // 'continue' [no line terminator] Identifier? ';'
330
+
331
+ Expect(i::Token::CONTINUE, CHECK_OK);
332
+ i::Token::Value tok = peek();
333
+ if (!scanner_->has_line_terminator_before_next() &&
334
+ tok != i::Token::SEMICOLON &&
335
+ tok != i::Token::RBRACE &&
336
+ tok != i::Token::EOS) {
337
+ ParseIdentifier(CHECK_OK);
338
+ }
339
+ ExpectSemicolon(CHECK_OK);
340
+ return kUnknownStatement;
341
+ }
342
+
343
+
344
+ PreParser::Statement PreParser::ParseBreakStatement(bool* ok) {
345
+ // BreakStatement ::
346
+ // 'break' [no line terminator] Identifier? ';'
347
+
348
+ Expect(i::Token::BREAK, CHECK_OK);
349
+ i::Token::Value tok = peek();
350
+ if (!scanner_->has_line_terminator_before_next() &&
351
+ tok != i::Token::SEMICOLON &&
352
+ tok != i::Token::RBRACE &&
353
+ tok != i::Token::EOS) {
354
+ ParseIdentifier(CHECK_OK);
355
+ }
356
+ ExpectSemicolon(CHECK_OK);
357
+ return kUnknownStatement;
358
+ }
359
+
360
+
361
+ PreParser::Statement PreParser::ParseReturnStatement(bool* ok) {
362
+ // ReturnStatement ::
363
+ // 'return' [no line terminator] Expression? ';'
364
+
365
+ // Consume the return token. It is necessary to do the before
366
+ // reporting any errors on it, because of the way errors are
367
+ // reported (underlining).
368
+ Expect(i::Token::RETURN, CHECK_OK);
369
+
370
+ // An ECMAScript program is considered syntactically incorrect if it
371
+ // contains a return statement that is not within the body of a
372
+ // function. See ECMA-262, section 12.9, page 67.
373
+ // This is not handled during preparsing.
374
+
375
+ i::Token::Value tok = peek();
376
+ if (!scanner_->has_line_terminator_before_next() &&
377
+ tok != i::Token::SEMICOLON &&
378
+ tok != i::Token::RBRACE &&
379
+ tok != i::Token::EOS) {
380
+ ParseExpression(true, CHECK_OK);
381
+ }
382
+ ExpectSemicolon(CHECK_OK);
383
+ return kUnknownStatement;
384
+ }
385
+
386
+
387
+ PreParser::Statement PreParser::ParseWithStatement(bool* ok) {
388
+ // WithStatement ::
389
+ // 'with' '(' Expression ')' Statement
390
+ Expect(i::Token::WITH, CHECK_OK);
391
+ Expect(i::Token::LPAREN, CHECK_OK);
392
+ ParseExpression(true, CHECK_OK);
393
+ Expect(i::Token::RPAREN, CHECK_OK);
394
+
395
+ scope_->EnterWith();
396
+ ParseStatement(CHECK_OK);
397
+ scope_->LeaveWith();
398
+ return kUnknownStatement;
399
+ }
400
+
401
+
402
+ PreParser::Statement PreParser::ParseSwitchStatement(bool* ok) {
403
+ // SwitchStatement ::
404
+ // 'switch' '(' Expression ')' '{' CaseClause* '}'
405
+
406
+ Expect(i::Token::SWITCH, CHECK_OK);
407
+ Expect(i::Token::LPAREN, CHECK_OK);
408
+ ParseExpression(true, CHECK_OK);
409
+ Expect(i::Token::RPAREN, CHECK_OK);
410
+
411
+ Expect(i::Token::LBRACE, CHECK_OK);
412
+ i::Token::Value token = peek();
413
+ while (token != i::Token::RBRACE) {
414
+ if (token == i::Token::CASE) {
415
+ Expect(i::Token::CASE, CHECK_OK);
416
+ ParseExpression(true, CHECK_OK);
417
+ Expect(i::Token::COLON, CHECK_OK);
418
+ } else if (token == i::Token::DEFAULT) {
419
+ Expect(i::Token::DEFAULT, CHECK_OK);
420
+ Expect(i::Token::COLON, CHECK_OK);
421
+ } else {
422
+ ParseStatement(CHECK_OK);
423
+ }
424
+ token = peek();
425
+ }
426
+ Expect(i::Token::RBRACE, CHECK_OK);
427
+
428
+ return kUnknownStatement;
429
+ }
430
+
431
+
432
+ PreParser::Statement PreParser::ParseDoWhileStatement(bool* ok) {
433
+ // DoStatement ::
434
+ // 'do' Statement 'while' '(' Expression ')' ';'
435
+
436
+ Expect(i::Token::DO, CHECK_OK);
437
+ ParseStatement(CHECK_OK);
438
+ Expect(i::Token::WHILE, CHECK_OK);
439
+ Expect(i::Token::LPAREN, CHECK_OK);
440
+ ParseExpression(true, CHECK_OK);
441
+ Expect(i::Token::RPAREN, CHECK_OK);
442
+ return kUnknownStatement;
443
+ }
444
+
445
+
446
+ PreParser::Statement PreParser::ParseWhileStatement(bool* ok) {
447
+ // WhileStatement ::
448
+ // 'while' '(' Expression ')' Statement
449
+
450
+ Expect(i::Token::WHILE, CHECK_OK);
451
+ Expect(i::Token::LPAREN, CHECK_OK);
452
+ ParseExpression(true, CHECK_OK);
453
+ Expect(i::Token::RPAREN, CHECK_OK);
454
+ ParseStatement(CHECK_OK);
455
+ return kUnknownStatement;
456
+ }
457
+
458
+
459
+ PreParser::Statement PreParser::ParseForStatement(bool* ok) {
460
+ // ForStatement ::
461
+ // 'for' '(' Expression? ';' Expression? ';' Expression? ')' Statement
462
+
463
+ Expect(i::Token::FOR, CHECK_OK);
464
+ Expect(i::Token::LPAREN, CHECK_OK);
465
+ if (peek() != i::Token::SEMICOLON) {
466
+ if (peek() == i::Token::VAR || peek() == i::Token::CONST) {
467
+ int decl_count;
468
+ ParseVariableDeclarations(false, &decl_count, CHECK_OK);
469
+ if (peek() == i::Token::IN && decl_count == 1) {
470
+ Expect(i::Token::IN, CHECK_OK);
471
+ ParseExpression(true, CHECK_OK);
472
+ Expect(i::Token::RPAREN, CHECK_OK);
473
+
474
+ ParseStatement(CHECK_OK);
475
+ return kUnknownStatement;
476
+ }
477
+ } else {
478
+ ParseExpression(false, CHECK_OK);
479
+ if (peek() == i::Token::IN) {
480
+ Expect(i::Token::IN, CHECK_OK);
481
+ ParseExpression(true, CHECK_OK);
482
+ Expect(i::Token::RPAREN, CHECK_OK);
483
+
484
+ ParseStatement(CHECK_OK);
485
+ return kUnknownStatement;
486
+ }
487
+ }
488
+ }
489
+
490
+ // Parsed initializer at this point.
491
+ Expect(i::Token::SEMICOLON, CHECK_OK);
492
+
493
+ if (peek() != i::Token::SEMICOLON) {
494
+ ParseExpression(true, CHECK_OK);
495
+ }
496
+ Expect(i::Token::SEMICOLON, CHECK_OK);
497
+
498
+ if (peek() != i::Token::RPAREN) {
499
+ ParseExpression(true, CHECK_OK);
500
+ }
501
+ Expect(i::Token::RPAREN, CHECK_OK);
502
+
503
+ ParseStatement(CHECK_OK);
504
+ return kUnknownStatement;
505
+ }
506
+
507
+
508
+ PreParser::Statement PreParser::ParseThrowStatement(bool* ok) {
509
+ // ThrowStatement ::
510
+ // 'throw' [no line terminator] Expression ';'
511
+
512
+ Expect(i::Token::THROW, CHECK_OK);
513
+ if (scanner_->has_line_terminator_before_next()) {
514
+ i::JavaScriptScanner::Location pos = scanner_->location();
515
+ ReportMessageAt(pos.beg_pos, pos.end_pos,
516
+ "newline_after_throw", NULL);
517
+ *ok = false;
518
+ return kUnknownStatement;
519
+ }
520
+ ParseExpression(true, CHECK_OK);
521
+ ExpectSemicolon(CHECK_OK);
522
+
523
+ return kUnknownStatement;
524
+ }
525
+
526
+
527
+ PreParser::Statement PreParser::ParseTryStatement(bool* ok) {
528
+ // TryStatement ::
529
+ // 'try' Block Catch
530
+ // 'try' Block Finally
531
+ // 'try' Block Catch Finally
532
+ //
533
+ // Catch ::
534
+ // 'catch' '(' Identifier ')' Block
535
+ //
536
+ // Finally ::
537
+ // 'finally' Block
538
+
539
+ // In preparsing, allow any number of catch/finally blocks, including zero
540
+ // of both.
541
+
542
+ Expect(i::Token::TRY, CHECK_OK);
543
+
544
+ ParseBlock(CHECK_OK);
545
+
546
+ bool catch_or_finally_seen = false;
547
+ if (peek() == i::Token::CATCH) {
548
+ Consume(i::Token::CATCH);
549
+ Expect(i::Token::LPAREN, CHECK_OK);
550
+ ParseIdentifier(CHECK_OK);
551
+ Expect(i::Token::RPAREN, CHECK_OK);
552
+ scope_->EnterWith();
553
+ ParseBlock(ok);
554
+ scope_->LeaveWith();
555
+ if (!*ok) return kUnknownStatement;
556
+ catch_or_finally_seen = true;
557
+ }
558
+ if (peek() == i::Token::FINALLY) {
559
+ Consume(i::Token::FINALLY);
560
+ ParseBlock(CHECK_OK);
561
+ catch_or_finally_seen = true;
562
+ }
563
+ if (!catch_or_finally_seen) {
564
+ *ok = false;
565
+ }
566
+ return kUnknownStatement;
567
+ }
568
+
569
+
570
+ PreParser::Statement PreParser::ParseDebuggerStatement(bool* ok) {
571
+ // In ECMA-262 'debugger' is defined as a reserved keyword. In some browser
572
+ // contexts this is used as a statement which invokes the debugger as if a
573
+ // break point is present.
574
+ // DebuggerStatement ::
575
+ // 'debugger' ';'
576
+
577
+ Expect(i::Token::DEBUGGER, CHECK_OK);
578
+ ExpectSemicolon(CHECK_OK);
579
+ return kUnknownStatement;
580
+ }
581
+
582
+
583
+ // Precedence = 1
584
+ PreParser::Expression PreParser::ParseExpression(bool accept_IN, bool* ok) {
585
+ // Expression ::
586
+ // AssignmentExpression
587
+ // Expression ',' AssignmentExpression
588
+
589
+ Expression result = ParseAssignmentExpression(accept_IN, CHECK_OK);
590
+ while (peek() == i::Token::COMMA) {
591
+ Expect(i::Token::COMMA, CHECK_OK);
592
+ ParseAssignmentExpression(accept_IN, CHECK_OK);
593
+ result = kUnknownExpression;
594
+ }
595
+ return result;
596
+ }
597
+
598
+
599
+ // Precedence = 2
600
+ PreParser::Expression PreParser::ParseAssignmentExpression(bool accept_IN,
601
+ bool* ok) {
602
+ // AssignmentExpression ::
603
+ // ConditionalExpression
604
+ // LeftHandSideExpression AssignmentOperator AssignmentExpression
605
+
606
+ Expression expression = ParseConditionalExpression(accept_IN, CHECK_OK);
607
+
608
+ if (!i::Token::IsAssignmentOp(peek())) {
609
+ // Parsed conditional expression only (no assignment).
610
+ return expression;
611
+ }
612
+
613
+ i::Token::Value op = Next(); // Get assignment operator.
614
+ ParseAssignmentExpression(accept_IN, CHECK_OK);
615
+
616
+ if ((op == i::Token::ASSIGN) && (expression == kThisPropertyExpression)) {
617
+ scope_->AddProperty();
618
+ }
619
+
620
+ return kUnknownExpression;
621
+ }
622
+
623
+
624
+ // Precedence = 3
625
+ PreParser::Expression PreParser::ParseConditionalExpression(bool accept_IN,
626
+ bool* ok) {
627
+ // ConditionalExpression ::
628
+ // LogicalOrExpression
629
+ // LogicalOrExpression '?' AssignmentExpression ':' AssignmentExpression
630
+
631
+ // We start using the binary expression parser for prec >= 4 only!
632
+ Expression expression = ParseBinaryExpression(4, accept_IN, CHECK_OK);
633
+ if (peek() != i::Token::CONDITIONAL) return expression;
634
+ Consume(i::Token::CONDITIONAL);
635
+ // In parsing the first assignment expression in conditional
636
+ // expressions we always accept the 'in' keyword; see ECMA-262,
637
+ // section 11.12, page 58.
638
+ ParseAssignmentExpression(true, CHECK_OK);
639
+ Expect(i::Token::COLON, CHECK_OK);
640
+ ParseAssignmentExpression(accept_IN, CHECK_OK);
641
+ return kUnknownExpression;
642
+ }
643
+
644
+
645
+ int PreParser::Precedence(i::Token::Value tok, bool accept_IN) {
646
+ if (tok == i::Token::IN && !accept_IN)
647
+ return 0; // 0 precedence will terminate binary expression parsing
648
+
649
+ return i::Token::Precedence(tok);
650
+ }
651
+
652
+
653
+ // Precedence >= 4
654
+ PreParser::Expression PreParser::ParseBinaryExpression(int prec,
655
+ bool accept_IN,
656
+ bool* ok) {
657
+ Expression result = ParseUnaryExpression(CHECK_OK);
658
+ for (int prec1 = Precedence(peek(), accept_IN); prec1 >= prec; prec1--) {
659
+ // prec1 >= 4
660
+ while (Precedence(peek(), accept_IN) == prec1) {
661
+ Next();
662
+ ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK);
663
+ result = kUnknownExpression;
664
+ }
665
+ }
666
+ return result;
667
+ }
668
+
669
+
670
+ PreParser::Expression PreParser::ParseUnaryExpression(bool* ok) {
671
+ // UnaryExpression ::
672
+ // PostfixExpression
673
+ // 'delete' UnaryExpression
674
+ // 'void' UnaryExpression
675
+ // 'typeof' UnaryExpression
676
+ // '++' UnaryExpression
677
+ // '--' UnaryExpression
678
+ // '+' UnaryExpression
679
+ // '-' UnaryExpression
680
+ // '~' UnaryExpression
681
+ // '!' UnaryExpression
682
+
683
+ i::Token::Value op = peek();
684
+ if (i::Token::IsUnaryOp(op) || i::Token::IsCountOp(op)) {
685
+ op = Next();
686
+ ParseUnaryExpression(ok);
687
+ return kUnknownExpression;
688
+ } else {
689
+ return ParsePostfixExpression(ok);
690
+ }
691
+ }
692
+
693
+
694
+ PreParser::Expression PreParser::ParsePostfixExpression(bool* ok) {
695
+ // PostfixExpression ::
696
+ // LeftHandSideExpression ('++' | '--')?
697
+
698
+ Expression expression = ParseLeftHandSideExpression(CHECK_OK);
699
+ if (!scanner_->has_line_terminator_before_next() &&
700
+ i::Token::IsCountOp(peek())) {
701
+ Next();
702
+ return kUnknownExpression;
703
+ }
704
+ return expression;
705
+ }
706
+
707
+
708
+ PreParser::Expression PreParser::ParseLeftHandSideExpression(bool* ok) {
709
+ // LeftHandSideExpression ::
710
+ // (NewExpression | MemberExpression) ...
711
+
712
+ Expression result;
713
+ if (peek() == i::Token::NEW) {
714
+ result = ParseNewExpression(CHECK_OK);
715
+ } else {
716
+ result = ParseMemberExpression(CHECK_OK);
717
+ }
718
+
719
+ while (true) {
720
+ switch (peek()) {
721
+ case i::Token::LBRACK: {
722
+ Consume(i::Token::LBRACK);
723
+ ParseExpression(true, CHECK_OK);
724
+ Expect(i::Token::RBRACK, CHECK_OK);
725
+ if (result == kThisExpression) {
726
+ result = kThisPropertyExpression;
727
+ } else {
728
+ result = kUnknownExpression;
729
+ }
730
+ break;
731
+ }
732
+
733
+ case i::Token::LPAREN: {
734
+ ParseArguments(CHECK_OK);
735
+ result = kUnknownExpression;
736
+ break;
737
+ }
738
+
739
+ case i::Token::PERIOD: {
740
+ Consume(i::Token::PERIOD);
741
+ ParseIdentifierName(CHECK_OK);
742
+ if (result == kThisExpression) {
743
+ result = kThisPropertyExpression;
744
+ } else {
745
+ result = kUnknownExpression;
746
+ }
747
+ break;
748
+ }
749
+
750
+ default:
751
+ return result;
752
+ }
753
+ }
754
+ }
755
+
756
+
757
+ PreParser::Expression PreParser::ParseNewExpression(bool* ok) {
758
+ // NewExpression ::
759
+ // ('new')+ MemberExpression
760
+
761
+ // The grammar for new expressions is pretty warped. The keyword
762
+ // 'new' can either be a part of the new expression (where it isn't
763
+ // followed by an argument list) or a part of the member expression,
764
+ // where it must be followed by an argument list. To accommodate
765
+ // this, we parse the 'new' keywords greedily and keep track of how
766
+ // many we have parsed. This information is then passed on to the
767
+ // member expression parser, which is only allowed to match argument
768
+ // lists as long as it has 'new' prefixes left
769
+ unsigned new_count = 0;
770
+ do {
771
+ Consume(i::Token::NEW);
772
+ new_count++;
773
+ } while (peek() == i::Token::NEW);
774
+
775
+ return ParseMemberWithNewPrefixesExpression(new_count, ok);
776
+ }
777
+
778
+
779
+ PreParser::Expression PreParser::ParseMemberExpression(bool* ok) {
780
+ return ParseMemberWithNewPrefixesExpression(0, ok);
781
+ }
782
+
783
+
784
+ PreParser::Expression PreParser::ParseMemberWithNewPrefixesExpression(
785
+ unsigned new_count, bool* ok) {
786
+ // MemberExpression ::
787
+ // (PrimaryExpression | FunctionLiteral)
788
+ // ('[' Expression ']' | '.' Identifier | Arguments)*
789
+
790
+ // Parse the initial primary or function expression.
791
+ Expression result = kUnknownExpression;
792
+ if (peek() == i::Token::FUNCTION) {
793
+ Consume(i::Token::FUNCTION);
794
+ if (peek_any_identifier()) {
795
+ ParseIdentifier(CHECK_OK);
796
+ }
797
+ result = ParseFunctionLiteral(CHECK_OK);
798
+ } else {
799
+ result = ParsePrimaryExpression(CHECK_OK);
800
+ }
801
+
802
+ while (true) {
803
+ switch (peek()) {
804
+ case i::Token::LBRACK: {
805
+ Consume(i::Token::LBRACK);
806
+ ParseExpression(true, CHECK_OK);
807
+ Expect(i::Token::RBRACK, CHECK_OK);
808
+ if (result == kThisExpression) {
809
+ result = kThisPropertyExpression;
810
+ } else {
811
+ result = kUnknownExpression;
812
+ }
813
+ break;
814
+ }
815
+ case i::Token::PERIOD: {
816
+ Consume(i::Token::PERIOD);
817
+ ParseIdentifierName(CHECK_OK);
818
+ if (result == kThisExpression) {
819
+ result = kThisPropertyExpression;
820
+ } else {
821
+ result = kUnknownExpression;
822
+ }
823
+ break;
824
+ }
825
+ case i::Token::LPAREN: {
826
+ if (new_count == 0) return result;
827
+ // Consume one of the new prefixes (already parsed).
828
+ ParseArguments(CHECK_OK);
829
+ new_count--;
830
+ result = kUnknownExpression;
831
+ break;
832
+ }
833
+ default:
834
+ return result;
835
+ }
836
+ }
837
+ }
838
+
839
+
840
+ PreParser::Expression PreParser::ParsePrimaryExpression(bool* ok) {
841
+ // PrimaryExpression ::
842
+ // 'this'
843
+ // 'null'
844
+ // 'true'
845
+ // 'false'
846
+ // Identifier
847
+ // Number
848
+ // String
849
+ // ArrayLiteral
850
+ // ObjectLiteral
851
+ // RegExpLiteral
852
+ // '(' Expression ')'
853
+
854
+ Expression result = kUnknownExpression;
855
+ switch (peek()) {
856
+ case i::Token::THIS: {
857
+ Next();
858
+ result = kThisExpression;
859
+ break;
860
+ }
861
+
862
+ case i::Token::IDENTIFIER:
863
+ case i::Token::FUTURE_RESERVED_WORD: {
864
+ ParseIdentifier(CHECK_OK);
865
+ result = kIdentifierExpression;
866
+ break;
867
+ }
868
+
869
+ case i::Token::NULL_LITERAL:
870
+ case i::Token::TRUE_LITERAL:
871
+ case i::Token::FALSE_LITERAL:
872
+ case i::Token::NUMBER: {
873
+ Next();
874
+ break;
875
+ }
876
+ case i::Token::STRING: {
877
+ Next();
878
+ result = GetStringSymbol();
879
+ break;
880
+ }
881
+
882
+ case i::Token::ASSIGN_DIV:
883
+ result = ParseRegExpLiteral(true, CHECK_OK);
884
+ break;
885
+
886
+ case i::Token::DIV:
887
+ result = ParseRegExpLiteral(false, CHECK_OK);
888
+ break;
889
+
890
+ case i::Token::LBRACK:
891
+ result = ParseArrayLiteral(CHECK_OK);
892
+ break;
893
+
894
+ case i::Token::LBRACE:
895
+ result = ParseObjectLiteral(CHECK_OK);
896
+ break;
897
+
898
+ case i::Token::LPAREN:
899
+ Consume(i::Token::LPAREN);
900
+ parenthesized_function_ = (peek() == i::Token::FUNCTION);
901
+ result = ParseExpression(true, CHECK_OK);
902
+ Expect(i::Token::RPAREN, CHECK_OK);
903
+ if (result == kIdentifierExpression) result = kUnknownExpression;
904
+ break;
905
+
906
+ case i::Token::MOD:
907
+ result = ParseV8Intrinsic(CHECK_OK);
908
+ break;
909
+
910
+ default: {
911
+ Next();
912
+ *ok = false;
913
+ return kUnknownExpression;
914
+ }
915
+ }
916
+
917
+ return result;
918
+ }
919
+
920
+
921
+ PreParser::Expression PreParser::ParseArrayLiteral(bool* ok) {
922
+ // ArrayLiteral ::
923
+ // '[' Expression? (',' Expression?)* ']'
924
+ Expect(i::Token::LBRACK, CHECK_OK);
925
+ while (peek() != i::Token::RBRACK) {
926
+ if (peek() != i::Token::COMMA) {
927
+ ParseAssignmentExpression(true, CHECK_OK);
928
+ }
929
+ if (peek() != i::Token::RBRACK) {
930
+ Expect(i::Token::COMMA, CHECK_OK);
931
+ }
932
+ }
933
+ Expect(i::Token::RBRACK, CHECK_OK);
934
+
935
+ scope_->NextMaterializedLiteralIndex();
936
+ return kUnknownExpression;
937
+ }
938
+
939
+
940
+ PreParser::Expression PreParser::ParseObjectLiteral(bool* ok) {
941
+ // ObjectLiteral ::
942
+ // '{' (
943
+ // ((IdentifierName | String | Number) ':' AssignmentExpression)
944
+ // | (('get' | 'set') (IdentifierName | String | Number) FunctionLiteral)
945
+ // )*[','] '}'
946
+
947
+ Expect(i::Token::LBRACE, CHECK_OK);
948
+ while (peek() != i::Token::RBRACE) {
949
+ i::Token::Value next = peek();
950
+ switch (next) {
951
+ case i::Token::IDENTIFIER:
952
+ case i::Token::FUTURE_RESERVED_WORD: {
953
+ bool is_getter = false;
954
+ bool is_setter = false;
955
+ ParseIdentifierOrGetOrSet(&is_getter, &is_setter, CHECK_OK);
956
+ if ((is_getter || is_setter) && peek() != i::Token::COLON) {
957
+ i::Token::Value name = Next();
958
+ bool is_keyword = i::Token::IsKeyword(name);
959
+ if (name != i::Token::IDENTIFIER &&
960
+ name != i::Token::FUTURE_RESERVED_WORD &&
961
+ name != i::Token::NUMBER &&
962
+ name != i::Token::STRING &&
963
+ !is_keyword) {
964
+ *ok = false;
965
+ return kUnknownExpression;
966
+ }
967
+ if (!is_keyword) {
968
+ LogSymbol();
969
+ }
970
+ ParseFunctionLiteral(CHECK_OK);
971
+ if (peek() != i::Token::RBRACE) {
972
+ Expect(i::Token::COMMA, CHECK_OK);
973
+ }
974
+ continue; // restart the while
975
+ }
976
+ break;
977
+ }
978
+ case i::Token::STRING:
979
+ Consume(next);
980
+ GetStringSymbol();
981
+ break;
982
+ case i::Token::NUMBER:
983
+ Consume(next);
984
+ break;
985
+ default:
986
+ if (i::Token::IsKeyword(next)) {
987
+ Consume(next);
988
+ } else {
989
+ // Unexpected token.
990
+ *ok = false;
991
+ return kUnknownExpression;
992
+ }
993
+ }
994
+
995
+ Expect(i::Token::COLON, CHECK_OK);
996
+ ParseAssignmentExpression(true, CHECK_OK);
997
+
998
+ // TODO(1240767): Consider allowing trailing comma.
999
+ if (peek() != i::Token::RBRACE) Expect(i::Token::COMMA, CHECK_OK);
1000
+ }
1001
+ Expect(i::Token::RBRACE, CHECK_OK);
1002
+
1003
+ scope_->NextMaterializedLiteralIndex();
1004
+ return kUnknownExpression;
1005
+ }
1006
+
1007
+
1008
+ PreParser::Expression PreParser::ParseRegExpLiteral(bool seen_equal,
1009
+ bool* ok) {
1010
+ if (!scanner_->ScanRegExpPattern(seen_equal)) {
1011
+ Next();
1012
+ i::JavaScriptScanner::Location location = scanner_->location();
1013
+ ReportMessageAt(location.beg_pos, location.end_pos,
1014
+ "unterminated_regexp", NULL);
1015
+ *ok = false;
1016
+ return kUnknownExpression;
1017
+ }
1018
+
1019
+ scope_->NextMaterializedLiteralIndex();
1020
+
1021
+ if (!scanner_->ScanRegExpFlags()) {
1022
+ Next();
1023
+ i::JavaScriptScanner::Location location = scanner_->location();
1024
+ ReportMessageAt(location.beg_pos, location.end_pos,
1025
+ "invalid_regexp_flags", NULL);
1026
+ *ok = false;
1027
+ return kUnknownExpression;
1028
+ }
1029
+ Next();
1030
+ return kUnknownExpression;
1031
+ }
1032
+
1033
+
1034
+ PreParser::Arguments PreParser::ParseArguments(bool* ok) {
1035
+ // Arguments ::
1036
+ // '(' (AssignmentExpression)*[','] ')'
1037
+
1038
+ Expect(i::Token::LPAREN, CHECK_OK);
1039
+ bool done = (peek() == i::Token::RPAREN);
1040
+ int argc = 0;
1041
+ while (!done) {
1042
+ ParseAssignmentExpression(true, CHECK_OK);
1043
+ argc++;
1044
+ done = (peek() == i::Token::RPAREN);
1045
+ if (!done) Expect(i::Token::COMMA, CHECK_OK);
1046
+ }
1047
+ Expect(i::Token::RPAREN, CHECK_OK);
1048
+ return argc;
1049
+ }
1050
+
1051
+
1052
+ PreParser::Expression PreParser::ParseFunctionLiteral(bool* ok) {
1053
+ // Function ::
1054
+ // '(' FormalParameterList? ')' '{' FunctionBody '}'
1055
+
1056
+ // Parse function body.
1057
+ ScopeType outer_scope_type = scope_->type();
1058
+ bool inside_with = scope_->IsInsideWith();
1059
+ Scope function_scope(&scope_, kFunctionScope);
1060
+
1061
+ // FormalParameterList ::
1062
+ // '(' (Identifier)*[','] ')'
1063
+ Expect(i::Token::LPAREN, CHECK_OK);
1064
+ bool done = (peek() == i::Token::RPAREN);
1065
+ while (!done) {
1066
+ ParseIdentifier(CHECK_OK);
1067
+ done = (peek() == i::Token::RPAREN);
1068
+ if (!done) {
1069
+ Expect(i::Token::COMMA, CHECK_OK);
1070
+ }
1071
+ }
1072
+ Expect(i::Token::RPAREN, CHECK_OK);
1073
+
1074
+ Expect(i::Token::LBRACE, CHECK_OK);
1075
+ int function_block_pos = scanner_->location().beg_pos;
1076
+
1077
+ // Determine if the function will be lazily compiled.
1078
+ // Currently only happens to top-level functions.
1079
+ // Optimistically assume that all top-level functions are lazily compiled.
1080
+ bool is_lazily_compiled = (outer_scope_type == kTopLevelScope &&
1081
+ !inside_with && allow_lazy_ &&
1082
+ !parenthesized_function_);
1083
+ parenthesized_function_ = false;
1084
+
1085
+ if (is_lazily_compiled) {
1086
+ log_->PauseRecording();
1087
+ ParseSourceElements(i::Token::RBRACE, ok);
1088
+ log_->ResumeRecording();
1089
+ if (!*ok) return kUnknownExpression;
1090
+
1091
+ Expect(i::Token::RBRACE, CHECK_OK);
1092
+
1093
+ // Position right after terminal '}'.
1094
+ int end_pos = scanner_->location().end_pos;
1095
+ log_->LogFunction(function_block_pos, end_pos,
1096
+ function_scope.materialized_literal_count(),
1097
+ function_scope.expected_properties());
1098
+ } else {
1099
+ ParseSourceElements(i::Token::RBRACE, CHECK_OK);
1100
+ Expect(i::Token::RBRACE, CHECK_OK);
1101
+ }
1102
+ return kUnknownExpression;
1103
+ }
1104
+
1105
+
1106
+ PreParser::Expression PreParser::ParseV8Intrinsic(bool* ok) {
1107
+ // CallRuntime ::
1108
+ // '%' Identifier Arguments
1109
+
1110
+ Expect(i::Token::MOD, CHECK_OK);
1111
+ ParseIdentifier(CHECK_OK);
1112
+ ParseArguments(CHECK_OK);
1113
+
1114
+ return kUnknownExpression;
1115
+ }
1116
+
1117
+
1118
+ void PreParser::ExpectSemicolon(bool* ok) {
1119
+ // Check for automatic semicolon insertion according to
1120
+ // the rules given in ECMA-262, section 7.9, page 21.
1121
+ i::Token::Value tok = peek();
1122
+ if (tok == i::Token::SEMICOLON) {
1123
+ Next();
1124
+ return;
1125
+ }
1126
+ if (scanner_->has_line_terminator_before_next() ||
1127
+ tok == i::Token::RBRACE ||
1128
+ tok == i::Token::EOS) {
1129
+ return;
1130
+ }
1131
+ Expect(i::Token::SEMICOLON, ok);
1132
+ }
1133
+
1134
+
1135
+ void PreParser::LogSymbol() {
1136
+ int identifier_pos = scanner_->location().beg_pos;
1137
+ if (scanner_->is_literal_ascii()) {
1138
+ log_->LogAsciiSymbol(identifier_pos, scanner_->literal_ascii_string());
1139
+ } else {
1140
+ log_->LogUC16Symbol(identifier_pos, scanner_->literal_uc16_string());
1141
+ }
1142
+ }
1143
+
1144
+
1145
+ PreParser::Identifier PreParser::GetIdentifierSymbol() {
1146
+ LogSymbol();
1147
+ return kUnknownIdentifier;
1148
+ }
1149
+
1150
+
1151
+ PreParser::Expression PreParser::GetStringSymbol() {
1152
+ LogSymbol();
1153
+ return kUnknownExpression;
1154
+ }
1155
+
1156
+
1157
+ PreParser::Identifier PreParser::ParseIdentifier(bool* ok) {
1158
+ if (!Check(i::Token::FUTURE_RESERVED_WORD)) {
1159
+ Expect(i::Token::IDENTIFIER, ok);
1160
+ }
1161
+ if (!*ok) return kUnknownIdentifier;
1162
+ return GetIdentifierSymbol();
1163
+ }
1164
+
1165
+
1166
+ PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
1167
+ i::Token::Value next = Next();
1168
+ if (i::Token::IsKeyword(next)) {
1169
+ int pos = scanner_->location().beg_pos;
1170
+ const char* keyword = i::Token::String(next);
1171
+ log_->LogAsciiSymbol(pos, i::Vector<const char>(keyword,
1172
+ i::StrLength(keyword)));
1173
+ return kUnknownExpression;
1174
+ }
1175
+ if (next == i::Token::IDENTIFIER ||
1176
+ next == i::Token::FUTURE_RESERVED_WORD) {
1177
+ return GetIdentifierSymbol();
1178
+ }
1179
+ *ok = false;
1180
+ return kUnknownIdentifier;
1181
+ }
1182
+
1183
+
1184
+ // This function reads an identifier and determines whether or not it
1185
+ // is 'get' or 'set'.
1186
+ PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get,
1187
+ bool* is_set,
1188
+ bool* ok) {
1189
+ PreParser::Identifier result = ParseIdentifier(CHECK_OK);
1190
+ if (scanner_->is_literal_ascii() && scanner_->literal_length() == 3) {
1191
+ const char* token = scanner_->literal_ascii_string().start();
1192
+ *is_get = strncmp(token, "get", 3) == 0;
1193
+ *is_set = !*is_get && strncmp(token, "set", 3) == 0;
1194
+ }
1195
+ return result;
1196
+ }
1197
+
1198
+ bool PreParser::peek_any_identifier() {
1199
+ i::Token::Value next = peek();
1200
+ return next == i::Token::IDENTIFIER ||
1201
+ next == i::Token::FUTURE_RESERVED_WORD;
1202
+ }
1203
+
1204
+ #undef CHECK_OK
1205
+ } } // v8::preparser