therubyracer 0.9.0beta2 → 0.9.0beta3

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 (920) hide show
  1. data/.gitmodules +3 -0
  2. data/ext/v8/upstream/Makefile +1 -2
  3. data/ext/v8/upstream/v8/.gitignore +33 -0
  4. data/ext/v8/upstream/v8/AUTHORS +42 -0
  5. data/ext/v8/upstream/v8/ChangeLog +2663 -0
  6. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE +0 -0
  7. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.strongtalk +0 -0
  8. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.v8 +0 -0
  9. data/ext/v8/upstream/{3.1.8 → v8}/LICENSE.valgrind +0 -0
  10. data/ext/v8/upstream/v8/SConstruct +1473 -0
  11. data/ext/v8/upstream/{3.1.8 → v8}/build/README.txt +0 -0
  12. data/ext/v8/upstream/{3.1.8 → v8}/build/all.gyp +0 -0
  13. data/ext/v8/upstream/{3.1.8 → v8}/build/armu.gypi +0 -0
  14. data/ext/v8/upstream/{3.1.8 → v8}/build/common.gypi +0 -0
  15. data/ext/v8/upstream/{3.1.8 → v8}/build/gyp_v8 +0 -0
  16. data/ext/v8/upstream/v8/include/v8-debug.h +394 -0
  17. data/ext/v8/upstream/v8/include/v8-preparser.h +116 -0
  18. data/ext/v8/upstream/v8/include/v8-profiler.h +505 -0
  19. data/ext/v8/upstream/v8/include/v8-testing.h +104 -0
  20. data/ext/v8/upstream/v8/include/v8.h +4000 -0
  21. data/ext/v8/upstream/{3.1.8 → v8}/include/v8stdint.h +0 -0
  22. data/ext/v8/upstream/v8/preparser/SConscript +38 -0
  23. data/ext/v8/upstream/v8/preparser/preparser-process.cc +169 -0
  24. data/ext/v8/upstream/v8/src/SConscript +380 -0
  25. data/ext/v8/upstream/v8/src/accessors.cc +766 -0
  26. data/ext/v8/upstream/{3.1.8 → v8}/src/accessors.h +0 -0
  27. data/ext/v8/upstream/v8/src/allocation-inl.h +49 -0
  28. data/ext/v8/upstream/v8/src/allocation.cc +122 -0
  29. data/ext/v8/upstream/v8/src/allocation.h +143 -0
  30. data/ext/v8/upstream/v8/src/api.cc +5678 -0
  31. data/ext/v8/upstream/v8/src/api.h +572 -0
  32. data/ext/v8/upstream/{3.1.8 → v8}/src/apinatives.js +0 -0
  33. data/ext/v8/upstream/v8/src/apiutils.h +73 -0
  34. data/ext/v8/upstream/v8/src/arguments.h +116 -0
  35. data/ext/v8/upstream/v8/src/arm/assembler-arm-inl.h +353 -0
  36. data/ext/v8/upstream/v8/src/arm/assembler-arm.cc +2877 -0
  37. data/ext/v8/upstream/v8/src/arm/assembler-arm.h +1382 -0
  38. data/ext/v8/upstream/v8/src/arm/builtins-arm.cc +1634 -0
  39. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.cc +6917 -0
  40. data/ext/v8/upstream/v8/src/arm/code-stubs-arm.h +623 -0
  41. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/codegen-arm-inl.h +0 -0
  42. data/ext/v8/upstream/v8/src/arm/codegen-arm.cc +7437 -0
  43. data/ext/v8/upstream/v8/src/arm/codegen-arm.h +595 -0
  44. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/constants-arm.cc +0 -0
  45. data/ext/v8/upstream/v8/src/arm/constants-arm.h +778 -0
  46. data/ext/v8/upstream/v8/src/arm/cpu-arm.cc +149 -0
  47. data/ext/v8/upstream/v8/src/arm/debug-arm.cc +317 -0
  48. data/ext/v8/upstream/v8/src/arm/deoptimizer-arm.cc +737 -0
  49. data/ext/v8/upstream/v8/src/arm/disasm-arm.cc +1503 -0
  50. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/frames-arm.cc +0 -0
  51. data/ext/v8/upstream/v8/src/arm/frames-arm.h +168 -0
  52. data/ext/v8/upstream/v8/src/arm/full-codegen-arm.cc +4374 -0
  53. data/ext/v8/upstream/v8/src/arm/ic-arm.cc +1793 -0
  54. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/jump-target-arm.cc +0 -0
  55. data/ext/v8/upstream/v8/src/arm/lithium-arm.cc +2120 -0
  56. data/ext/v8/upstream/v8/src/arm/lithium-arm.h +2179 -0
  57. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.cc +4132 -0
  58. data/ext/v8/upstream/v8/src/arm/lithium-codegen-arm.h +329 -0
  59. data/ext/v8/upstream/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  60. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/lithium-gap-resolver-arm.h +0 -0
  61. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.cc +2939 -0
  62. data/ext/v8/upstream/v8/src/arm/macro-assembler-arm.h +1071 -0
  63. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  64. data/ext/v8/upstream/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  65. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm-inl.h +0 -0
  66. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.cc +0 -0
  67. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/register-allocator-arm.h +0 -0
  68. data/ext/v8/upstream/v8/src/arm/simulator-arm.cc +3288 -0
  69. data/ext/v8/upstream/v8/src/arm/simulator-arm.h +413 -0
  70. data/ext/v8/upstream/v8/src/arm/stub-cache-arm.cc +4034 -0
  71. data/ext/v8/upstream/{3.1.8 → v8}/src/arm/virtual-frame-arm-inl.h +0 -0
  72. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.cc +843 -0
  73. data/ext/v8/upstream/v8/src/arm/virtual-frame-arm.h +523 -0
  74. data/ext/v8/upstream/v8/src/array.js +1249 -0
  75. data/ext/v8/upstream/v8/src/assembler.cc +1067 -0
  76. data/ext/v8/upstream/v8/src/assembler.h +823 -0
  77. data/ext/v8/upstream/v8/src/ast-inl.h +112 -0
  78. data/ext/v8/upstream/v8/src/ast.cc +1078 -0
  79. data/ext/v8/upstream/v8/src/ast.h +2234 -0
  80. data/ext/v8/upstream/v8/src/atomicops.h +167 -0
  81. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_arm_gcc.h +0 -0
  82. data/ext/v8/upstream/v8/src/atomicops_internals_mips_gcc.h +169 -0
  83. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.cc +0 -0
  84. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_gcc.h +0 -0
  85. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_macosx.h +0 -0
  86. data/ext/v8/upstream/{3.1.8 → v8}/src/atomicops_internals_x86_msvc.h +0 -0
  87. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.cc +0 -0
  88. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum-dtoa.h +0 -0
  89. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.cc +0 -0
  90. data/ext/v8/upstream/{3.1.8 → v8}/src/bignum.h +0 -0
  91. data/ext/v8/upstream/v8/src/bootstrapper.cc +2138 -0
  92. data/ext/v8/upstream/v8/src/bootstrapper.h +185 -0
  93. data/ext/v8/upstream/v8/src/builtins.cc +1708 -0
  94. data/ext/v8/upstream/v8/src/builtins.h +368 -0
  95. data/ext/v8/upstream/{3.1.8 → v8}/src/bytecodes-irregexp.h +0 -0
  96. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.cc +0 -0
  97. data/ext/v8/upstream/{3.1.8 → v8}/src/cached-powers.h +0 -0
  98. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates-inl.h +0 -0
  99. data/ext/v8/upstream/{3.1.8 → v8}/src/char-predicates.h +0 -0
  100. data/ext/v8/upstream/v8/src/checks.cc +110 -0
  101. data/ext/v8/upstream/v8/src/checks.h +296 -0
  102. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue-inl.h +0 -0
  103. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.cc +0 -0
  104. data/ext/v8/upstream/{3.1.8 → v8}/src/circular-queue.h +0 -0
  105. data/ext/v8/upstream/v8/src/code-stubs.cc +240 -0
  106. data/ext/v8/upstream/v8/src/code-stubs.h +971 -0
  107. data/ext/v8/upstream/{3.1.8 → v8}/src/code.h +0 -0
  108. data/ext/v8/upstream/v8/src/codegen-inl.h +68 -0
  109. data/ext/v8/upstream/v8/src/codegen.cc +505 -0
  110. data/ext/v8/upstream/v8/src/codegen.h +245 -0
  111. data/ext/v8/upstream/v8/src/compilation-cache.cc +540 -0
  112. data/ext/v8/upstream/v8/src/compilation-cache.h +287 -0
  113. data/ext/v8/upstream/v8/src/compiler.cc +792 -0
  114. data/ext/v8/upstream/v8/src/compiler.h +307 -0
  115. data/ext/v8/upstream/v8/src/contexts.cc +327 -0
  116. data/ext/v8/upstream/v8/src/contexts.h +382 -0
  117. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions-inl.h +0 -0
  118. data/ext/v8/upstream/v8/src/conversions.cc +1125 -0
  119. data/ext/v8/upstream/{3.1.8 → v8}/src/conversions.h +0 -0
  120. data/ext/v8/upstream/v8/src/counters.cc +93 -0
  121. data/ext/v8/upstream/v8/src/counters.h +254 -0
  122. data/ext/v8/upstream/v8/src/cpu-profiler-inl.h +101 -0
  123. data/ext/v8/upstream/v8/src/cpu-profiler.cc +606 -0
  124. data/ext/v8/upstream/v8/src/cpu-profiler.h +305 -0
  125. data/ext/v8/upstream/v8/src/cpu.h +67 -0
  126. data/ext/v8/upstream/v8/src/d8-debug.cc +367 -0
  127. data/ext/v8/upstream/v8/src/d8-debug.h +158 -0
  128. data/ext/v8/upstream/v8/src/d8-posix.cc +695 -0
  129. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-readline.cc +0 -0
  130. data/ext/v8/upstream/{3.1.8 → v8}/src/d8-windows.cc +0 -0
  131. data/ext/v8/upstream/v8/src/d8.cc +796 -0
  132. data/ext/v8/upstream/v8/src/d8.gyp +88 -0
  133. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.h +0 -0
  134. data/ext/v8/upstream/{3.1.8 → v8}/src/d8.js +0 -0
  135. data/ext/v8/upstream/{3.1.8 → v8}/src/data-flow.cc +0 -0
  136. data/ext/v8/upstream/v8/src/data-flow.h +379 -0
  137. data/ext/v8/upstream/{3.1.8 → v8}/src/date.js +0 -0
  138. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser-inl.h +0 -0
  139. data/ext/v8/upstream/{3.1.8 → v8}/src/dateparser.cc +0 -0
  140. data/ext/v8/upstream/v8/src/dateparser.h +265 -0
  141. data/ext/v8/upstream/v8/src/debug-agent.cc +447 -0
  142. data/ext/v8/upstream/v8/src/debug-agent.h +129 -0
  143. data/ext/v8/upstream/{3.1.8 → v8}/src/debug-debugger.js +0 -0
  144. data/ext/v8/upstream/v8/src/debug.cc +3188 -0
  145. data/ext/v8/upstream/v8/src/debug.h +1055 -0
  146. data/ext/v8/upstream/v8/src/deoptimizer.cc +1296 -0
  147. data/ext/v8/upstream/v8/src/deoptimizer.h +629 -0
  148. data/ext/v8/upstream/v8/src/disasm.h +80 -0
  149. data/ext/v8/upstream/v8/src/disassembler.cc +339 -0
  150. data/ext/v8/upstream/{3.1.8 → v8}/src/disassembler.h +0 -0
  151. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.cc +0 -0
  152. data/ext/v8/upstream/{3.1.8 → v8}/src/diy-fp.h +0 -0
  153. data/ext/v8/upstream/{3.1.8 → v8}/src/double.h +0 -0
  154. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.cc +0 -0
  155. data/ext/v8/upstream/{3.1.8 → v8}/src/dtoa.h +0 -0
  156. data/ext/v8/upstream/v8/src/execution.cc +791 -0
  157. data/ext/v8/upstream/v8/src/execution.h +291 -0
  158. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.cc +250 -0
  159. data/ext/v8/upstream/v8/src/extensions/experimental/break-iterator.h +89 -0
  160. data/ext/v8/upstream/v8/src/extensions/experimental/experimental.gyp +55 -0
  161. data/ext/v8/upstream/v8/src/extensions/experimental/i18n-extension.cc +284 -0
  162. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/experimental/i18n-extension.h +0 -0
  163. data/ext/v8/upstream/v8/src/extensions/externalize-string-extension.cc +141 -0
  164. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/externalize-string-extension.h +0 -0
  165. data/ext/v8/upstream/v8/src/extensions/gc-extension.cc +58 -0
  166. data/ext/v8/upstream/{3.1.8 → v8}/src/extensions/gc-extension.h +0 -0
  167. data/ext/v8/upstream/v8/src/factory.cc +1194 -0
  168. data/ext/v8/upstream/v8/src/factory.h +436 -0
  169. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.cc +0 -0
  170. data/ext/v8/upstream/{3.1.8 → v8}/src/fast-dtoa.h +0 -0
  171. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.cc +0 -0
  172. data/ext/v8/upstream/{3.1.8 → v8}/src/fixed-dtoa.h +0 -0
  173. data/ext/v8/upstream/v8/src/flag-definitions.h +556 -0
  174. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.cc +0 -0
  175. data/ext/v8/upstream/{3.1.8 → v8}/src/flags.h +0 -0
  176. data/ext/v8/upstream/v8/src/frame-element.cc +37 -0
  177. data/ext/v8/upstream/v8/src/frame-element.h +269 -0
  178. data/ext/v8/upstream/v8/src/frames-inl.h +236 -0
  179. data/ext/v8/upstream/v8/src/frames.cc +1273 -0
  180. data/ext/v8/upstream/v8/src/frames.h +854 -0
  181. data/ext/v8/upstream/v8/src/full-codegen.cc +1385 -0
  182. data/ext/v8/upstream/v8/src/full-codegen.h +753 -0
  183. data/ext/v8/upstream/v8/src/func-name-inferrer.cc +91 -0
  184. data/ext/v8/upstream/v8/src/func-name-inferrer.h +111 -0
  185. data/ext/v8/upstream/v8/src/gdb-jit.cc +1548 -0
  186. data/ext/v8/upstream/{3.1.8 → v8}/src/gdb-jit.h +0 -0
  187. data/ext/v8/upstream/v8/src/global-handles.cc +596 -0
  188. data/ext/v8/upstream/v8/src/global-handles.h +239 -0
  189. data/ext/v8/upstream/v8/src/globals.h +325 -0
  190. data/ext/v8/upstream/v8/src/handles-inl.h +177 -0
  191. data/ext/v8/upstream/v8/src/handles.cc +965 -0
  192. data/ext/v8/upstream/v8/src/handles.h +372 -0
  193. data/ext/v8/upstream/{3.1.8 → v8}/src/hashmap.cc +0 -0
  194. data/ext/v8/upstream/v8/src/hashmap.h +121 -0
  195. data/ext/v8/upstream/v8/src/heap-inl.h +703 -0
  196. data/ext/v8/upstream/v8/src/heap-profiler.cc +1173 -0
  197. data/ext/v8/upstream/v8/src/heap-profiler.h +396 -0
  198. data/ext/v8/upstream/v8/src/heap.cc +5856 -0
  199. data/ext/v8/upstream/v8/src/heap.h +2264 -0
  200. data/ext/v8/upstream/v8/src/hydrogen-instructions.cc +1639 -0
  201. data/ext/v8/upstream/v8/src/hydrogen-instructions.h +3657 -0
  202. data/ext/v8/upstream/v8/src/hydrogen.cc +6011 -0
  203. data/ext/v8/upstream/v8/src/hydrogen.h +1137 -0
  204. data/ext/v8/upstream/v8/src/ia32/assembler-ia32-inl.h +430 -0
  205. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.cc +2846 -0
  206. data/ext/v8/upstream/v8/src/ia32/assembler-ia32.h +1159 -0
  207. data/ext/v8/upstream/v8/src/ia32/builtins-ia32.cc +1596 -0
  208. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.cc +6549 -0
  209. data/ext/v8/upstream/v8/src/ia32/code-stubs-ia32.h +495 -0
  210. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/codegen-ia32-inl.h +0 -0
  211. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.cc +10385 -0
  212. data/ext/v8/upstream/v8/src/ia32/codegen-ia32.h +801 -0
  213. data/ext/v8/upstream/v8/src/ia32/cpu-ia32.cc +88 -0
  214. data/ext/v8/upstream/v8/src/ia32/debug-ia32.cc +312 -0
  215. data/ext/v8/upstream/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  216. data/ext/v8/upstream/v8/src/ia32/disasm-ia32.cc +1620 -0
  217. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/frames-ia32.cc +0 -0
  218. data/ext/v8/upstream/v8/src/ia32/frames-ia32.h +140 -0
  219. data/ext/v8/upstream/v8/src/ia32/full-codegen-ia32.cc +4357 -0
  220. data/ext/v8/upstream/v8/src/ia32/ic-ia32.cc +1779 -0
  221. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/jump-target-ia32.cc +0 -0
  222. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.cc +4158 -0
  223. data/ext/v8/upstream/v8/src/ia32/lithium-codegen-ia32.h +318 -0
  224. data/ext/v8/upstream/v8/src/ia32/lithium-gap-resolver-ia32.cc +466 -0
  225. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/lithium-gap-resolver-ia32.h +0 -0
  226. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.cc +2181 -0
  227. data/ext/v8/upstream/v8/src/ia32/lithium-ia32.h +2235 -0
  228. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.cc +2056 -0
  229. data/ext/v8/upstream/v8/src/ia32/macro-assembler-ia32.h +807 -0
  230. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.cc +1264 -0
  231. data/ext/v8/upstream/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  232. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32-inl.h +0 -0
  233. data/ext/v8/upstream/v8/src/ia32/register-allocator-ia32.cc +157 -0
  234. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/register-allocator-ia32.h +0 -0
  235. data/ext/v8/upstream/{3.1.8 → v8}/src/ia32/simulator-ia32.cc +0 -0
  236. data/ext/v8/upstream/v8/src/ia32/simulator-ia32.h +72 -0
  237. data/ext/v8/upstream/v8/src/ia32/stub-cache-ia32.cc +3711 -0
  238. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.cc +1366 -0
  239. data/ext/v8/upstream/v8/src/ia32/virtual-frame-ia32.h +650 -0
  240. data/ext/v8/upstream/v8/src/ic-inl.h +130 -0
  241. data/ext/v8/upstream/v8/src/ic.cc +2389 -0
  242. data/ext/v8/upstream/v8/src/ic.h +675 -0
  243. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.cc +0 -0
  244. data/ext/v8/upstream/{3.1.8 → v8}/src/inspector.h +0 -0
  245. data/ext/v8/upstream/v8/src/interpreter-irregexp.cc +659 -0
  246. data/ext/v8/upstream/v8/src/interpreter-irregexp.h +49 -0
  247. data/ext/v8/upstream/v8/src/isolate.cc +883 -0
  248. data/ext/v8/upstream/v8/src/isolate.h +1306 -0
  249. data/ext/v8/upstream/v8/src/json.js +342 -0
  250. data/ext/v8/upstream/v8/src/jsregexp.cc +5371 -0
  251. data/ext/v8/upstream/v8/src/jsregexp.h +1483 -0
  252. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-heavy-inl.h +0 -0
  253. data/ext/v8/upstream/v8/src/jump-target-heavy.cc +427 -0
  254. data/ext/v8/upstream/v8/src/jump-target-heavy.h +238 -0
  255. data/ext/v8/upstream/v8/src/jump-target-inl.h +48 -0
  256. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light-inl.h +0 -0
  257. data/ext/v8/upstream/v8/src/jump-target-light.cc +111 -0
  258. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target-light.h +0 -0
  259. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.cc +0 -0
  260. data/ext/v8/upstream/{3.1.8 → v8}/src/jump-target.h +0 -0
  261. data/ext/v8/upstream/{3.1.8 → v8}/src/list-inl.h +0 -0
  262. data/ext/v8/upstream/{3.1.8 → v8}/src/list.h +0 -0
  263. data/ext/v8/upstream/v8/src/lithium-allocator-inl.h +142 -0
  264. data/ext/v8/upstream/v8/src/lithium-allocator.cc +2105 -0
  265. data/ext/v8/upstream/v8/src/lithium-allocator.h +630 -0
  266. data/ext/v8/upstream/v8/src/lithium.cc +169 -0
  267. data/ext/v8/upstream/{3.1.8 → v8}/src/lithium.h +0 -0
  268. data/ext/v8/upstream/{3.1.8 → v8}/src/liveedit-debugger.js +0 -0
  269. data/ext/v8/upstream/v8/src/liveedit.cc +1693 -0
  270. data/ext/v8/upstream/v8/src/liveedit.h +179 -0
  271. data/ext/v8/upstream/{3.1.8 → v8}/src/liveobjectlist-inl.h +0 -0
  272. data/ext/v8/upstream/v8/src/liveobjectlist.cc +2589 -0
  273. data/ext/v8/upstream/v8/src/liveobjectlist.h +322 -0
  274. data/ext/v8/upstream/{3.1.8 → v8}/src/log-inl.h +0 -0
  275. data/ext/v8/upstream/v8/src/log-utils.cc +423 -0
  276. data/ext/v8/upstream/v8/src/log-utils.h +229 -0
  277. data/ext/v8/upstream/v8/src/log.cc +1666 -0
  278. data/ext/v8/upstream/v8/src/log.h +446 -0
  279. data/ext/v8/upstream/{3.1.8 → v8}/src/macro-assembler.h +0 -0
  280. data/ext/v8/upstream/{3.1.8 → v8}/src/macros.py +0 -0
  281. data/ext/v8/upstream/v8/src/mark-compact.cc +3092 -0
  282. data/ext/v8/upstream/v8/src/mark-compact.h +506 -0
  283. data/ext/v8/upstream/{3.1.8 → v8}/src/math.js +0 -0
  284. data/ext/v8/upstream/v8/src/messages.cc +166 -0
  285. data/ext/v8/upstream/{3.1.8 → v8}/src/messages.h +0 -0
  286. data/ext/v8/upstream/v8/src/messages.js +1090 -0
  287. data/ext/v8/upstream/v8/src/mips/assembler-mips-inl.h +335 -0
  288. data/ext/v8/upstream/v8/src/mips/assembler-mips.cc +2093 -0
  289. data/ext/v8/upstream/v8/src/mips/assembler-mips.h +1066 -0
  290. data/ext/v8/upstream/v8/src/mips/builtins-mips.cc +148 -0
  291. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.cc +752 -0
  292. data/ext/v8/upstream/v8/src/mips/code-stubs-mips.h +511 -0
  293. data/ext/v8/upstream/v8/src/mips/codegen-mips-inl.h +64 -0
  294. data/ext/v8/upstream/v8/src/mips/codegen-mips.cc +1213 -0
  295. data/ext/v8/upstream/v8/src/mips/codegen-mips.h +633 -0
  296. data/ext/v8/upstream/v8/src/mips/constants-mips.cc +352 -0
  297. data/ext/v8/upstream/v8/src/mips/constants-mips.h +723 -0
  298. data/ext/v8/upstream/v8/src/mips/cpu-mips.cc +90 -0
  299. data/ext/v8/upstream/v8/src/mips/debug-mips.cc +155 -0
  300. data/ext/v8/upstream/v8/src/mips/deoptimizer-mips.cc +91 -0
  301. data/ext/v8/upstream/v8/src/mips/disasm-mips.cc +1023 -0
  302. data/ext/v8/upstream/v8/src/mips/frames-mips.cc +48 -0
  303. data/ext/v8/upstream/v8/src/mips/frames-mips.h +179 -0
  304. data/ext/v8/upstream/v8/src/mips/full-codegen-mips.cc +727 -0
  305. data/ext/v8/upstream/v8/src/mips/ic-mips.cc +244 -0
  306. data/ext/v8/upstream/v8/src/mips/jump-target-mips.cc +80 -0
  307. data/ext/v8/upstream/v8/src/mips/lithium-codegen-mips.h +65 -0
  308. data/ext/v8/upstream/v8/src/mips/lithium-mips.h +304 -0
  309. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.cc +3327 -0
  310. data/ext/v8/upstream/v8/src/mips/macro-assembler-mips.h +1058 -0
  311. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  312. data/ext/v8/upstream/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  313. data/ext/v8/upstream/v8/src/mips/register-allocator-mips-inl.h +134 -0
  314. data/ext/v8/upstream/{3.1.8 → v8}/src/mips/register-allocator-mips.cc +0 -0
  315. data/ext/v8/upstream/v8/src/mips/register-allocator-mips.h +47 -0
  316. data/ext/v8/upstream/v8/src/mips/simulator-mips.cc +2438 -0
  317. data/ext/v8/upstream/v8/src/mips/simulator-mips.h +394 -0
  318. data/ext/v8/upstream/v8/src/mips/stub-cache-mips.cc +601 -0
  319. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips-inl.h +58 -0
  320. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.cc +307 -0
  321. data/ext/v8/upstream/v8/src/mips/virtual-frame-mips.h +530 -0
  322. data/ext/v8/upstream/v8/src/mirror-debugger.js +2381 -0
  323. data/ext/v8/upstream/v8/src/mksnapshot.cc +256 -0
  324. data/ext/v8/upstream/{3.1.8 → v8}/src/natives.h +0 -0
  325. data/ext/v8/upstream/v8/src/objects-debug.cc +722 -0
  326. data/ext/v8/upstream/v8/src/objects-inl.h +4166 -0
  327. data/ext/v8/upstream/v8/src/objects-printer.cc +801 -0
  328. data/ext/v8/upstream/v8/src/objects-visiting.cc +142 -0
  329. data/ext/v8/upstream/v8/src/objects-visiting.h +422 -0
  330. data/ext/v8/upstream/v8/src/objects.cc +10296 -0
  331. data/ext/v8/upstream/v8/src/objects.h +6662 -0
  332. data/ext/v8/upstream/v8/src/parser.cc +5168 -0
  333. data/ext/v8/upstream/v8/src/parser.h +823 -0
  334. data/ext/v8/upstream/v8/src/platform-cygwin.cc +811 -0
  335. data/ext/v8/upstream/v8/src/platform-freebsd.cc +854 -0
  336. data/ext/v8/upstream/v8/src/platform-linux.cc +1120 -0
  337. data/ext/v8/upstream/v8/src/platform-macos.cc +865 -0
  338. data/ext/v8/upstream/v8/src/platform-nullos.cc +504 -0
  339. data/ext/v8/upstream/v8/src/platform-openbsd.cc +672 -0
  340. data/ext/v8/upstream/v8/src/platform-posix.cc +424 -0
  341. data/ext/v8/upstream/v8/src/platform-solaris.cc +796 -0
  342. data/ext/v8/upstream/v8/src/platform-tls-mac.h +62 -0
  343. data/ext/v8/upstream/v8/src/platform-tls-win32.h +62 -0
  344. data/ext/v8/upstream/v8/src/platform-tls.h +50 -0
  345. data/ext/v8/upstream/v8/src/platform-win32.cc +2072 -0
  346. data/ext/v8/upstream/v8/src/platform.h +693 -0
  347. data/ext/v8/upstream/v8/src/preparse-data.cc +185 -0
  348. data/ext/v8/upstream/{3.1.8 → v8}/src/preparse-data.h +0 -0
  349. data/ext/v8/upstream/v8/src/preparser-api.cc +219 -0
  350. data/ext/v8/upstream/v8/src/preparser.cc +1205 -0
  351. data/ext/v8/upstream/{3.1.8 → v8}/src/preparser.h +0 -0
  352. data/ext/v8/upstream/v8/src/prettyprinter.cc +1530 -0
  353. data/ext/v8/upstream/v8/src/prettyprinter.h +223 -0
  354. data/ext/v8/upstream/{3.1.8 → v8}/src/profile-generator-inl.h +0 -0
  355. data/ext/v8/upstream/v8/src/profile-generator.cc +3095 -0
  356. data/ext/v8/upstream/v8/src/profile-generator.h +1125 -0
  357. data/ext/v8/upstream/v8/src/property.cc +102 -0
  358. data/ext/v8/upstream/v8/src/property.h +348 -0
  359. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp-inl.h +0 -0
  360. data/ext/v8/upstream/v8/src/regexp-macro-assembler-irregexp.cc +470 -0
  361. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-irregexp.h +0 -0
  362. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.cc +0 -0
  363. data/ext/v8/upstream/{3.1.8 → v8}/src/regexp-macro-assembler-tracer.h +0 -0
  364. data/ext/v8/upstream/v8/src/regexp-macro-assembler.cc +266 -0
  365. data/ext/v8/upstream/v8/src/regexp-macro-assembler.h +236 -0
  366. data/ext/v8/upstream/v8/src/regexp-stack.cc +111 -0
  367. data/ext/v8/upstream/v8/src/regexp-stack.h +147 -0
  368. data/ext/v8/upstream/v8/src/regexp.js +483 -0
  369. data/ext/v8/upstream/v8/src/register-allocator-inl.h +141 -0
  370. data/ext/v8/upstream/v8/src/register-allocator.cc +98 -0
  371. data/ext/v8/upstream/v8/src/register-allocator.h +310 -0
  372. data/ext/v8/upstream/v8/src/rewriter.cc +1024 -0
  373. data/ext/v8/upstream/{3.1.8 → v8}/src/rewriter.h +0 -0
  374. data/ext/v8/upstream/v8/src/runtime-profiler.cc +478 -0
  375. data/ext/v8/upstream/v8/src/runtime-profiler.h +192 -0
  376. data/ext/v8/upstream/v8/src/runtime.cc +11949 -0
  377. data/ext/v8/upstream/v8/src/runtime.h +643 -0
  378. data/ext/v8/upstream/{3.1.8 → v8}/src/runtime.js +0 -0
  379. data/ext/v8/upstream/v8/src/safepoint-table.cc +256 -0
  380. data/ext/v8/upstream/v8/src/safepoint-table.h +269 -0
  381. data/ext/v8/upstream/v8/src/scanner-base.cc +964 -0
  382. data/ext/v8/upstream/v8/src/scanner-base.h +664 -0
  383. data/ext/v8/upstream/v8/src/scanner.cc +584 -0
  384. data/ext/v8/upstream/v8/src/scanner.h +196 -0
  385. data/ext/v8/upstream/v8/src/scopeinfo.cc +631 -0
  386. data/ext/v8/upstream/v8/src/scopeinfo.h +249 -0
  387. data/ext/v8/upstream/v8/src/scopes.cc +1093 -0
  388. data/ext/v8/upstream/v8/src/scopes.h +508 -0
  389. data/ext/v8/upstream/v8/src/serialize.cc +1574 -0
  390. data/ext/v8/upstream/v8/src/serialize.h +589 -0
  391. data/ext/v8/upstream/{3.1.8 → v8}/src/shell.h +0 -0
  392. data/ext/v8/upstream/{3.1.8 → v8}/src/simulator.h +0 -0
  393. data/ext/v8/upstream/v8/src/small-pointer-list.h +163 -0
  394. data/ext/v8/upstream/{3.1.8 → v8}/src/smart-pointer.h +0 -0
  395. data/ext/v8/upstream/v8/src/snapshot-common.cc +82 -0
  396. data/ext/v8/upstream/{3.1.8 → v8}/src/snapshot-empty.cc +0 -0
  397. data/ext/v8/upstream/v8/src/snapshot.h +73 -0
  398. data/ext/v8/upstream/v8/src/spaces-inl.h +529 -0
  399. data/ext/v8/upstream/v8/src/spaces.cc +3147 -0
  400. data/ext/v8/upstream/v8/src/spaces.h +2368 -0
  401. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree-inl.h +0 -0
  402. data/ext/v8/upstream/{3.1.8 → v8}/src/splay-tree.h +0 -0
  403. data/ext/v8/upstream/v8/src/string-search.cc +41 -0
  404. data/ext/v8/upstream/v8/src/string-search.h +568 -0
  405. data/ext/v8/upstream/v8/src/string-stream.cc +592 -0
  406. data/ext/v8/upstream/{3.1.8 → v8}/src/string-stream.h +0 -0
  407. data/ext/v8/upstream/v8/src/string.js +915 -0
  408. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.cc +0 -0
  409. data/ext/v8/upstream/{3.1.8 → v8}/src/strtod.h +0 -0
  410. data/ext/v8/upstream/v8/src/stub-cache.cc +1940 -0
  411. data/ext/v8/upstream/v8/src/stub-cache.h +866 -0
  412. data/ext/v8/upstream/{3.1.8 → v8}/src/third_party/valgrind/valgrind.h +0 -0
  413. data/ext/v8/upstream/v8/src/token.cc +63 -0
  414. data/ext/v8/upstream/v8/src/token.h +288 -0
  415. data/ext/v8/upstream/v8/src/top.cc +983 -0
  416. data/ext/v8/upstream/v8/src/type-info.cc +472 -0
  417. data/ext/v8/upstream/v8/src/type-info.h +290 -0
  418. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue-inl.h +0 -0
  419. data/ext/v8/upstream/{3.1.8 → v8}/src/unbound-queue.h +0 -0
  420. data/ext/v8/upstream/{3.1.8 → v8}/src/unicode-inl.h +0 -0
  421. data/ext/v8/upstream/v8/src/unicode.cc +1624 -0
  422. data/ext/v8/upstream/v8/src/unicode.h +280 -0
  423. data/ext/v8/upstream/{3.1.8 → v8}/src/uri.js +0 -0
  424. data/ext/v8/upstream/{3.1.8 → v8}/src/utils.cc +0 -0
  425. data/ext/v8/upstream/v8/src/utils.h +796 -0
  426. data/ext/v8/upstream/v8/src/v8-counters.cc +62 -0
  427. data/ext/v8/upstream/v8/src/v8-counters.h +311 -0
  428. data/ext/v8/upstream/v8/src/v8.cc +215 -0
  429. data/ext/v8/upstream/v8/src/v8.h +130 -0
  430. data/ext/v8/upstream/{3.1.8 → v8}/src/v8checks.h +0 -0
  431. data/ext/v8/upstream/{3.1.8 → v8}/src/v8dll-main.cc +0 -0
  432. data/ext/v8/upstream/v8/src/v8globals.h +486 -0
  433. data/ext/v8/upstream/{3.1.8/src/memory.h → v8/src/v8memory.h} +0 -0
  434. data/ext/v8/upstream/v8/src/v8natives.js +1293 -0
  435. data/ext/v8/upstream/{3.1.8 → v8}/src/v8preparserdll-main.cc +0 -0
  436. data/ext/v8/upstream/v8/src/v8threads.cc +453 -0
  437. data/ext/v8/upstream/v8/src/v8threads.h +164 -0
  438. data/ext/v8/upstream/v8/src/v8utils.h +317 -0
  439. data/ext/v8/upstream/{3.1.8 → v8}/src/variables.cc +0 -0
  440. data/ext/v8/upstream/v8/src/variables.h +212 -0
  441. data/ext/v8/upstream/v8/src/version.cc +116 -0
  442. data/ext/v8/upstream/v8/src/version.h +68 -0
  443. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy-inl.h +0 -0
  444. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-heavy.cc +0 -0
  445. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-inl.h +0 -0
  446. data/ext/v8/upstream/v8/src/virtual-frame-light-inl.h +171 -0
  447. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame-light.cc +0 -0
  448. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.cc +0 -0
  449. data/ext/v8/upstream/{3.1.8 → v8}/src/virtual-frame.h +0 -0
  450. data/ext/v8/upstream/v8/src/vm-state-inl.h +138 -0
  451. data/ext/v8/upstream/v8/src/vm-state.h +70 -0
  452. data/ext/v8/upstream/v8/src/win32-headers.h +96 -0
  453. data/ext/v8/upstream/v8/src/x64/assembler-x64-inl.h +456 -0
  454. data/ext/v8/upstream/v8/src/x64/assembler-x64.cc +2954 -0
  455. data/ext/v8/upstream/v8/src/x64/assembler-x64.h +1630 -0
  456. data/ext/v8/upstream/v8/src/x64/builtins-x64.cc +1493 -0
  457. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.cc +5132 -0
  458. data/ext/v8/upstream/v8/src/x64/code-stubs-x64.h +477 -0
  459. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/codegen-x64-inl.h +0 -0
  460. data/ext/v8/upstream/v8/src/x64/codegen-x64.cc +8843 -0
  461. data/ext/v8/upstream/v8/src/x64/codegen-x64.h +753 -0
  462. data/ext/v8/upstream/v8/src/x64/cpu-x64.cc +88 -0
  463. data/ext/v8/upstream/v8/src/x64/debug-x64.cc +318 -0
  464. data/ext/v8/upstream/v8/src/x64/deoptimizer-x64.cc +815 -0
  465. data/ext/v8/upstream/v8/src/x64/disasm-x64.cc +1752 -0
  466. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/frames-x64.cc +0 -0
  467. data/ext/v8/upstream/v8/src/x64/frames-x64.h +130 -0
  468. data/ext/v8/upstream/v8/src/x64/full-codegen-x64.cc +4339 -0
  469. data/ext/v8/upstream/v8/src/x64/ic-x64.cc +1752 -0
  470. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/jump-target-x64.cc +0 -0
  471. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.cc +3970 -0
  472. data/ext/v8/upstream/v8/src/x64/lithium-codegen-x64.h +318 -0
  473. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.cc +0 -0
  474. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/lithium-gap-resolver-x64.h +0 -0
  475. data/ext/v8/upstream/v8/src/x64/lithium-x64.cc +2115 -0
  476. data/ext/v8/upstream/v8/src/x64/lithium-x64.h +2161 -0
  477. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.cc +2911 -0
  478. data/ext/v8/upstream/v8/src/x64/macro-assembler-x64.h +1984 -0
  479. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  480. data/ext/v8/upstream/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  481. data/ext/v8/upstream/v8/src/x64/register-allocator-x64-inl.h +87 -0
  482. data/ext/v8/upstream/v8/src/x64/register-allocator-x64.cc +95 -0
  483. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/register-allocator-x64.h +0 -0
  484. data/ext/v8/upstream/{3.1.8 → v8}/src/x64/simulator-x64.cc +0 -0
  485. data/ext/v8/upstream/v8/src/x64/simulator-x64.h +71 -0
  486. data/ext/v8/upstream/v8/src/x64/stub-cache-x64.cc +3460 -0
  487. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.cc +1296 -0
  488. data/ext/v8/upstream/v8/src/x64/virtual-frame-x64.h +597 -0
  489. data/ext/v8/upstream/v8/src/zone-inl.h +129 -0
  490. data/ext/v8/upstream/v8/src/zone.cc +196 -0
  491. data/ext/v8/upstream/v8/src/zone.h +236 -0
  492. data/ext/v8/upstream/{3.1.8 → v8}/tools/codemap.js +0 -0
  493. data/ext/v8/upstream/{3.1.8 → v8}/tools/consarray.js +0 -0
  494. data/ext/v8/upstream/{3.1.8 → v8}/tools/csvparser.js +0 -0
  495. data/ext/v8/upstream/{3.1.8 → v8}/tools/disasm.py +0 -0
  496. data/ext/v8/upstream/v8/tools/freebsd-tick-processor +10 -0
  497. data/ext/v8/upstream/{3.1.8 → v8}/tools/gc-nvp-trace-processor.py +0 -0
  498. data/ext/v8/upstream/{3.1.8 → v8}/tools/generate-ten-powers.scm +0 -0
  499. data/ext/v8/upstream/{3.1.8 → v8}/tools/grokdump.py +0 -0
  500. data/ext/v8/upstream/v8/tools/gyp/v8.gyp +844 -0
  501. data/ext/v8/upstream/{3.1.8 → v8}/tools/js2c.py +0 -0
  502. data/ext/v8/upstream/{3.1.8 → v8}/tools/jsmin.py +0 -0
  503. data/ext/v8/upstream/v8/tools/linux-tick-processor +35 -0
  504. data/ext/v8/upstream/{3.1.8 → v8}/tools/ll_prof.py +0 -0
  505. data/ext/v8/upstream/{3.1.8 → v8}/tools/logreader.js +0 -0
  506. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-nm +0 -0
  507. data/ext/v8/upstream/{3.1.8 → v8}/tools/mac-tick-processor +0 -0
  508. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/README +0 -0
  509. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/SConstruct +0 -0
  510. data/ext/v8/upstream/{3.1.8 → v8}/tools/oom_dump/oom_dump.cc +0 -0
  511. data/ext/v8/upstream/{3.1.8 → v8}/tools/presubmit.py +0 -0
  512. data/ext/v8/upstream/{3.1.8 → v8}/tools/process-heap-prof.py +0 -0
  513. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile.js +0 -0
  514. data/ext/v8/upstream/{3.1.8 → v8}/tools/profile_view.js +0 -0
  515. data/ext/v8/upstream/{3.1.8 → v8}/tools/run-valgrind.py +0 -0
  516. data/ext/v8/upstream/{3.1.8 → v8}/tools/splaytree.js +0 -0
  517. data/ext/v8/upstream/{3.1.8 → v8}/tools/stats-viewer.py +0 -0
  518. data/ext/v8/upstream/v8/tools/test.py +1490 -0
  519. data/ext/v8/upstream/{3.1.8 → v8}/tools/tickprocessor-driver.js +0 -0
  520. data/ext/v8/upstream/v8/tools/tickprocessor.js +877 -0
  521. data/ext/v8/upstream/{3.1.8 → v8}/tools/utils.py +0 -0
  522. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/README.txt +0 -0
  523. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/arm.vsprops +0 -0
  524. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/common.vsprops +0 -0
  525. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8.vcproj +0 -0
  526. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_arm.vcproj +0 -0
  527. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8_x64.vcproj +0 -0
  528. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/d8js2c.cmd +0 -0
  529. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/debug.vsprops +0 -0
  530. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/ia32.vsprops +0 -0
  531. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/js2c.cmd +0 -0
  532. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/release.vsprops +0 -0
  533. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.sln +0 -0
  534. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8.vcproj +0 -0
  535. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.sln +0 -0
  536. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_arm.vcproj +0 -0
  537. data/ext/v8/upstream/v8/tools/visual_studio/v8_base.vcproj +1308 -0
  538. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_arm.vcproj +1238 -0
  539. data/ext/v8/upstream/v8/tools/visual_studio/v8_base_x64.vcproj +1300 -0
  540. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest.vcproj +0 -0
  541. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_arm.vcproj +0 -0
  542. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_cctest_x64.vcproj +0 -0
  543. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot.vcproj +0 -0
  544. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -0
  545. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample.vcproj +0 -0
  546. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_arm.vcproj +0 -0
  547. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_process_sample_x64.vcproj +0 -0
  548. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample.vcproj +0 -0
  549. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -0
  550. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -0
  551. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot.vcproj +0 -0
  552. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc.vcproj +0 -0
  553. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -0
  554. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_snapshot_x64.vcproj +0 -0
  555. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.sln +0 -0
  556. data/ext/v8/upstream/{3.1.8 → v8}/tools/visual_studio/v8_x64.vcproj +0 -0
  557. data/ext/v8/upstream/v8/tools/visual_studio/x64.vsprops +18 -0
  558. data/ext/v8/upstream/{3.1.8 → v8}/tools/windows-tick-processor.bat +0 -0
  559. data/ext/v8/v8_callbacks.cpp +52 -92
  560. data/ext/v8/v8_date.cpp +2 -3
  561. data/ext/v8/v8_object.cpp +4 -0
  562. data/ext/v8/v8_template.cpp +2 -2
  563. data/ext/v8/v8_try_catch.cpp +8 -38
  564. data/lib/v8/version.rb +1 -1
  565. data/spec/ext/ext_spec_helper.rb +2 -20
  566. data/spec/ext/object_spec.rb +0 -12
  567. data/spec/ext/try_catch_spec.rb +29 -1
  568. data/spec/spec_helper.rb +1 -0
  569. data/spec/v8/portal/proxies_spec.rb +1 -84
  570. data/specmem/handle_memspec.rb +41 -0
  571. data/specmem/object_memspec.rb +16 -0
  572. data/specmem/proxies_memspec.rb +86 -0
  573. data/specmem/spec_helper.rb +24 -0
  574. data/therubyracer.gemspec +7 -2
  575. metadata +564 -541
  576. data/ext/v8/upstream/3.1.8/.gitignore +0 -31
  577. data/ext/v8/upstream/3.1.8/AUTHORS +0 -40
  578. data/ext/v8/upstream/3.1.8/ChangeLog +0 -2566
  579. data/ext/v8/upstream/3.1.8/SConstruct +0 -1192
  580. data/ext/v8/upstream/3.1.8/include/v8-debug.h +0 -384
  581. data/ext/v8/upstream/3.1.8/include/v8-preparser.h +0 -116
  582. data/ext/v8/upstream/3.1.8/include/v8-profiler.h +0 -426
  583. data/ext/v8/upstream/3.1.8/include/v8-testing.h +0 -99
  584. data/ext/v8/upstream/3.1.8/include/v8.h +0 -3846
  585. data/ext/v8/upstream/3.1.8/preparser/preparser-process.cc +0 -206
  586. data/ext/v8/upstream/3.1.8/src/SConscript +0 -356
  587. data/ext/v8/upstream/3.1.8/src/accessors.cc +0 -907
  588. data/ext/v8/upstream/3.1.8/src/allocation.cc +0 -204
  589. data/ext/v8/upstream/3.1.8/src/allocation.h +0 -176
  590. data/ext/v8/upstream/3.1.8/src/api.cc +0 -5191
  591. data/ext/v8/upstream/3.1.8/src/api.h +0 -508
  592. data/ext/v8/upstream/3.1.8/src/apiutils.h +0 -80
  593. data/ext/v8/upstream/3.1.8/src/arguments.h +0 -105
  594. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm-inl.h +0 -352
  595. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.cc +0 -2756
  596. data/ext/v8/upstream/3.1.8/src/arm/assembler-arm.h +0 -1294
  597. data/ext/v8/upstream/3.1.8/src/arm/builtins-arm.cc +0 -1628
  598. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.cc +0 -6783
  599. data/ext/v8/upstream/3.1.8/src/arm/code-stubs-arm.h +0 -657
  600. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.cc +0 -7403
  601. data/ext/v8/upstream/3.1.8/src/arm/codegen-arm.h +0 -595
  602. data/ext/v8/upstream/3.1.8/src/arm/constants-arm.h +0 -769
  603. data/ext/v8/upstream/3.1.8/src/arm/cpu-arm.cc +0 -147
  604. data/ext/v8/upstream/3.1.8/src/arm/debug-arm.cc +0 -315
  605. data/ext/v8/upstream/3.1.8/src/arm/deoptimizer-arm.cc +0 -700
  606. data/ext/v8/upstream/3.1.8/src/arm/disasm-arm.cc +0 -1439
  607. data/ext/v8/upstream/3.1.8/src/arm/frames-arm.h +0 -168
  608. data/ext/v8/upstream/3.1.8/src/arm/full-codegen-arm.cc +0 -4230
  609. data/ext/v8/upstream/3.1.8/src/arm/ic-arm.cc +0 -1799
  610. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.cc +0 -2041
  611. data/ext/v8/upstream/3.1.8/src/arm/lithium-arm.h +0 -2046
  612. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.cc +0 -3822
  613. data/ext/v8/upstream/3.1.8/src/arm/lithium-codegen-arm.h +0 -312
  614. data/ext/v8/upstream/3.1.8/src/arm/lithium-gap-resolver-arm.cc +0 -303
  615. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.cc +0 -2701
  616. data/ext/v8/upstream/3.1.8/src/arm/macro-assembler-arm.h +0 -1015
  617. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.cc +0 -1280
  618. data/ext/v8/upstream/3.1.8/src/arm/regexp-macro-assembler-arm.h +0 -252
  619. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.cc +0 -3165
  620. data/ext/v8/upstream/3.1.8/src/arm/simulator-arm.h +0 -402
  621. data/ext/v8/upstream/3.1.8/src/arm/stub-cache-arm.cc +0 -4077
  622. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.cc +0 -843
  623. data/ext/v8/upstream/3.1.8/src/arm/virtual-frame-arm.h +0 -520
  624. data/ext/v8/upstream/3.1.8/src/array.js +0 -1231
  625. data/ext/v8/upstream/3.1.8/src/assembler.cc +0 -973
  626. data/ext/v8/upstream/3.1.8/src/assembler.h +0 -787
  627. data/ext/v8/upstream/3.1.8/src/ast-inl.h +0 -107
  628. data/ext/v8/upstream/3.1.8/src/ast.cc +0 -1067
  629. data/ext/v8/upstream/3.1.8/src/ast.h +0 -2177
  630. data/ext/v8/upstream/3.1.8/src/atomicops.h +0 -165
  631. data/ext/v8/upstream/3.1.8/src/bootstrapper.cc +0 -1888
  632. data/ext/v8/upstream/3.1.8/src/bootstrapper.h +0 -118
  633. data/ext/v8/upstream/3.1.8/src/builtins.cc +0 -1586
  634. data/ext/v8/upstream/3.1.8/src/builtins.h +0 -339
  635. data/ext/v8/upstream/3.1.8/src/checks.cc +0 -110
  636. data/ext/v8/upstream/3.1.8/src/checks.h +0 -292
  637. data/ext/v8/upstream/3.1.8/src/code-stubs.cc +0 -230
  638. data/ext/v8/upstream/3.1.8/src/code-stubs.h +0 -950
  639. data/ext/v8/upstream/3.1.8/src/codegen-inl.h +0 -64
  640. data/ext/v8/upstream/3.1.8/src/codegen.cc +0 -495
  641. data/ext/v8/upstream/3.1.8/src/codegen.h +0 -245
  642. data/ext/v8/upstream/3.1.8/src/compilation-cache.cc +0 -654
  643. data/ext/v8/upstream/3.1.8/src/compilation-cache.h +0 -112
  644. data/ext/v8/upstream/3.1.8/src/compiler.cc +0 -806
  645. data/ext/v8/upstream/3.1.8/src/compiler.h +0 -290
  646. data/ext/v8/upstream/3.1.8/src/contexts.cc +0 -320
  647. data/ext/v8/upstream/3.1.8/src/contexts.h +0 -376
  648. data/ext/v8/upstream/3.1.8/src/conversions.cc +0 -1069
  649. data/ext/v8/upstream/3.1.8/src/counters.cc +0 -78
  650. data/ext/v8/upstream/3.1.8/src/counters.h +0 -242
  651. data/ext/v8/upstream/3.1.8/src/cpu-profiler-inl.h +0 -100
  652. data/ext/v8/upstream/3.1.8/src/cpu-profiler.cc +0 -554
  653. data/ext/v8/upstream/3.1.8/src/cpu-profiler.h +0 -291
  654. data/ext/v8/upstream/3.1.8/src/cpu.h +0 -65
  655. data/ext/v8/upstream/3.1.8/src/d8-debug.cc +0 -367
  656. data/ext/v8/upstream/3.1.8/src/d8-debug.h +0 -157
  657. data/ext/v8/upstream/3.1.8/src/d8-posix.cc +0 -693
  658. data/ext/v8/upstream/3.1.8/src/d8.cc +0 -792
  659. data/ext/v8/upstream/3.1.8/src/d8.gyp +0 -85
  660. data/ext/v8/upstream/3.1.8/src/data-flow.h +0 -379
  661. data/ext/v8/upstream/3.1.8/src/dateparser.h +0 -263
  662. data/ext/v8/upstream/3.1.8/src/debug-agent.cc +0 -446
  663. data/ext/v8/upstream/3.1.8/src/debug-agent.h +0 -131
  664. data/ext/v8/upstream/3.1.8/src/debug.cc +0 -3085
  665. data/ext/v8/upstream/3.1.8/src/debug.h +0 -1025
  666. data/ext/v8/upstream/3.1.8/src/deoptimizer.cc +0 -1185
  667. data/ext/v8/upstream/3.1.8/src/deoptimizer.h +0 -529
  668. data/ext/v8/upstream/3.1.8/src/disasm.h +0 -77
  669. data/ext/v8/upstream/3.1.8/src/disassembler.cc +0 -338
  670. data/ext/v8/upstream/3.1.8/src/execution.cc +0 -735
  671. data/ext/v8/upstream/3.1.8/src/execution.h +0 -322
  672. data/ext/v8/upstream/3.1.8/src/extensions/experimental/experimental.gyp +0 -53
  673. data/ext/v8/upstream/3.1.8/src/extensions/experimental/i18n-extension.cc +0 -264
  674. data/ext/v8/upstream/3.1.8/src/extensions/externalize-string-extension.cc +0 -141
  675. data/ext/v8/upstream/3.1.8/src/extensions/gc-extension.cc +0 -58
  676. data/ext/v8/upstream/3.1.8/src/factory.cc +0 -1087
  677. data/ext/v8/upstream/3.1.8/src/factory.h +0 -432
  678. data/ext/v8/upstream/3.1.8/src/flag-definitions.h +0 -552
  679. data/ext/v8/upstream/3.1.8/src/frame-element.cc +0 -42
  680. data/ext/v8/upstream/3.1.8/src/frame-element.h +0 -277
  681. data/ext/v8/upstream/3.1.8/src/frames-inl.h +0 -210
  682. data/ext/v8/upstream/3.1.8/src/frames.cc +0 -1232
  683. data/ext/v8/upstream/3.1.8/src/frames.h +0 -826
  684. data/ext/v8/upstream/3.1.8/src/full-codegen.cc +0 -1382
  685. data/ext/v8/upstream/3.1.8/src/full-codegen.h +0 -751
  686. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.cc +0 -90
  687. data/ext/v8/upstream/3.1.8/src/func-name-inferrer.h +0 -111
  688. data/ext/v8/upstream/3.1.8/src/gdb-jit.cc +0 -1547
  689. data/ext/v8/upstream/3.1.8/src/global-handles.cc +0 -534
  690. data/ext/v8/upstream/3.1.8/src/global-handles.h +0 -181
  691. data/ext/v8/upstream/3.1.8/src/globals.h +0 -325
  692. data/ext/v8/upstream/3.1.8/src/handles-inl.h +0 -80
  693. data/ext/v8/upstream/3.1.8/src/handles.cc +0 -910
  694. data/ext/v8/upstream/3.1.8/src/handles.h +0 -424
  695. data/ext/v8/upstream/3.1.8/src/hashmap.h +0 -121
  696. data/ext/v8/upstream/3.1.8/src/heap-inl.h +0 -587
  697. data/ext/v8/upstream/3.1.8/src/heap-profiler.cc +0 -1128
  698. data/ext/v8/upstream/3.1.8/src/heap-profiler.h +0 -381
  699. data/ext/v8/upstream/3.1.8/src/heap.cc +0 -5610
  700. data/ext/v8/upstream/3.1.8/src/heap.h +0 -2218
  701. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.cc +0 -1490
  702. data/ext/v8/upstream/3.1.8/src/hydrogen-instructions.h +0 -3493
  703. data/ext/v8/upstream/3.1.8/src/hydrogen.cc +0 -6056
  704. data/ext/v8/upstream/3.1.8/src/hydrogen.h +0 -1091
  705. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32-inl.h +0 -429
  706. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.cc +0 -2800
  707. data/ext/v8/upstream/3.1.8/src/ia32/assembler-ia32.h +0 -1093
  708. data/ext/v8/upstream/3.1.8/src/ia32/builtins-ia32.cc +0 -1590
  709. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.cc +0 -6624
  710. data/ext/v8/upstream/3.1.8/src/ia32/code-stubs-ia32.h +0 -536
  711. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.cc +0 -10354
  712. data/ext/v8/upstream/3.1.8/src/ia32/codegen-ia32.h +0 -798
  713. data/ext/v8/upstream/3.1.8/src/ia32/cpu-ia32.cc +0 -87
  714. data/ext/v8/upstream/3.1.8/src/ia32/debug-ia32.cc +0 -309
  715. data/ext/v8/upstream/3.1.8/src/ia32/deoptimizer-ia32.cc +0 -664
  716. data/ext/v8/upstream/3.1.8/src/ia32/disasm-ia32.cc +0 -1597
  717. data/ext/v8/upstream/3.1.8/src/ia32/frames-ia32.h +0 -140
  718. data/ext/v8/upstream/3.1.8/src/ia32/full-codegen-ia32.cc +0 -4278
  719. data/ext/v8/upstream/3.1.8/src/ia32/ic-ia32.cc +0 -1786
  720. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.cc +0 -3880
  721. data/ext/v8/upstream/3.1.8/src/ia32/lithium-codegen-ia32.h +0 -309
  722. data/ext/v8/upstream/3.1.8/src/ia32/lithium-gap-resolver-ia32.cc +0 -460
  723. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.cc +0 -2095
  724. data/ext/v8/upstream/3.1.8/src/ia32/lithium-ia32.h +0 -2127
  725. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.cc +0 -2031
  726. data/ext/v8/upstream/3.1.8/src/ia32/macro-assembler-ia32.h +0 -798
  727. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.cc +0 -1253
  728. data/ext/v8/upstream/3.1.8/src/ia32/regexp-macro-assembler-ia32.h +0 -215
  729. data/ext/v8/upstream/3.1.8/src/ia32/register-allocator-ia32.cc +0 -157
  730. data/ext/v8/upstream/3.1.8/src/ia32/simulator-ia32.h +0 -72
  731. data/ext/v8/upstream/3.1.8/src/ia32/stub-cache-ia32.cc +0 -3732
  732. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.cc +0 -1360
  733. data/ext/v8/upstream/3.1.8/src/ia32/virtual-frame-ia32.h +0 -646
  734. data/ext/v8/upstream/3.1.8/src/ic-inl.h +0 -129
  735. data/ext/v8/upstream/3.1.8/src/ic.cc +0 -2333
  736. data/ext/v8/upstream/3.1.8/src/ic.h +0 -639
  737. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.cc +0 -655
  738. data/ext/v8/upstream/3.1.8/src/interpreter-irregexp.h +0 -48
  739. data/ext/v8/upstream/3.1.8/src/json.js +0 -342
  740. data/ext/v8/upstream/3.1.8/src/jsregexp.cc +0 -5340
  741. data/ext/v8/upstream/3.1.8/src/jsregexp.h +0 -1484
  742. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.cc +0 -430
  743. data/ext/v8/upstream/3.1.8/src/jump-target-heavy.h +0 -244
  744. data/ext/v8/upstream/3.1.8/src/jump-target-inl.h +0 -48
  745. data/ext/v8/upstream/3.1.8/src/jump-target-light.cc +0 -111
  746. data/ext/v8/upstream/3.1.8/src/lithium-allocator-inl.h +0 -140
  747. data/ext/v8/upstream/3.1.8/src/lithium-allocator.cc +0 -2093
  748. data/ext/v8/upstream/3.1.8/src/lithium-allocator.h +0 -644
  749. data/ext/v8/upstream/3.1.8/src/lithium.cc +0 -168
  750. data/ext/v8/upstream/3.1.8/src/liveedit.cc +0 -1650
  751. data/ext/v8/upstream/3.1.8/src/liveedit.h +0 -174
  752. data/ext/v8/upstream/3.1.8/src/liveobjectlist.cc +0 -2527
  753. data/ext/v8/upstream/3.1.8/src/liveobjectlist.h +0 -322
  754. data/ext/v8/upstream/3.1.8/src/log-utils.cc +0 -336
  755. data/ext/v8/upstream/3.1.8/src/log-utils.h +0 -232
  756. data/ext/v8/upstream/3.1.8/src/log.cc +0 -1608
  757. data/ext/v8/upstream/3.1.8/src/log.h +0 -379
  758. data/ext/v8/upstream/3.1.8/src/mark-compact.cc +0 -2957
  759. data/ext/v8/upstream/3.1.8/src/mark-compact.h +0 -433
  760. data/ext/v8/upstream/3.1.8/src/messages.cc +0 -164
  761. data/ext/v8/upstream/3.1.8/src/messages.js +0 -1071
  762. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips-inl.h +0 -215
  763. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.cc +0 -1219
  764. data/ext/v8/upstream/3.1.8/src/mips/assembler-mips.h +0 -667
  765. data/ext/v8/upstream/3.1.8/src/mips/builtins-mips.cc +0 -205
  766. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips-inl.h +0 -70
  767. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.cc +0 -1437
  768. data/ext/v8/upstream/3.1.8/src/mips/codegen-mips.h +0 -431
  769. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.cc +0 -328
  770. data/ext/v8/upstream/3.1.8/src/mips/constants-mips.h +0 -525
  771. data/ext/v8/upstream/3.1.8/src/mips/cpu-mips.cc +0 -73
  772. data/ext/v8/upstream/3.1.8/src/mips/debug-mips.cc +0 -127
  773. data/ext/v8/upstream/3.1.8/src/mips/disasm-mips.cc +0 -787
  774. data/ext/v8/upstream/3.1.8/src/mips/fast-codegen-mips.cc +0 -77
  775. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.cc +0 -96
  776. data/ext/v8/upstream/3.1.8/src/mips/frames-mips.h +0 -164
  777. data/ext/v8/upstream/3.1.8/src/mips/full-codegen-mips.cc +0 -277
  778. data/ext/v8/upstream/3.1.8/src/mips/ic-mips.cc +0 -208
  779. data/ext/v8/upstream/3.1.8/src/mips/jump-target-mips.cc +0 -175
  780. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.cc +0 -1326
  781. data/ext/v8/upstream/3.1.8/src/mips/macro-assembler-mips.h +0 -461
  782. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips-inl.h +0 -137
  783. data/ext/v8/upstream/3.1.8/src/mips/register-allocator-mips.h +0 -46
  784. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.cc +0 -1650
  785. data/ext/v8/upstream/3.1.8/src/mips/simulator-mips.h +0 -311
  786. data/ext/v8/upstream/3.1.8/src/mips/stub-cache-mips.cc +0 -418
  787. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.cc +0 -319
  788. data/ext/v8/upstream/3.1.8/src/mips/virtual-frame-mips.h +0 -548
  789. data/ext/v8/upstream/3.1.8/src/mirror-debugger.js +0 -2380
  790. data/ext/v8/upstream/3.1.8/src/mksnapshot.cc +0 -256
  791. data/ext/v8/upstream/3.1.8/src/objects-debug.cc +0 -722
  792. data/ext/v8/upstream/3.1.8/src/objects-inl.h +0 -3946
  793. data/ext/v8/upstream/3.1.8/src/objects-printer.cc +0 -801
  794. data/ext/v8/upstream/3.1.8/src/objects-visiting.cc +0 -142
  795. data/ext/v8/upstream/3.1.8/src/objects-visiting.h +0 -401
  796. data/ext/v8/upstream/3.1.8/src/objects.cc +0 -10044
  797. data/ext/v8/upstream/3.1.8/src/objects.h +0 -6571
  798. data/ext/v8/upstream/3.1.8/src/parser.cc +0 -5165
  799. data/ext/v8/upstream/3.1.8/src/parser.h +0 -802
  800. data/ext/v8/upstream/3.1.8/src/platform-cygwin.cc +0 -745
  801. data/ext/v8/upstream/3.1.8/src/platform-freebsd.cc +0 -702
  802. data/ext/v8/upstream/3.1.8/src/platform-linux.cc +0 -981
  803. data/ext/v8/upstream/3.1.8/src/platform-macos.cc +0 -732
  804. data/ext/v8/upstream/3.1.8/src/platform-nullos.cc +0 -498
  805. data/ext/v8/upstream/3.1.8/src/platform-openbsd.cc +0 -657
  806. data/ext/v8/upstream/3.1.8/src/platform-posix.cc +0 -399
  807. data/ext/v8/upstream/3.1.8/src/platform-solaris.cc +0 -714
  808. data/ext/v8/upstream/3.1.8/src/platform-win32.cc +0 -1974
  809. data/ext/v8/upstream/3.1.8/src/platform.h +0 -636
  810. data/ext/v8/upstream/3.1.8/src/preparse-data.cc +0 -183
  811. data/ext/v8/upstream/3.1.8/src/preparser-api.cc +0 -213
  812. data/ext/v8/upstream/3.1.8/src/preparser.cc +0 -1205
  813. data/ext/v8/upstream/3.1.8/src/prettyprinter.cc +0 -1539
  814. data/ext/v8/upstream/3.1.8/src/prettyprinter.h +0 -223
  815. data/ext/v8/upstream/3.1.8/src/profile-generator.cc +0 -2899
  816. data/ext/v8/upstream/3.1.8/src/profile-generator.h +0 -1151
  817. data/ext/v8/upstream/3.1.8/src/property.cc +0 -96
  818. data/ext/v8/upstream/3.1.8/src/property.h +0 -337
  819. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler-irregexp.cc +0 -470
  820. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.cc +0 -257
  821. data/ext/v8/upstream/3.1.8/src/regexp-macro-assembler.h +0 -231
  822. data/ext/v8/upstream/3.1.8/src/regexp-stack.cc +0 -103
  823. data/ext/v8/upstream/3.1.8/src/regexp-stack.h +0 -123
  824. data/ext/v8/upstream/3.1.8/src/regexp.js +0 -483
  825. data/ext/v8/upstream/3.1.8/src/register-allocator-inl.h +0 -141
  826. data/ext/v8/upstream/3.1.8/src/register-allocator.cc +0 -104
  827. data/ext/v8/upstream/3.1.8/src/register-allocator.h +0 -320
  828. data/ext/v8/upstream/3.1.8/src/rewriter.cc +0 -1023
  829. data/ext/v8/upstream/3.1.8/src/runtime-profiler.cc +0 -443
  830. data/ext/v8/upstream/3.1.8/src/runtime-profiler.h +0 -77
  831. data/ext/v8/upstream/3.1.8/src/runtime.cc +0 -11592
  832. data/ext/v8/upstream/3.1.8/src/runtime.h +0 -582
  833. data/ext/v8/upstream/3.1.8/src/safepoint-table.cc +0 -253
  834. data/ext/v8/upstream/3.1.8/src/safepoint-table.h +0 -263
  835. data/ext/v8/upstream/3.1.8/src/scanner-base.cc +0 -971
  836. data/ext/v8/upstream/3.1.8/src/scanner-base.h +0 -653
  837. data/ext/v8/upstream/3.1.8/src/scanner.cc +0 -586
  838. data/ext/v8/upstream/3.1.8/src/scanner.h +0 -194
  839. data/ext/v8/upstream/3.1.8/src/scopeinfo.cc +0 -636
  840. data/ext/v8/upstream/3.1.8/src/scopeinfo.h +0 -238
  841. data/ext/v8/upstream/3.1.8/src/scopes.cc +0 -1063
  842. data/ext/v8/upstream/3.1.8/src/scopes.h +0 -494
  843. data/ext/v8/upstream/3.1.8/src/serialize.cc +0 -1535
  844. data/ext/v8/upstream/3.1.8/src/serialize.h +0 -584
  845. data/ext/v8/upstream/3.1.8/src/snapshot-common.cc +0 -82
  846. data/ext/v8/upstream/3.1.8/src/snapshot.h +0 -71
  847. data/ext/v8/upstream/3.1.8/src/spaces-inl.h +0 -524
  848. data/ext/v8/upstream/3.1.8/src/spaces.cc +0 -3254
  849. data/ext/v8/upstream/3.1.8/src/spaces.h +0 -2362
  850. data/ext/v8/upstream/3.1.8/src/string-search.cc +0 -40
  851. data/ext/v8/upstream/3.1.8/src/string-search.h +0 -567
  852. data/ext/v8/upstream/3.1.8/src/string-stream.cc +0 -584
  853. data/ext/v8/upstream/3.1.8/src/string.js +0 -915
  854. data/ext/v8/upstream/3.1.8/src/stub-cache.cc +0 -1878
  855. data/ext/v8/upstream/3.1.8/src/stub-cache.h +0 -849
  856. data/ext/v8/upstream/3.1.8/src/token.cc +0 -63
  857. data/ext/v8/upstream/3.1.8/src/token.h +0 -288
  858. data/ext/v8/upstream/3.1.8/src/top.cc +0 -1152
  859. data/ext/v8/upstream/3.1.8/src/top.h +0 -608
  860. data/ext/v8/upstream/3.1.8/src/type-info.cc +0 -406
  861. data/ext/v8/upstream/3.1.8/src/type-info.h +0 -283
  862. data/ext/v8/upstream/3.1.8/src/unicode.cc +0 -1624
  863. data/ext/v8/upstream/3.1.8/src/unicode.h +0 -280
  864. data/ext/v8/upstream/3.1.8/src/utils.h +0 -793
  865. data/ext/v8/upstream/3.1.8/src/v8-counters.cc +0 -55
  866. data/ext/v8/upstream/3.1.8/src/v8-counters.h +0 -290
  867. data/ext/v8/upstream/3.1.8/src/v8.cc +0 -270
  868. data/ext/v8/upstream/3.1.8/src/v8.h +0 -127
  869. data/ext/v8/upstream/3.1.8/src/v8globals.h +0 -480
  870. data/ext/v8/upstream/3.1.8/src/v8natives.js +0 -1252
  871. data/ext/v8/upstream/3.1.8/src/v8threads.cc +0 -440
  872. data/ext/v8/upstream/3.1.8/src/v8threads.h +0 -157
  873. data/ext/v8/upstream/3.1.8/src/v8utils.h +0 -354
  874. data/ext/v8/upstream/3.1.8/src/variables.h +0 -212
  875. data/ext/v8/upstream/3.1.8/src/version.cc +0 -95
  876. data/ext/v8/upstream/3.1.8/src/version.h +0 -64
  877. data/ext/v8/upstream/3.1.8/src/virtual-frame-light-inl.h +0 -170
  878. data/ext/v8/upstream/3.1.8/src/vm-state-inl.h +0 -134
  879. data/ext/v8/upstream/3.1.8/src/vm-state.h +0 -68
  880. data/ext/v8/upstream/3.1.8/src/win32-headers.h +0 -95
  881. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64-inl.h +0 -455
  882. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.cc +0 -3162
  883. data/ext/v8/upstream/3.1.8/src/x64/assembler-x64.h +0 -1584
  884. data/ext/v8/upstream/3.1.8/src/x64/builtins-x64.cc +0 -1492
  885. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.cc +0 -5150
  886. data/ext/v8/upstream/3.1.8/src/x64/code-stubs-x64.h +0 -519
  887. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.cc +0 -8835
  888. data/ext/v8/upstream/3.1.8/src/x64/codegen-x64.h +0 -750
  889. data/ext/v8/upstream/3.1.8/src/x64/cpu-x64.cc +0 -86
  890. data/ext/v8/upstream/3.1.8/src/x64/debug-x64.cc +0 -316
  891. data/ext/v8/upstream/3.1.8/src/x64/deoptimizer-x64.cc +0 -781
  892. data/ext/v8/upstream/3.1.8/src/x64/disasm-x64.cc +0 -1737
  893. data/ext/v8/upstream/3.1.8/src/x64/frames-x64.h +0 -130
  894. data/ext/v8/upstream/3.1.8/src/x64/full-codegen-x64.cc +0 -3984
  895. data/ext/v8/upstream/3.1.8/src/x64/ic-x64.cc +0 -1761
  896. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.cc +0 -3639
  897. data/ext/v8/upstream/3.1.8/src/x64/lithium-codegen-x64.h +0 -305
  898. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.cc +0 -2044
  899. data/ext/v8/upstream/3.1.8/src/x64/lithium-x64.h +0 -2052
  900. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.cc +0 -2660
  901. data/ext/v8/upstream/3.1.8/src/x64/macro-assembler-x64.h +0 -1852
  902. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.cc +0 -1382
  903. data/ext/v8/upstream/3.1.8/src/x64/regexp-macro-assembler-x64.h +0 -278
  904. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64-inl.h +0 -87
  905. data/ext/v8/upstream/3.1.8/src/x64/register-allocator-x64.cc +0 -91
  906. data/ext/v8/upstream/3.1.8/src/x64/simulator-x64.h +0 -71
  907. data/ext/v8/upstream/3.1.8/src/x64/stub-cache-x64.cc +0 -3509
  908. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.cc +0 -1292
  909. data/ext/v8/upstream/3.1.8/src/x64/virtual-frame-x64.h +0 -593
  910. data/ext/v8/upstream/3.1.8/src/zone-inl.h +0 -83
  911. data/ext/v8/upstream/3.1.8/src/zone.cc +0 -195
  912. data/ext/v8/upstream/3.1.8/src/zone.h +0 -233
  913. data/ext/v8/upstream/3.1.8/tools/gyp/v8.gyp +0 -869
  914. data/ext/v8/upstream/3.1.8/tools/linux-tick-processor +0 -33
  915. data/ext/v8/upstream/3.1.8/tools/tickprocessor.js +0 -863
  916. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base.vcproj +0 -1296
  917. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_arm.vcproj +0 -1234
  918. data/ext/v8/upstream/3.1.8/tools/visual_studio/v8_base_x64.vcproj +0 -1296
  919. data/ext/v8/upstream/3.1.8/tools/visual_studio/x64.vsprops +0 -17
  920. data/spec/ext/mem_spec.rb +0 -42
@@ -0,0 +1,1120 @@
1
+ // Copyright 2006-2008 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 Linux goes here. For the POSIX comaptible parts
29
+ // the implementation is in platform-posix.cc.
30
+
31
+ #include <pthread.h>
32
+ #include <semaphore.h>
33
+ #include <signal.h>
34
+ #include <sys/prctl.h>
35
+ #include <sys/time.h>
36
+ #include <sys/resource.h>
37
+ #include <sys/syscall.h>
38
+ #include <sys/types.h>
39
+ #include <stdlib.h>
40
+
41
+ // Ubuntu Dapper requires memory pages to be marked as
42
+ // executable. Otherwise, OS raises an exception when executing code
43
+ // in that page.
44
+ #include <sys/types.h> // mmap & munmap
45
+ #include <sys/mman.h> // mmap & munmap
46
+ #include <sys/stat.h> // open
47
+ #include <fcntl.h> // open
48
+ #include <unistd.h> // sysconf
49
+ #ifdef __GLIBC__
50
+ #include <execinfo.h> // backtrace, backtrace_symbols
51
+ #endif // def __GLIBC__
52
+ #include <strings.h> // index
53
+ #include <errno.h>
54
+ #include <stdarg.h>
55
+
56
+ #undef MAP_TYPE
57
+
58
+ #include "v8.h"
59
+
60
+ #include "platform.h"
61
+ #include "v8threads.h"
62
+ #include "vm-state-inl.h"
63
+
64
+
65
+ namespace v8 {
66
+ namespace internal {
67
+
68
+ // 0 is never a valid thread id on Linux since tids and pids share a
69
+ // name space and pid 0 is reserved (see man 2 kill).
70
+ static const pthread_t kNoThread = (pthread_t) 0;
71
+
72
+
73
+ double ceiling(double x) {
74
+ return ceil(x);
75
+ }
76
+
77
+
78
+ static Mutex* limit_mutex = NULL;
79
+
80
+
81
+ void OS::Setup() {
82
+ // Seed the random number generator.
83
+ // Convert the current time to a 64-bit integer first, before converting it
84
+ // to an unsigned. Going directly can cause an overflow and the seed to be
85
+ // set to all ones. The seed will be identical for different instances that
86
+ // call this setup code within the same millisecond.
87
+ uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
88
+ srandom(static_cast<unsigned int>(seed));
89
+ limit_mutex = CreateMutex();
90
+ }
91
+
92
+
93
+ uint64_t OS::CpuFeaturesImpliedByPlatform() {
94
+ #if (defined(__VFP_FP__) && !defined(__SOFTFP__))
95
+ // Here gcc is telling us that we are on an ARM and gcc is assuming that we
96
+ // have VFP3 instructions. If gcc can assume it then so can we.
97
+ return 1u << VFP3;
98
+ #elif CAN_USE_ARMV7_INSTRUCTIONS
99
+ return 1u << ARMv7;
100
+ #elif(defined(__mips_hard_float) && __mips_hard_float != 0)
101
+ // Here gcc is telling us that we are on an MIPS and gcc is assuming that we
102
+ // have FPU instructions. If gcc can assume it then so can we.
103
+ return 1u << FPU;
104
+ #else
105
+ return 0; // Linux runs on anything.
106
+ #endif
107
+ }
108
+
109
+
110
+ #ifdef __arm__
111
+ static bool CPUInfoContainsString(const char * search_string) {
112
+ const char* file_name = "/proc/cpuinfo";
113
+ // This is written as a straight shot one pass parser
114
+ // and not using STL string and ifstream because,
115
+ // on Linux, it's reading from a (non-mmap-able)
116
+ // character special device.
117
+ FILE* f = NULL;
118
+ const char* what = search_string;
119
+
120
+ if (NULL == (f = fopen(file_name, "r")))
121
+ return false;
122
+
123
+ int k;
124
+ while (EOF != (k = fgetc(f))) {
125
+ if (k == *what) {
126
+ ++what;
127
+ while ((*what != '\0') && (*what == fgetc(f))) {
128
+ ++what;
129
+ }
130
+ if (*what == '\0') {
131
+ fclose(f);
132
+ return true;
133
+ } else {
134
+ what = search_string;
135
+ }
136
+ }
137
+ }
138
+ fclose(f);
139
+
140
+ // Did not find string in the proc file.
141
+ return false;
142
+ }
143
+
144
+ bool OS::ArmCpuHasFeature(CpuFeature feature) {
145
+ const char* search_string = NULL;
146
+ // Simple detection of VFP at runtime for Linux.
147
+ // It is based on /proc/cpuinfo, which reveals hardware configuration
148
+ // to user-space applications. According to ARM (mid 2009), no similar
149
+ // facility is universally available on the ARM architectures,
150
+ // so it's up to individual OSes to provide such.
151
+ switch (feature) {
152
+ case VFP3:
153
+ search_string = "vfpv3";
154
+ break;
155
+ case ARMv7:
156
+ search_string = "ARMv7";
157
+ break;
158
+ default:
159
+ UNREACHABLE();
160
+ }
161
+
162
+ if (CPUInfoContainsString(search_string)) {
163
+ return true;
164
+ }
165
+
166
+ if (feature == VFP3) {
167
+ // Some old kernels will report vfp not vfpv3. Here we make a last attempt
168
+ // to detect vfpv3 by checking for vfp *and* neon, since neon is only
169
+ // available on architectures with vfpv3.
170
+ // Checking neon on its own is not enough as it is possible to have neon
171
+ // without vfp.
172
+ if (CPUInfoContainsString("vfp") && CPUInfoContainsString("neon")) {
173
+ return true;
174
+ }
175
+ }
176
+
177
+ return false;
178
+ }
179
+ #endif // def __arm__
180
+
181
+
182
+ #ifdef __mips__
183
+ bool OS::MipsCpuHasFeature(CpuFeature feature) {
184
+ const char* search_string = NULL;
185
+ const char* file_name = "/proc/cpuinfo";
186
+ // Simple detection of FPU at runtime for Linux.
187
+ // It is based on /proc/cpuinfo, which reveals hardware configuration
188
+ // to user-space applications. According to MIPS (early 2010), no similar
189
+ // facility is universally available on the MIPS architectures,
190
+ // so it's up to individual OSes to provide such.
191
+ //
192
+ // This is written as a straight shot one pass parser
193
+ // and not using STL string and ifstream because,
194
+ // on Linux, it's reading from a (non-mmap-able)
195
+ // character special device.
196
+
197
+ switch (feature) {
198
+ case FPU:
199
+ search_string = "FPU";
200
+ break;
201
+ default:
202
+ UNREACHABLE();
203
+ }
204
+
205
+ FILE* f = NULL;
206
+ const char* what = search_string;
207
+
208
+ if (NULL == (f = fopen(file_name, "r")))
209
+ return false;
210
+
211
+ int k;
212
+ while (EOF != (k = fgetc(f))) {
213
+ if (k == *what) {
214
+ ++what;
215
+ while ((*what != '\0') && (*what == fgetc(f))) {
216
+ ++what;
217
+ }
218
+ if (*what == '\0') {
219
+ fclose(f);
220
+ return true;
221
+ } else {
222
+ what = search_string;
223
+ }
224
+ }
225
+ }
226
+ fclose(f);
227
+
228
+ // Did not find string in the proc file.
229
+ return false;
230
+ }
231
+ #endif // def __mips__
232
+
233
+
234
+ int OS::ActivationFrameAlignment() {
235
+ #ifdef V8_TARGET_ARCH_ARM
236
+ // On EABI ARM targets this is required for fp correctness in the
237
+ // runtime system.
238
+ return 8;
239
+ #elif V8_TARGET_ARCH_MIPS
240
+ return 8;
241
+ #endif
242
+ // With gcc 4.4 the tree vectorization optimizer can generate code
243
+ // that requires 16 byte alignment such as movdqa on x86.
244
+ return 16;
245
+ }
246
+
247
+
248
+ void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
249
+ #if (defined(V8_TARGET_ARCH_ARM) && defined(__arm__)) || \
250
+ (defined(V8_TARGET_ARCH_MIPS) && defined(__mips__))
251
+ // Only use on ARM or MIPS hardware.
252
+ MemoryBarrier();
253
+ #else
254
+ __asm__ __volatile__("" : : : "memory");
255
+ // An x86 store acts as a release barrier.
256
+ #endif
257
+ *ptr = value;
258
+ }
259
+
260
+
261
+ const char* OS::LocalTimezone(double time) {
262
+ if (isnan(time)) return "";
263
+ time_t tv = static_cast<time_t>(floor(time/msPerSecond));
264
+ struct tm* t = localtime(&tv);
265
+ if (NULL == t) return "";
266
+ return t->tm_zone;
267
+ }
268
+
269
+
270
+ double OS::LocalTimeOffset() {
271
+ time_t tv = time(NULL);
272
+ struct tm* t = localtime(&tv);
273
+ // tm_gmtoff includes any daylight savings offset, so subtract it.
274
+ return static_cast<double>(t->tm_gmtoff * msPerSecond -
275
+ (t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
276
+ }
277
+
278
+
279
+ // We keep the lowest and highest addresses mapped as a quick way of
280
+ // determining that pointers are outside the heap (used mostly in assertions
281
+ // and verification). The estimate is conservative, ie, not all addresses in
282
+ // 'allocated' space are actually allocated to our heap. The range is
283
+ // [lowest, highest), inclusive on the low and and exclusive on the high end.
284
+ static void* lowest_ever_allocated = reinterpret_cast<void*>(-1);
285
+ static void* highest_ever_allocated = reinterpret_cast<void*>(0);
286
+
287
+
288
+ static void UpdateAllocatedSpaceLimits(void* address, int size) {
289
+ ASSERT(limit_mutex != NULL);
290
+ ScopedLock lock(limit_mutex);
291
+
292
+ lowest_ever_allocated = Min(lowest_ever_allocated, address);
293
+ highest_ever_allocated =
294
+ Max(highest_ever_allocated,
295
+ reinterpret_cast<void*>(reinterpret_cast<char*>(address) + size));
296
+ }
297
+
298
+
299
+ bool OS::IsOutsideAllocatedSpace(void* address) {
300
+ return address < lowest_ever_allocated || address >= highest_ever_allocated;
301
+ }
302
+
303
+
304
+ size_t OS::AllocateAlignment() {
305
+ return sysconf(_SC_PAGESIZE);
306
+ }
307
+
308
+
309
+ void* OS::Allocate(const size_t requested,
310
+ size_t* allocated,
311
+ bool is_executable) {
312
+ // TODO(805): Port randomization of allocated executable memory to Linux.
313
+ const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE));
314
+ int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
315
+ void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
316
+ if (mbase == MAP_FAILED) {
317
+ LOG(i::Isolate::Current(),
318
+ StringEvent("OS::Allocate", "mmap failed"));
319
+ return NULL;
320
+ }
321
+ *allocated = msize;
322
+ UpdateAllocatedSpaceLimits(mbase, msize);
323
+ return mbase;
324
+ }
325
+
326
+
327
+ void OS::Free(void* address, const size_t size) {
328
+ // TODO(1240712): munmap has a return value which is ignored here.
329
+ int result = munmap(address, size);
330
+ USE(result);
331
+ ASSERT(result == 0);
332
+ }
333
+
334
+
335
+ #ifdef ENABLE_HEAP_PROTECTION
336
+
337
+ void OS::Protect(void* address, size_t size) {
338
+ // TODO(1240712): mprotect has a return value which is ignored here.
339
+ mprotect(address, size, PROT_READ);
340
+ }
341
+
342
+
343
+ void OS::Unprotect(void* address, size_t size, bool is_executable) {
344
+ // TODO(1240712): mprotect has a return value which is ignored here.
345
+ int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
346
+ mprotect(address, size, prot);
347
+ }
348
+
349
+ #endif
350
+
351
+
352
+ void OS::Sleep(int milliseconds) {
353
+ unsigned int ms = static_cast<unsigned int>(milliseconds);
354
+ usleep(1000 * ms);
355
+ }
356
+
357
+
358
+ void OS::Abort() {
359
+ // Redirect to std abort to signal abnormal program termination.
360
+ abort();
361
+ }
362
+
363
+
364
+ void OS::DebugBreak() {
365
+ // TODO(lrn): Introduce processor define for runtime system (!= V8_ARCH_x,
366
+ // which is the architecture of generated code).
367
+ #if (defined(__arm__) || defined(__thumb__))
368
+ # if defined(CAN_USE_ARMV5_INSTRUCTIONS)
369
+ asm("bkpt 0");
370
+ # endif
371
+ #elif defined(__mips__)
372
+ asm("break");
373
+ #else
374
+ asm("int $3");
375
+ #endif
376
+ }
377
+
378
+
379
+ class PosixMemoryMappedFile : public OS::MemoryMappedFile {
380
+ public:
381
+ PosixMemoryMappedFile(FILE* file, void* memory, int size)
382
+ : file_(file), memory_(memory), size_(size) { }
383
+ virtual ~PosixMemoryMappedFile();
384
+ virtual void* memory() { return memory_; }
385
+ virtual int size() { return size_; }
386
+ private:
387
+ FILE* file_;
388
+ void* memory_;
389
+ int size_;
390
+ };
391
+
392
+
393
+ OS::MemoryMappedFile* OS::MemoryMappedFile::open(const char* name) {
394
+ FILE* file = fopen(name, "r+");
395
+ if (file == NULL) return NULL;
396
+
397
+ fseek(file, 0, SEEK_END);
398
+ int size = ftell(file);
399
+
400
+ void* memory =
401
+ mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(file), 0);
402
+ return new PosixMemoryMappedFile(file, memory, size);
403
+ }
404
+
405
+
406
+ OS::MemoryMappedFile* OS::MemoryMappedFile::create(const char* name, int size,
407
+ void* initial) {
408
+ FILE* file = fopen(name, "w+");
409
+ if (file == NULL) return NULL;
410
+ int result = fwrite(initial, size, 1, file);
411
+ if (result < 1) {
412
+ fclose(file);
413
+ return NULL;
414
+ }
415
+ void* memory =
416
+ mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(file), 0);
417
+ return new PosixMemoryMappedFile(file, memory, size);
418
+ }
419
+
420
+
421
+ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
422
+ if (memory_) munmap(memory_, size_);
423
+ fclose(file_);
424
+ }
425
+
426
+
427
+ void OS::LogSharedLibraryAddresses() {
428
+ #ifdef ENABLE_LOGGING_AND_PROFILING
429
+ // This function assumes that the layout of the file is as follows:
430
+ // hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
431
+ // If we encounter an unexpected situation we abort scanning further entries.
432
+ FILE* fp = fopen("/proc/self/maps", "r");
433
+ if (fp == NULL) return;
434
+
435
+ // Allocate enough room to be able to store a full file name.
436
+ const int kLibNameLen = FILENAME_MAX + 1;
437
+ char* lib_name = reinterpret_cast<char*>(malloc(kLibNameLen));
438
+
439
+ i::Isolate* isolate = ISOLATE;
440
+ // This loop will terminate once the scanning hits an EOF.
441
+ while (true) {
442
+ uintptr_t start, end;
443
+ char attr_r, attr_w, attr_x, attr_p;
444
+ // Parse the addresses and permission bits at the beginning of the line.
445
+ if (fscanf(fp, "%" V8PRIxPTR "-%" V8PRIxPTR, &start, &end) != 2) break;
446
+ if (fscanf(fp, " %c%c%c%c", &attr_r, &attr_w, &attr_x, &attr_p) != 4) break;
447
+
448
+ int c;
449
+ if (attr_r == 'r' && attr_w != 'w' && attr_x == 'x') {
450
+ // Found a read-only executable entry. Skip characters until we reach
451
+ // the beginning of the filename or the end of the line.
452
+ do {
453
+ c = getc(fp);
454
+ } while ((c != EOF) && (c != '\n') && (c != '/'));
455
+ if (c == EOF) break; // EOF: Was unexpected, just exit.
456
+
457
+ // Process the filename if found.
458
+ if (c == '/') {
459
+ ungetc(c, fp); // Push the '/' back into the stream to be read below.
460
+
461
+ // Read to the end of the line. Exit if the read fails.
462
+ if (fgets(lib_name, kLibNameLen, fp) == NULL) break;
463
+
464
+ // Drop the newline character read by fgets. We do not need to check
465
+ // for a zero-length string because we know that we at least read the
466
+ // '/' character.
467
+ lib_name[strlen(lib_name) - 1] = '\0';
468
+ } else {
469
+ // No library name found, just record the raw address range.
470
+ snprintf(lib_name, kLibNameLen,
471
+ "%08" V8PRIxPTR "-%08" V8PRIxPTR, start, end);
472
+ }
473
+ LOG(isolate, SharedLibraryEvent(lib_name, start, end));
474
+ } else {
475
+ // Entry not describing executable data. Skip to end of line to setup
476
+ // reading the next entry.
477
+ do {
478
+ c = getc(fp);
479
+ } while ((c != EOF) && (c != '\n'));
480
+ if (c == EOF) break;
481
+ }
482
+ }
483
+ free(lib_name);
484
+ fclose(fp);
485
+ #endif
486
+ }
487
+
488
+
489
+ static const char kGCFakeMmap[] = "/tmp/__v8_gc__";
490
+
491
+
492
+ void OS::SignalCodeMovingGC() {
493
+ #ifdef ENABLE_LOGGING_AND_PROFILING
494
+ // Support for ll_prof.py.
495
+ //
496
+ // The Linux profiler built into the kernel logs all mmap's with
497
+ // PROT_EXEC so that analysis tools can properly attribute ticks. We
498
+ // do a mmap with a name known by ll_prof.py and immediately munmap
499
+ // it. This injects a GC marker into the stream of events generated
500
+ // by the kernel and allows us to synchronize V8 code log and the
501
+ // kernel log.
502
+ int size = sysconf(_SC_PAGESIZE);
503
+ FILE* f = fopen(kGCFakeMmap, "w+");
504
+ void* addr = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_PRIVATE,
505
+ fileno(f), 0);
506
+ ASSERT(addr != MAP_FAILED);
507
+ munmap(addr, size);
508
+ fclose(f);
509
+ #endif
510
+ }
511
+
512
+
513
+ int OS::StackWalk(Vector<OS::StackFrame> frames) {
514
+ // backtrace is a glibc extension.
515
+ #ifdef __GLIBC__
516
+ int frames_size = frames.length();
517
+ ScopedVector<void*> addresses(frames_size);
518
+
519
+ int frames_count = backtrace(addresses.start(), frames_size);
520
+
521
+ char** symbols = backtrace_symbols(addresses.start(), frames_count);
522
+ if (symbols == NULL) {
523
+ return kStackWalkError;
524
+ }
525
+
526
+ for (int i = 0; i < frames_count; i++) {
527
+ frames[i].address = addresses[i];
528
+ // Format a text representation of the frame based on the information
529
+ // available.
530
+ SNPrintF(MutableCStrVector(frames[i].text, kStackWalkMaxTextLen),
531
+ "%s",
532
+ symbols[i]);
533
+ // Make sure line termination is in place.
534
+ frames[i].text[kStackWalkMaxTextLen - 1] = '\0';
535
+ }
536
+
537
+ free(symbols);
538
+
539
+ return frames_count;
540
+ #else // ndef __GLIBC__
541
+ return 0;
542
+ #endif // ndef __GLIBC__
543
+ }
544
+
545
+
546
+ // Constants used for mmap.
547
+ static const int kMmapFd = -1;
548
+ static const int kMmapFdOffset = 0;
549
+
550
+
551
+ VirtualMemory::VirtualMemory(size_t size) {
552
+ address_ = mmap(NULL, size, PROT_NONE,
553
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE,
554
+ kMmapFd, kMmapFdOffset);
555
+ size_ = size;
556
+ }
557
+
558
+
559
+ VirtualMemory::~VirtualMemory() {
560
+ if (IsReserved()) {
561
+ if (0 == munmap(address(), size())) address_ = MAP_FAILED;
562
+ }
563
+ }
564
+
565
+
566
+ bool VirtualMemory::IsReserved() {
567
+ return address_ != MAP_FAILED;
568
+ }
569
+
570
+
571
+ bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) {
572
+ int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
573
+ if (MAP_FAILED == mmap(address, size, prot,
574
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
575
+ kMmapFd, kMmapFdOffset)) {
576
+ return false;
577
+ }
578
+
579
+ UpdateAllocatedSpaceLimits(address, size);
580
+ return true;
581
+ }
582
+
583
+
584
+ bool VirtualMemory::Uncommit(void* address, size_t size) {
585
+ return mmap(address, size, PROT_NONE,
586
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_FIXED,
587
+ kMmapFd, kMmapFdOffset) != MAP_FAILED;
588
+ }
589
+
590
+
591
+ class ThreadHandle::PlatformData : public Malloced {
592
+ public:
593
+ explicit PlatformData(ThreadHandle::Kind kind) {
594
+ Initialize(kind);
595
+ }
596
+
597
+ void Initialize(ThreadHandle::Kind kind) {
598
+ switch (kind) {
599
+ case ThreadHandle::SELF: thread_ = pthread_self(); break;
600
+ case ThreadHandle::INVALID: thread_ = kNoThread; break;
601
+ }
602
+ }
603
+
604
+ pthread_t thread_; // Thread handle for pthread.
605
+ };
606
+
607
+
608
+ ThreadHandle::ThreadHandle(Kind kind) {
609
+ data_ = new PlatformData(kind);
610
+ }
611
+
612
+
613
+ void ThreadHandle::Initialize(ThreadHandle::Kind kind) {
614
+ data_->Initialize(kind);
615
+ }
616
+
617
+
618
+ ThreadHandle::~ThreadHandle() {
619
+ delete data_;
620
+ }
621
+
622
+
623
+ bool ThreadHandle::IsSelf() const {
624
+ return pthread_equal(data_->thread_, pthread_self());
625
+ }
626
+
627
+
628
+ bool ThreadHandle::IsValid() const {
629
+ return data_->thread_ != kNoThread;
630
+ }
631
+
632
+
633
+ Thread::Thread(Isolate* isolate, const Options& options)
634
+ : ThreadHandle(ThreadHandle::INVALID),
635
+ isolate_(isolate),
636
+ stack_size_(options.stack_size) {
637
+ set_name(options.name);
638
+ }
639
+
640
+
641
+ Thread::Thread(Isolate* isolate, const char* name)
642
+ : ThreadHandle(ThreadHandle::INVALID),
643
+ isolate_(isolate),
644
+ stack_size_(0) {
645
+ set_name(name);
646
+ }
647
+
648
+
649
+ Thread::~Thread() {
650
+ }
651
+
652
+
653
+ static void* ThreadEntry(void* arg) {
654
+ Thread* thread = reinterpret_cast<Thread*>(arg);
655
+ // This is also initialized by the first argument to pthread_create() but we
656
+ // don't know which thread will run first (the original thread or the new
657
+ // one) so we initialize it here too.
658
+ prctl(PR_SET_NAME,
659
+ reinterpret_cast<unsigned long>(thread->name()), // NOLINT
660
+ 0, 0, 0);
661
+ thread->thread_handle_data()->thread_ = pthread_self();
662
+ ASSERT(thread->IsValid());
663
+ Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
664
+ thread->Run();
665
+ return NULL;
666
+ }
667
+
668
+
669
+ void Thread::set_name(const char* name) {
670
+ strncpy(name_, name, sizeof(name_));
671
+ name_[sizeof(name_) - 1] = '\0';
672
+ }
673
+
674
+
675
+ void Thread::Start() {
676
+ pthread_attr_t* attr_ptr = NULL;
677
+ pthread_attr_t attr;
678
+ if (stack_size_ > 0) {
679
+ pthread_attr_init(&attr);
680
+ pthread_attr_setstacksize(&attr, static_cast<size_t>(stack_size_));
681
+ attr_ptr = &attr;
682
+ }
683
+ pthread_create(&thread_handle_data()->thread_, attr_ptr, ThreadEntry, this);
684
+ ASSERT(IsValid());
685
+ }
686
+
687
+
688
+ void Thread::Join() {
689
+ pthread_join(thread_handle_data()->thread_, NULL);
690
+ }
691
+
692
+
693
+ Thread::LocalStorageKey Thread::CreateThreadLocalKey() {
694
+ pthread_key_t key;
695
+ int result = pthread_key_create(&key, NULL);
696
+ USE(result);
697
+ ASSERT(result == 0);
698
+ return static_cast<LocalStorageKey>(key);
699
+ }
700
+
701
+
702
+ void Thread::DeleteThreadLocalKey(LocalStorageKey key) {
703
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
704
+ int result = pthread_key_delete(pthread_key);
705
+ USE(result);
706
+ ASSERT(result == 0);
707
+ }
708
+
709
+
710
+ void* Thread::GetThreadLocal(LocalStorageKey key) {
711
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
712
+ return pthread_getspecific(pthread_key);
713
+ }
714
+
715
+
716
+ void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
717
+ pthread_key_t pthread_key = static_cast<pthread_key_t>(key);
718
+ pthread_setspecific(pthread_key, value);
719
+ }
720
+
721
+
722
+ void Thread::YieldCPU() {
723
+ sched_yield();
724
+ }
725
+
726
+
727
+ class LinuxMutex : public Mutex {
728
+ public:
729
+
730
+ LinuxMutex() {
731
+ pthread_mutexattr_t attrs;
732
+ int result = pthread_mutexattr_init(&attrs);
733
+ ASSERT(result == 0);
734
+ result = pthread_mutexattr_settype(&attrs, PTHREAD_MUTEX_RECURSIVE);
735
+ ASSERT(result == 0);
736
+ result = pthread_mutex_init(&mutex_, &attrs);
737
+ ASSERT(result == 0);
738
+ }
739
+
740
+ virtual ~LinuxMutex() { pthread_mutex_destroy(&mutex_); }
741
+
742
+ virtual int Lock() {
743
+ int result = pthread_mutex_lock(&mutex_);
744
+ return result;
745
+ }
746
+
747
+ virtual int Unlock() {
748
+ int result = pthread_mutex_unlock(&mutex_);
749
+ return result;
750
+ }
751
+
752
+ virtual bool TryLock() {
753
+ int result = pthread_mutex_trylock(&mutex_);
754
+ // Return false if the lock is busy and locking failed.
755
+ if (result == EBUSY) {
756
+ return false;
757
+ }
758
+ ASSERT(result == 0); // Verify no other errors.
759
+ return true;
760
+ }
761
+
762
+ private:
763
+ pthread_mutex_t mutex_; // Pthread mutex for POSIX platforms.
764
+ };
765
+
766
+
767
+ Mutex* OS::CreateMutex() {
768
+ return new LinuxMutex();
769
+ }
770
+
771
+
772
+ class LinuxSemaphore : public Semaphore {
773
+ public:
774
+ explicit LinuxSemaphore(int count) { sem_init(&sem_, 0, count); }
775
+ virtual ~LinuxSemaphore() { sem_destroy(&sem_); }
776
+
777
+ virtual void Wait();
778
+ virtual bool Wait(int timeout);
779
+ virtual void Signal() { sem_post(&sem_); }
780
+ private:
781
+ sem_t sem_;
782
+ };
783
+
784
+
785
+ void LinuxSemaphore::Wait() {
786
+ while (true) {
787
+ int result = sem_wait(&sem_);
788
+ if (result == 0) return; // Successfully got semaphore.
789
+ CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
790
+ }
791
+ }
792
+
793
+
794
+ #ifndef TIMEVAL_TO_TIMESPEC
795
+ #define TIMEVAL_TO_TIMESPEC(tv, ts) do { \
796
+ (ts)->tv_sec = (tv)->tv_sec; \
797
+ (ts)->tv_nsec = (tv)->tv_usec * 1000; \
798
+ } while (false)
799
+ #endif
800
+
801
+
802
+ bool LinuxSemaphore::Wait(int timeout) {
803
+ const long kOneSecondMicros = 1000000; // NOLINT
804
+
805
+ // Split timeout into second and nanosecond parts.
806
+ struct timeval delta;
807
+ delta.tv_usec = timeout % kOneSecondMicros;
808
+ delta.tv_sec = timeout / kOneSecondMicros;
809
+
810
+ struct timeval current_time;
811
+ // Get the current time.
812
+ if (gettimeofday(&current_time, NULL) == -1) {
813
+ return false;
814
+ }
815
+
816
+ // Calculate time for end of timeout.
817
+ struct timeval end_time;
818
+ timeradd(&current_time, &delta, &end_time);
819
+
820
+ struct timespec ts;
821
+ TIMEVAL_TO_TIMESPEC(&end_time, &ts);
822
+ // Wait for semaphore signalled or timeout.
823
+ while (true) {
824
+ int result = sem_timedwait(&sem_, &ts);
825
+ if (result == 0) return true; // Successfully got semaphore.
826
+ if (result > 0) {
827
+ // For glibc prior to 2.3.4 sem_timedwait returns the error instead of -1.
828
+ errno = result;
829
+ result = -1;
830
+ }
831
+ if (result == -1 && errno == ETIMEDOUT) return false; // Timeout.
832
+ CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
833
+ }
834
+ }
835
+
836
+
837
+ Semaphore* OS::CreateSemaphore(int count) {
838
+ return new LinuxSemaphore(count);
839
+ }
840
+
841
+
842
+ #ifdef ENABLE_LOGGING_AND_PROFILING
843
+
844
+ #if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
845
+ // Android runs a fairly new Linux kernel, so signal info is there,
846
+ // but the C library doesn't have the structs defined.
847
+
848
+ struct sigcontext {
849
+ uint32_t trap_no;
850
+ uint32_t error_code;
851
+ uint32_t oldmask;
852
+ uint32_t gregs[16];
853
+ uint32_t arm_cpsr;
854
+ uint32_t fault_address;
855
+ };
856
+ typedef uint32_t __sigset_t;
857
+ typedef struct sigcontext mcontext_t;
858
+ typedef struct ucontext {
859
+ uint32_t uc_flags;
860
+ struct ucontext* uc_link;
861
+ stack_t uc_stack;
862
+ mcontext_t uc_mcontext;
863
+ __sigset_t uc_sigmask;
864
+ } ucontext_t;
865
+ enum ArmRegisters {R15 = 15, R13 = 13, R11 = 11};
866
+
867
+ #endif
868
+
869
+
870
+ static int GetThreadID() {
871
+ // Glibc doesn't provide a wrapper for gettid(2).
872
+ #if defined(ANDROID)
873
+ return syscall(__NR_gettid);
874
+ #else
875
+ return syscall(SYS_gettid);
876
+ #endif
877
+ }
878
+
879
+
880
+ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
881
+ #ifndef V8_HOST_ARCH_MIPS
882
+ USE(info);
883
+ if (signal != SIGPROF) return;
884
+ Isolate* isolate = Isolate::UncheckedCurrent();
885
+ if (isolate == NULL || !isolate->IsInitialized() || !isolate->IsInUse()) {
886
+ // We require a fully initialized and entered isolate.
887
+ return;
888
+ }
889
+ Sampler* sampler = isolate->logger()->sampler();
890
+ if (sampler == NULL || !sampler->IsActive()) return;
891
+
892
+ TickSample sample_obj;
893
+ TickSample* sample = CpuProfiler::TickSampleEvent(isolate);
894
+ if (sample == NULL) sample = &sample_obj;
895
+
896
+ // Extracting the sample from the context is extremely machine dependent.
897
+ ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
898
+ mcontext_t& mcontext = ucontext->uc_mcontext;
899
+ sample->state = isolate->current_vm_state();
900
+ #if V8_HOST_ARCH_IA32
901
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
902
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
903
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
904
+ #elif V8_HOST_ARCH_X64
905
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
906
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
907
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
908
+ #elif V8_HOST_ARCH_ARM
909
+ // An undefined macro evaluates to 0, so this applies to Android's Bionic also.
910
+ #if (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
911
+ sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
912
+ sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
913
+ sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
914
+ #else
915
+ sample->pc = reinterpret_cast<Address>(mcontext.arm_pc);
916
+ sample->sp = reinterpret_cast<Address>(mcontext.arm_sp);
917
+ sample->fp = reinterpret_cast<Address>(mcontext.arm_fp);
918
+ #endif
919
+ #elif V8_HOST_ARCH_MIPS
920
+ sample.pc = reinterpret_cast<Address>(mcontext.pc);
921
+ sample.sp = reinterpret_cast<Address>(mcontext.gregs[29]);
922
+ sample.fp = reinterpret_cast<Address>(mcontext.gregs[30]);
923
+ #endif
924
+ sampler->SampleStack(sample);
925
+ sampler->Tick(sample);
926
+ #endif
927
+ }
928
+
929
+
930
+ class Sampler::PlatformData : public Malloced {
931
+ public:
932
+ PlatformData() : vm_tid_(GetThreadID()) {}
933
+
934
+ int vm_tid() const { return vm_tid_; }
935
+
936
+ private:
937
+ const int vm_tid_;
938
+ };
939
+
940
+
941
+ class SignalSender : public Thread {
942
+ public:
943
+ enum SleepInterval {
944
+ HALF_INTERVAL,
945
+ FULL_INTERVAL
946
+ };
947
+
948
+ explicit SignalSender(int interval)
949
+ : Thread(NULL, "SignalSender"),
950
+ vm_tgid_(getpid()),
951
+ interval_(interval) {}
952
+
953
+ static void AddActiveSampler(Sampler* sampler) {
954
+ ScopedLock lock(mutex_);
955
+ SamplerRegistry::AddActiveSampler(sampler);
956
+ if (instance_ == NULL) {
957
+ // Install a signal handler.
958
+ struct sigaction sa;
959
+ sa.sa_sigaction = ProfilerSignalHandler;
960
+ sigemptyset(&sa.sa_mask);
961
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
962
+ signal_handler_installed_ =
963
+ (sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
964
+
965
+ // Start a thread that sends SIGPROF signal to VM threads.
966
+ instance_ = new SignalSender(sampler->interval());
967
+ instance_->Start();
968
+ } else {
969
+ ASSERT(instance_->interval_ == sampler->interval());
970
+ }
971
+ }
972
+
973
+ static void RemoveActiveSampler(Sampler* sampler) {
974
+ ScopedLock lock(mutex_);
975
+ SamplerRegistry::RemoveActiveSampler(sampler);
976
+ if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
977
+ RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
978
+ instance_->Join();
979
+ delete instance_;
980
+ instance_ = NULL;
981
+
982
+ // Restore the old signal handler.
983
+ if (signal_handler_installed_) {
984
+ sigaction(SIGPROF, &old_signal_handler_, 0);
985
+ signal_handler_installed_ = false;
986
+ }
987
+ }
988
+ }
989
+
990
+ // Implement Thread::Run().
991
+ virtual void Run() {
992
+ SamplerRegistry::State state;
993
+ while ((state = SamplerRegistry::GetState()) !=
994
+ SamplerRegistry::HAS_NO_SAMPLERS) {
995
+ bool cpu_profiling_enabled =
996
+ (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
997
+ bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
998
+ // When CPU profiling is enabled both JavaScript and C++ code is
999
+ // profiled. We must not suspend.
1000
+ if (!cpu_profiling_enabled) {
1001
+ if (rate_limiter_.SuspendIfNecessary()) continue;
1002
+ }
1003
+ if (cpu_profiling_enabled && runtime_profiler_enabled) {
1004
+ if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
1005
+ return;
1006
+ }
1007
+ Sleep(HALF_INTERVAL);
1008
+ if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
1009
+ return;
1010
+ }
1011
+ Sleep(HALF_INTERVAL);
1012
+ } else {
1013
+ if (cpu_profiling_enabled) {
1014
+ if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
1015
+ this)) {
1016
+ return;
1017
+ }
1018
+ }
1019
+ if (runtime_profiler_enabled) {
1020
+ if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
1021
+ NULL)) {
1022
+ return;
1023
+ }
1024
+ }
1025
+ Sleep(FULL_INTERVAL);
1026
+ }
1027
+ }
1028
+ }
1029
+
1030
+ static void DoCpuProfile(Sampler* sampler, void* raw_sender) {
1031
+ if (!sampler->IsProfiling()) return;
1032
+ SignalSender* sender = reinterpret_cast<SignalSender*>(raw_sender);
1033
+ sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
1034
+ }
1035
+
1036
+ static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
1037
+ if (!sampler->isolate()->IsInitialized()) return;
1038
+ sampler->isolate()->runtime_profiler()->NotifyTick();
1039
+ }
1040
+
1041
+ void SendProfilingSignal(int tid) {
1042
+ if (!signal_handler_installed_) return;
1043
+ // Glibc doesn't provide a wrapper for tgkill(2).
1044
+ #if defined(ANDROID)
1045
+ syscall(__NR_tgkill, vm_tgid_, tid, SIGPROF);
1046
+ #else
1047
+ syscall(SYS_tgkill, vm_tgid_, tid, SIGPROF);
1048
+ #endif
1049
+ }
1050
+
1051
+ void Sleep(SleepInterval full_or_half) {
1052
+ // Convert ms to us and subtract 100 us to compensate delays
1053
+ // occuring during signal delivery.
1054
+ useconds_t interval = interval_ * 1000 - 100;
1055
+ if (full_or_half == HALF_INTERVAL) interval /= 2;
1056
+ int result = usleep(interval);
1057
+ #ifdef DEBUG
1058
+ if (result != 0 && errno != EINTR) {
1059
+ fprintf(stderr,
1060
+ "SignalSender usleep error; interval = %u, errno = %d\n",
1061
+ interval,
1062
+ errno);
1063
+ ASSERT(result == 0 || errno == EINTR);
1064
+ }
1065
+ #endif
1066
+ USE(result);
1067
+ }
1068
+
1069
+ const int vm_tgid_;
1070
+ const int interval_;
1071
+ RuntimeProfilerRateLimiter rate_limiter_;
1072
+
1073
+ // Protects the process wide state below.
1074
+ static Mutex* mutex_;
1075
+ static SignalSender* instance_;
1076
+ static bool signal_handler_installed_;
1077
+ static struct sigaction old_signal_handler_;
1078
+
1079
+ DISALLOW_COPY_AND_ASSIGN(SignalSender);
1080
+ };
1081
+
1082
+
1083
+ Mutex* SignalSender::mutex_ = OS::CreateMutex();
1084
+ SignalSender* SignalSender::instance_ = NULL;
1085
+ struct sigaction SignalSender::old_signal_handler_;
1086
+ bool SignalSender::signal_handler_installed_ = false;
1087
+
1088
+
1089
+ Sampler::Sampler(Isolate* isolate, int interval)
1090
+ : isolate_(isolate),
1091
+ interval_(interval),
1092
+ profiling_(false),
1093
+ active_(false),
1094
+ samples_taken_(0) {
1095
+ data_ = new PlatformData;
1096
+ }
1097
+
1098
+
1099
+ Sampler::~Sampler() {
1100
+ ASSERT(!IsActive());
1101
+ delete data_;
1102
+ }
1103
+
1104
+
1105
+ void Sampler::Start() {
1106
+ ASSERT(!IsActive());
1107
+ SetActive(true);
1108
+ SignalSender::AddActiveSampler(this);
1109
+ }
1110
+
1111
+
1112
+ void Sampler::Stop() {
1113
+ ASSERT(IsActive());
1114
+ SignalSender::RemoveActiveSampler(this);
1115
+ SetActive(false);
1116
+ }
1117
+
1118
+ #endif // ENABLE_LOGGING_AND_PROFILING
1119
+
1120
+ } } // namespace v8::internal