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
@@ -33,10 +33,18 @@
33
33
  namespace v8 {
34
34
  namespace internal {
35
35
 
36
+ // ----------------------------------------------------------------------------
37
+ // Static helper functions
38
+
39
+ // Generate a MemOperand for loading a field from an object.
40
+ static inline MemOperand FieldMemOperand(Register object, int offset) {
41
+ return MemOperand(object, offset - kHeapObjectTag);
42
+ }
43
+
36
44
 
37
45
  // Give alias names to registers
38
46
  const Register cp = { 8 }; // JavaScript context pointer
39
-
47
+ const Register roots = { 10 }; // Roots array pointer.
40
48
 
41
49
  enum InvokeJSFlags {
42
50
  CALL_JS,
@@ -49,14 +57,7 @@ class MacroAssembler: public Assembler {
49
57
  public:
50
58
  MacroAssembler(void* buffer, int size);
51
59
 
52
- // ---------------------------------------------------------------------------
53
- // Low-level helpers for compiler
54
-
55
- // Jump, Call, and Ret pseudo instructions implementing inter-working
56
- private:
57
- void Jump(intptr_t target, RelocInfo::Mode rmode, Condition cond = al);
58
- void Call(intptr_t target, RelocInfo::Mode rmode, Condition cond = al);
59
- public:
60
+ // Jump, Call, and Ret pseudo instructions implementing inter-working.
60
61
  void Jump(Register target, Condition cond = al);
61
62
  void Jump(byte* target, RelocInfo::Mode rmode, Condition cond = al);
62
63
  void Jump(Handle<Code> code, RelocInfo::Mode rmode, Condition cond = al);
@@ -69,8 +70,15 @@ class MacroAssembler: public Assembler {
69
70
  // from the stack, clobbering only the sp register.
70
71
  void Drop(int count, Condition cond = al);
71
72
 
73
+
74
+ // Swap two registers. If the scratch register is omitted then a slightly
75
+ // less efficient form using xor instead of mov is emitted.
76
+ void Swap(Register reg1, Register reg2, Register scratch = no_reg);
77
+
72
78
  void Call(Label* target);
73
79
  void Move(Register dst, Handle<Object> value);
80
+ // May do nothing if the registers are identical.
81
+ void Move(Register dst, Register src);
74
82
  // Jumps to the label at the index given by the Smi in "index".
75
83
  void SmiJumpTable(Register index, Vector<Label*> targets);
76
84
  // Load an object from the root table.
@@ -78,6 +86,20 @@ class MacroAssembler: public Assembler {
78
86
  Heap::RootListIndex index,
79
87
  Condition cond = al);
80
88
 
89
+
90
+ // Check if object is in new space.
91
+ // scratch can be object itself, but it will be clobbered.
92
+ void InNewSpace(Register object,
93
+ Register scratch,
94
+ Condition cc, // eq for new space, ne otherwise
95
+ Label* branch);
96
+
97
+
98
+ // Set the remebered set bit for an offset into an
99
+ // object. RecordWriteHelper only works if the object is not in new
100
+ // space.
101
+ void RecordWriteHelper(Register object, Register offset, Register scracth);
102
+
81
103
  // Sets the remembered set bit for [address+offset], where address is the
82
104
  // address of the heap object 'object'. The address must be in the first 8K
83
105
  // of an allocated page. The 'scratch' register is used in the
@@ -85,6 +107,65 @@ class MacroAssembler: public Assembler {
85
107
  // well as the ip register.
86
108
  void RecordWrite(Register object, Register offset, Register scratch);
87
109
 
110
+ // Push two registers. Pushes leftmost register first (to highest address).
111
+ void Push(Register src1, Register src2, Condition cond = al) {
112
+ ASSERT(!src1.is(src2));
113
+ if (src1.code() > src2.code()) {
114
+ stm(db_w, sp, src1.bit() | src2.bit(), cond);
115
+ } else {
116
+ str(src1, MemOperand(sp, 4, NegPreIndex), cond);
117
+ str(src2, MemOperand(sp, 4, NegPreIndex), cond);
118
+ }
119
+ }
120
+
121
+ // Push three registers. Pushes leftmost register first (to highest address).
122
+ void Push(Register src1, Register src2, Register src3, Condition cond = al) {
123
+ ASSERT(!src1.is(src2));
124
+ ASSERT(!src2.is(src3));
125
+ ASSERT(!src1.is(src3));
126
+ if (src1.code() > src2.code()) {
127
+ if (src2.code() > src3.code()) {
128
+ stm(db_w, sp, src1.bit() | src2.bit() | src3.bit(), cond);
129
+ } else {
130
+ stm(db_w, sp, src1.bit() | src2.bit(), cond);
131
+ str(src3, MemOperand(sp, 4, NegPreIndex), cond);
132
+ }
133
+ } else {
134
+ str(src1, MemOperand(sp, 4, NegPreIndex), cond);
135
+ Push(src2, src3, cond);
136
+ }
137
+ }
138
+
139
+ // Push four registers. Pushes leftmost register first (to highest address).
140
+ void Push(Register src1, Register src2,
141
+ Register src3, Register src4, Condition cond = al) {
142
+ ASSERT(!src1.is(src2));
143
+ ASSERT(!src2.is(src3));
144
+ ASSERT(!src1.is(src3));
145
+ ASSERT(!src1.is(src4));
146
+ ASSERT(!src2.is(src4));
147
+ ASSERT(!src3.is(src4));
148
+ if (src1.code() > src2.code()) {
149
+ if (src2.code() > src3.code()) {
150
+ if (src3.code() > src4.code()) {
151
+ stm(db_w,
152
+ sp,
153
+ src1.bit() | src2.bit() | src3.bit() | src4.bit(),
154
+ cond);
155
+ } else {
156
+ stm(db_w, sp, src1.bit() | src2.bit() | src3.bit(), cond);
157
+ str(src4, MemOperand(sp, 4, NegPreIndex), cond);
158
+ }
159
+ } else {
160
+ stm(db_w, sp, src1.bit() | src2.bit(), cond);
161
+ Push(src3, src4, cond);
162
+ }
163
+ } else {
164
+ str(src1, MemOperand(sp, 4, NegPreIndex), cond);
165
+ Push(src2, src3, src4, cond);
166
+ }
167
+ }
168
+
88
169
  // ---------------------------------------------------------------------------
89
170
  // Stack limit support
90
171
 
@@ -108,8 +189,8 @@ class MacroAssembler: public Assembler {
108
189
  // Leave the current exit frame. Expects the return value in r0.
109
190
  void LeaveExitFrame(ExitFrame::Mode mode);
110
191
 
111
- // Align the stack by optionally pushing a Smi zero.
112
- void AlignStack(int offset);
192
+ // Get the actual activation frame alignment for target environment.
193
+ static int ActivationFrameAlignment();
113
194
 
114
195
  void LoadContext(Register dst, int context_chain_length);
115
196
 
@@ -134,6 +215,10 @@ class MacroAssembler: public Assembler {
134
215
  const ParameterCount& actual,
135
216
  InvokeFlag flag);
136
217
 
218
+ void InvokeFunction(JSFunction* function,
219
+ const ParameterCount& actual,
220
+ InvokeFlag flag);
221
+
137
222
 
138
223
  #ifdef ENABLE_DEBUGGER_SUPPORT
139
224
  // ---------------------------------------------------------------------------
@@ -145,6 +230,7 @@ class MacroAssembler: public Assembler {
145
230
  void CopyRegistersFromStackToMemory(Register base,
146
231
  Register scratch,
147
232
  RegList regs);
233
+ void DebugBreak();
148
234
  #endif
149
235
 
150
236
  // ---------------------------------------------------------------------------
@@ -171,9 +257,14 @@ class MacroAssembler: public Assembler {
171
257
  // clobbered if it the same as the holder register. The function
172
258
  // returns a register containing the holder - either object_reg or
173
259
  // holder_reg.
260
+ // The function can optionally (when save_at_depth !=
261
+ // kInvalidProtoDepth) save the object at the given depth by moving
262
+ // it to [sp].
174
263
  Register CheckMaps(JSObject* object, Register object_reg,
175
264
  JSObject* holder, Register holder_reg,
176
- Register scratch, Label* miss);
265
+ Register scratch,
266
+ int save_at_depth,
267
+ Label* miss);
177
268
 
178
269
  // Generate code for checking access rights - used for security checks
179
270
  // on access to global objects across environments. The holder register
@@ -209,6 +300,37 @@ class MacroAssembler: public Assembler {
209
300
  // allocation is undone.
210
301
  void UndoAllocationInNewSpace(Register object, Register scratch);
211
302
 
303
+
304
+ void AllocateTwoByteString(Register result,
305
+ Register length,
306
+ Register scratch1,
307
+ Register scratch2,
308
+ Register scratch3,
309
+ Label* gc_required);
310
+ void AllocateAsciiString(Register result,
311
+ Register length,
312
+ Register scratch1,
313
+ Register scratch2,
314
+ Register scratch3,
315
+ Label* gc_required);
316
+ void AllocateTwoByteConsString(Register result,
317
+ Register length,
318
+ Register scratch1,
319
+ Register scratch2,
320
+ Label* gc_required);
321
+ void AllocateAsciiConsString(Register result,
322
+ Register length,
323
+ Register scratch1,
324
+ Register scratch2,
325
+ Label* gc_required);
326
+
327
+ // Allocates a heap number or jumps to the need_gc label if the young space
328
+ // is full and a scavenge is needed.
329
+ void AllocateHeapNumber(Register result,
330
+ Register scratch1,
331
+ Register scratch2,
332
+ Label* gc_required);
333
+
212
334
  // ---------------------------------------------------------------------------
213
335
  // Support functions.
214
336
 
@@ -243,6 +365,29 @@ class MacroAssembler: public Assembler {
243
365
  Register type_reg,
244
366
  InstanceType type);
245
367
 
368
+
369
+ // Check if the map of an object is equal to a specified map and
370
+ // branch to label if not. Skip the smi check if not required
371
+ // (object is known to be a heap object)
372
+ void CheckMap(Register obj,
373
+ Register scratch,
374
+ Handle<Map> map,
375
+ Label* fail,
376
+ bool is_heap_object);
377
+
378
+ // Load and check the instance type of an object for being a string.
379
+ // Loads the type into the second argument register.
380
+ // Returns a condition that will be enabled if the object was a string.
381
+ Condition IsObjectStringType(Register obj,
382
+ Register type) {
383
+ ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset));
384
+ ldrb(type, FieldMemOperand(type, Map::kInstanceTypeOffset));
385
+ tst(type, Operand(kIsNotStringMask));
386
+ ASSERT_EQ(0, kStringTag);
387
+ return eq;
388
+ }
389
+
390
+
246
391
  inline void BranchOnSmi(Register value, Label* smi_label) {
247
392
  tst(value, Operand(kSmiTagMask));
248
393
  b(eq, smi_label);
@@ -257,11 +402,20 @@ class MacroAssembler: public Assembler {
257
402
  // occurred.
258
403
  void IllegalOperation(int num_arguments);
259
404
 
405
+ // Get the number of least significant bits from a register
406
+ void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits);
407
+
260
408
  // Uses VFP instructions to Convert a Smi to a double.
261
409
  void IntegerToDoubleConversionWithVFP3(Register inReg,
262
410
  Register outHighReg,
263
411
  Register outLowReg);
264
412
 
413
+ // Count leading zeros in a 32 bit word. On ARM5 and later it uses the clz
414
+ // instruction. On pre-ARM5 hardware this routine gives the wrong answer
415
+ // for 0 (31 instead of 32).
416
+ void CountLeadingZeros(Register source,
417
+ Register scratch,
418
+ Register zeros);
265
419
 
266
420
  // ---------------------------------------------------------------------------
267
421
  // Runtime calls
@@ -269,25 +423,54 @@ class MacroAssembler: public Assembler {
269
423
  // Call a code stub.
270
424
  void CallStub(CodeStub* stub, Condition cond = al);
271
425
 
426
+ // Call a code stub.
427
+ void TailCallStub(CodeStub* stub, Condition cond = al);
428
+
272
429
  // Return from a code stub after popping its arguments.
273
430
  void StubReturn(int argc);
274
431
 
275
432
  // Call a runtime routine.
276
- // Eventually this should be used for all C calls.
277
433
  void CallRuntime(Runtime::Function* f, int num_arguments);
278
434
 
279
435
  // Convenience function: Same as above, but takes the fid instead.
280
436
  void CallRuntime(Runtime::FunctionId fid, int num_arguments);
281
437
 
438
+ // Convenience function: call an external reference.
439
+ void CallExternalReference(const ExternalReference& ext,
440
+ int num_arguments);
441
+
282
442
  // Tail call of a runtime routine (jump).
283
- // Like JumpToRuntime, but also takes care of passing the number
443
+ // Like JumpToExternalReference, but also takes care of passing the number
284
444
  // of parameters.
285
- void TailCallRuntime(const ExternalReference& ext,
445
+ void TailCallExternalReference(const ExternalReference& ext,
446
+ int num_arguments,
447
+ int result_size);
448
+
449
+ // Convenience function: tail call a runtime routine (jump).
450
+ void TailCallRuntime(Runtime::FunctionId fid,
286
451
  int num_arguments,
287
452
  int result_size);
288
453
 
454
+ // Before calling a C-function from generated code, align arguments on stack.
455
+ // After aligning the frame, non-register arguments must be stored in
456
+ // sp[0], sp[4], etc., not pushed. The argument count assumes all arguments
457
+ // are word sized.
458
+ // Some compilers/platforms require the stack to be aligned when calling
459
+ // C++ code.
460
+ // Needs a scratch register to do some arithmetic. This register will be
461
+ // trashed.
462
+ void PrepareCallCFunction(int num_arguments, Register scratch);
463
+
464
+ // Calls a C function and cleans up the space for arguments allocated
465
+ // by PrepareCallCFunction. The called function is not allowed to trigger a
466
+ // garbage collection, since that might move the code and invalidate the
467
+ // return address (unless this is somehow accounted for by the called
468
+ // function).
469
+ void CallCFunction(ExternalReference function, int num_arguments);
470
+ void CallCFunction(Register function, int num_arguments);
471
+
289
472
  // Jump to a runtime routine.
290
- void JumpToRuntime(const ExternalReference& builtin);
473
+ void JumpToExternalReference(const ExternalReference& builtin);
291
474
 
292
475
  // Invoke specified builtin JavaScript function. Adds an entry to
293
476
  // the unresolved list if the name does not resolve.
@@ -297,13 +480,6 @@ class MacroAssembler: public Assembler {
297
480
  // setup the function in r1.
298
481
  void GetBuiltinEntry(Register target, Builtins::JavaScript id);
299
482
 
300
- struct Unresolved {
301
- int pc;
302
- uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders.
303
- const char* name;
304
- };
305
- List<Unresolved>* unresolved() { return &unresolved_; }
306
-
307
483
  Handle<Object> CodeObject() { return code_object_; }
308
484
 
309
485
 
@@ -337,12 +513,52 @@ class MacroAssembler: public Assembler {
337
513
  void set_allow_stub_calls(bool value) { allow_stub_calls_ = value; }
338
514
  bool allow_stub_calls() { return allow_stub_calls_; }
339
515
 
516
+ // ---------------------------------------------------------------------------
517
+ // Smi utilities
518
+
519
+ // Jump if either of the registers contain a non-smi.
520
+ void JumpIfNotBothSmi(Register reg1, Register reg2, Label* on_not_both_smi);
521
+ // Jump if either of the registers contain a smi.
522
+ void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi);
523
+
524
+ // ---------------------------------------------------------------------------
525
+ // String utilities
526
+
527
+ // Checks if both objects are sequential ASCII strings and jumps to label
528
+ // if either is not. Assumes that neither object is a smi.
529
+ void JumpIfNonSmisNotBothSequentialAsciiStrings(Register object1,
530
+ Register object2,
531
+ Register scratch1,
532
+ Register scratch2,
533
+ Label* failure);
534
+
535
+ // Checks if both objects are sequential ASCII strings and jumps to label
536
+ // if either is not.
537
+ void JumpIfNotBothSequentialAsciiStrings(Register first,
538
+ Register second,
539
+ Register scratch1,
540
+ Register scratch2,
541
+ Label* not_flat_ascii_strings);
542
+
543
+ // Checks if both instance types are sequential ASCII strings and jumps to
544
+ // label if either is not.
545
+ void JumpIfBothInstanceTypesAreNotSequentialAscii(
546
+ Register first_object_instance_type,
547
+ Register second_object_instance_type,
548
+ Register scratch1,
549
+ Register scratch2,
550
+ Label* failure);
551
+
552
+ // Check if instance type is sequential ASCII string and jump to label if
553
+ // it is not.
554
+ void JumpIfInstanceTypeIsNotSequentialAscii(Register type,
555
+ Register scratch,
556
+ Label* failure);
557
+
558
+
340
559
  private:
341
- List<Unresolved> unresolved_;
342
- bool generating_stub_;
343
- bool allow_stub_calls_;
344
- Handle<Object> code_object_; // This handle will be patched with the code
345
- // object on installation.
560
+ void Jump(intptr_t target, RelocInfo::Mode rmode, Condition cond = al);
561
+ void Call(intptr_t target, RelocInfo::Mode rmode, Condition cond = al);
346
562
 
347
563
  // Helper functions for generating invokes.
348
564
  void InvokePrologue(const ParameterCount& expected,
@@ -352,21 +568,20 @@ class MacroAssembler: public Assembler {
352
568
  Label* done,
353
569
  InvokeFlag flag);
354
570
 
355
- // Prepares for a call or jump to a builtin by doing two things:
356
- // 1. Emits code that fetches the builtin's function object from the context
357
- // at runtime, and puts it in the register rdi.
358
- // 2. Fetches the builtin's code object, and returns it in a handle, at
359
- // compile time, so that later code can emit instructions to jump or call
360
- // the builtin directly. If the code object has not yet been created, it
361
- // returns the builtin code object for IllegalFunction, and sets the
362
- // output parameter "resolved" to false. Code that uses the return value
363
- // should then add the address and the builtin name to the list of fixups
364
- // called unresolved_, which is fixed up by the bootstrapper.
365
- Handle<Code> ResolveBuiltin(Builtins::JavaScript id, bool* resolved);
366
-
367
571
  // Activation support.
368
572
  void EnterFrame(StackFrame::Type type);
369
573
  void LeaveFrame(StackFrame::Type type);
574
+
575
+ void InitializeNewString(Register string,
576
+ Register length,
577
+ Heap::RootListIndex map_index,
578
+ Register scratch1,
579
+ Register scratch2);
580
+
581
+ bool generating_stub_;
582
+ bool allow_stub_calls_;
583
+ // This handle will be patched with the code object on installation.
584
+ Handle<Object> code_object_;
370
585
  };
371
586
 
372
587
 
@@ -402,12 +617,6 @@ class CodePatcher {
402
617
  // -----------------------------------------------------------------------------
403
618
  // Static helper functions.
404
619
 
405
- // Generate a MemOperand for loading a field from an object.
406
- static inline MemOperand FieldMemOperand(Register object, int offset) {
407
- return MemOperand(object, offset - kHeapObjectTag);
408
- }
409
-
410
-
411
620
  #ifdef GENERATED_CODE_COVERAGE
412
621
  #define CODE_COVERAGE_STRINGIFY(x) #x
413
622
  #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
@@ -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
  * This assembler uses the following register assignment convention
45
45
  * - r5 : Pointer to current code object (Code*) including heap object tag.
@@ -63,8 +63,6 @@ namespace internal {
63
63
  * through the runtime system)
64
64
  * - stack_area_base (High end of the memory area to use as
65
65
  * backtracking stack)
66
- * - at_start (if 1, we are starting at the start of the
67
- * string, otherwise 0)
68
66
  * - int* capture_array (int[num_saved_registers_], for output).
69
67
  * --- sp when called ---
70
68
  * - link address
@@ -76,6 +74,8 @@ namespace internal {
76
74
  * - void* input_string (location of a handle containing the string)
77
75
  * - Offset of location before start of input (effectively character
78
76
  * position -1). Used to initialize capture registers to a non-position.
77
+ * - At start (if 1, we are starting at the start of the
78
+ * string, otherwise 0)
79
79
  * - register 0 (Only positions must be stored in the first
80
80
  * - register 1 num_saved_registers_ registers)
81
81
  * - ...
@@ -163,7 +163,7 @@ void RegExpMacroAssemblerARM::Backtrack() {
163
163
  CheckPreemption();
164
164
  // Pop Code* offset from backtrack stack, add Code* and jump to location.
165
165
  Pop(r0);
166
- __ add(pc, r0, Operand(r5));
166
+ __ add(pc, r0, Operand(code_pointer()));
167
167
  }
168
168
 
169
169
 
@@ -338,7 +338,7 @@ void RegExpMacroAssemblerARM::CheckNotBackReferenceIgnoreCase(
338
338
  } else {
339
339
  ASSERT(mode_ == UC16);
340
340
  int argument_count = 3;
341
- FrameAlign(argument_count, r2);
341
+ __ PrepareCallCFunction(argument_count, r2);
342
342
 
343
343
  // r0 - offset of start of capture
344
344
  // r1 - length of capture
@@ -360,7 +360,7 @@ void RegExpMacroAssemblerARM::CheckNotBackReferenceIgnoreCase(
360
360
 
361
361
  ExternalReference function =
362
362
  ExternalReference::re_case_insensitive_compare_uc16();
363
- CallCFunction(function, argument_count);
363
+ __ CallCFunction(function, argument_count);
364
364
 
365
365
  // Check if function returned non-zero for success or zero for failure.
366
366
  __ cmp(r0, Operand(0));
@@ -526,64 +526,54 @@ bool RegExpMacroAssemblerARM::CheckSpecialCharacterClass(uc16 type,
526
526
  return true;
527
527
  }
528
528
  case 'n': {
529
- // Match newlines (0x0a('\n'), 0x0d('\r'), 0x2028 and 0x2029)
530
- __ eor(r0, current_character(), Operand(0x01));
531
- // See if current character is '\n'^1 or '\r'^1, i.e., 0x0b or 0x0c
532
- __ sub(r0, r0, Operand(0x0b));
533
- __ cmp(r0, Operand(0x0c - 0x0b));
534
- if (mode_ == ASCII) {
535
- BranchOrBacktrack(hi, on_no_match);
536
- } else {
537
- Label done;
538
- __ b(ls, &done);
539
- // Compare original value to 0x2028 and 0x2029, using the already
540
- // computed (current_char ^ 0x01 - 0x0b). I.e., check for
541
- // 0x201d (0x2028 - 0x0b) or 0x201e.
542
- __ sub(r0, r0, Operand(0x2028 - 0x0b));
543
- __ cmp(r0, Operand(1));
544
- BranchOrBacktrack(hi, on_no_match);
545
- __ bind(&done);
546
- }
547
- return true;
529
+ // Match newlines (0x0a('\n'), 0x0d('\r'), 0x2028 and 0x2029)
530
+ __ eor(r0, current_character(), Operand(0x01));
531
+ // See if current character is '\n'^1 or '\r'^1, i.e., 0x0b or 0x0c
532
+ __ sub(r0, r0, Operand(0x0b));
533
+ __ cmp(r0, Operand(0x0c - 0x0b));
534
+ if (mode_ == ASCII) {
535
+ BranchOrBacktrack(hi, on_no_match);
536
+ } else {
537
+ Label done;
538
+ __ b(ls, &done);
539
+ // Compare original value to 0x2028 and 0x2029, using the already
540
+ // computed (current_char ^ 0x01 - 0x0b). I.e., check for
541
+ // 0x201d (0x2028 - 0x0b) or 0x201e.
542
+ __ sub(r0, r0, Operand(0x2028 - 0x0b));
543
+ __ cmp(r0, Operand(1));
544
+ BranchOrBacktrack(hi, on_no_match);
545
+ __ bind(&done);
548
546
  }
547
+ return true;
548
+ }
549
549
  case 'w': {
550
- // Match word character (0-9, A-Z, a-z and _).
551
- Label digits, done;
552
- __ cmp(current_character(), Operand('9'));
553
- __ b(ls, &digits);
554
- __ cmp(current_character(), Operand('_'));
555
- __ b(eq, &done);
556
- __ orr(r0, current_character(), Operand(0x20));
557
- __ sub(r0, r0, Operand('a'));
558
- __ cmp(r0, Operand('z' - 'a'));
559
- BranchOrBacktrack(hi, on_no_match);
560
- __ jmp(&done);
561
-
562
- __ bind(&digits);
563
- __ cmp(current_character(), Operand('0'));
564
- BranchOrBacktrack(lo, on_no_match);
565
- __ bind(&done);
566
-
550
+ if (mode_ != ASCII) {
551
+ // Table is 128 entries, so all ASCII characters can be tested.
552
+ __ cmp(current_character(), Operand('z'));
553
+ BranchOrBacktrack(hi, on_no_match);
554
+ }
555
+ ExternalReference map = ExternalReference::re_word_character_map();
556
+ __ mov(r0, Operand(map));
557
+ __ ldrb(r0, MemOperand(r0, current_character()));
558
+ __ tst(r0, Operand(r0));
559
+ BranchOrBacktrack(eq, on_no_match);
567
560
  return true;
568
561
  }
569
562
  case 'W': {
570
- // Match non-word character (not 0-9, A-Z, a-z and _).
571
- Label digits, done;
572
- __ cmp(current_character(), Operand('9'));
573
- __ b(ls, &digits);
574
- __ cmp(current_character(), Operand('_'));
575
- BranchOrBacktrack(eq, on_no_match);
576
- __ orr(r0, current_character(), Operand(0x20));
577
- __ sub(r0, r0, Operand('a'));
578
- __ cmp(r0, Operand('z' - 'a'));
579
- BranchOrBacktrack(ls, on_no_match);
580
- __ jmp(&done);
581
-
582
- __ bind(&digits);
583
- __ cmp(current_character(), Operand('0'));
584
- BranchOrBacktrack(hs, on_no_match);
585
- __ bind(&done);
586
-
563
+ Label done;
564
+ if (mode_ != ASCII) {
565
+ // Table is 128 entries, so all ASCII characters can be tested.
566
+ __ cmp(current_character(), Operand('z'));
567
+ __ b(hi, &done);
568
+ }
569
+ ExternalReference map = ExternalReference::re_word_character_map();
570
+ __ mov(r0, Operand(map));
571
+ __ ldrb(r0, MemOperand(r0, current_character()));
572
+ __ tst(r0, Operand(r0));
573
+ BranchOrBacktrack(ne, on_no_match);
574
+ if (mode_ != ASCII) {
575
+ __ bind(&done);
576
+ }
587
577
  return true;
588
578
  }
589
579
  case '*':
@@ -620,7 +610,7 @@ Handle<Object> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
620
610
  // Set frame pointer just above the arguments.
621
611
  __ add(frame_pointer(), sp, Operand(4 * kPointerSize));
622
612
  __ push(r0); // Make room for "position - 1" constant (value is irrelevant).
623
-
613
+ __ push(r0); // Make room for "at start" constant (value is irrelevant).
624
614
  // Check if we have space on the stack for registers.
625
615
  Label stack_limit_hit;
626
616
  Label stack_ok;
@@ -657,12 +647,22 @@ Handle<Object> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
657
647
  __ ldr(r0, MemOperand(frame_pointer(), kInputStart));
658
648
  // Find negative length (offset of start relative to end).
659
649
  __ sub(current_input_offset(), r0, end_of_input_address());
660
- // Set r0 to address of char before start of input
650
+ // Set r0 to address of char before start of the input string
661
651
  // (effectively string position -1).
652
+ __ ldr(r1, MemOperand(frame_pointer(), kStartIndex));
662
653
  __ sub(r0, current_input_offset(), Operand(char_size()));
654
+ __ sub(r0, r0, Operand(r1, LSL, (mode_ == UC16) ? 1 : 0));
663
655
  // Store this value in a local variable, for use when clearing
664
656
  // position registers.
665
657
  __ str(r0, MemOperand(frame_pointer(), kInputStartMinusOne));
658
+
659
+ // Determine whether the start index is zero, that is at the start of the
660
+ // string, and store that value in a local variable.
661
+ __ tst(r1, Operand(r1));
662
+ __ mov(r1, Operand(1), LeaveCC, eq);
663
+ __ mov(r1, Operand(0), LeaveCC, ne);
664
+ __ str(r1, MemOperand(frame_pointer(), kAtStart));
665
+
666
666
  if (num_saved_registers_ > 0) { // Always is, if generated from a regexp.
667
667
  // Fill saved registers with initial value = start offset - 1
668
668
 
@@ -700,12 +700,15 @@ Handle<Object> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
700
700
  // copy captures to output
701
701
  __ ldr(r1, MemOperand(frame_pointer(), kInputStart));
702
702
  __ ldr(r0, MemOperand(frame_pointer(), kRegisterOutput));
703
+ __ ldr(r2, MemOperand(frame_pointer(), kStartIndex));
703
704
  __ sub(r1, end_of_input_address(), r1);
704
705
  // r1 is length of input in bytes.
705
706
  if (mode_ == UC16) {
706
707
  __ mov(r1, Operand(r1, LSR, 1));
707
708
  }
708
709
  // r1 is length of input in characters.
710
+ __ add(r1, r1, Operand(r2));
711
+ // r1 is length of string in characters.
709
712
 
710
713
  ASSERT_EQ(0, num_saved_registers_ % 2);
711
714
  // Always an even number of capture registers. This allows us to
@@ -765,13 +768,13 @@ Handle<Object> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
765
768
  Label grow_failed;
766
769
 
767
770
  // Call GrowStack(backtrack_stackpointer())
768
- int num_arguments = 2;
769
- FrameAlign(num_arguments, r0);
771
+ static const int num_arguments = 2;
772
+ __ PrepareCallCFunction(num_arguments, r0);
770
773
  __ mov(r0, backtrack_stackpointer());
771
774
  __ add(r1, frame_pointer(), Operand(kStackHighEnd));
772
775
  ExternalReference grow_stack =
773
776
  ExternalReference::re_grow_stack();
774
- CallCFunction(grow_stack, num_arguments);
777
+ __ CallCFunction(grow_stack, num_arguments);
775
778
  // If return NULL, we have failed to grow the stack, and
776
779
  // must exit with a stack-overflow exception.
777
780
  __ cmp(r0, Operand(0));
@@ -796,7 +799,7 @@ Handle<Object> RegExpMacroAssemblerARM::GetCode(Handle<String> source) {
796
799
  NULL,
797
800
  Code::ComputeFlags(Code::REGEXP),
798
801
  masm_->CodeObject());
799
- LOG(RegExpCodeCreateEvent(*code, *source));
802
+ PROFILE(RegExpCodeCreateEvent(*code, *source));
800
803
  return Handle<Object>::cast(code);
801
804
  }
802
805
 
@@ -966,8 +969,8 @@ void RegExpMacroAssemblerARM::WriteStackPointerToRegister(int reg) {
966
969
  // Private methods:
967
970
 
968
971
  void RegExpMacroAssemblerARM::CallCheckStackGuardState(Register scratch) {
969
- int num_arguments = 3;
970
- FrameAlign(num_arguments, scratch);
972
+ static const int num_arguments = 3;
973
+ __ PrepareCallCFunction(num_arguments, scratch);
971
974
  // RegExp code frame pointer.
972
975
  __ mov(r2, frame_pointer());
973
976
  // Code* of self.
@@ -997,6 +1000,12 @@ int RegExpMacroAssemblerARM::CheckStackGuardState(Address* return_address,
997
1000
  // If not real stack overflow the stack guard was used to interrupt
998
1001
  // execution for another purpose.
999
1002
 
1003
+ // If this is a direct call from JavaScript retry the RegExp forcing the call
1004
+ // through the runtime system. Currently the direct call cannot handle a GC.
1005
+ if (frame_entry<int>(re_frame, kDirectCall) == 1) {
1006
+ return RETRY;
1007
+ }
1008
+
1000
1009
  // Prepare for possible GC.
1001
1010
  HandleScope handles;
1002
1011
  Handle<Code> code_handle(re_code);
@@ -1179,47 +1188,12 @@ int RegExpMacroAssemblerARM::GetBacktrackConstantPoolEntry() {
1179
1188
  }
1180
1189
 
1181
1190
 
1182
- void RegExpMacroAssemblerARM::FrameAlign(int num_arguments, Register scratch) {
1183
- int frameAlignment = OS::ActivationFrameAlignment();
1184
- // Up to four simple arguments are passed in registers r0..r3.
1185
- int stack_passed_arguments = (num_arguments <= 4) ? 0 : num_arguments - 4;
1186
- if (frameAlignment != 0) {
1187
- // Make stack end at alignment and make room for num_arguments - 4 words
1188
- // and the original value of sp.
1189
- __ mov(scratch, sp);
1190
- __ sub(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize));
1191
- ASSERT(IsPowerOf2(frameAlignment));
1192
- __ and_(sp, sp, Operand(-frameAlignment));
1193
- __ str(scratch, MemOperand(sp, stack_passed_arguments * kPointerSize));
1194
- } else {
1195
- __ sub(sp, sp, Operand(stack_passed_arguments * kPointerSize));
1196
- }
1197
- }
1198
-
1199
-
1200
- void RegExpMacroAssemblerARM::CallCFunction(ExternalReference function,
1201
- int num_arguments) {
1202
- __ mov(r5, Operand(function));
1203
- // Just call directly. The function called cannot cause a GC, or
1204
- // allow preemption, so the return address in the link register
1205
- // stays correct.
1206
- __ Call(r5);
1207
- int stack_passed_arguments = (num_arguments <= 4) ? 0 : num_arguments - 4;
1208
- if (OS::ActivationFrameAlignment() > kIntSize) {
1209
- __ ldr(sp, MemOperand(sp, stack_passed_arguments * kPointerSize));
1210
- } else {
1211
- __ add(sp, sp, Operand(stack_passed_arguments * sizeof(kPointerSize)));
1212
- }
1213
- __ mov(code_pointer(), Operand(masm_->CodeObject()));
1214
- }
1215
-
1216
-
1217
1191
  void RegExpMacroAssemblerARM::CallCFunctionUsingStub(
1218
1192
  ExternalReference function,
1219
1193
  int num_arguments) {
1220
1194
  // Must pass all arguments in registers. The stub pushes on the stack.
1221
1195
  ASSERT(num_arguments <= 4);
1222
- __ mov(r5, Operand(function));
1196
+ __ mov(code_pointer(), Operand(function));
1223
1197
  RegExpCEntryStub stub;
1224
1198
  __ CallStub(&stub);
1225
1199
  if (OS::ActivationFrameAlignment() != 0) {
@@ -1261,6 +1235,6 @@ void RegExpCEntryStub::Generate(MacroAssembler* masm_) {
1261
1235
 
1262
1236
  #undef __
1263
1237
 
1264
- #endif // V8_NATIVE_REGEXP
1238
+ #endif // V8_INTERPRETED_REGEXP
1265
1239
 
1266
1240
  }} // namespace v8::internal