therubyracer 0.6.3 → 0.7.0.pre

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 (520) hide show
  1. data/Rakefile +10 -9
  2. data/ext/v8/callbacks.cpp +15 -8
  3. data/ext/v8/converters.cpp +7 -8
  4. data/ext/v8/converters.h +0 -2
  5. data/ext/v8/extconf.rb +2 -0
  6. data/ext/v8/rr.cpp +169 -0
  7. data/ext/v8/rr.h +34 -0
  8. data/ext/v8/upstream/{2.0.6 → 2.1.10}/AUTHORS +8 -1
  9. data/ext/v8/upstream/{2.0.6 → 2.1.10}/ChangeLog +198 -0
  10. data/ext/v8/upstream/{2.0.6 → 2.1.10}/LICENSE +0 -0
  11. data/ext/v8/upstream/{2.0.6 → 2.1.10}/SConstruct +152 -38
  12. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8-debug.h +52 -4
  13. data/ext/v8/upstream/2.1.10/include/v8-profiler.h +176 -0
  14. data/ext/v8/upstream/{2.0.6 → 2.1.10}/include/v8.h +227 -48
  15. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/SConscript +60 -10
  16. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.cc +5 -39
  17. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/accessors.h +0 -0
  18. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.cc +0 -0
  19. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/allocation.h +0 -0
  20. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.cc +477 -57
  21. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/api.h +8 -4
  22. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apinatives.js +1 -1
  23. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/apiutils.h +0 -0
  24. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arguments.h +5 -6
  25. data/ext/v8/upstream/{2.0.6/src/arm/assembler-thumb2-inl.h → 2.1.10/src/arm/assembler-arm-inl.h} +42 -27
  26. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.cc +430 -216
  27. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-arm.h +199 -110
  28. data/ext/v8/upstream/{2.0.6/src/arm/assembler-arm-inl.h → 2.1.10/src/arm/assembler-thumb2-inl.h} +4 -18
  29. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.cc +142 -85
  30. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/assembler-thumb2.h +18 -9
  31. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/builtins-arm.cc +127 -87
  32. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm-inl.h +3 -5
  33. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/codegen-arm.cc +4634 -1427
  34. data/ext/v8/upstream/2.1.10/src/arm/codegen-arm.h +946 -0
  35. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.cc +21 -3
  36. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/constants-arm.h +39 -13
  37. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/cpu-arm.cc +9 -3
  38. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/debug-arm.cc +34 -8
  39. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/disasm-arm.cc +262 -117
  40. data/ext/v8/upstream/2.1.10/src/arm/fast-codegen-arm.cc +238 -0
  41. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.cc +0 -0
  42. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/frames-arm.h +0 -0
  43. data/ext/v8/upstream/{2.0.6/src/arm/fast-codegen-arm.cc → 2.1.10/src/arm/full-codegen-arm.cc} +453 -283
  44. data/ext/v8/upstream/2.1.10/src/arm/ic-arm.cc +1833 -0
  45. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/jump-target-arm.cc +3 -29
  46. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.cc +564 -104
  47. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/macro-assembler-arm.h +255 -46
  48. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.cc +78 -104
  49. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/regexp-macro-assembler-arm.h +6 -22
  50. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm-inl.h +0 -3
  51. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.cc +0 -0
  52. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/register-allocator-arm.h +2 -1
  53. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.cc +557 -180
  54. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/simulator-arm.h +52 -4
  55. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/arm/stub-cache-arm.cc +904 -240
  56. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.cc +668 -0
  57. data/ext/v8/upstream/2.1.10/src/arm/virtual-frame-arm.h +503 -0
  58. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/array.js +82 -109
  59. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.cc +49 -13
  60. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/assembler.h +27 -5
  61. data/ext/v8/upstream/2.1.10/src/ast.cc +1138 -0
  62. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ast.h +354 -53
  63. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.cc +609 -501
  64. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bootstrapper.h +27 -8
  65. data/ext/v8/upstream/2.1.10/src/builtins.cc +1512 -0
  66. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/builtins.h +41 -25
  67. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/bytecodes-irregexp.h +0 -0
  68. data/ext/v8/upstream/2.1.10/src/cached-powers.h +119 -0
  69. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates-inl.h +0 -0
  70. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/char-predicates.h +0 -0
  71. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.cc +0 -0
  72. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/checks.h +25 -1
  73. data/ext/v8/upstream/2.1.10/src/circular-queue-inl.h +101 -0
  74. data/ext/v8/upstream/2.1.10/src/circular-queue.cc +121 -0
  75. data/ext/v8/upstream/2.1.10/src/circular-queue.h +129 -0
  76. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.cc +23 -8
  77. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code-stubs.h +16 -4
  78. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/code.h +0 -0
  79. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen-inl.h +6 -34
  80. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.cc +73 -92
  81. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/codegen.h +164 -68
  82. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.cc +117 -73
  83. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/compilation-cache.h +18 -17
  84. data/ext/v8/upstream/2.1.10/src/compiler.cc +623 -0
  85. data/ext/v8/upstream/2.1.10/src/compiler.h +299 -0
  86. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.cc +0 -0
  87. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/contexts.h +8 -11
  88. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions-inl.h +28 -13
  89. data/ext/v8/upstream/2.1.10/src/conversions.cc +1105 -0
  90. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/conversions.h +9 -4
  91. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.cc +0 -0
  92. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/counters.h +1 -1
  93. data/ext/v8/upstream/2.1.10/src/cpu-profiler-inl.h +99 -0
  94. data/ext/v8/upstream/2.1.10/src/cpu-profiler.cc +494 -0
  95. data/ext/v8/upstream/2.1.10/src/cpu-profiler.h +277 -0
  96. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/cpu.h +0 -0
  97. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.cc +15 -4
  98. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-debug.h +0 -0
  99. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-posix.cc +18 -0
  100. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-readline.cc +2 -2
  101. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8-windows.cc +0 -0
  102. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.cc +10 -6
  103. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.h +2 -0
  104. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/d8.js +43 -38
  105. data/ext/v8/upstream/2.1.10/src/data-flow.cc +755 -0
  106. data/ext/v8/upstream/2.1.10/src/data-flow.h +278 -0
  107. data/ext/v8/upstream/{2.0.6/src/date-delay.js → 2.1.10/src/date.js} +100 -110
  108. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser-inl.h +11 -2
  109. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.cc +24 -26
  110. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dateparser.h +8 -4
  111. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.cc +3 -1
  112. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug-agent.h +0 -0
  113. data/ext/v8/upstream/{2.0.6/src/debug-delay.js → 2.1.10/src/debug-debugger.js} +111 -15
  114. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.cc +156 -96
  115. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/debug.h +53 -5
  116. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disasm.h +0 -0
  117. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.cc +2 -8
  118. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/disassembler.h +0 -0
  119. data/ext/v8/upstream/2.1.10/src/diy-fp.cc +58 -0
  120. data/ext/v8/upstream/2.1.10/src/diy-fp.h +117 -0
  121. data/ext/v8/upstream/2.1.10/src/double.h +169 -0
  122. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/dtoa-config.c +4 -3
  123. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.cc +22 -22
  124. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/execution.h +17 -4
  125. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.cc +70 -46
  126. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/factory.h +27 -17
  127. data/ext/v8/upstream/2.1.10/src/fast-codegen.cc +746 -0
  128. data/ext/v8/upstream/2.1.10/src/fast-codegen.h +161 -0
  129. data/ext/v8/upstream/2.1.10/src/fast-dtoa.cc +512 -0
  130. data/ext/v8/upstream/2.1.10/src/fast-dtoa.h +59 -0
  131. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flag-definitions.h +32 -11
  132. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.cc +0 -0
  133. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/flags.h +0 -0
  134. data/ext/v8/upstream/2.1.10/src/flow-graph.cc +763 -0
  135. data/ext/v8/upstream/2.1.10/src/flow-graph.h +180 -0
  136. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.cc +1 -4
  137. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frame-element.h +49 -11
  138. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames-inl.h +2 -0
  139. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.cc +91 -17
  140. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/frames.h +24 -2
  141. data/ext/v8/upstream/{2.0.6/src/fast-codegen.cc → 2.1.10/src/full-codegen.cc} +549 -198
  142. data/ext/v8/upstream/{2.0.6/src/fast-codegen.h → 2.1.10/src/full-codegen.h} +109 -29
  143. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.cc +0 -0
  144. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/func-name-inferrer.h +0 -0
  145. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.cc +0 -0
  146. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/global-handles.h +0 -0
  147. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/globals.h +67 -43
  148. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles-inl.h +0 -0
  149. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.cc +124 -129
  150. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/handles.h +33 -15
  151. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.cc +0 -0
  152. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/hashmap.h +0 -0
  153. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-inl.h +56 -12
  154. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.cc +2 -2
  155. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap-profiler.h +2 -0
  156. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.cc +413 -221
  157. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/heap.h +192 -67
  158. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32-inl.h +6 -0
  159. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.cc +187 -32
  160. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/assembler-ia32.h +31 -4
  161. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/builtins-ia32.cc +160 -133
  162. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32-inl.h +0 -0
  163. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/codegen-ia32.cc +5533 -2177
  164. data/ext/v8/upstream/{2.0.6/src/x64/codegen-x64.h → 2.1.10/src/ia32/codegen-ia32.h} +453 -134
  165. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/cpu-ia32.cc +0 -0
  166. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/debug-ia32.cc +63 -8
  167. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/disasm-ia32.cc +99 -16
  168. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.cc +950 -0
  169. data/ext/v8/upstream/2.1.10/src/ia32/fast-codegen-ia32.h +155 -0
  170. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.cc +0 -0
  171. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/frames-ia32.h +0 -0
  172. data/ext/v8/upstream/{2.0.6/src/ia32/fast-codegen-ia32.cc → 2.1.10/src/ia32/full-codegen-ia32.cc} +454 -253
  173. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/ic-ia32.cc +545 -390
  174. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/jump-target-ia32.cc +1 -0
  175. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.cc +330 -139
  176. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/macro-assembler-ia32.h +96 -30
  177. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.cc +73 -89
  178. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/regexp-macro-assembler-ia32.h +6 -21
  179. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32-inl.h +0 -0
  180. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.cc +59 -5
  181. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/register-allocator-ia32.h +0 -0
  182. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.cc +0 -0
  183. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/simulator-ia32.h +2 -2
  184. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/stub-cache-ia32.cc +745 -303
  185. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.cc +278 -71
  186. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ia32/virtual-frame-ia32.h +78 -22
  187. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic-inl.h +0 -0
  188. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.cc +172 -89
  189. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/ic.h +51 -20
  190. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.cc +0 -0
  191. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/interpreter-irregexp.h +0 -0
  192. data/ext/v8/upstream/{2.0.6/src/json-delay.js → 2.1.10/src/json.js} +26 -12
  193. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.cc +151 -118
  194. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jsregexp.h +31 -7
  195. data/ext/v8/upstream/2.1.10/src/jump-target-heavy-inl.h +51 -0
  196. data/ext/v8/upstream/{2.0.6/src/jump-target.cc → 2.1.10/src/jump-target-heavy.cc} +164 -184
  197. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target-inl.h +8 -9
  198. data/ext/v8/upstream/{2.0.6/src/usage-analyzer.h → 2.1.10/src/jump-target-light-inl.h} +9 -7
  199. data/ext/v8/upstream/2.1.10/src/jump-target-light.cc +86 -0
  200. data/ext/v8/upstream/2.1.10/src/jump-target.cc +155 -0
  201. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/jump-target.h +6 -0
  202. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list-inl.h +0 -0
  203. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/list.h +2 -1
  204. data/ext/v8/upstream/2.1.10/src/liveedit-debugger.js +944 -0
  205. data/ext/v8/upstream/2.1.10/src/liveedit.cc +1468 -0
  206. data/ext/v8/upstream/2.1.10/src/liveedit.h +170 -0
  207. data/ext/v8/upstream/2.1.10/src/log-inl.h +59 -0
  208. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.cc +3 -9
  209. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log-utils.h +1 -4
  210. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.cc +198 -95
  211. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/log.h +50 -49
  212. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macro-assembler.h +9 -0
  213. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/macros.py +30 -11
  214. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.cc +464 -152
  215. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mark-compact.h +41 -20
  216. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/math.js +9 -8
  217. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/memory.h +0 -0
  218. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.cc +1 -0
  219. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.h +0 -0
  220. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/messages.js +46 -9
  221. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips-inl.h +215 -0
  222. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.cc +1208 -0
  223. data/ext/v8/upstream/2.1.10/src/mips/assembler-mips.h +665 -0
  224. data/ext/v8/upstream/2.1.10/src/mips/builtins-mips.cc +202 -0
  225. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips-inl.h +70 -0
  226. data/ext/v8/upstream/2.1.10/src/mips/codegen-mips.cc +1428 -0
  227. data/ext/v8/upstream/{2.0.6/src/arm/codegen-arm.h → 2.1.10/src/mips/codegen-mips.h} +103 -205
  228. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.cc +323 -0
  229. data/ext/v8/upstream/2.1.10/src/mips/constants-mips.h +525 -0
  230. data/ext/v8/upstream/2.1.10/src/mips/cpu-mips.cc +69 -0
  231. data/ext/v8/upstream/2.1.10/src/mips/debug-mips.cc +128 -0
  232. data/ext/v8/upstream/2.1.10/src/mips/disasm-mips.cc +784 -0
  233. data/ext/v8/upstream/2.1.10/src/mips/fast-codegen-mips.cc +74 -0
  234. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.cc +99 -0
  235. data/ext/v8/upstream/2.1.10/src/mips/frames-mips.h +164 -0
  236. data/ext/v8/upstream/2.1.10/src/mips/full-codegen-mips.cc +273 -0
  237. data/ext/v8/upstream/2.1.10/src/mips/ic-mips.cc +217 -0
  238. data/ext/v8/upstream/2.1.10/src/mips/jump-target-mips.cc +172 -0
  239. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.cc +1323 -0
  240. data/ext/v8/upstream/2.1.10/src/mips/macro-assembler-mips.h +461 -0
  241. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips-inl.h +137 -0
  242. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.cc +60 -0
  243. data/ext/v8/upstream/2.1.10/src/mips/register-allocator-mips.h +46 -0
  244. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.cc +1648 -0
  245. data/ext/v8/upstream/2.1.10/src/mips/simulator-mips.h +311 -0
  246. data/ext/v8/upstream/2.1.10/src/mips/stub-cache-mips.cc +400 -0
  247. data/ext/v8/upstream/2.1.10/src/mips/virtual-frame-mips.cc +316 -0
  248. data/ext/v8/upstream/{2.0.6/src/arm/virtual-frame-arm.h → 2.1.10/src/mips/virtual-frame-mips.h} +87 -71
  249. data/ext/v8/upstream/{2.0.6/src/mirror-delay.js → 2.1.10/src/mirror-debugger.js} +51 -45
  250. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/mksnapshot.cc +97 -10
  251. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/natives.h +6 -6
  252. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-debug.cc +47 -5
  253. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects-inl.h +154 -38
  254. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.cc +528 -280
  255. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/objects.h +302 -95
  256. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.cc +25 -33
  257. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/oprofile-agent.h +9 -1
  258. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.cc +444 -72
  259. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/parser.h +4 -2
  260. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-freebsd.cc +32 -13
  261. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-linux.cc +59 -25
  262. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-macos.cc +30 -13
  263. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-nullos.cc +0 -0
  264. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-openbsd.cc +21 -2
  265. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-posix.cc +0 -18
  266. data/ext/v8/upstream/2.1.10/src/platform-solaris.cc +607 -0
  267. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform-win32.cc +16 -17
  268. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/platform.h +25 -8
  269. data/ext/v8/upstream/2.1.10/src/powers-ten.h +2461 -0
  270. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.cc +49 -29
  271. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/prettyprinter.h +3 -1
  272. data/ext/v8/upstream/2.1.10/src/profile-generator-inl.h +124 -0
  273. data/ext/v8/upstream/2.1.10/src/profile-generator.cc +583 -0
  274. data/ext/v8/upstream/2.1.10/src/profile-generator.h +364 -0
  275. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.cc +1 -1
  276. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/property.h +12 -24
  277. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp-inl.h +2 -2
  278. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.cc +2 -2
  279. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-irregexp.h +2 -2
  280. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.cc +2 -2
  281. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler-tracer.h +0 -0
  282. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.cc +33 -10
  283. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-macro-assembler.h +12 -4
  284. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.cc +0 -0
  285. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/regexp-stack.h +0 -0
  286. data/ext/v8/upstream/{2.0.6/src/regexp-delay.js → 2.1.10/src/regexp.js} +180 -58
  287. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator-inl.h +68 -1
  288. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.cc +5 -2
  289. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/register-allocator.h +42 -17
  290. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.cc +110 -4
  291. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/rewriter.h +0 -0
  292. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.cc +2733 -623
  293. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.h +43 -20
  294. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/runtime.js +46 -35
  295. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.cc +278 -36
  296. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scanner.h +97 -26
  297. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.cc +3 -3
  298. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopeinfo.h +1 -0
  299. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.cc +11 -12
  300. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/scopes.h +0 -1
  301. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.cc +298 -175
  302. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/serialize.h +184 -40
  303. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/shell.h +0 -0
  304. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/simulator.h +2 -0
  305. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/smart-pointer.h +0 -0
  306. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot-common.cc +16 -31
  307. data/ext/v8/upstream/2.1.10/src/snapshot-empty.cc +50 -0
  308. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/snapshot.h +13 -1
  309. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces-inl.h +35 -27
  310. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.cc +256 -42
  311. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/spaces.h +136 -42
  312. data/ext/v8/upstream/{2.0.6/src/zone-inl.h → 2.1.10/src/splay-tree-inl.h} +102 -89
  313. data/ext/v8/upstream/2.1.10/src/splay-tree.h +203 -0
  314. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.cc +0 -0
  315. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string-stream.h +0 -0
  316. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/string.js +260 -149
  317. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.cc +195 -69
  318. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/stub-cache.h +127 -12
  319. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/COPYING +0 -0
  320. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/dtoa/dtoa.c +0 -0
  321. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/third_party/valgrind/valgrind.h +0 -0
  322. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.cc +0 -0
  323. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/token.h +0 -0
  324. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.cc +26 -31
  325. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/top.h +3 -4
  326. data/ext/v8/upstream/2.1.10/src/type-info.cc +53 -0
  327. data/ext/v8/upstream/2.1.10/src/type-info.h +244 -0
  328. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode-inl.h +0 -0
  329. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.cc +0 -0
  330. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/unicode.h +0 -0
  331. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/uri.js +6 -6
  332. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.cc +0 -37
  333. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/utils.h +121 -50
  334. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.cc +0 -0
  335. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8-counters.h +130 -98
  336. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.cc +42 -11
  337. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8.h +4 -2
  338. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8natives.js +202 -37
  339. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.cc +11 -0
  340. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/v8threads.h +15 -0
  341. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.cc +7 -51
  342. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/variables.h +5 -35
  343. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.cc +3 -3
  344. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/version.h +0 -0
  345. data/ext/v8/upstream/2.1.10/src/virtual-frame-heavy-inl.h +152 -0
  346. data/ext/v8/upstream/{2.0.6/src/virtual-frame.cc → 2.1.10/src/virtual-frame-heavy.cc} +107 -176
  347. data/ext/v8/upstream/2.1.10/src/virtual-frame-inl.h +39 -0
  348. data/ext/v8/upstream/2.1.10/src/virtual-frame-light-inl.h +69 -0
  349. data/ext/v8/upstream/2.1.10/src/virtual-frame-light.cc +49 -0
  350. data/ext/v8/upstream/2.1.10/src/virtual-frame.cc +49 -0
  351. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/virtual-frame.h +2 -0
  352. data/ext/v8/upstream/{2.0.6/src/log-inl.h → 2.1.10/src/vm-state-inl.h} +28 -20
  353. data/ext/v8/upstream/{2.0.6/src/snapshot-empty.cc → 2.1.10/src/vm-state.cc} +5 -6
  354. data/ext/v8/upstream/2.1.10/src/vm-state.h +75 -0
  355. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64-inl.h +11 -0
  356. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.cc +285 -93
  357. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/assembler-x64.h +81 -78
  358. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/builtins-x64.cc +130 -87
  359. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64-inl.h +0 -0
  360. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/codegen-x64.cc +4520 -1317
  361. data/ext/v8/upstream/{2.0.6/src/ia32/codegen-ia32.h → 2.1.10/src/x64/codegen-x64.h} +362 -141
  362. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/cpu-x64.cc +0 -0
  363. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/debug-x64.cc +20 -4
  364. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/disasm-x64.cc +121 -44
  365. data/ext/v8/upstream/2.1.10/src/x64/fast-codegen-x64.cc +246 -0
  366. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.cc +0 -0
  367. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/frames-x64.h +0 -0
  368. data/ext/v8/upstream/{2.0.6/src/x64/fast-codegen-x64.cc → 2.1.10/src/x64/full-codegen-x64.cc} +404 -231
  369. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/ic-x64.cc +346 -117
  370. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/jump-target-x64.cc +1 -0
  371. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.cc +537 -181
  372. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/macro-assembler-x64.h +140 -34
  373. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.cc +74 -96
  374. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/regexp-macro-assembler-x64.h +8 -25
  375. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64-inl.h +1 -1
  376. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.cc +3 -0
  377. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/register-allocator-x64.h +0 -0
  378. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.cc +0 -0
  379. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/simulator-x64.h +2 -2
  380. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/stub-cache-x64.cc +785 -288
  381. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.cc +128 -52
  382. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/x64/virtual-frame-x64.h +40 -19
  383. data/ext/v8/upstream/2.1.10/src/zone-inl.h +82 -0
  384. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.cc +1 -0
  385. data/ext/v8/upstream/{2.0.6 → 2.1.10}/src/zone.h +6 -90
  386. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/codemap.js +12 -0
  387. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/consarray.js +0 -0
  388. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/csvparser.js +22 -37
  389. data/ext/v8/upstream/2.1.10/tools/generate-ten-powers.scm +286 -0
  390. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/gyp/v8.gyp +86 -24
  391. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/js2c.py +22 -22
  392. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/jsmin.py +0 -0
  393. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor +10 -1
  394. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/linux-tick-processor.py +0 -0
  395. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/logreader.js +34 -16
  396. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-nm +0 -0
  397. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/mac-tick-processor +0 -0
  398. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/annotate +0 -0
  399. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/common +0 -0
  400. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/dump +0 -0
  401. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/report +0 -0
  402. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/reset +0 -0
  403. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/run +0 -0
  404. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/shutdown +0 -0
  405. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/oprofile/start +0 -0
  406. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/presubmit.py +0 -0
  407. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/process-heap-prof.py +0 -0
  408. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile.js +70 -0
  409. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/profile_view.js +0 -0
  410. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/run-valgrind.py +0 -0
  411. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.js +0 -0
  412. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/splaytree.py +0 -0
  413. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/stats-viewer.py +0 -0
  414. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/test.py +7 -7
  415. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor-driver.js +7 -1
  416. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.js +140 -9
  417. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/tickprocessor.py +40 -4
  418. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/utils.py +6 -0
  419. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/README.txt +0 -0
  420. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/arm.vsprops +1 -1
  421. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/common.vsprops +1 -2
  422. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8.vcproj +0 -6
  423. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_arm.vcproj +193 -199
  424. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8_x64.vcproj +16 -8
  425. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/d8js2c.cmd +0 -0
  426. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/debug.vsprops +0 -0
  427. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/ia32.vsprops +5 -1
  428. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/js2c.cmd +1 -1
  429. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/release.vsprops +0 -0
  430. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.sln +0 -0
  431. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8.vcproj +11 -7
  432. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.sln +0 -0
  433. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_arm.vcproj +227 -223
  434. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base.vcproj +137 -5
  435. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_arm.vcproj +116 -4
  436. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_base_x64.vcproj +125 -4
  437. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest.vcproj +12 -6
  438. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_arm.vcproj +12 -6
  439. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_cctest_x64.vcproj +11 -11
  440. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot.vcproj +0 -6
  441. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -6
  442. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample.vcproj +0 -6
  443. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_arm.vcproj +145 -151
  444. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_process_sample_x64.vcproj +16 -6
  445. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample.vcproj +0 -6
  446. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_arm.vcproj +145 -151
  447. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_shell_sample_x64.vcproj +16 -8
  448. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  449. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  450. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  451. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  452. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.sln +0 -0
  453. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/v8_x64.vcproj +11 -7
  454. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/visual_studio/x64.vsprops +5 -1
  455. data/ext/v8/upstream/2.1.10/tools/windows-tick-processor.bat +29 -0
  456. data/ext/v8/upstream/{2.0.6 → 2.1.10}/tools/windows-tick-processor.py +0 -0
  457. data/ext/v8/upstream/Makefile +8 -2
  458. data/ext/v8/v8.cpp +21 -73
  459. data/ext/v8/v8_array.cpp +56 -0
  460. data/ext/v8/v8_array.h +8 -0
  461. data/ext/v8/v8_callbacks.cpp +121 -0
  462. data/ext/v8/v8_callbacks.h +8 -0
  463. data/ext/v8/v8_cxt.cpp +74 -77
  464. data/ext/v8/v8_cxt.h +2 -9
  465. data/ext/v8/v8_date.cpp +26 -0
  466. data/ext/v8/v8_date.h +6 -0
  467. data/ext/v8/v8_exception.cpp +55 -0
  468. data/ext/v8/v8_exception.h +6 -0
  469. data/ext/v8/v8_external.cpp +50 -0
  470. data/ext/v8/v8_external.h +8 -0
  471. data/ext/v8/v8_func.cpp +76 -18
  472. data/ext/v8/v8_func.h +5 -4
  473. data/ext/v8/v8_msg.cpp +55 -46
  474. data/ext/v8/v8_msg.h +3 -11
  475. data/ext/v8/v8_obj.cpp +67 -36
  476. data/ext/v8/v8_obj.h +6 -8
  477. data/ext/v8/v8_ref.cpp +25 -9
  478. data/ext/v8/v8_ref.h +3 -5
  479. data/ext/v8/v8_script.cpp +17 -10
  480. data/ext/v8/v8_script.h +3 -3
  481. data/ext/v8/v8_str.cpp +34 -6
  482. data/ext/v8/v8_str.h +4 -2
  483. data/ext/v8/v8_template.cpp +195 -33
  484. data/ext/v8/v8_template.h +4 -5
  485. data/ext/v8/v8_try_catch.cpp +99 -0
  486. data/ext/v8/v8_try_catch.h +5 -0
  487. data/ext/v8/v8_value.cpp +164 -0
  488. data/ext/v8/v8_value.h +10 -0
  489. data/lib/v8.rb +3 -1
  490. data/lib/v8/access.rb +60 -0
  491. data/lib/v8/array.rb +15 -0
  492. data/lib/v8/callbacks.rb +88 -0
  493. data/lib/v8/cli.rb +1 -1
  494. data/lib/v8/context.rb +55 -66
  495. data/lib/v8/function.rb +20 -2
  496. data/lib/v8/object.rb +14 -12
  497. data/lib/v8/ruby_error.rb +3 -0
  498. data/lib/v8/to.rb +59 -7
  499. data/spec/ext/cxt_spec.rb +2 -15
  500. data/spec/ext/func_spec.rb +17 -10
  501. data/spec/ext/try_catch_spec.rb +32 -0
  502. data/spec/foo.rb +17 -0
  503. data/spec/redjs/jsapi_spec.rb +173 -96
  504. data/spec/spec_helper.rb +7 -0
  505. data/spec/v8/to_spec.rb +0 -1
  506. data/therubyracer.gemspec +6 -6
  507. metadata +493 -386
  508. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
  509. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
  510. data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
  511. data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
  512. data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
  513. data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
  514. data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
  515. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
  516. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
  517. data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
  518. data/ext/v8/v8_standalone.cpp +0 -69
  519. data/ext/v8/v8_standalone.h +0 -31
  520. data/spec/ext/obj_spec.rb +0 -13
@@ -45,6 +45,7 @@ enum DictionaryCheck { CHECK_DICTIONARY, DICTIONARY_CHECK_DONE };
45
45
  ICU(KeyedLoadIC_Miss) \
46
46
  ICU(CallIC_Miss) \
47
47
  ICU(StoreIC_Miss) \
48
+ ICU(StoreIC_ArrayLength) \
48
49
  ICU(SharedStoreIC_ExtendStorage) \
49
50
  ICU(KeyedStoreIC_Miss) \
50
51
  /* Utilities for IC stubs. */ \
@@ -53,7 +54,9 @@ enum DictionaryCheck { CHECK_DICTIONARY, DICTIONARY_CHECK_DONE };
53
54
  ICU(LoadPropertyWithInterceptorOnly) \
54
55
  ICU(LoadPropertyWithInterceptorForLoad) \
55
56
  ICU(LoadPropertyWithInterceptorForCall) \
56
- ICU(StoreInterceptorProperty)
57
+ ICU(KeyedLoadPropertyWithInterceptor) \
58
+ ICU(StoreInterceptorProperty) \
59
+ ICU(BinaryOp_Patch)
57
60
 
58
61
  //
59
62
  // IC is the base class for LoadIC, StoreIC, CallIC, KeyedLoadIC,
@@ -91,8 +94,8 @@ class IC {
91
94
  Code* target() { return GetTargetAtAddress(address()); }
92
95
  inline Address address();
93
96
 
94
- // Compute the current IC state based on the target stub and the receiver.
95
- static State StateFrom(Code* target, Object* receiver);
97
+ // Compute the current IC state based on the target stub, receiver and name.
98
+ static State StateFrom(Code* target, Object* receiver, Object* name);
96
99
 
97
100
  // Clear the inline cache to initial state.
98
101
  static void Clear(Address address);
@@ -209,6 +212,8 @@ class CallIC: public IC {
209
212
  // Otherwise, it returns the undefined value.
210
213
  Object* TryCallAsFunction(Object* object);
211
214
 
215
+ void ReceiverToObject(Handle<Object> object);
216
+
212
217
  static void Clear(Address address, Code* target);
213
218
  friend class IC;
214
219
  };
@@ -221,8 +226,10 @@ class LoadIC: public IC {
221
226
  Object* Load(State state, Handle<Object> object, Handle<String> name);
222
227
 
223
228
  // Code generator routines.
224
- static void GenerateInitialize(MacroAssembler* masm);
225
- static void GeneratePreMonomorphic(MacroAssembler* masm);
229
+ static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
230
+ static void GeneratePreMonomorphic(MacroAssembler* masm) {
231
+ GenerateMiss(masm);
232
+ }
226
233
  static void GenerateMiss(MacroAssembler* masm);
227
234
  static void GenerateMegamorphic(MacroAssembler* masm);
228
235
  static void GenerateNormal(MacroAssembler* masm);
@@ -238,8 +245,6 @@ class LoadIC: public IC {
238
245
  static const int kOffsetToLoadInstruction;
239
246
 
240
247
  private:
241
- static void Generate(MacroAssembler* masm, const ExternalReference& f);
242
-
243
248
  // Update the inline cache and the global stub cache based on the
244
249
  // lookup result.
245
250
  void UpdateCaches(LookupResult* lookup,
@@ -277,8 +282,11 @@ class KeyedLoadIC: public IC {
277
282
 
278
283
  // Code generator routines.
279
284
  static void GenerateMiss(MacroAssembler* masm);
280
- static void GenerateInitialize(MacroAssembler* masm);
281
- static void GeneratePreMonomorphic(MacroAssembler* masm);
285
+ static void GenerateRuntimeGetProperty(MacroAssembler* masm);
286
+ static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
287
+ static void GeneratePreMonomorphic(MacroAssembler* masm) {
288
+ GenerateMiss(masm);
289
+ }
282
290
  static void GenerateGeneric(MacroAssembler* masm);
283
291
  static void GenerateString(MacroAssembler* masm);
284
292
 
@@ -288,11 +296,11 @@ class KeyedLoadIC: public IC {
288
296
  // for all other types.
289
297
  static void GenerateExternalArray(MacroAssembler* masm,
290
298
  ExternalArrayType array_type);
299
+ static void GenerateIndexedInterceptor(MacroAssembler* masm);
291
300
 
292
301
  // Clear the use of the inlined version.
293
302
  static void ClearInlinedVersion(Address address);
294
303
 
295
- private:
296
304
  // Bit mask to be tested against bit field for the cases when
297
305
  // generic stub should go into slow case.
298
306
  // Access check is necessary explicitly since generic stub does not perform
@@ -300,8 +308,7 @@ class KeyedLoadIC: public IC {
300
308
  static const int kSlowCaseBitFieldMask =
301
309
  (1 << Map::kIsAccessCheckNeeded) | (1 << Map::kHasIndexedInterceptor);
302
310
 
303
- static void Generate(MacroAssembler* masm, const ExternalReference& f);
304
-
311
+ private:
305
312
  // Update the inline cache.
306
313
  void UpdateCaches(LookupResult* lookup,
307
314
  State state,
@@ -326,6 +333,10 @@ class KeyedLoadIC: public IC {
326
333
  }
327
334
  static Code* external_array_stub(JSObject::ElementsKind elements_kind);
328
335
 
336
+ static Code* indexed_interceptor_stub() {
337
+ return Builtins::builtin(Builtins::KeyedLoadIC_IndexedInterceptor);
338
+ }
339
+
329
340
  static void Clear(Address address, Code* target);
330
341
 
331
342
  // Support for patching the map that is checked in an inlined
@@ -346,14 +357,12 @@ class StoreIC: public IC {
346
357
  Handle<Object> value);
347
358
 
348
359
  // Code generators for stub routines. Only called once at startup.
349
- static void GenerateInitialize(MacroAssembler* masm);
360
+ static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
350
361
  static void GenerateMiss(MacroAssembler* masm);
351
362
  static void GenerateMegamorphic(MacroAssembler* masm);
352
- static void GenerateExtendStorage(MacroAssembler* masm);
363
+ static void GenerateArrayLength(MacroAssembler* masm);
353
364
 
354
365
  private:
355
- static void Generate(MacroAssembler* masm, const ExternalReference& f);
356
-
357
366
  // Update the inline cache and the global stub cache based on the
358
367
  // lookup result.
359
368
  void UpdateCaches(LookupResult* lookup,
@@ -384,10 +393,10 @@ class KeyedStoreIC: public IC {
384
393
  Handle<Object> value);
385
394
 
386
395
  // Code generators for stub routines. Only called once at startup.
387
- static void GenerateInitialize(MacroAssembler* masm);
396
+ static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
388
397
  static void GenerateMiss(MacroAssembler* masm);
398
+ static void GenerateRuntimeSetProperty(MacroAssembler* masm);
389
399
  static void GenerateGeneric(MacroAssembler* masm);
390
- static void GenerateExtendStorage(MacroAssembler* masm);
391
400
 
392
401
  // Generators for external array types. See objects.h.
393
402
  // These are similar to the generic IC; they optimize the case of
@@ -403,8 +412,6 @@ class KeyedStoreIC: public IC {
403
412
  static void RestoreInlinedVersion(Address address);
404
413
 
405
414
  private:
406
- static void Generate(MacroAssembler* masm, const ExternalReference& f);
407
-
408
415
  // Update the inline cache.
409
416
  void UpdateCaches(LookupResult* lookup,
410
417
  State state,
@@ -438,6 +445,30 @@ class KeyedStoreIC: public IC {
438
445
  };
439
446
 
440
447
 
448
+ class BinaryOpIC: public IC {
449
+ public:
450
+
451
+ enum TypeInfo {
452
+ DEFAULT, // Initial state. When first executed, patches to one
453
+ // of the following states depending on the operands types.
454
+ HEAP_NUMBERS, // Both arguments are HeapNumbers.
455
+ STRINGS, // At least one of the arguments is String.
456
+ GENERIC // Non-specialized case (processes any type combination).
457
+ };
458
+
459
+ BinaryOpIC() : IC(NO_EXTRA_FRAME) { }
460
+
461
+ void patch(Code* code);
462
+
463
+ static void Clear(Address address, Code* target);
464
+
465
+ static const char* GetName(TypeInfo type_info);
466
+
467
+ static State ToState(TypeInfo type_info);
468
+
469
+ static TypeInfo GetTypeInfo(Object* left, Object* right);
470
+ };
471
+
441
472
  } } // namespace v8::internal
442
473
 
443
474
  #endif // V8_IC_H_
@@ -29,7 +29,7 @@ var $JSON = global.JSON;
29
29
 
30
30
  function ParseJSONUnfiltered(text) {
31
31
  var s = $String(text);
32
- var f = %CompileString("(" + text + ")", true);
32
+ var f = %CompileString(text, true);
33
33
  return f();
34
34
  }
35
35
 
@@ -80,8 +80,9 @@ var characterQuoteCache = {
80
80
  };
81
81
 
82
82
  function QuoteSingleJSONCharacter(c) {
83
- if (c in characterQuoteCache)
83
+ if (c in characterQuoteCache) {
84
84
  return characterQuoteCache[c];
85
+ }
85
86
  var charCode = c.charCodeAt(0);
86
87
  var result;
87
88
  if (charCode < 16) result = '\\u000';
@@ -101,15 +102,17 @@ function QuoteJSONString(str) {
101
102
  function StackContains(stack, val) {
102
103
  var length = stack.length;
103
104
  for (var i = 0; i < length; i++) {
104
- if (stack[i] === val)
105
+ if (stack[i] === val) {
105
106
  return true;
107
+ }
106
108
  }
107
109
  return false;
108
110
  }
109
111
 
110
112
  function SerializeArray(value, replacer, stack, indent, gap) {
111
- if (StackContains(stack, value))
113
+ if (StackContains(stack, value)) {
112
114
  throw MakeTypeError('circular_structure', []);
115
+ }
113
116
  stack.push(value);
114
117
  var stepback = indent;
115
118
  indent += gap;
@@ -117,9 +120,10 @@ function SerializeArray(value, replacer, stack, indent, gap) {
117
120
  var len = value.length;
118
121
  for (var i = 0; i < len; i++) {
119
122
  var strP = JSONSerialize($String(i), value, replacer, stack,
120
- indent, gap);
121
- if (IS_UNDEFINED(strP))
123
+ indent, gap);
124
+ if (IS_UNDEFINED(strP)) {
122
125
  strP = "null";
126
+ }
123
127
  partial.push(strP);
124
128
  }
125
129
  var final;
@@ -137,8 +141,9 @@ function SerializeArray(value, replacer, stack, indent, gap) {
137
141
  }
138
142
 
139
143
  function SerializeObject(value, replacer, stack, indent, gap) {
140
- if (StackContains(stack, value))
144
+ if (StackContains(stack, value)) {
141
145
  throw MakeTypeError('circular_structure', []);
146
+ }
142
147
  stack.push(value);
143
148
  var stepback = indent;
144
149
  indent += gap;
@@ -188,17 +193,21 @@ function JSONSerialize(key, holder, replacer, stack, indent, gap) {
188
193
  var value = holder[key];
189
194
  if (IS_OBJECT(value) && value) {
190
195
  var toJSON = value.toJSON;
191
- if (IS_FUNCTION(toJSON))
196
+ if (IS_FUNCTION(toJSON)) {
192
197
  value = toJSON.call(value, key);
198
+ }
193
199
  }
194
- if (IS_FUNCTION(replacer))
200
+ if (IS_FUNCTION(replacer)) {
195
201
  value = replacer.call(holder, key, value);
202
+ }
196
203
  // Unwrap value if necessary
197
204
  if (IS_OBJECT(value)) {
198
205
  if (IS_NUMBER_WRAPPER(value)) {
199
206
  value = $Number(value);
200
207
  } else if (IS_STRING_WRAPPER(value)) {
201
208
  value = $String(value);
209
+ } else if (IS_BOOLEAN_WRAPPER(value)) {
210
+ value = $Boolean(value);
202
211
  }
203
212
  }
204
213
  switch (typeof value) {
@@ -232,12 +241,17 @@ function JSONStringify(value, replacer, space) {
232
241
  }
233
242
  var gap;
234
243
  if (IS_NUMBER(space)) {
235
- space = $Math.min(space, 100);
244
+ space = $Math.min(space, 10);
236
245
  gap = "";
237
- for (var i = 0; i < space; i++)
246
+ for (var i = 0; i < space; i++) {
238
247
  gap += " ";
248
+ }
239
249
  } else if (IS_STRING(space)) {
240
- gap = space;
250
+ if (space.length > 10) {
251
+ gap = space.substring(0, 10);
252
+ } else {
253
+ gap = space;
254
+ }
241
255
  } else {
242
256
  gap = "";
243
257
  }
@@ -43,7 +43,7 @@
43
43
  #include "regexp-macro-assembler-irregexp.h"
44
44
  #include "regexp-stack.h"
45
45
 
46
- #ifdef V8_NATIVE_REGEXP
46
+ #ifndef V8_INTERPRETED_REGEXP
47
47
  #if V8_TARGET_ARCH_IA32
48
48
  #include "ia32/regexp-macro-assembler-ia32.h"
49
49
  #elif V8_TARGET_ARCH_X64
@@ -66,11 +66,6 @@ Handle<Object> RegExpImpl::CreateRegExpLiteral(Handle<JSFunction> constructor,
66
66
  Handle<String> pattern,
67
67
  Handle<String> flags,
68
68
  bool* has_pending_exception) {
69
- // Ensure that the constructor function has been loaded.
70
- if (!constructor->IsLoaded()) {
71
- LoadLazy(constructor, has_pending_exception);
72
- if (*has_pending_exception) return Handle<Object>();
73
- }
74
69
  // Call the construct code with 2 arguments.
75
70
  Object** argv[2] = { Handle<Object>::cast(pattern).location(),
76
71
  Handle<Object>::cast(flags).location() };
@@ -127,6 +122,7 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
127
122
  }
128
123
  FlattenString(pattern);
129
124
  CompilationZoneScope zone_scope(DELETE_ON_EXIT);
125
+ PostponeInterruptsScope postpone;
130
126
  RegExpCompileData parse_result;
131
127
  FlatStringReader reader(pattern);
132
128
  if (!ParseRegExp(&reader, flags.is_multiline(), &parse_result)) {
@@ -149,7 +145,7 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
149
145
  Handle<String> atom_string = Factory::NewStringFromTwoByte(atom_pattern);
150
146
  AtomCompile(re, pattern, flags, atom_string);
151
147
  } else {
152
- IrregexpPrepare(re, pattern, flags, parse_result.capture_count);
148
+ IrregexpInitialize(re, pattern, flags, parse_result.capture_count);
153
149
  }
154
150
  ASSERT(re->data()->IsFixedArray());
155
151
  // Compilation succeeded so the data is set on the regexp
@@ -240,10 +236,10 @@ Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
240
236
  // returns false.
241
237
  bool RegExpImpl::EnsureCompiledIrregexp(Handle<JSRegExp> re, bool is_ascii) {
242
238
  Object* compiled_code = re->DataAt(JSRegExp::code_index(is_ascii));
243
- #ifdef V8_NATIVE_REGEXP
244
- if (compiled_code->IsCode()) return true;
245
- #else // ! V8_NATIVE_REGEXP (RegExp interpreter code)
239
+ #ifdef V8_INTERPRETED_REGEXP
246
240
  if (compiled_code->IsByteArray()) return true;
241
+ #else // V8_INTERPRETED_REGEXP (RegExp native code)
242
+ if (compiled_code->IsCode()) return true;
247
243
  #endif
248
244
  return CompileIrregexp(re, is_ascii);
249
245
  }
@@ -252,6 +248,7 @@ bool RegExpImpl::EnsureCompiledIrregexp(Handle<JSRegExp> re, bool is_ascii) {
252
248
  bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, bool is_ascii) {
253
249
  // Compile the RegExp.
254
250
  CompilationZoneScope zone_scope(DELETE_ON_EXIT);
251
+ PostponeInterruptsScope postpone;
255
252
  Object* entry = re->DataAt(JSRegExp::code_index(is_ascii));
256
253
  if (entry->IsJSObject()) {
257
254
  // If it's a JSObject, a previous compilation failed and threw this object.
@@ -341,10 +338,10 @@ Code* RegExpImpl::IrregexpNativeCode(FixedArray* re, bool is_ascii) {
341
338
  }
342
339
 
343
340
 
344
- void RegExpImpl::IrregexpPrepare(Handle<JSRegExp> re,
345
- Handle<String> pattern,
346
- JSRegExp::Flags flags,
347
- int capture_count) {
341
+ void RegExpImpl::IrregexpInitialize(Handle<JSRegExp> re,
342
+ Handle<String> pattern,
343
+ JSRegExp::Flags flags,
344
+ int capture_count) {
348
345
  // Initialize compiled code entries to null.
349
346
  Factory::SetRegExpIrregexpData(re,
350
347
  JSRegExp::IRREGEXP,
@@ -354,6 +351,94 @@ void RegExpImpl::IrregexpPrepare(Handle<JSRegExp> re,
354
351
  }
355
352
 
356
353
 
354
+ int RegExpImpl::IrregexpPrepare(Handle<JSRegExp> regexp,
355
+ Handle<String> subject) {
356
+ if (!subject->IsFlat()) {
357
+ FlattenString(subject);
358
+ }
359
+ bool is_ascii = subject->IsAsciiRepresentation();
360
+ if (!EnsureCompiledIrregexp(regexp, is_ascii)) {
361
+ return -1;
362
+ }
363
+ #ifdef V8_INTERPRETED_REGEXP
364
+ // Byte-code regexp needs space allocated for all its registers.
365
+ return IrregexpNumberOfRegisters(FixedArray::cast(regexp->data()));
366
+ #else // V8_INTERPRETED_REGEXP
367
+ // Native regexp only needs room to output captures. Registers are handled
368
+ // internally.
369
+ return (IrregexpNumberOfCaptures(FixedArray::cast(regexp->data())) + 1) * 2;
370
+ #endif // V8_INTERPRETED_REGEXP
371
+ }
372
+
373
+
374
+ RegExpImpl::IrregexpResult RegExpImpl::IrregexpExecOnce(Handle<JSRegExp> regexp,
375
+ Handle<String> subject,
376
+ int index,
377
+ Vector<int> output) {
378
+ Handle<FixedArray> irregexp(FixedArray::cast(regexp->data()));
379
+
380
+ ASSERT(index >= 0);
381
+ ASSERT(index <= subject->length());
382
+ ASSERT(subject->IsFlat());
383
+
384
+ #ifndef V8_INTERPRETED_REGEXP
385
+ ASSERT(output.length() >=
386
+ (IrregexpNumberOfCaptures(*irregexp) + 1) * 2);
387
+ do {
388
+ bool is_ascii = subject->IsAsciiRepresentation();
389
+ Handle<Code> code(IrregexpNativeCode(*irregexp, is_ascii));
390
+ NativeRegExpMacroAssembler::Result res =
391
+ NativeRegExpMacroAssembler::Match(code,
392
+ subject,
393
+ output.start(),
394
+ output.length(),
395
+ index);
396
+ if (res != NativeRegExpMacroAssembler::RETRY) {
397
+ ASSERT(res != NativeRegExpMacroAssembler::EXCEPTION ||
398
+ Top::has_pending_exception());
399
+ STATIC_ASSERT(
400
+ static_cast<int>(NativeRegExpMacroAssembler::SUCCESS) == RE_SUCCESS);
401
+ STATIC_ASSERT(
402
+ static_cast<int>(NativeRegExpMacroAssembler::FAILURE) == RE_FAILURE);
403
+ STATIC_ASSERT(static_cast<int>(NativeRegExpMacroAssembler::EXCEPTION)
404
+ == RE_EXCEPTION);
405
+ return static_cast<IrregexpResult>(res);
406
+ }
407
+ // If result is RETRY, the string has changed representation, and we
408
+ // must restart from scratch.
409
+ // In this case, it means we must make sure we are prepared to handle
410
+ // the, potentially, differen subject (the string can switch between
411
+ // being internal and external, and even between being ASCII and UC16,
412
+ // but the characters are always the same).
413
+ IrregexpPrepare(regexp, subject);
414
+ } while (true);
415
+ UNREACHABLE();
416
+ return RE_EXCEPTION;
417
+ #else // V8_INTERPRETED_REGEXP
418
+
419
+ ASSERT(output.length() >= IrregexpNumberOfRegisters(*irregexp));
420
+ bool is_ascii = subject->IsAsciiRepresentation();
421
+ // We must have done EnsureCompiledIrregexp, so we can get the number of
422
+ // registers.
423
+ int* register_vector = output.start();
424
+ int number_of_capture_registers =
425
+ (IrregexpNumberOfCaptures(*irregexp) + 1) * 2;
426
+ for (int i = number_of_capture_registers - 1; i >= 0; i--) {
427
+ register_vector[i] = -1;
428
+ }
429
+ Handle<ByteArray> byte_codes(IrregexpByteCode(*irregexp, is_ascii));
430
+
431
+ if (IrregexpInterpreter::Match(byte_codes,
432
+ subject,
433
+ register_vector,
434
+ index)) {
435
+ return RE_SUCCESS;
436
+ }
437
+ return RE_FAILURE;
438
+ #endif // V8_INTERPRETED_REGEXP
439
+ }
440
+
441
+
357
442
  Handle<Object> RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
358
443
  Handle<String> subject,
359
444
  int previous_index,
@@ -361,10 +446,7 @@ Handle<Object> RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
361
446
  ASSERT_EQ(jsregexp->TypeTag(), JSRegExp::IRREGEXP);
362
447
 
363
448
  // Prepare space for the return values.
364
- int number_of_capture_registers =
365
- (IrregexpNumberOfCaptures(FixedArray::cast(jsregexp->data())) + 1) * 2;
366
-
367
- #ifndef V8_NATIVE_REGEXP
449
+ #ifdef V8_INTERPRETED_REGEXP
368
450
  #ifdef DEBUG
369
451
  if (FLAG_trace_regexp_bytecodes) {
370
452
  String* pattern = jsregexp->Pattern();
@@ -373,101 +455,42 @@ Handle<Object> RegExpImpl::IrregexpExec(Handle<JSRegExp> jsregexp,
373
455
  }
374
456
  #endif
375
457
  #endif
376
-
377
- if (!subject->IsFlat()) {
378
- FlattenString(subject);
379
- }
380
-
381
- last_match_info->EnsureSize(number_of_capture_registers + kLastMatchOverhead);
382
-
383
- Handle<FixedArray> array;
384
-
385
- // Dispatch to the correct RegExp implementation.
386
- Handle<FixedArray> regexp(FixedArray::cast(jsregexp->data()));
387
-
388
- #ifdef V8_NATIVE_REGEXP
389
-
390
- OffsetsVector captures(number_of_capture_registers);
391
- int* captures_vector = captures.vector();
392
- NativeRegExpMacroAssembler::Result res;
393
- do {
394
- bool is_ascii = subject->IsAsciiRepresentation();
395
- if (!EnsureCompiledIrregexp(jsregexp, is_ascii)) {
396
- return Handle<Object>::null();
397
- }
398
- Handle<Code> code(RegExpImpl::IrregexpNativeCode(*regexp, is_ascii));
399
- res = NativeRegExpMacroAssembler::Match(code,
400
- subject,
401
- captures_vector,
402
- captures.length(),
403
- previous_index);
404
- // If result is RETRY, the string have changed representation, and we
405
- // must restart from scratch.
406
- } while (res == NativeRegExpMacroAssembler::RETRY);
407
- if (res == NativeRegExpMacroAssembler::EXCEPTION) {
458
+ int required_registers = RegExpImpl::IrregexpPrepare(jsregexp, subject);
459
+ if (required_registers < 0) {
460
+ // Compiling failed with an exception.
408
461
  ASSERT(Top::has_pending_exception());
409
462
  return Handle<Object>::null();
410
463
  }
411
- ASSERT(res == NativeRegExpMacroAssembler::SUCCESS
412
- || res == NativeRegExpMacroAssembler::FAILURE);
413
464
 
414
- if (res != NativeRegExpMacroAssembler::SUCCESS) return Factory::null_value();
465
+ OffsetsVector registers(required_registers);
415
466
 
416
- array = Handle<FixedArray>(FixedArray::cast(last_match_info->elements()));
417
- ASSERT(array->length() >= number_of_capture_registers + kLastMatchOverhead);
418
- // The captures come in (start, end+1) pairs.
419
- for (int i = 0; i < number_of_capture_registers; i += 2) {
420
- // Capture values are relative to start_offset only.
421
- // Convert them to be relative to start of string.
422
- if (captures_vector[i] >= 0) {
423
- captures_vector[i] += previous_index;
424
- }
425
- if (captures_vector[i + 1] >= 0) {
426
- captures_vector[i + 1] += previous_index;
467
+ IrregexpResult res = IrregexpExecOnce(jsregexp,
468
+ subject,
469
+ previous_index,
470
+ Vector<int>(registers.vector(),
471
+ registers.length()));
472
+ if (res == RE_SUCCESS) {
473
+ int capture_register_count =
474
+ (IrregexpNumberOfCaptures(FixedArray::cast(jsregexp->data())) + 1) * 2;
475
+ last_match_info->EnsureSize(capture_register_count + kLastMatchOverhead);
476
+ AssertNoAllocation no_gc;
477
+ int* register_vector = registers.vector();
478
+ FixedArray* array = FixedArray::cast(last_match_info->elements());
479
+ for (int i = 0; i < capture_register_count; i += 2) {
480
+ SetCapture(array, i, register_vector[i]);
481
+ SetCapture(array, i + 1, register_vector[i + 1]);
427
482
  }
428
- SetCapture(*array, i, captures_vector[i]);
429
- SetCapture(*array, i + 1, captures_vector[i + 1]);
483
+ SetLastCaptureCount(array, capture_register_count);
484
+ SetLastSubject(array, *subject);
485
+ SetLastInput(array, *subject);
486
+ return last_match_info;
430
487
  }
431
-
432
- #else // ! V8_NATIVE_REGEXP
433
-
434
- bool is_ascii = subject->IsAsciiRepresentation();
435
- if (!EnsureCompiledIrregexp(jsregexp, is_ascii)) {
488
+ if (res == RE_EXCEPTION) {
489
+ ASSERT(Top::has_pending_exception());
436
490
  return Handle<Object>::null();
437
491
  }
438
- // Now that we have done EnsureCompiledIrregexp we can get the number of
439
- // registers.
440
- int number_of_registers =
441
- IrregexpNumberOfRegisters(FixedArray::cast(jsregexp->data()));
442
- OffsetsVector registers(number_of_registers);
443
- int* register_vector = registers.vector();
444
- for (int i = number_of_capture_registers - 1; i >= 0; i--) {
445
- register_vector[i] = -1;
446
- }
447
- Handle<ByteArray> byte_codes(IrregexpByteCode(*regexp, is_ascii));
448
-
449
- if (!IrregexpInterpreter::Match(byte_codes,
450
- subject,
451
- register_vector,
452
- previous_index)) {
453
- return Factory::null_value();
454
- }
455
-
456
- array = Handle<FixedArray>(FixedArray::cast(last_match_info->elements()));
457
- ASSERT(array->length() >= number_of_capture_registers + kLastMatchOverhead);
458
- // The captures come in (start, end+1) pairs.
459
- for (int i = 0; i < number_of_capture_registers; i += 2) {
460
- SetCapture(*array, i, register_vector[i]);
461
- SetCapture(*array, i + 1, register_vector[i + 1]);
462
- }
463
-
464
- #endif // V8_NATIVE_REGEXP
465
-
466
- SetLastCaptureCount(*array, number_of_capture_registers);
467
- SetLastSubject(*array, *subject);
468
- SetLastInput(*array, *subject);
469
-
470
- return last_match_info;
492
+ ASSERT(res == RE_FAILURE);
493
+ return Factory::null_value();
471
494
  }
472
495
 
473
496
 
@@ -4849,17 +4872,18 @@ void Analysis::VisitAssertion(AssertionNode* that) {
4849
4872
 
4850
4873
  SetRelation word_relation =
4851
4874
  CharacterRange::WordCharacterRelation(following_chars);
4852
- if (word_relation.ContainedIn()) {
4853
- // Following character is definitely a word character.
4875
+ if (word_relation.Disjoint()) {
4876
+ // Includes the case where following_chars is empty (e.g., end-of-input).
4877
+ // Following character is definitely *not* a word character.
4854
4878
  type = (type == AssertionNode::AT_BOUNDARY) ?
4855
- AssertionNode::AFTER_NONWORD_CHARACTER :
4856
- AssertionNode::AFTER_WORD_CHARACTER;
4879
+ AssertionNode::AFTER_WORD_CHARACTER :
4880
+ AssertionNode::AFTER_NONWORD_CHARACTER;
4857
4881
  that->set_type(type);
4858
- } else if (word_relation.Disjoint()) {
4859
- // Following character is definitely *not* a word character.
4882
+ } else if (word_relation.ContainedIn()) {
4883
+ // Following character is definitely a word character.
4860
4884
  type = (type == AssertionNode::AT_BOUNDARY) ?
4861
- AssertionNode::AFTER_WORD_CHARACTER :
4862
- AssertionNode::AFTER_NONWORD_CHARACTER;
4885
+ AssertionNode::AFTER_NONWORD_CHARACTER :
4886
+ AssertionNode::AFTER_WORD_CHARACTER;
4863
4887
  that->set_type(type);
4864
4888
  }
4865
4889
  }
@@ -4966,7 +4990,9 @@ int AssertionNode::ComputeFirstCharacterSet(int budget) {
4966
4990
  case AFTER_WORD_CHARACTER: {
4967
4991
  ASSERT_NOT_NULL(on_success());
4968
4992
  budget = on_success()->ComputeFirstCharacterSet(budget);
4969
- set_first_character_set(on_success()->first_character_set());
4993
+ if (budget >= 0) {
4994
+ set_first_character_set(on_success()->first_character_set());
4995
+ }
4970
4996
  break;
4971
4997
  }
4972
4998
  }
@@ -4992,6 +5018,10 @@ int ActionNode::ComputeFirstCharacterSet(int budget) {
4992
5018
  int BackReferenceNode::ComputeFirstCharacterSet(int budget) {
4993
5019
  // We don't know anything about the first character of a backreference
4994
5020
  // at this point.
5021
+ // The potential first characters are the first characters of the capture,
5022
+ // and the first characters of the on_success node, depending on whether the
5023
+ // capture can be empty and whether it is known to be participating or known
5024
+ // not to be.
4995
5025
  return kComputeFirstCharacterSetFail;
4996
5026
  }
4997
5027
 
@@ -5011,8 +5041,11 @@ int TextNode::ComputeFirstCharacterSet(int budget) {
5011
5041
  } else {
5012
5042
  ASSERT(text.type == TextElement::CHAR_CLASS);
5013
5043
  RegExpCharacterClass* char_class = text.data.u_char_class;
5044
+ ZoneList<CharacterRange>* ranges = char_class->ranges();
5045
+ // TODO(lrn): Canonicalize ranges when they are created
5046
+ // instead of waiting until now.
5047
+ CharacterRange::Canonicalize(ranges);
5014
5048
  if (char_class->is_negated()) {
5015
- ZoneList<CharacterRange>* ranges = char_class->ranges();
5016
5049
  int length = ranges->length();
5017
5050
  int new_length = length + 1;
5018
5051
  if (length > 0) {
@@ -5026,7 +5059,7 @@ int TextNode::ComputeFirstCharacterSet(int budget) {
5026
5059
  CharacterRange::Negate(ranges, negated_ranges);
5027
5060
  set_first_character_set(negated_ranges);
5028
5061
  } else {
5029
- set_first_character_set(char_class->ranges());
5062
+ set_first_character_set(ranges);
5030
5063
  }
5031
5064
  }
5032
5065
  }
@@ -5200,7 +5233,7 @@ RegExpEngine::CompilationResult RegExpEngine::Compile(RegExpCompileData* data,
5200
5233
  NodeInfo info = *node->info();
5201
5234
 
5202
5235
  // Create the correct assembler for the architecture.
5203
- #ifdef V8_NATIVE_REGEXP
5236
+ #ifndef V8_INTERPRETED_REGEXP
5204
5237
  // Native regexp implementation.
5205
5238
 
5206
5239
  NativeRegExpMacroAssembler::Mode mode =
@@ -5215,11 +5248,11 @@ RegExpEngine::CompilationResult RegExpEngine::Compile(RegExpCompileData* data,
5215
5248
  RegExpMacroAssemblerARM macro_assembler(mode, (data->capture_count + 1) * 2);
5216
5249
  #endif
5217
5250
 
5218
- #else // ! V8_NATIVE_REGEXP
5251
+ #else // V8_INTERPRETED_REGEXP
5219
5252
  // Interpreted regexp implementation.
5220
5253
  EmbeddedVector<byte, 1024> codes;
5221
5254
  RegExpMacroAssemblerIrregexp macro_assembler(codes);
5222
- #endif
5255
+ #endif // V8_INTERPRETED_REGEXP
5223
5256
 
5224
5257
  return compiler.Assemble(&macro_assembler,
5225
5258
  node,