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
@@ -48,6 +48,20 @@ class MacroAssembler: public Assembler {
48
48
  // ---------------------------------------------------------------------------
49
49
  // GC Support
50
50
 
51
+ // Set the remebered set bit for an address which points into an
52
+ // object. RecordWriteHelper only works if the object is not in new
53
+ // space.
54
+ void RecordWriteHelper(Register object,
55
+ Register addr,
56
+ Register scratch);
57
+
58
+ // Check if object is in new space.
59
+ // scratch can be object itself, but it will be clobbered.
60
+ void InNewSpace(Register object,
61
+ Register scratch,
62
+ Condition cc, // equal for new space, not_equal otherwise.
63
+ Label* branch);
64
+
51
65
  // Set the remembered set bit for [object+offset].
52
66
  // object is the object being stored into, value is the object being stored.
53
67
  // If offset is zero, then the scratch register contains the array index into
@@ -69,6 +83,7 @@ class MacroAssembler: public Assembler {
69
83
  void CopyRegistersFromStackToMemory(Register base,
70
84
  Register scratch,
71
85
  RegList regs);
86
+ void DebugBreak();
72
87
  #endif
73
88
 
74
89
  // ---------------------------------------------------------------------------
@@ -123,6 +138,10 @@ class MacroAssembler: public Assembler {
123
138
  const ParameterCount& actual,
124
139
  InvokeFlag flag);
125
140
 
141
+ void InvokeFunction(JSFunction* function,
142
+ const ParameterCount& actual,
143
+ InvokeFlag flag);
144
+
126
145
  // Invoke specified builtin JavaScript function. Adds an entry to
127
146
  // the unresolved list if the name does not resolve.
128
147
  void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag);
@@ -141,6 +160,14 @@ class MacroAssembler: public Assembler {
141
160
  // Compare instance type for map.
142
161
  void CmpInstanceType(Register map, InstanceType type);
143
162
 
163
+ // Check if the map of an object is equal to a specified map and
164
+ // branch to label if not. Skip the smi check if not required
165
+ // (object is known to be a heap object)
166
+ void CheckMap(Register obj,
167
+ Handle<Map> map,
168
+ Label* fail,
169
+ bool is_heap_object);
170
+
144
171
  // Check if the object in register heap_object is a string. Afterwards the
145
172
  // register map contains the object map and the register instance_type
146
173
  // contains the instance_type. The registers map and instance_type can be the
@@ -157,12 +184,19 @@ class MacroAssembler: public Assembler {
157
184
  // Smi tagging support.
158
185
  void SmiTag(Register reg) {
159
186
  ASSERT(kSmiTag == 0);
160
- shl(reg, kSmiTagSize);
187
+ ASSERT(kSmiTagSize == 1);
188
+ add(reg, Operand(reg));
161
189
  }
162
190
  void SmiUntag(Register reg) {
163
191
  sar(reg, kSmiTagSize);
164
192
  }
165
193
 
194
+ // Abort execution if argument is not a number. Used in debug code.
195
+ void AbortIfNotNumber(Register object);
196
+
197
+ // Abort execution if argument is not a smi. Used in debug code.
198
+ void AbortIfNotSmi(Register object);
199
+
166
200
  // ---------------------------------------------------------------------------
167
201
  // Exception handling
168
202
 
@@ -185,9 +219,14 @@ class MacroAssembler: public Assembler {
185
219
  // clobbered if it the same as the holder register. The function
186
220
  // returns a register containing the holder - either object_reg or
187
221
  // holder_reg.
222
+ // The function can optionally (when save_at_depth !=
223
+ // kInvalidProtoDepth) save the object at the given depth by moving
224
+ // it to [esp + kPointerSize].
188
225
  Register CheckMaps(JSObject* object, Register object_reg,
189
226
  JSObject* holder, Register holder_reg,
190
- Register scratch, Label* miss);
227
+ Register scratch,
228
+ int save_at_depth,
229
+ Label* miss);
191
230
 
192
231
  // Generate code for checking access rights - used for security checks
193
232
  // on access to global objects across environments. The holder register
@@ -328,10 +367,9 @@ class MacroAssembler: public Assembler {
328
367
  void StubReturn(int argc);
329
368
 
330
369
  // Call a runtime routine.
331
- // Eventually this should be used for all C calls.
332
370
  void CallRuntime(Runtime::Function* f, int num_arguments);
333
371
 
334
- // Call a runtime function, returning the RuntimeStub object called.
372
+ // Call a runtime function, returning the CodeStub object called.
335
373
  // Try to generate the stub code if necessary. Do not perform a GC
336
374
  // but instead return a retry after GC failure.
337
375
  Object* TryCallRuntime(Runtime::Function* f, int num_arguments);
@@ -339,16 +377,41 @@ class MacroAssembler: public Assembler {
339
377
  // Convenience function: Same as above, but takes the fid instead.
340
378
  void CallRuntime(Runtime::FunctionId id, int num_arguments);
341
379
 
380
+ // Convenience function: call an external reference.
381
+ void CallExternalReference(ExternalReference ref, int num_arguments);
382
+
342
383
  // Convenience function: Same as above, but takes the fid instead.
343
384
  Object* TryCallRuntime(Runtime::FunctionId id, int num_arguments);
344
385
 
345
386
  // Tail call of a runtime routine (jump).
346
- // Like JumpToRuntime, but also takes care of passing the number
347
- // of arguments.
348
- void TailCallRuntime(const ExternalReference& ext,
387
+ // Like JumpToExternalReference, but also takes care of passing the number
388
+ // of parameters.
389
+ void TailCallExternalReference(const ExternalReference& ext,
390
+ int num_arguments,
391
+ int result_size);
392
+
393
+ // Convenience function: tail call a runtime routine (jump).
394
+ void TailCallRuntime(Runtime::FunctionId fid,
349
395
  int num_arguments,
350
396
  int result_size);
351
397
 
398
+ // Before calling a C-function from generated code, align arguments on stack.
399
+ // After aligning the frame, arguments must be stored in esp[0], esp[4],
400
+ // etc., not pushed. The argument count assumes all arguments are word sized.
401
+ // Some compilers/platforms require the stack to be aligned when calling
402
+ // C++ code.
403
+ // Needs a scratch register to do some arithmetic. This register will be
404
+ // trashed.
405
+ void PrepareCallCFunction(int num_arguments, Register scratch);
406
+
407
+ // Calls a C function and cleans up the space for arguments allocated
408
+ // by PrepareCallCFunction. The called function is not allowed to trigger a
409
+ // garbage collection, since that might move the code and invalidate the
410
+ // return address (unless this is somehow accounted for by the called
411
+ // function).
412
+ void CallCFunction(ExternalReference function, int num_arguments);
413
+ void CallCFunction(Register function, int num_arguments);
414
+
352
415
  void PushHandleScope(Register scratch);
353
416
 
354
417
  // Pops a handle scope using the specified scratch register and
@@ -360,7 +423,7 @@ class MacroAssembler: public Assembler {
360
423
  Object* TryPopHandleScope(Register saved, Register scratch);
361
424
 
362
425
  // Jump to a runtime routine.
363
- void JumpToRuntime(const ExternalReference& ext);
426
+ void JumpToExternalReference(const ExternalReference& ext);
364
427
 
365
428
 
366
429
  // ---------------------------------------------------------------------------
@@ -376,13 +439,6 @@ class MacroAssembler: public Assembler {
376
439
 
377
440
  void Move(Register target, Handle<Object> value);
378
441
 
379
- struct Unresolved {
380
- int pc;
381
- uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders.
382
- const char* name;
383
- };
384
- List<Unresolved>* unresolved() { return &unresolved_; }
385
-
386
442
  Handle<Object> CodeObject() { return code_object_; }
387
443
 
388
444
 
@@ -392,6 +448,8 @@ class MacroAssembler: public Assembler {
392
448
  void SetCounter(StatsCounter* counter, int value);
393
449
  void IncrementCounter(StatsCounter* counter, int value);
394
450
  void DecrementCounter(StatsCounter* counter, int value);
451
+ void IncrementCounter(Condition cc, StatsCounter* counter, int value);
452
+ void DecrementCounter(Condition cc, StatsCounter* counter, int value);
395
453
 
396
454
 
397
455
  // ---------------------------------------------------------------------------
@@ -407,18 +465,38 @@ class MacroAssembler: public Assembler {
407
465
  // Print a message to stdout and abort execution.
408
466
  void Abort(const char* msg);
409
467
 
468
+ // Check that the stack is aligned.
469
+ void CheckStackAlignment();
470
+
410
471
  // Verify restrictions about code generated in stubs.
411
472
  void set_generating_stub(bool value) { generating_stub_ = value; }
412
473
  bool generating_stub() { return generating_stub_; }
413
474
  void set_allow_stub_calls(bool value) { allow_stub_calls_ = value; }
414
475
  bool allow_stub_calls() { return allow_stub_calls_; }
415
476
 
477
+ // ---------------------------------------------------------------------------
478
+ // String utilities.
479
+
480
+ // Check whether the instance type represents a flat ascii string. Jump to the
481
+ // label if not. If the instance type can be scratched specify same register
482
+ // for both instance type and scratch.
483
+ void JumpIfInstanceTypeIsNotSequentialAscii(Register instance_type,
484
+ Register scratch,
485
+ Label* on_not_flat_ascii_string);
486
+
487
+ // Checks if both objects are sequential ASCII strings, and jumps to label
488
+ // if either is not.
489
+ void JumpIfNotBothSequentialAsciiStrings(Register object1,
490
+ Register object2,
491
+ Register scratch1,
492
+ Register scratch2,
493
+ Label* on_not_flat_ascii_strings);
494
+
416
495
  private:
417
- List<Unresolved> unresolved_;
418
496
  bool generating_stub_;
419
497
  bool allow_stub_calls_;
420
- Handle<Object> code_object_; // This handle will be patched with the
421
- // code object on installation.
498
+ // This handle will be patched with the code object on installation.
499
+ Handle<Object> code_object_;
422
500
 
423
501
  // Helper functions for generating invokes.
424
502
  void InvokePrologue(const ParameterCount& expected,
@@ -428,18 +506,6 @@ class MacroAssembler: public Assembler {
428
506
  Label* done,
429
507
  InvokeFlag flag);
430
508
 
431
- // Prepares for a call or jump to a builtin by doing two things:
432
- // 1. Emits code that fetches the builtin's function object from the context
433
- // at runtime, and puts it in the register rdi.
434
- // 2. Fetches the builtin's code object, and returns it in a handle, at
435
- // compile time, so that later code can emit instructions to jump or call
436
- // the builtin directly. If the code object has not yet been created, it
437
- // returns the builtin code object for IllegalFunction, and sets the
438
- // output parameter "resolved" to false. Code that uses the return value
439
- // should then add the address and the builtin name to the list of fixups
440
- // called unresolved_, which is fixed up by the bootstrapper.
441
- Handle<Code> ResolveBuiltin(Builtins::JavaScript id, bool* resolved);
442
-
443
509
  // Activation support.
444
510
  void EnterFrame(StackFrame::Type type);
445
511
  void LeaveFrame(StackFrame::Type type);
@@ -38,7 +38,7 @@
38
38
  namespace v8 {
39
39
  namespace internal {
40
40
 
41
- #ifdef V8_NATIVE_REGEXP
41
+ #ifndef V8_INTERPRETED_REGEXP
42
42
  /*
43
43
  * This assembler uses the following register assignment convention
44
44
  * - edx : current character. Must be loaded using LoadCurrentCharacter
@@ -59,8 +59,6 @@ namespace internal {
59
59
  * call through the runtime system)
60
60
  * - stack_area_base (High end of the memory area to use as
61
61
  * backtracking stack)
62
- * - at_start (if 1, we are starting at the start of the
63
- * string, otherwise 0)
64
62
  * - int* capture_array (int[num_saved_registers_], for output).
65
63
  * - end of input (Address of end of string)
66
64
  * - start of input (Address of first character in string)
@@ -74,6 +72,8 @@ namespace internal {
74
72
  * - backup of caller ebx
75
73
  * - Offset of location before start of input (effectively character
76
74
  * position -1). Used to initialize capture registers to a non-position.
75
+ * - Boolean at start (if 1, we are starting at the start of the string,
76
+ * otherwise 0)
77
77
  * - register 0 ebp[-4] (Only positions must be stored in the first
78
78
  * - register 1 ebp[-8] num_saved_registers_ registers)
79
79
  * - ...
@@ -324,8 +324,8 @@ void RegExpMacroAssemblerIA32::CheckNotBackReferenceIgnoreCase(
324
324
  __ push(backtrack_stackpointer());
325
325
  __ push(ebx);
326
326
 
327
- const int argument_count = 3;
328
- FrameAlign(argument_count, ecx);
327
+ static const int argument_count = 3;
328
+ __ PrepareCallCFunction(argument_count, ecx);
329
329
  // Put arguments into allocated stack area, last argument highest on stack.
330
330
  // Parameters are
331
331
  // Address byte_offset1 - Address captured substring's start.
@@ -346,7 +346,7 @@ void RegExpMacroAssemblerIA32::CheckNotBackReferenceIgnoreCase(
346
346
 
347
347
  ExternalReference compare =
348
348
  ExternalReference::re_case_insensitive_compare_uc16();
349
- CallCFunction(compare, argument_count);
349
+ __ CallCFunction(compare, argument_count);
350
350
  // Pop original values before reacting on result value.
351
351
  __ pop(ebx);
352
352
  __ pop(backtrack_stackpointer());
@@ -539,46 +539,33 @@ bool RegExpMacroAssemblerIA32::CheckSpecialCharacterClass(uc16 type,
539
539
  return true;
540
540
  }
541
541
  case 'w': {
542
- Label done, check_digits;
543
- __ cmp(Operand(current_character()), Immediate('9'));
544
- __ j(less_equal, &check_digits);
545
- __ cmp(Operand(current_character()), Immediate('_'));
546
- __ j(equal, &done);
547
- // Convert to lower case if letter.
548
- __ mov(Operand(eax), current_character());
549
- __ or_(eax, 0x20);
550
- // check current character in range ['a'..'z'], nondestructively.
551
- __ sub(Operand(eax), Immediate('a'));
552
- __ cmp(Operand(eax), Immediate('z' - 'a'));
553
- BranchOrBacktrack(above, on_no_match);
554
- __ jmp(&done);
555
- __ bind(&check_digits);
556
- // Check current character in range ['0'..'9'].
557
- __ cmp(Operand(current_character()), Immediate('0'));
558
- BranchOrBacktrack(below, on_no_match);
559
- __ bind(&done);
560
-
542
+ if (mode_ != ASCII) {
543
+ // Table is 128 entries, so all ASCII characters can be tested.
544
+ __ cmp(Operand(current_character()), Immediate('z'));
545
+ BranchOrBacktrack(above, on_no_match);
546
+ }
547
+ ASSERT_EQ(0, word_character_map[0]); // Character '\0' is not a word char.
548
+ ExternalReference word_map = ExternalReference::re_word_character_map();
549
+ __ test_b(current_character(),
550
+ Operand::StaticArray(current_character(), times_1, word_map));
551
+ BranchOrBacktrack(zero, on_no_match);
561
552
  return true;
562
553
  }
563
554
  case 'W': {
564
- Label done, check_digits;
565
- __ cmp(Operand(current_character()), Immediate('9'));
566
- __ j(less_equal, &check_digits);
567
- __ cmp(Operand(current_character()), Immediate('_'));
568
- BranchOrBacktrack(equal, on_no_match);
569
- // Convert to lower case if letter.
570
- __ mov(Operand(eax), current_character());
571
- __ or_(eax, 0x20);
572
- // check current character in range ['a'..'z'], nondestructively.
573
- __ sub(Operand(eax), Immediate('a'));
574
- __ cmp(Operand(eax), Immediate('z' - 'a'));
575
- BranchOrBacktrack(below_equal, on_no_match);
576
- __ jmp(&done);
577
- __ bind(&check_digits);
578
- // Check current character in range ['0'..'9'].
579
- __ cmp(Operand(current_character()), Immediate('0'));
580
- BranchOrBacktrack(above_equal, on_no_match);
581
- __ bind(&done);
555
+ Label done;
556
+ if (mode_ != ASCII) {
557
+ // Table is 128 entries, so all ASCII characters can be tested.
558
+ __ cmp(Operand(current_character()), Immediate('z'));
559
+ __ j(above, &done);
560
+ }
561
+ ASSERT_EQ(0, word_character_map[0]); // Character '\0' is not a word char.
562
+ ExternalReference word_map = ExternalReference::re_word_character_map();
563
+ __ test_b(current_character(),
564
+ Operand::StaticArray(current_character(), times_1, word_map));
565
+ BranchOrBacktrack(not_zero, on_no_match);
566
+ if (mode_ != ASCII) {
567
+ __ bind(&done);
568
+ }
582
569
  return true;
583
570
  }
584
571
  // Non-standard classes (with no syntactic shorthand) used internally.
@@ -638,6 +625,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
638
625
  __ push(edi);
639
626
  __ push(ebx); // Callee-save on MacOS.
640
627
  __ push(Immediate(0)); // Make room for "input start - 1" constant.
628
+ __ push(Immediate(0)); // Make room for "at start" constant.
641
629
 
642
630
  // Check if we have space on the stack for registers.
643
631
  Label stack_limit_hit;
@@ -665,6 +653,8 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
665
653
  __ j(not_zero, &exit_label_);
666
654
 
667
655
  __ bind(&stack_ok);
656
+ // Load start index for later use.
657
+ __ mov(ebx, Operand(ebp, kStartIndex));
668
658
 
669
659
  // Allocate space on stack for registers.
670
660
  __ sub(Operand(esp), Immediate(num_registers_ * kPointerSize));
@@ -674,12 +664,27 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
674
664
  __ mov(edi, Operand(ebp, kInputStart));
675
665
  // Set up edi to be negative offset from string end.
676
666
  __ sub(edi, Operand(esi));
677
- // Set eax to address of char before start of input
667
+
668
+ // Set eax to address of char before start of the string.
678
669
  // (effectively string position -1).
679
- __ lea(eax, Operand(edi, -char_size()));
670
+ __ neg(ebx);
671
+ if (mode_ == UC16) {
672
+ __ lea(eax, Operand(edi, ebx, times_2, -char_size()));
673
+ } else {
674
+ __ lea(eax, Operand(edi, ebx, times_1, -char_size()));
675
+ }
680
676
  // Store this value in a local variable, for use when clearing
681
677
  // position registers.
682
678
  __ mov(Operand(ebp, kInputStartMinusOne), eax);
679
+
680
+ // Determine whether the start index is zero, that is at the start of the
681
+ // string, and store that value in a local variable.
682
+ __ xor_(Operand(ecx), ecx); // setcc only operates on cl (lower byte of ecx).
683
+ // Register ebx still holds -stringIndex.
684
+ __ test(ebx, Operand(ebx));
685
+ __ setcc(zero, ecx); // 1 if 0 (start of string), 0 if positive.
686
+ __ mov(Operand(ebp, kAtStart), ecx);
687
+
683
688
  if (num_saved_registers_ > 0) { // Always is, if generated from a regexp.
684
689
  // Fill saved registers with initial value = start offset - 1
685
690
  // Fill in stack push order, to avoid accessing across an unwritten
@@ -724,10 +729,17 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
724
729
  // copy captures to output
725
730
  __ mov(ebx, Operand(ebp, kRegisterOutput));
726
731
  __ mov(ecx, Operand(ebp, kInputEnd));
732
+ __ mov(edx, Operand(ebp, kStartIndex));
727
733
  __ sub(ecx, Operand(ebp, kInputStart));
734
+ if (mode_ == UC16) {
735
+ __ lea(ecx, Operand(ecx, edx, times_2, 0));
736
+ } else {
737
+ __ add(ecx, Operand(edx));
738
+ }
728
739
  for (int i = 0; i < num_saved_registers_; i++) {
729
740
  __ mov(eax, register_location(i));
730
- __ add(eax, Operand(ecx)); // Convert to index from start, not end.
741
+ // Convert to index from start of string, not end.
742
+ __ add(eax, Operand(ecx));
731
743
  if (mode_ == UC16) {
732
744
  __ sar(eax, 1); // Convert byte index to character index.
733
745
  }
@@ -787,13 +799,13 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
787
799
  __ push(edi);
788
800
 
789
801
  // Call GrowStack(backtrack_stackpointer())
790
- int num_arguments = 2;
791
- FrameAlign(num_arguments, ebx);
802
+ static const int num_arguments = 2;
803
+ __ PrepareCallCFunction(num_arguments, ebx);
792
804
  __ lea(eax, Operand(ebp, kStackHighEnd));
793
805
  __ mov(Operand(esp, 1 * kPointerSize), eax);
794
806
  __ mov(Operand(esp, 0 * kPointerSize), backtrack_stackpointer());
795
807
  ExternalReference grow_stack = ExternalReference::re_grow_stack();
796
- CallCFunction(grow_stack, num_arguments);
808
+ __ CallCFunction(grow_stack, num_arguments);
797
809
  // If return NULL, we have failed to grow the stack, and
798
810
  // must exit with a stack-overflow exception.
799
811
  __ or_(eax, Operand(eax));
@@ -820,7 +832,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
820
832
  NULL,
821
833
  Code::ComputeFlags(Code::REGEXP),
822
834
  masm_->CodeObject());
823
- LOG(RegExpCodeCreateEvent(*code, *source));
835
+ PROFILE(RegExpCodeCreateEvent(*code, *source));
824
836
  return Handle<Object>::cast(code);
825
837
  }
826
838
 
@@ -954,8 +966,8 @@ void RegExpMacroAssemblerIA32::WriteStackPointerToRegister(int reg) {
954
966
  // Private methods:
955
967
 
956
968
  void RegExpMacroAssemblerIA32::CallCheckStackGuardState(Register scratch) {
957
- int num_arguments = 3;
958
- FrameAlign(num_arguments, scratch);
969
+ static const int num_arguments = 3;
970
+ __ PrepareCallCFunction(num_arguments, scratch);
959
971
  // RegExp code frame pointer.
960
972
  __ mov(Operand(esp, 2 * kPointerSize), ebp);
961
973
  // Code* of self.
@@ -965,7 +977,7 @@ void RegExpMacroAssemblerIA32::CallCheckStackGuardState(Register scratch) {
965
977
  __ mov(Operand(esp, 0 * kPointerSize), eax);
966
978
  ExternalReference check_stack_guard =
967
979
  ExternalReference::re_check_stack_guard_state();
968
- CallCFunction(check_stack_guard, num_arguments);
980
+ __ CallCFunction(check_stack_guard, num_arguments);
969
981
  }
970
982
 
971
983
 
@@ -1090,19 +1102,22 @@ void RegExpMacroAssemblerIA32::BranchOrBacktrack(Condition condition,
1090
1102
 
1091
1103
 
1092
1104
  void RegExpMacroAssemblerIA32::SafeCall(Label* to) {
1093
- __ call(to);
1105
+ Label return_to;
1106
+ __ push(Immediate::CodeRelativeOffset(&return_to));
1107
+ __ jmp(to);
1108
+ __ bind(&return_to);
1094
1109
  }
1095
1110
 
1096
1111
 
1097
1112
  void RegExpMacroAssemblerIA32::SafeReturn() {
1098
- __ add(Operand(esp, 0), Immediate(masm_->CodeObject()));
1099
- __ ret(0);
1113
+ __ pop(ebx);
1114
+ __ add(Operand(ebx), Immediate(masm_->CodeObject()));
1115
+ __ jmp(Operand(ebx));
1100
1116
  }
1101
1117
 
1102
1118
 
1103
1119
  void RegExpMacroAssemblerIA32::SafeCallTarget(Label* name) {
1104
1120
  __ bind(name);
1105
- __ sub(Operand(esp, 0), Immediate(masm_->CodeObject()));
1106
1121
  }
1107
1122
 
1108
1123
 
@@ -1156,37 +1171,6 @@ void RegExpMacroAssemblerIA32::CheckStackLimit() {
1156
1171
  }
1157
1172
 
1158
1173
 
1159
- void RegExpMacroAssemblerIA32::FrameAlign(int num_arguments, Register scratch) {
1160
- // TODO(lrn): Since we no longer use the system stack arbitrarily (but we do
1161
- // use it, e.g., for SafeCall), we know the number of elements on the stack
1162
- // since the last frame alignment. We might be able to do this simpler then.
1163
- int frameAlignment = OS::ActivationFrameAlignment();
1164
- if (frameAlignment != 0) {
1165
- // Make stack end at alignment and make room for num_arguments words
1166
- // and the original value of esp.
1167
- __ mov(scratch, esp);
1168
- __ sub(Operand(esp), Immediate((num_arguments + 1) * kPointerSize));
1169
- ASSERT(IsPowerOf2(frameAlignment));
1170
- __ and_(esp, -frameAlignment);
1171
- __ mov(Operand(esp, num_arguments * kPointerSize), scratch);
1172
- } else {
1173
- __ sub(Operand(esp), Immediate(num_arguments * kPointerSize));
1174
- }
1175
- }
1176
-
1177
-
1178
- void RegExpMacroAssemblerIA32::CallCFunction(ExternalReference function,
1179
- int num_arguments) {
1180
- __ mov(Operand(eax), Immediate(function));
1181
- __ call(Operand(eax));
1182
- if (OS::ActivationFrameAlignment() != 0) {
1183
- __ mov(esp, Operand(esp, num_arguments * kPointerSize));
1184
- } else {
1185
- __ add(Operand(esp), Immediate(num_arguments * sizeof(int32_t)));
1186
- }
1187
- }
1188
-
1189
-
1190
1174
  void RegExpMacroAssemblerIA32::LoadCurrentCharacterUnchecked(int cp_offset,
1191
1175
  int characters) {
1192
1176
  if (mode_ == ASCII) {
@@ -1214,6 +1198,6 @@ void RegExpMacroAssemblerIA32::LoadCurrentCharacterUnchecked(int cp_offset,
1214
1198
 
1215
1199
  #undef __
1216
1200
 
1217
- #endif // V8_NATIVE_REGEXP
1201
+ #endif // V8_INTERPRETED_REGEXP
1218
1202
 
1219
1203
  }} // namespace v8::internal