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
@@ -133,7 +133,8 @@ class ScriptDataImpl : public ScriptData {
133
133
  FunctionLiteral* MakeAST(bool compile_in_global_context,
134
134
  Handle<Script> script,
135
135
  v8::Extension* extension,
136
- ScriptDataImpl* pre_data);
136
+ ScriptDataImpl* pre_data,
137
+ bool is_json = false);
137
138
 
138
139
 
139
140
  ScriptDataImpl* PreParse(Handle<String> source,
@@ -167,7 +168,8 @@ FunctionLiteral* MakeLazyAST(Handle<Script> script,
167
168
  class CompileTimeValue: public AllStatic {
168
169
  public:
169
170
  enum Type {
170
- OBJECT_LITERAL,
171
+ OBJECT_LITERAL_FAST_ELEMENTS,
172
+ OBJECT_LITERAL_SLOW_ELEMENTS,
171
173
  ARRAY_LITERAL
172
174
  };
173
175
 
@@ -95,6 +95,24 @@ int OS::ActivationFrameAlignment() {
95
95
  }
96
96
 
97
97
 
98
+ const char* OS::LocalTimezone(double time) {
99
+ if (isnan(time)) return "";
100
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
101
+ struct tm* t = localtime(&tv);
102
+ if (NULL == t) return "";
103
+ return t->tm_zone;
104
+ }
105
+
106
+
107
+ double OS::LocalTimeOffset() {
108
+ time_t tv = time(NULL);
109
+ struct tm* t = localtime(&tv);
110
+ // tm_gmtoff includes any daylight savings offset, so subtract it.
111
+ return static_cast<double>(t->tm_gmtoff * msPerSecond -
112
+ (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
113
+ }
114
+
115
+
98
116
  // We keep the lowest and highest addresses mapped as a quick way of
99
117
  // determining that pointers are outside the heap (used mostly in assertions
100
118
  // and verification). The estimate is conservative, ie, not all addresses in
@@ -174,7 +192,8 @@ void OS::Abort() {
174
192
 
175
193
 
176
194
  void OS::DebugBreak() {
177
- #if defined(__arm__) || defined(__thumb__)
195
+ #if (defined(__arm__) || defined(__thumb__)) && \
196
+ defined(CAN_USE_ARMV5_INSTRUCTIONS)
178
197
  asm("bkpt 0");
179
198
  #else
180
199
  asm("int $3");
@@ -549,30 +568,30 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
549
568
 
550
569
  TickSample sample;
551
570
 
571
+ // We always sample the VM state.
572
+ sample.state = VMState::current_state();
573
+
552
574
  // If profiling, we extract the current pc and sp.
553
575
  if (active_sampler_->IsProfiling()) {
554
576
  // Extracting the sample from the context is extremely machine dependent.
555
577
  ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
556
578
  mcontext_t& mcontext = ucontext->uc_mcontext;
557
579
  #if V8_HOST_ARCH_IA32
558
- sample.pc = mcontext.mc_eip;
559
- sample.sp = mcontext.mc_esp;
560
- sample.fp = mcontext.mc_ebp;
580
+ sample.pc = reinterpret_cast<Address>(mcontext.mc_eip);
581
+ sample.sp = reinterpret_cast<Address>(mcontext.mc_esp);
582
+ sample.fp = reinterpret_cast<Address>(mcontext.mc_ebp);
561
583
  #elif V8_HOST_ARCH_X64
562
- sample.pc = mcontext.mc_rip;
563
- sample.sp = mcontext.mc_rsp;
564
- sample.fp = mcontext.mc_rbp;
584
+ sample.pc = reinterpret_cast<Address>(mcontext.mc_rip);
585
+ sample.sp = reinterpret_cast<Address>(mcontext.mc_rsp);
586
+ sample.fp = reinterpret_cast<Address>(mcontext.mc_rbp);
565
587
  #elif V8_HOST_ARCH_ARM
566
- sample.pc = mcontext.mc_r15;
567
- sample.sp = mcontext.mc_r13;
568
- sample.fp = mcontext.mc_r11;
588
+ sample.pc = reinterpret_cast<Address>(mcontext.mc_r15);
589
+ sample.sp = reinterpret_cast<Address>(mcontext.mc_r13);
590
+ sample.fp = reinterpret_cast<Address>(mcontext.mc_r11);
569
591
  #endif
570
592
  active_sampler_->SampleStack(&sample);
571
593
  }
572
594
 
573
- // We always sample the VM state.
574
- sample.state = Logger::state();
575
-
576
595
  active_sampler_->Tick(&sample);
577
596
  }
578
597
 
@@ -89,6 +89,8 @@ uint64_t OS::CpuFeaturesImpliedByPlatform() {
89
89
  // Here gcc is telling us that we are on an ARM and gcc is assuming that we
90
90
  // have VFP3 instructions. If gcc can assume it then so can we.
91
91
  return 1u << VFP3;
92
+ #elif CAN_USE_ARMV7_INSTRUCTIONS
93
+ return 1u << ARMv7;
92
94
  #else
93
95
  return 0; // Linux runs on anything.
94
96
  #endif
@@ -113,6 +115,9 @@ bool OS::ArmCpuHasFeature(CpuFeature feature) {
113
115
  case VFP3:
114
116
  search_string = "vfp";
115
117
  break;
118
+ case ARMv7:
119
+ search_string = "ARMv7";
120
+ break;
116
121
  default:
117
122
  UNREACHABLE();
118
123
  }
@@ -151,11 +156,30 @@ int OS::ActivationFrameAlignment() {
151
156
  // On EABI ARM targets this is required for fp correctness in the
152
157
  // runtime system.
153
158
  return 8;
154
- #else
155
- // With gcc 4.4 the tree vectorization optimiser can generate code
159
+ #elif V8_TARGET_ARCH_MIPS
160
+ return 8;
161
+ #endif
162
+ // With gcc 4.4 the tree vectorization optimizer can generate code
156
163
  // that requires 16 byte alignment such as movdqa on x86.
157
164
  return 16;
158
- #endif
165
+ }
166
+
167
+
168
+ const char* OS::LocalTimezone(double time) {
169
+ if (isnan(time)) return "";
170
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
171
+ struct tm* t = localtime(&tv);
172
+ if (NULL == t) return "";
173
+ return t->tm_zone;
174
+ }
175
+
176
+
177
+ double OS::LocalTimeOffset() {
178
+ time_t tv = time(NULL);
179
+ struct tm* t = localtime(&tv);
180
+ // tm_gmtoff includes any daylight savings offset, so subtract it.
181
+ return static_cast<double>(t->tm_gmtoff * msPerSecond -
182
+ (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
159
183
  }
160
184
 
161
185
 
@@ -242,8 +266,11 @@ void OS::Abort() {
242
266
  void OS::DebugBreak() {
243
267
  // TODO(lrn): Introduce processor define for runtime system (!= V8_ARCH_x,
244
268
  // which is the architecture of generated code).
245
- #if defined(__arm__) || defined(__thumb__)
269
+ #if (defined(__arm__) || defined(__thumb__)) && \
270
+ defined(CAN_USE_ARMV5_INSTRUCTIONS)
246
271
  asm("bkpt 0");
272
+ #elif defined(__mips__)
273
+ asm("break");
247
274
  #else
248
275
  asm("int $3");
249
276
  #endif
@@ -305,8 +332,8 @@ void OS::LogSharedLibraryAddresses() {
305
332
  if (fscanf(fp, " %c%c%c%c", &attr_r, &attr_w, &attr_x, &attr_p) != 4) break;
306
333
 
307
334
  int c;
308
- if (attr_r == 'r' && attr_x == 'x') {
309
- // Found a readable and executable entry. Skip characters until we reach
335
+ if (attr_r == 'r' && attr_w != 'w' && attr_x == 'x') {
336
+ // Found a read-only executable entry. Skip characters until we reach
310
337
  // the beginning of the filename or the end of the line.
311
338
  do {
312
339
  c = getc(fp);
@@ -695,45 +722,52 @@ static inline bool IsVmThread() {
695
722
 
696
723
 
697
724
  static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
725
+ #ifndef V8_HOST_ARCH_MIPS
698
726
  USE(info);
699
727
  if (signal != SIGPROF) return;
700
728
  if (active_sampler_ == NULL) return;
701
729
 
702
- TickSample sample;
730
+ TickSample sample_obj;
731
+ TickSample* sample = CpuProfiler::TickSampleEvent();
732
+ if (sample == NULL) sample = &sample_obj;
703
733
 
734
+ // We always sample the VM state.
735
+ sample->state = VMState::current_state();
704
736
  // If profiling, we extract the current pc and sp.
705
737
  if (active_sampler_->IsProfiling()) {
706
738
  // Extracting the sample from the context is extremely machine dependent.
707
739
  ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
708
740
  mcontext_t& mcontext = ucontext->uc_mcontext;
709
741
  #if V8_HOST_ARCH_IA32
710
- sample.pc = mcontext.gregs[REG_EIP];
711
- sample.sp = mcontext.gregs[REG_ESP];
712
- sample.fp = mcontext.gregs[REG_EBP];
742
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
743
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
744
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
713
745
  #elif V8_HOST_ARCH_X64
714
- sample.pc = mcontext.gregs[REG_RIP];
715
- sample.sp = mcontext.gregs[REG_RSP];
716
- sample.fp = mcontext.gregs[REG_RBP];
746
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
747
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
748
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
717
749
  #elif V8_HOST_ARCH_ARM
718
750
  // An undefined macro evaluates to 0, so this applies to Android's Bionic also.
719
751
  #if (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
720
- sample.pc = mcontext.gregs[R15];
721
- sample.sp = mcontext.gregs[R13];
722
- sample.fp = mcontext.gregs[R11];
752
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
753
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
754
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
723
755
  #else
724
- sample.pc = mcontext.arm_pc;
725
- sample.sp = mcontext.arm_sp;
726
- sample.fp = mcontext.arm_fp;
756
+ sample->pc = reinterpret_cast<Address>(mcontext.arm_pc);
757
+ sample->sp = reinterpret_cast<Address>(mcontext.arm_sp);
758
+ sample->fp = reinterpret_cast<Address>(mcontext.arm_fp);
727
759
  #endif
760
+ #elif V8_HOST_ARCH_MIPS
761
+ // Implement this on MIPS.
762
+ UNIMPLEMENTED();
728
763
  #endif
729
- if (IsVmThread())
730
- active_sampler_->SampleStack(&sample);
764
+ if (IsVmThread()) {
765
+ active_sampler_->SampleStack(sample);
766
+ }
731
767
  }
732
768
 
733
- // We always sample the VM state.
734
- sample.state = Logger::state();
735
-
736
- active_sampler_->Tick(&sample);
769
+ active_sampler_->Tick(sample);
770
+ #endif
737
771
  }
738
772
 
739
773
 
@@ -259,6 +259,24 @@ int OS::ActivationFrameAlignment() {
259
259
  }
260
260
 
261
261
 
262
+ const char* OS::LocalTimezone(double time) {
263
+ if (isnan(time)) return "";
264
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
265
+ struct tm* t = localtime(&tv);
266
+ if (NULL == t) return "";
267
+ return t->tm_zone;
268
+ }
269
+
270
+
271
+ double OS::LocalTimeOffset() {
272
+ time_t tv = time(NULL);
273
+ struct tm* t = localtime(&tv);
274
+ // tm_gmtoff includes any daylight savings offset, so subtract it.
275
+ return static_cast<double>(t->tm_gmtoff * msPerSecond -
276
+ (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
277
+ }
278
+
279
+
262
280
  int OS::StackWalk(Vector<StackFrame> frames) {
263
281
  // If weak link to execinfo lib has failed, ie because we are on 10.4, abort.
264
282
  if (backtrace == NULL)
@@ -526,10 +544,14 @@ class Sampler::PlatformData : public Malloced {
526
544
 
527
545
  // Sampler thread handler.
528
546
  void Runner() {
529
- // Loop until the sampler is disengaged.
530
- while (sampler_->IsActive()) {
531
- TickSample sample;
547
+ // Loop until the sampler is disengaged, keeping the specified samling freq.
548
+ for ( ; sampler_->IsActive(); OS::Sleep(sampler_->interval_)) {
549
+ TickSample sample_obj;
550
+ TickSample* sample = CpuProfiler::TickSampleEvent();
551
+ if (sample == NULL) sample = &sample_obj;
532
552
 
553
+ // We always sample the VM state.
554
+ sample->state = VMState::current_state();
533
555
  // If profiling, we record the pc and sp of the profiled thread.
534
556
  if (sampler_->IsProfiling()
535
557
  && KERN_SUCCESS == thread_suspend(profiled_thread_)) {
@@ -559,21 +581,16 @@ class Sampler::PlatformData : public Malloced {
559
581
  flavor,
560
582
  reinterpret_cast<natural_t*>(&state),
561
583
  &count) == KERN_SUCCESS) {
562
- sample.pc = state.REGISTER_FIELD(ip);
563
- sample.sp = state.REGISTER_FIELD(sp);
564
- sample.fp = state.REGISTER_FIELD(bp);
565
- sampler_->SampleStack(&sample);
584
+ sample->pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
585
+ sample->sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
586
+ sample->fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
587
+ sampler_->SampleStack(sample);
566
588
  }
567
589
  thread_resume(profiled_thread_);
568
590
  }
569
591
 
570
- // We always sample the VM state.
571
- sample.state = Logger::state();
572
592
  // Invoke tick handler with program counter and stack pointer.
573
- sampler_->Tick(&sample);
574
-
575
- // Wait until next sampling.
576
- usleep(sampler_->interval_ * 1000);
593
+ sampler_->Tick(sample);
577
594
  }
578
595
  }
579
596
  };
@@ -94,6 +94,24 @@ int OS::ActivationFrameAlignment() {
94
94
  }
95
95
 
96
96
 
97
+ const char* OS::LocalTimezone(double time) {
98
+ if (isnan(time)) return "";
99
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
100
+ struct tm* t = localtime(&tv);
101
+ if (NULL == t) return "";
102
+ return t->tm_zone;
103
+ }
104
+
105
+
106
+ double OS::LocalTimeOffset() {
107
+ time_t tv = time(NULL);
108
+ struct tm* t = localtime(&tv);
109
+ // tm_gmtoff includes any daylight savings offset, so subtract it.
110
+ return static_cast<double>(t->tm_gmtoff * msPerSecond -
111
+ (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
112
+ }
113
+
114
+
97
115
  // We keep the lowest and highest addresses mapped as a quick way of
98
116
  // determining that pointers are outside the heap (used mostly in assertions
99
117
  // and verification). The estimate is conservative, ie, not all addresses in
@@ -172,7 +190,8 @@ void OS::Abort() {
172
190
 
173
191
 
174
192
  void OS::DebugBreak() {
175
- #if defined(__arm__) || defined(__thumb__)
193
+ #if (defined(__arm__) || defined(__thumb__)) && \
194
+ defined(CAN_USE_ARMV5_INSTRUCTIONS)
176
195
  asm("bkpt 0");
177
196
  #else
178
197
  asm("int $3");
@@ -523,7 +542,7 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
523
542
  TickSample sample;
524
543
 
525
544
  // We always sample the VM state.
526
- sample.state = Logger::state();
545
+ sample.state = VMState::current_state();
527
546
 
528
547
  active_sampler_->Tick(&sample);
529
548
  }
@@ -99,15 +99,6 @@ int64_t OS::Ticks() {
99
99
  }
100
100
 
101
101
 
102
- const char* OS::LocalTimezone(double time) {
103
- if (isnan(time)) return "";
104
- time_t tv = static_cast<time_t>(floor(time/msPerSecond));
105
- struct tm* t = localtime(&tv);
106
- if (NULL == t) return "";
107
- return t->tm_zone;
108
- }
109
-
110
-
111
102
  double OS::DaylightSavingsOffset(double time) {
112
103
  if (isnan(time)) return nan_value();
113
104
  time_t tv = static_cast<time_t>(floor(time/msPerSecond));
@@ -117,15 +108,6 @@ double OS::DaylightSavingsOffset(double time) {
117
108
  }
118
109
 
119
110
 
120
- double OS::LocalTimeOffset() {
121
- time_t tv = time(NULL);
122
- struct tm* t = localtime(&tv);
123
- // tm_gmtoff includes any daylight savings offset, so subtract it.
124
- return static_cast<double>(t->tm_gmtoff * msPerSecond -
125
- (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
126
- }
127
-
128
-
129
111
  // ----------------------------------------------------------------------------
130
112
  // POSIX stdio support.
131
113
  //
@@ -0,0 +1,607 @@
1
+ // Copyright 2006-2009 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ // Platform specific code for Solaris 10 goes here. For the POSIX comaptible
29
+ // parts the implementation is in platform-posix.cc.
30
+
31
+ #ifdef __sparc
32
+ # error "V8 does not support the SPARC CPU architecture."
33
+ #endif
34
+
35
+ #include <sys/stack.h> // for stack alignment
36
+ #include <unistd.h> // getpagesize(), usleep()
37
+ #include <sys/mman.h> // mmap()
38
+ #include <execinfo.h> // backtrace(), backtrace_symbols()
39
+ #include <pthread.h>
40
+ #include <sched.h> // for sched_yield
41
+ #include <semaphore.h>
42
+ #include <time.h>
43
+ #include <sys/time.h> // gettimeofday(), timeradd()
44
+ #include <errno.h>
45
+ #include <ieeefp.h> // finite()
46
+ #include <signal.h> // sigemptyset(), etc
47
+
48
+
49
+ #undef MAP_TYPE
50
+
51
+ #include "v8.h"
52
+
53
+ #include "platform.h"
54
+
55
+
56
+ namespace v8 {
57
+ namespace internal {
58
+
59
+
60
+ // 0 is never a valid thread id on Solaris since the main thread is 1 and
61
+ // subsequent have their ids incremented from there
62
+ static const pthread_t kNoThread = (pthread_t) 0;
63
+
64
+
65
+ double ceiling(double x) {
66
+ return ceil(x);
67
+ }
68
+
69
+
70
+ void OS::Setup() {
71
+ // Seed the random number generator.
72
+ // Convert the current time to a 64-bit integer first, before converting it
73
+ // to an unsigned. Going directly will cause an overflow and the seed to be
74
+ // set to all ones. The seed will be identical for different instances that
75
+ // call this setup code within the same millisecond.
76
+ uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
77
+ srandom(static_cast<unsigned int>(seed));
78
+ }
79
+
80
+
81
+ uint64_t OS::CpuFeaturesImpliedByPlatform() {
82
+ return 0; // Solaris runs on a lot of things.
83
+ }
84
+
85
+
86
+ int OS::ActivationFrameAlignment() {
87
+ return STACK_ALIGN;
88
+ }
89
+
90
+
91
+ const char* OS::LocalTimezone(double time) {
92
+ if (isnan(time)) return "";
93
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
94
+ struct tm* t = localtime(&tv);
95
+ if (NULL == t) return "";
96
+ return tzname[0]; // The location of the timezone string on Solaris.
97
+ }
98
+
99
+
100
+ double OS::LocalTimeOffset() {
101
+ // On Solaris, struct tm does not contain a tm_gmtoff field.
102
+ time_t utc = time(NULL);
103
+ ASSERT(utc != -1);
104
+ struct tm* loc = localtime(&utc);
105
+ ASSERT(loc != NULL);
106
+ return static_cast<double>((mktime(loc) - utc) * msPerSecond);
107
+ }
108
+
109
+
110
+ // We keep the lowest and highest addresses mapped as a quick way of
111
+ // determining that pointers are outside the heap (used mostly in assertions
112
+ // and verification). The estimate is conservative, ie, not all addresses in
113
+ // 'allocated' space are actually allocated to our heap. The range is
114
+ // [lowest, highest), inclusive on the low and and exclusive on the high end.
115
+ static void* lowest_ever_allocated = reinterpret_cast<void*>(-1);
116
+ static void* highest_ever_allocated = reinterpret_cast<void*>(0);
117
+
118
+
119
+ static void UpdateAllocatedSpaceLimits(void* address, int size) {
120
+ lowest_ever_allocated = Min(lowest_ever_allocated, address);
121
+ highest_ever_allocated =
122
+ Max(highest_ever_allocated,
123
+ reinterpret_cast<void*>(reinterpret_cast<char*>(address) + size));
124
+ }
125
+
126
+
127
+ bool OS::IsOutsideAllocatedSpace(void* address) {
128
+ return address < lowest_ever_allocated || address >= highest_ever_allocated;
129
+ }
130
+
131
+
132
+ size_t OS::AllocateAlignment() {
133
+ return static_cast<size_t>(getpagesize());
134
+ }
135
+
136
+
137
+ void* OS::Allocate(const size_t requested,
138
+ size_t* allocated,
139
+ bool is_executable) {
140
+ const size_t msize = RoundUp(requested, getpagesize());
141
+ int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
142
+ void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
143
+
144
+ if (mbase == MAP_FAILED) {
145
+ LOG(StringEvent("OS::Allocate", "mmap failed"));
146
+ return NULL;
147
+ }
148
+ *allocated = msize;
149
+ UpdateAllocatedSpaceLimits(mbase, msize);
150
+ return mbase;
151
+ }
152
+
153
+
154
+ void OS::Free(void* address, const size_t size) {
155
+ // TODO(1240712): munmap has a return value which is ignored here.
156
+ int result = munmap(address, size);
157
+ USE(result);
158
+ ASSERT(result == 0);
159
+ }
160
+
161
+
162
+ #ifdef ENABLE_HEAP_PROTECTION
163
+
164
+ void OS::Protect(void* address, size_t size) {
165
+ // TODO(1240712): mprotect has a return value which is ignored here.
166
+ mprotect(address, size, PROT_READ);
167
+ }
168
+
169
+
170
+ void OS::Unprotect(void* address, size_t size, bool is_executable) {
171
+ // TODO(1240712): mprotect has a return value which is ignored here.
172
+ int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
173
+ mprotect(address, size, prot);
174
+ }
175
+
176
+ #endif
177
+
178
+
179
+ void OS::Sleep(int milliseconds) {
180
+ useconds_t ms = static_cast<useconds_t>(milliseconds);
181
+ usleep(1000 * ms);
182
+ }
183
+
184
+
185
+ void OS::Abort() {
186
+ // Redirect to std abort to signal abnormal program termination.
187
+ abort();
188
+ }
189
+
190
+
191
+ void OS::DebugBreak() {
192
+ asm("int $3");
193
+ }
194
+
195
+
196
+ class PosixMemoryMappedFile : public OS::MemoryMappedFile {
197
+ public:
198
+ PosixMemoryMappedFile(FILE* file, void* memory, int size)
199
+ : file_(file), memory_(memory), size_(size) { }
200
+ virtual ~PosixMemoryMappedFile();
201
+ virtual void* memory() { return memory_; }
202
+ private:
203
+ FILE* file_;
204
+ void* memory_;
205
+ int size_;
206
+ };
207
+
208
+
209
+ OS::MemoryMappedFile* OS::MemoryMappedFile::create(const char* name, int size,
210
+ void* initial) {
211
+ FILE* file = fopen(name, "w+");
212
+ if (file == NULL) return NULL;
213
+ int result = fwrite(initial, size, 1, file);
214
+ if (result < 1) {
215
+ fclose(file);
216
+ return NULL;
217
+ }
218
+ void* memory =
219
+ mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(file), 0);
220
+ return new PosixMemoryMappedFile(file, memory, size);
221
+ }
222
+
223
+
224
+ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
225
+ if (memory_) munmap(memory_, size_);
226
+ fclose(file_);
227
+ }
228
+
229
+
230
+ void OS::LogSharedLibraryAddresses() {
231
+ }
232
+
233
+
234
+ int OS::StackWalk(Vector<OS::StackFrame> frames) {
235
+ int frames_size = frames.length();
236
+ void** addresses = NewArray<void*>(frames_size);
237
+
238
+ int frames_count = backtrace(addresses, frames_size);
239
+
240
+ char** symbols;
241
+ symbols = backtrace_symbols(addresses, frames_count);
242
+ if (symbols == NULL) {
243
+ DeleteArray(addresses);
244
+ return kStackWalkError;
245
+ }
246
+
247
+ for (int i = 0; i < frames_count; i++) {
248
+ frames[i].address = addresses[i];
249
+ // Format a text representation of the frame based on the information
250
+ // available.
251
+ SNPrintF(MutableCStrVector(frames[i].text, kStackWalkMaxTextLen),
252
+ "%s",
253
+ symbols[i]);
254
+ // Make sure line termination is in place.
255
+ frames[i].text[kStackWalkMaxTextLen - 1] = '\0';
256
+ }
257
+
258
+ DeleteArray(addresses);
259
+ free(symbols);
260
+
261
+ return frames_count;
262
+ }
263
+
264
+
265
+ // Constants used for mmap.
266
+ static const int kMmapFd = -1;
267
+ static const int kMmapFdOffset = 0;
268
+
269
+
270
+ VirtualMemory::VirtualMemory(size_t size) {
271
+ address_ = mmap(NULL, size, PROT_NONE,
272
+ MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
273
+ kMmapFd, kMmapFdOffset);
274
+ size_ = size;
275
+ }
276
+
277
+
278
+ VirtualMemory::~VirtualMemory() {
279
+ if (IsReserved()) {
280
+ if (0 == munmap(address(), size())) address_ = MAP_FAILED;
281
+ }
282
+ }
283
+
284
+
285
+ bool VirtualMemory::IsReserved() {
286
+ return address_ != MAP_FAILED;
287
+ }
288
+
289
+
290
+ bool VirtualMemory::Commit(void* address, size_t size, bool executable) {
291
+ int prot = PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0);
292
+ if (MAP_FAILED == mmap(address, size, prot,
293
+ MAP_PRIVATE | MAP_ANON | MAP_FIXED,
294
+ kMmapFd, kMmapFdOffset)) {
295
+ return false;
296
+ }
297
+
298
+ UpdateAllocatedSpaceLimits(address, size);
299
+ return true;
300
+ }
301
+
302
+
303
+ bool VirtualMemory::Uncommit(void* address, size_t size) {
304
+ return mmap(address, size, PROT_NONE,
305
+ MAP_PRIVATE | MAP_ANON | MAP_NORESERVE | MAP_FIXED,
306
+ kMmapFd, kMmapFdOffset) != MAP_FAILED;
307
+ }
308
+
309
+
310
+ class ThreadHandle::PlatformData : public Malloced {
311
+ public:
312
+ explicit PlatformData(ThreadHandle::Kind kind) {
313
+ Initialize(kind);
314
+ }
315
+
316
+ void Initialize(ThreadHandle::Kind kind) {
317
+ switch (kind) {
318
+ case ThreadHandle::SELF: thread_ = pthread_self(); break;
319
+ case ThreadHandle::INVALID: thread_ = kNoThread; break;
320
+ }
321
+ }
322
+
323
+ pthread_t thread_; // Thread handle for pthread.
324
+ };
325
+
326
+
327
+ ThreadHandle::ThreadHandle(Kind kind) {
328
+ data_ = new PlatformData(kind);
329
+ }
330
+
331
+
332
+ void ThreadHandle::Initialize(ThreadHandle::Kind kind) {
333
+ data_->Initialize(kind);
334
+ }
335
+
336
+
337
+ ThreadHandle::~ThreadHandle() {
338
+ delete data_;
339
+ }
340
+
341
+
342
+ bool ThreadHandle::IsSelf() const {
343
+ return pthread_equal(data_->thread_, pthread_self());
344
+ }
345
+
346
+
347
+ bool ThreadHandle::IsValid() const {
348
+ return data_->thread_ != kNoThread;
349
+ }
350
+
351
+
352
+ Thread::Thread() : ThreadHandle(ThreadHandle::INVALID) {
353
+ }
354
+
355
+
356
+ Thread::~Thread() {
357
+ }
358
+
359
+
360
+ static void* ThreadEntry(void* arg) {
361
+ Thread* thread = reinterpret_cast<Thread*>(arg);
362
+ // This is also initialized by the first argument to pthread_create() but we
363
+ // don't know which thread will run first (the original thread or the new
364
+ // one) so we initialize it here too.
365
+ thread->thread_handle_data()->thread_ = pthread_self();
366
+ ASSERT(thread->IsValid());
367
+ thread->Run();
368
+ return NULL;
369
+ }
370
+
371
+
372
+ void Thread::Start() {
373
+ pthread_create(&thread_handle_data()->thread_, NULL, ThreadEntry, this);
374
+ ASSERT(IsValid());
375
+ }
376
+
377
+
378
+ void Thread::Join() {
379
+ pthread_join(thread_handle_data()->thread_, NULL);
380
+ }
381
+
382
+
383
+ Thread::LocalStorageKey Thread::CreateThreadLocalKey() {
384
+ pthread_key_t key;
385
+ int result = pthread_key_create(&key, NULL);
386
+ USE(result);
387
+ ASSERT(result == 0);
388
+ return static_cast<LocalStorageKey>(key);
389
+ }
390
+
391
+
392
+ void Thread::DeleteThreadLocalKey(LocalStorageKey key) {
393
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
394
+ int result = pthread_key_delete(pthread_key);
395
+ USE(result);
396
+ ASSERT(result == 0);
397
+ }
398
+
399
+
400
+ void* Thread::GetThreadLocal(LocalStorageKey key) {
401
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
402
+ return pthread_getspecific(pthread_key);
403
+ }
404
+
405
+
406
+ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
407
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
408
+ pthread_setspecific(pthread_key, value);
409
+ }
410
+
411
+
412
+ void Thread::YieldCPU() {
413
+ sched_yield();
414
+ }
415
+
416
+
417
+ class SolarisMutex : public Mutex {
418
+ public:
419
+
420
+ SolarisMutex() {
421
+ pthread_mutexattr_t attr;
422
+ pthread_mutexattr_init(&attr);
423
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
424
+ pthread_mutex_init(&mutex_, &attr);
425
+ }
426
+
427
+ ~SolarisMutex() { pthread_mutex_destroy(&mutex_); }
428
+
429
+ int Lock() { return pthread_mutex_lock(&mutex_); }
430
+
431
+ int Unlock() { return pthread_mutex_unlock(&mutex_); }
432
+
433
+ private:
434
+ pthread_mutex_t mutex_;
435
+ };
436
+
437
+
438
+ Mutex* OS::CreateMutex() {
439
+ return new SolarisMutex();
440
+ }
441
+
442
+
443
+ class SolarisSemaphore : public Semaphore {
444
+ public:
445
+ explicit SolarisSemaphore(int count) { sem_init(&sem_, 0, count); }
446
+ virtual ~SolarisSemaphore() { sem_destroy(&sem_); }
447
+
448
+ virtual void Wait();
449
+ virtual bool Wait(int timeout);
450
+ virtual void Signal() { sem_post(&sem_); }
451
+ private:
452
+ sem_t sem_;
453
+ };
454
+
455
+
456
+ void SolarisSemaphore::Wait() {
457
+ while (true) {
458
+ int result = sem_wait(&sem_);
459
+ if (result == 0) return; // Successfully got semaphore.
460
+ CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
461
+ }
462
+ }
463
+
464
+
465
+ #ifndef TIMEVAL_TO_TIMESPEC
466
+ #define TIMEVAL_TO_TIMESPEC(tv, ts) do { \
467
+ (ts)->tv_sec = (tv)->tv_sec; \
468
+ (ts)->tv_nsec = (tv)->tv_usec * 1000; \
469
+ } while (false)
470
+ #endif
471
+
472
+
473
+ #ifndef timeradd
474
+ #define timeradd(a, b, result) \
475
+ do { \
476
+ (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
477
+ (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
478
+ if ((result)->tv_usec >= 1000000) { \
479
+ ++(result)->tv_sec; \
480
+ (result)->tv_usec -= 1000000; \
481
+ } \
482
+ } while (0)
483
+ #endif
484
+
485
+
486
+ bool SolarisSemaphore::Wait(int timeout) {
487
+ const long kOneSecondMicros = 1000000; // NOLINT
488
+
489
+ // Split timeout into second and nanosecond parts.
490
+ struct timeval delta;
491
+ delta.tv_usec = timeout % kOneSecondMicros;
492
+ delta.tv_sec = timeout / kOneSecondMicros;
493
+
494
+ struct timeval current_time;
495
+ // Get the current time.
496
+ if (gettimeofday(&current_time, NULL) == -1) {
497
+ return false;
498
+ }
499
+
500
+ // Calculate time for end of timeout.
501
+ struct timeval end_time;
502
+ timeradd(&current_time, &delta, &end_time);
503
+
504
+ struct timespec ts;
505
+ TIMEVAL_TO_TIMESPEC(&end_time, &ts);
506
+ // Wait for semaphore signalled or timeout.
507
+ while (true) {
508
+ int result = sem_timedwait(&sem_, &ts);
509
+ if (result == 0) return true; // Successfully got semaphore.
510
+ if (result == -1 && errno == ETIMEDOUT) return false; // Timeout.
511
+ CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
512
+ }
513
+ }
514
+
515
+
516
+ Semaphore* OS::CreateSemaphore(int count) {
517
+ return new SolarisSemaphore(count);
518
+ }
519
+
520
+
521
+ #ifdef ENABLE_LOGGING_AND_PROFILING
522
+
523
+ static Sampler* active_sampler_ = NULL;
524
+
525
+ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
526
+ USE(info);
527
+ if (signal != SIGPROF) return;
528
+ if (active_sampler_ == NULL) return;
529
+
530
+ TickSample sample;
531
+ sample.pc = 0;
532
+ sample.sp = 0;
533
+ sample.fp = 0;
534
+
535
+ // We always sample the VM state.
536
+ sample.state = VMState::current_state();
537
+
538
+ active_sampler_->Tick(&sample);
539
+ }
540
+
541
+
542
+ class Sampler::PlatformData : public Malloced {
543
+ public:
544
+ PlatformData() {
545
+ signal_handler_installed_ = false;
546
+ }
547
+
548
+ bool signal_handler_installed_;
549
+ struct sigaction old_signal_handler_;
550
+ struct itimerval old_timer_value_;
551
+ };
552
+
553
+
554
+ Sampler::Sampler(int interval, bool profiling)
555
+ : interval_(interval), profiling_(profiling), active_(false) {
556
+ data_ = new PlatformData();
557
+ }
558
+
559
+
560
+ Sampler::~Sampler() {
561
+ delete data_;
562
+ }
563
+
564
+
565
+ void Sampler::Start() {
566
+ // There can only be one active sampler at the time on POSIX
567
+ // platforms.
568
+ if (active_sampler_ != NULL) return;
569
+
570
+ // Request profiling signals.
571
+ struct sigaction sa;
572
+ sa.sa_sigaction = ProfilerSignalHandler;
573
+ sigemptyset(&sa.sa_mask);
574
+ sa.sa_flags = SA_SIGINFO;
575
+ if (sigaction(SIGPROF, &sa, &data_->old_signal_handler_) != 0) return;
576
+ data_->signal_handler_installed_ = true;
577
+
578
+ // Set the itimer to generate a tick for each interval.
579
+ itimerval itimer;
580
+ itimer.it_interval.tv_sec = interval_ / 1000;
581
+ itimer.it_interval.tv_usec = (interval_ % 1000) * 1000;
582
+ itimer.it_value.tv_sec = itimer.it_interval.tv_sec;
583
+ itimer.it_value.tv_usec = itimer.it_interval.tv_usec;
584
+ setitimer(ITIMER_PROF, &itimer, &data_->old_timer_value_);
585
+
586
+ // Set this sampler as the active sampler.
587
+ active_sampler_ = this;
588
+ active_ = true;
589
+ }
590
+
591
+
592
+ void Sampler::Stop() {
593
+ // Restore old signal handler
594
+ if (data_->signal_handler_installed_) {
595
+ setitimer(ITIMER_PROF, &data_->old_timer_value_, NULL);
596
+ sigaction(SIGPROF, &data_->old_signal_handler_, 0);
597
+ data_->signal_handler_installed_ = false;
598
+ }
599
+
600
+ // This sampler is no longer the active sampler.
601
+ active_sampler_ = NULL;
602
+ active_ = false;
603
+ }
604
+
605
+ #endif // ENABLE_LOGGING_AND_PROFILING
606
+
607
+ } } // namespace v8::internal