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
@@ -36,7 +36,8 @@ namespace internal {
36
36
  // Default scratch register used by MacroAssembler (and other code that needs
37
37
  // a spare register). The register isn't callee save, and not used by the
38
38
  // function calling convention.
39
- static const Register kScratchRegister = r10;
39
+ static const Register kScratchRegister = { 10 }; // r10.
40
+ static const Register kRootRegister = { 13 }; // r13
40
41
 
41
42
  // Convenience for platform-independent signatures.
42
43
  typedef Operand MemOperand;
@@ -65,6 +66,21 @@ class MacroAssembler: public Assembler {
65
66
  // ---------------------------------------------------------------------------
66
67
  // GC Support
67
68
 
69
+ // Set the remebered set bit for an address which points into an
70
+ // object. RecordWriteHelper only works if the object is not in new
71
+ // space.
72
+ void RecordWriteHelper(Register object,
73
+ Register addr,
74
+ Register scratch);
75
+
76
+ // Check if object is in new space. The condition cc can be equal or
77
+ // not_equal. If it is equal a jump will be done if the object is on new
78
+ // space. The register scratch can be object itself, but it will be clobbered.
79
+ void InNewSpace(Register object,
80
+ Register scratch,
81
+ Condition cc,
82
+ Label* branch);
83
+
68
84
  // Set the remembered set bit for [object+offset].
69
85
  // object is the object being stored into, value is the object being stored.
70
86
  // If offset is zero, then the scratch register contains the array index into
@@ -86,7 +102,6 @@ class MacroAssembler: public Assembler {
86
102
  Register value,
87
103
  Register scratch);
88
104
 
89
-
90
105
  #ifdef ENABLE_DEBUGGER_SUPPORT
91
106
  // ---------------------------------------------------------------------------
92
107
  // Debugger Support
@@ -98,6 +113,7 @@ class MacroAssembler: public Assembler {
98
113
  void CopyRegistersFromStackToMemory(Register base,
99
114
  Register scratch,
100
115
  RegList regs);
116
+ void DebugBreak();
101
117
  #endif
102
118
 
103
119
  // ---------------------------------------------------------------------------
@@ -148,6 +164,10 @@ class MacroAssembler: public Assembler {
148
164
  const ParameterCount& actual,
149
165
  InvokeFlag flag);
150
166
 
167
+ void InvokeFunction(JSFunction* function,
168
+ const ParameterCount& actual,
169
+ InvokeFlag flag);
170
+
151
171
  // Invoke specified builtin JavaScript function. Adds an entry to
152
172
  // the unresolved list if the name does not resolve.
153
173
  void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag);
@@ -162,7 +182,8 @@ class MacroAssembler: public Assembler {
162
182
  // Conversions between tagged smi values and non-tagged integer values.
163
183
 
164
184
  // Tag an integer value. The result must be known to be a valid smi value.
165
- // Only uses the low 32 bits of the src register.
185
+ // Only uses the low 32 bits of the src register. Sets the N and Z flags
186
+ // based on the value of the resulting integer.
166
187
  void Integer32ToSmi(Register dst, Register src);
167
188
 
168
189
  // Tag an integer value if possible, or jump the integer value cannot be
@@ -190,6 +211,7 @@ class MacroAssembler: public Assembler {
190
211
  // Simple comparison of smis.
191
212
  void SmiCompare(Register dst, Register src);
192
213
  void SmiCompare(Register dst, Smi* src);
214
+ void SmiCompare(Register dst, const Operand& src);
193
215
  void SmiCompare(const Operand& dst, Register src);
194
216
  void SmiCompare(const Operand& dst, Smi* src);
195
217
  // Sets sign and zero flags depending on value of smi in register.
@@ -204,9 +226,15 @@ class MacroAssembler: public Assembler {
204
226
  // Is the value a positive tagged smi.
205
227
  Condition CheckPositiveSmi(Register src);
206
228
 
207
- // Are both values are tagged smis.
229
+ // Are both values tagged smis.
208
230
  Condition CheckBothSmi(Register first, Register second);
209
231
 
232
+ // Are both values tagged smis.
233
+ Condition CheckBothPositiveSmi(Register first, Register second);
234
+
235
+ // Are either value a tagged smi.
236
+ Condition CheckEitherSmi(Register first, Register second);
237
+
210
238
  // Is the value the minimum smi value (since we are using
211
239
  // two's complement numbers, negating the value is known to yield
212
240
  // a non-smi value).
@@ -245,6 +273,10 @@ class MacroAssembler: public Assembler {
245
273
  // Jump if either or both register are not smi values.
246
274
  void JumpIfNotBothSmi(Register src1, Register src2, Label* on_not_both_smi);
247
275
 
276
+ // Jump if either or both register are not positive smi values.
277
+ void JumpIfNotBothPositiveSmi(Register src1, Register src2,
278
+ Label* on_not_both_smi);
279
+
248
280
  // Operations on tagged smi values.
249
281
 
250
282
  // Smis represent a subset of integers. The subset is always equivalent to
@@ -270,7 +302,8 @@ class MacroAssembler: public Assembler {
270
302
  Label* on_not_smi_result);
271
303
 
272
304
  // Subtract an integer constant from a tagged smi, giving a tagged smi as
273
- // result. No testing on the result is done.
305
+ // result. No testing on the result is done. Sets the N and Z flags
306
+ // based on the value of the resulting integer.
274
307
  void SmiSubConstant(Register dst, Register src, Smi* constant);
275
308
 
276
309
  // Subtract an integer constant from a tagged smi, giving a tagged smi as
@@ -302,6 +335,11 @@ class MacroAssembler: public Assembler {
302
335
  Register src2,
303
336
  Label* on_not_smi_result);
304
337
 
338
+ void SmiSub(Register dst,
339
+ Register src1,
340
+ Operand const& src2,
341
+ Label* on_not_smi_result);
342
+
305
343
  // Multiplies smi values and return the result as a smi,
306
344
  // if possible.
307
345
  // If dst is src1, then src1 will be destroyed, even if
@@ -402,6 +440,28 @@ class MacroAssembler: public Assembler {
402
440
  void Push(Smi* smi);
403
441
  void Test(const Operand& dst, Smi* source);
404
442
 
443
+ // ---------------------------------------------------------------------------
444
+ // String macros.
445
+ void JumpIfNotBothSequentialAsciiStrings(Register first_object,
446
+ Register second_object,
447
+ Register scratch1,
448
+ Register scratch2,
449
+ Label* on_not_both_flat_ascii);
450
+
451
+ // Check whether the instance type represents a flat ascii string. Jump to the
452
+ // label if not. If the instance type can be scratched specify same register
453
+ // for both instance type and scratch.
454
+ void JumpIfInstanceTypeIsNotSequentialAscii(Register instance_type,
455
+ Register scratch,
456
+ Label *on_not_flat_ascii_string);
457
+
458
+ void JumpIfBothInstanceTypesAreNotSequentialAscii(
459
+ Register first_object_instance_type,
460
+ Register second_object_instance_type,
461
+ Register scratch1,
462
+ Register scratch2,
463
+ Label* on_fail);
464
+
405
465
  // ---------------------------------------------------------------------------
406
466
  // Macro instructions.
407
467
 
@@ -441,10 +501,33 @@ class MacroAssembler: public Assembler {
441
501
  // Always use unsigned comparisons: above and below, not less and greater.
442
502
  void CmpInstanceType(Register map, InstanceType type);
443
503
 
504
+ // Check if the map of an object is equal to a specified map and
505
+ // branch to label if not. Skip the smi check if not required
506
+ // (object is known to be a heap object)
507
+ void CheckMap(Register obj,
508
+ Handle<Map> map,
509
+ Label* fail,
510
+ bool is_heap_object);
511
+
512
+ // Check if the object in register heap_object is a string. Afterwards the
513
+ // register map contains the object map and the register instance_type
514
+ // contains the instance_type. The registers map and instance_type can be the
515
+ // same in which case it contains the instance type afterwards. Either of the
516
+ // registers map and instance_type can be the same as heap_object.
517
+ Condition IsObjectStringType(Register heap_object,
518
+ Register map,
519
+ Register instance_type);
520
+
444
521
  // FCmp is similar to integer cmp, but requires unsigned
445
522
  // jcc instructions (je, ja, jae, jb, jbe, je, and jz).
446
523
  void FCmp();
447
524
 
525
+ // Abort execution if argument is not a number. Used in debug code.
526
+ void AbortIfNotNumber(Register object, const char* msg);
527
+
528
+ // Abort execution if argument is not a smi. Used in debug code.
529
+ void AbortIfNotSmi(Register object, const char* msg);
530
+
448
531
  // ---------------------------------------------------------------------------
449
532
  // Exception handling
450
533
 
@@ -467,9 +550,14 @@ class MacroAssembler: public Assembler {
467
550
  // clobbered if it the same as the holder register. The function
468
551
  // returns a register containing the holder - either object_reg or
469
552
  // holder_reg.
553
+ // The function can optionally (when save_at_depth !=
554
+ // kInvalidProtoDepth) save the object at the given depth by moving
555
+ // it to [rsp + kPointerSize].
470
556
  Register CheckMaps(JSObject* object, Register object_reg,
471
557
  JSObject* holder, Register holder_reg,
472
- Register scratch, Label* miss);
558
+ Register scratch,
559
+ int save_at_depth,
560
+ Label* miss);
473
561
 
474
562
  // Generate code for checking access rights - used for security checks
475
563
  // on access to global objects across environments. The holder register
@@ -601,35 +689,56 @@ class MacroAssembler: public Assembler {
601
689
  void StubReturn(int argc);
602
690
 
603
691
  // Call a runtime routine.
604
- // Eventually this should be used for all C calls.
605
692
  void CallRuntime(Runtime::Function* f, int num_arguments);
606
693
 
607
694
  // Convenience function: Same as above, but takes the fid instead.
608
695
  void CallRuntime(Runtime::FunctionId id, int num_arguments);
609
696
 
697
+ // Convenience function: call an external reference.
698
+ void CallExternalReference(const ExternalReference& ext,
699
+ int num_arguments);
700
+
610
701
  // Tail call of a runtime routine (jump).
611
- // Like JumpToRuntime, but also takes care of passing the number
612
- // of arguments.
613
- void TailCallRuntime(const ExternalReference& ext,
702
+ // Like JumpToExternalReference, but also takes care of passing the number
703
+ // of parameters.
704
+ void TailCallExternalReference(const ExternalReference& ext,
705
+ int num_arguments,
706
+ int result_size);
707
+
708
+ // Convenience function: tail call a runtime routine (jump).
709
+ void TailCallRuntime(Runtime::FunctionId fid,
614
710
  int num_arguments,
615
711
  int result_size);
616
712
 
617
713
  // Jump to a runtime routine.
618
- void JumpToRuntime(const ExternalReference& ext, int result_size);
619
-
714
+ void JumpToExternalReference(const ExternalReference& ext, int result_size);
715
+
716
+ // Before calling a C-function from generated code, align arguments on stack.
717
+ // After aligning the frame, arguments must be stored in esp[0], esp[4],
718
+ // etc., not pushed. The argument count assumes all arguments are word sized.
719
+ // The number of slots reserved for arguments depends on platform. On Windows
720
+ // stack slots are reserved for the arguments passed in registers. On other
721
+ // platforms stack slots are only reserved for the arguments actually passed
722
+ // on the stack.
723
+ void PrepareCallCFunction(int num_arguments);
724
+
725
+ // Calls a C function and cleans up the space for arguments allocated
726
+ // by PrepareCallCFunction. The called function is not allowed to trigger a
727
+ // garbage collection, since that might move the code and invalidate the
728
+ // return address (unless this is somehow accounted for by the called
729
+ // function).
730
+ void CallCFunction(ExternalReference function, int num_arguments);
731
+ void CallCFunction(Register function, int num_arguments);
732
+
733
+ // Calculate the number of stack slots to reserve for arguments when calling a
734
+ // C function.
735
+ int ArgumentStackSlotsForCFunctionCall(int num_arguments);
620
736
 
621
737
  // ---------------------------------------------------------------------------
622
738
  // Utilities
623
739
 
624
740
  void Ret();
625
741
 
626
- struct Unresolved {
627
- int pc;
628
- uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders.
629
- const char* name;
630
- };
631
- List<Unresolved>* unresolved() { return &unresolved_; }
632
-
633
742
  Handle<Object> CodeObject() { return code_object_; }
634
743
 
635
744
 
@@ -654,6 +763,9 @@ class MacroAssembler: public Assembler {
654
763
  // Print a message to stdout and abort execution.
655
764
  void Abort(const char* msg);
656
765
 
766
+ // Check that the stack is aligned.
767
+ void CheckStackAlignment();
768
+
657
769
  // Verify restrictions about code generated in stubs.
658
770
  void set_generating_stub(bool value) { generating_stub_ = value; }
659
771
  bool generating_stub() { return generating_stub_; }
@@ -661,11 +773,10 @@ class MacroAssembler: public Assembler {
661
773
  bool allow_stub_calls() { return allow_stub_calls_; }
662
774
 
663
775
  private:
664
- List<Unresolved> unresolved_;
665
776
  bool generating_stub_;
666
777
  bool allow_stub_calls_;
667
- Handle<Object> code_object_; // This handle will be patched with the code
668
- // object on installation.
778
+ // This handle will be patched with the code object on installation.
779
+ Handle<Object> code_object_;
669
780
 
670
781
  // Helper functions for generating invokes.
671
782
  void InvokePrologue(const ParameterCount& expected,
@@ -675,27 +786,22 @@ class MacroAssembler: public Assembler {
675
786
  Label* done,
676
787
  InvokeFlag flag);
677
788
 
678
- // Prepares for a call or jump to a builtin by doing two things:
679
- // 1. Emits code that fetches the builtin's function object from the context
680
- // at runtime, and puts it in the register rdi.
681
- // 2. Fetches the builtin's code object, and returns it in a handle, at
682
- // compile time, so that later code can emit instructions to jump or call
683
- // the builtin directly. If the code object has not yet been created, it
684
- // returns the builtin code object for IllegalFunction, and sets the
685
- // output parameter "resolved" to false. Code that uses the return value
686
- // should then add the address and the builtin name to the list of fixups
687
- // called unresolved_, which is fixed up by the bootstrapper.
688
- Handle<Code> ResolveBuiltin(Builtins::JavaScript id, bool* resolved);
689
-
690
789
  // Activation support.
691
790
  void EnterFrame(StackFrame::Type type);
692
791
  void LeaveFrame(StackFrame::Type type);
693
792
 
694
793
  // Allocation support helpers.
794
+ // Loads the top of new-space into the result register.
795
+ // If flags contains RESULT_CONTAINS_TOP then result_end is valid and
796
+ // already contains the top of new-space, and scratch is invalid.
797
+ // Otherwise the address of the new-space top is loaded into scratch (if
798
+ // scratch is valid), and the new-space top is loaded into result.
695
799
  void LoadAllocationTopHelper(Register result,
696
800
  Register result_end,
697
801
  Register scratch,
698
802
  AllocationFlags flags);
803
+ // Update allocation top with value in result_end register.
804
+ // If scratch is valid, it contains the address of the allocation top.
699
805
  void UpdateAllocationTopHelper(Register result_end, Register scratch);
700
806
  };
701
807
 
@@ -39,7 +39,7 @@
39
39
  namespace v8 {
40
40
  namespace internal {
41
41
 
42
- #ifdef V8_NATIVE_REGEXP
42
+ #ifndef V8_INTERPRETED_REGEXP
43
43
 
44
44
  /*
45
45
  * This assembler uses the following register assignment convention
@@ -71,8 +71,6 @@ namespace internal {
71
71
  * through the runtime system)
72
72
  * - stack_area_base (High end of the memory area to use as
73
73
  * backtracking stack)
74
- * - at_start (if 1, we are starting at the start of the
75
- * string, otherwise 0)
76
74
  * - int* capture_array (int[num_saved_registers_], for output).
77
75
  * - end of input (Address of end of string)
78
76
  * - start of input (Address of first character in string)
@@ -82,6 +80,8 @@ namespace internal {
82
80
  * - backup of callee save registers (rbx, possibly rsi and rdi).
83
81
  * - Offset of location before start of input (effectively character
84
82
  * position -1). Used to initialize capture registers to a non-position.
83
+ * - At start of string (if 1, we are starting at the start of the
84
+ * string, otherwise 0)
85
85
  * - register 0 rbp[-n] (Only positions must be stored in the first
86
86
  * - register 1 rbp[-n-8] num_saved_registers_ registers)
87
87
  * - ...
@@ -329,14 +329,14 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
329
329
  ASSERT(mode_ == UC16);
330
330
  // Save important/volatile registers before calling C function.
331
331
  #ifndef _WIN64
332
- // Callee save on Win64
332
+ // Caller save on Linux and callee save in Windows.
333
333
  __ push(rsi);
334
334
  __ push(rdi);
335
335
  #endif
336
336
  __ push(backtrack_stackpointer());
337
337
 
338
- int num_arguments = 3;
339
- FrameAlign(num_arguments);
338
+ static const int num_arguments = 3;
339
+ __ PrepareCallCFunction(num_arguments);
340
340
 
341
341
  // Put arguments into parameter registers. Parameters are
342
342
  // Address byte_offset1 - Address captured substring's start.
@@ -361,7 +361,7 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(
361
361
  #endif
362
362
  ExternalReference compare =
363
363
  ExternalReference::re_case_insensitive_compare_uc16();
364
- CallCFunction(compare, num_arguments);
364
+ __ CallCFunction(compare, num_arguments);
365
365
 
366
366
  // Restore original values before reacting on result value.
367
367
  __ Move(code_object_pointer(), masm_->CodeObject());
@@ -582,49 +582,38 @@ bool RegExpMacroAssemblerX64::CheckSpecialCharacterClass(uc16 type,
582
582
  return true;
583
583
  }
584
584
  case 'w': {
585
- Label done, check_digits;
586
- __ cmpl(current_character(), Immediate('9'));
587
- __ j(less_equal, &check_digits);
588
- __ cmpl(current_character(), Immediate('_'));
589
- __ j(equal, &done);
590
- // Convert to lower case if letter.
591
- __ movl(rax, current_character());
592
- __ orl(rax, Immediate(0x20));
593
- // check rax in range ['a'..'z'].
594
- __ subl(rax, Immediate('a'));
595
- __ cmpl(rax, Immediate('z' - 'a'));
596
- BranchOrBacktrack(above, on_no_match);
597
- __ jmp(&done);
598
- __ bind(&check_digits);
599
- // Check current character in range ['0'..'9'].
600
- __ cmpl(current_character(), Immediate('0'));
601
- BranchOrBacktrack(below, on_no_match);
602
- __ bind(&done);
603
-
585
+ if (mode_ != ASCII) {
586
+ // Table is 128 entries, so all ASCII characters can be tested.
587
+ __ cmpl(current_character(), Immediate('z'));
588
+ BranchOrBacktrack(above, on_no_match);
589
+ }
590
+ __ movq(rbx, ExternalReference::re_word_character_map());
591
+ ASSERT_EQ(0, word_character_map[0]); // Character '\0' is not a word char.
592
+ ExternalReference word_map = ExternalReference::re_word_character_map();
593
+ __ testb(Operand(rbx, current_character(), times_1, 0),
594
+ current_character());
595
+ BranchOrBacktrack(zero, on_no_match);
604
596
  return true;
605
597
  }
606
598
  case 'W': {
607
- Label done, check_digits;
608
- __ cmpl(current_character(), Immediate('9'));
609
- __ j(less_equal, &check_digits);
610
- __ cmpl(current_character(), Immediate('_'));
611
- BranchOrBacktrack(equal, on_no_match);
612
- // Convert to lower case if letter.
613
- __ movl(rax, current_character());
614
- __ orl(rax, Immediate(0x20));
615
- // check current character in range ['a'..'z'], nondestructively.
616
- __ subl(rax, Immediate('a'));
617
- __ cmpl(rax, Immediate('z' - 'a'));
618
- BranchOrBacktrack(below_equal, on_no_match);
619
- __ jmp(&done);
620
- __ bind(&check_digits);
621
- // Check current character in range ['0'..'9'].
622
- __ cmpl(current_character(), Immediate('0'));
623
- BranchOrBacktrack(above_equal, on_no_match);
624
- __ bind(&done);
625
-
599
+ Label done;
600
+ if (mode_ != ASCII) {
601
+ // Table is 128 entries, so all ASCII characters can be tested.
602
+ __ cmpl(current_character(), Immediate('z'));
603
+ __ j(above, &done);
604
+ }
605
+ __ movq(rbx, ExternalReference::re_word_character_map());
606
+ ASSERT_EQ(0, word_character_map[0]); // Character '\0' is not a word char.
607
+ ExternalReference word_map = ExternalReference::re_word_character_map();
608
+ __ testb(Operand(rbx, current_character(), times_1, 0),
609
+ current_character());
610
+ BranchOrBacktrack(not_zero, on_no_match);
611
+ if (mode_ != ASCII) {
612
+ __ bind(&done);
613
+ }
626
614
  return true;
627
615
  }
616
+
628
617
  case '*':
629
618
  // Match any character.
630
619
  return true;
@@ -645,7 +634,6 @@ void RegExpMacroAssemblerX64::Fail() {
645
634
  Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
646
635
  // Finalize code - write the entry point code now we know how many
647
636
  // registers we need.
648
-
649
637
  // Entry code:
650
638
  __ bind(&entry_label_);
651
639
  // Start new stack frame.
@@ -672,7 +660,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
672
660
  ASSERT_EQ(kInputStart, -3 * kPointerSize);
673
661
  ASSERT_EQ(kInputEnd, -4 * kPointerSize);
674
662
  ASSERT_EQ(kRegisterOutput, -5 * kPointerSize);
675
- ASSERT_EQ(kAtStart, -6 * kPointerSize);
663
+ ASSERT_EQ(kStackHighEnd, -6 * kPointerSize);
676
664
  __ push(rdi);
677
665
  __ push(rsi);
678
666
  __ push(rdx);
@@ -682,7 +670,9 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
682
670
 
683
671
  __ push(rbx); // Callee-save
684
672
  #endif
673
+
685
674
  __ push(Immediate(0)); // Make room for "input start - 1" constant.
675
+ __ push(Immediate(0)); // Make room for "at start" constant.
686
676
 
687
677
  // Check if we have space on the stack for registers.
688
678
  Label stack_limit_hit;
@@ -721,12 +711,27 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
721
711
  __ movq(rdi, Operand(rbp, kInputStart));
722
712
  // Set up rdi to be negative offset from string end.
723
713
  __ subq(rdi, rsi);
724
- // Set rax to address of char before start of input
714
+ // Set rax to address of char before start of the string
725
715
  // (effectively string position -1).
726
- __ lea(rax, Operand(rdi, -char_size()));
716
+ __ movq(rbx, Operand(rbp, kStartIndex));
717
+ __ neg(rbx);
718
+ if (mode_ == UC16) {
719
+ __ lea(rax, Operand(rdi, rbx, times_2, -char_size()));
720
+ } else {
721
+ __ lea(rax, Operand(rdi, rbx, times_1, -char_size()));
722
+ }
727
723
  // Store this value in a local variable, for use when clearing
728
724
  // position registers.
729
725
  __ movq(Operand(rbp, kInputStartMinusOne), rax);
726
+
727
+ // Determine whether the start index is zero, that is at the start of the
728
+ // string, and store that value in a local variable.
729
+ __ movq(rbx, Operand(rbp, kStartIndex));
730
+ __ xor_(rcx, rcx); // setcc only operates on cl (lower byte of rcx).
731
+ __ testq(rbx, rbx);
732
+ __ setcc(zero, rcx); // 1 if 0 (start of string), 0 if positive.
733
+ __ movq(Operand(rbp, kAtStart), rcx);
734
+
730
735
  if (num_saved_registers_ > 0) {
731
736
  // Fill saved registers with initial value = start offset - 1
732
737
  // Fill in stack push order, to avoid accessing across an unwritten
@@ -771,9 +776,15 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
771
776
  __ bind(&success_label_);
772
777
  if (num_saved_registers_ > 0) {
773
778
  // copy captures to output
779
+ __ movq(rdx, Operand(rbp, kStartIndex));
774
780
  __ movq(rbx, Operand(rbp, kRegisterOutput));
775
781
  __ movq(rcx, Operand(rbp, kInputEnd));
776
782
  __ subq(rcx, Operand(rbp, kInputStart));
783
+ if (mode_ == UC16) {
784
+ __ lea(rcx, Operand(rcx, rdx, times_2, 0));
785
+ } else {
786
+ __ addq(rcx, rdx);
787
+ }
777
788
  for (int i = 0; i < num_saved_registers_; i++) {
778
789
  __ movq(rax, register_location(i));
779
790
  __ addq(rax, rcx); // Convert to index from start, not end.
@@ -850,8 +861,8 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
850
861
  #endif
851
862
 
852
863
  // Call GrowStack(backtrack_stackpointer())
853
- int num_arguments = 2;
854
- FrameAlign(num_arguments);
864
+ static const int num_arguments = 2;
865
+ __ PrepareCallCFunction(num_arguments);
855
866
  #ifdef _WIN64
856
867
  // Microsoft passes parameters in rcx, rdx.
857
868
  // First argument, backtrack stackpointer, is already in rcx.
@@ -862,7 +873,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
862
873
  __ lea(rsi, Operand(rbp, kStackHighEnd)); // Second argument.
863
874
  #endif
864
875
  ExternalReference grow_stack = ExternalReference::re_grow_stack();
865
- CallCFunction(grow_stack, num_arguments);
876
+ __ CallCFunction(grow_stack, num_arguments);
866
877
  // If return NULL, we have failed to grow the stack, and
867
878
  // must exit with a stack-overflow exception.
868
879
  __ testq(rax, rax);
@@ -894,7 +905,7 @@ Handle<Object> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
894
905
  NULL,
895
906
  Code::ComputeFlags(Code::REGEXP),
896
907
  masm_->CodeObject());
897
- LOG(RegExpCodeCreateEvent(*code, *source));
908
+ PROFILE(RegExpCodeCreateEvent(*code, *source));
898
909
  return Handle<Object>::cast(code);
899
910
  }
900
911
 
@@ -1030,8 +1041,8 @@ void RegExpMacroAssemblerX64::WriteStackPointerToRegister(int reg) {
1030
1041
  void RegExpMacroAssemblerX64::CallCheckStackGuardState() {
1031
1042
  // This function call preserves no register values. Caller should
1032
1043
  // store anything volatile in a C call or overwritten by this function.
1033
- int num_arguments = 3;
1034
- FrameAlign(num_arguments);
1044
+ static const int num_arguments = 3;
1045
+ __ PrepareCallCFunction(num_arguments);
1035
1046
  #ifdef _WIN64
1036
1047
  // Second argument: Code* of self. (Do this before overwriting r8).
1037
1048
  __ movq(rdx, code_object_pointer());
@@ -1051,7 +1062,7 @@ void RegExpMacroAssemblerX64::CallCheckStackGuardState() {
1051
1062
  #endif
1052
1063
  ExternalReference stack_check =
1053
1064
  ExternalReference::re_check_stack_guard_state();
1054
- CallCFunction(stack_check, num_arguments);
1065
+ __ CallCFunction(stack_check, num_arguments);
1055
1066
  }
1056
1067
 
1057
1068
 
@@ -1073,6 +1084,12 @@ int RegExpMacroAssemblerX64::CheckStackGuardState(Address* return_address,
1073
1084
  // If not real stack overflow the stack guard was used to interrupt
1074
1085
  // execution for another purpose.
1075
1086
 
1087
+ // If this is a direct call from JavaScript retry the RegExp forcing the call
1088
+ // through the runtime system. Currently the direct call cannot handle a GC.
1089
+ if (frame_entry<int>(re_frame, kDirectCall) == 1) {
1090
+ return RETRY;
1091
+ }
1092
+
1076
1093
  // Prepare for possible GC.
1077
1094
  HandleScope handles;
1078
1095
  Handle<Code> code_handle(re_code);
@@ -1267,45 +1284,6 @@ void RegExpMacroAssemblerX64::CheckStackLimit() {
1267
1284
  }
1268
1285
 
1269
1286
 
1270
- void RegExpMacroAssemblerX64::FrameAlign(int num_arguments) {
1271
- // TODO(lrn): Since we no longer use the system stack arbitrarily (but we do
1272
- // use it, e.g., for SafeCall), we know the number of elements on the stack
1273
- // since the last frame alignment. We might be able to do this simpler then.
1274
- int frameAlignment = OS::ActivationFrameAlignment();
1275
- ASSERT(frameAlignment != 0);
1276
- // Make stack end at alignment and make room for num_arguments pointers
1277
- // (on Win64 only) and the original value of rsp.
1278
- __ movq(kScratchRegister, rsp);
1279
- ASSERT(IsPowerOf2(frameAlignment));
1280
- #ifdef _WIN64
1281
- // Allocate space for parameters and old rsp.
1282
- __ subq(rsp, Immediate((num_arguments + 1) * kPointerSize));
1283
- __ and_(rsp, Immediate(-frameAlignment));
1284
- __ movq(Operand(rsp, num_arguments * kPointerSize), kScratchRegister);
1285
- #else
1286
- // Allocate space for old rsp.
1287
- __ subq(rsp, Immediate(kPointerSize));
1288
- __ and_(rsp, Immediate(-frameAlignment));
1289
- __ movq(Operand(rsp, 0), kScratchRegister);
1290
- #endif
1291
- }
1292
-
1293
-
1294
- void RegExpMacroAssemblerX64::CallCFunction(ExternalReference function,
1295
- int num_arguments) {
1296
- __ movq(rax, function);
1297
- __ call(rax);
1298
- ASSERT(OS::ActivationFrameAlignment() != 0);
1299
- #ifdef _WIN64
1300
- __ movq(rsp, Operand(rsp, num_arguments * kPointerSize));
1301
- #else
1302
- // All arguments passed in registers.
1303
- ASSERT(num_arguments <= 6);
1304
- __ pop(rsp);
1305
- #endif
1306
- }
1307
-
1308
-
1309
1287
  void RegExpMacroAssemblerX64::LoadCurrentCharacterUnchecked(int cp_offset,
1310
1288
  int characters) {
1311
1289
  if (mode_ == ASCII) {
@@ -1332,6 +1310,6 @@ void RegExpMacroAssemblerX64::LoadCurrentCharacterUnchecked(int cp_offset,
1332
1310
 
1333
1311
  #undef __
1334
1312
 
1335
- #endif // V8_NATIVE_REGEXP
1313
+ #endif // V8_INTERPRETED_REGEXP
1336
1314
 
1337
1315
  }} // namespace v8::internal