mustang 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. data/.rspec +1 -0
  2. data/Isolate +9 -0
  3. data/README.md +6 -12
  4. data/Rakefile +30 -4
  5. data/TODO.md +9 -0
  6. data/ext/v8/extconf.rb +56 -0
  7. data/ext/v8/v8.cpp +37 -0
  8. data/ext/v8/v8_array.cpp +161 -0
  9. data/ext/v8/v8_array.h +17 -0
  10. data/ext/v8/v8_base.cpp +147 -0
  11. data/ext/v8/v8_base.h +23 -0
  12. data/ext/v8/v8_cast.cpp +151 -0
  13. data/ext/v8/v8_cast.h +64 -0
  14. data/ext/v8/v8_context.cpp +174 -0
  15. data/ext/v8/v8_context.h +12 -0
  16. data/ext/v8/v8_date.cpp +61 -0
  17. data/ext/v8/v8_date.h +16 -0
  18. data/ext/v8/v8_errors.cpp +147 -0
  19. data/ext/v8/v8_errors.h +19 -0
  20. data/ext/v8/v8_external.cpp +66 -0
  21. data/ext/v8/v8_external.h +16 -0
  22. data/ext/v8/v8_function.cpp +182 -0
  23. data/ext/v8/v8_function.h +14 -0
  24. data/ext/v8/v8_integer.cpp +70 -0
  25. data/ext/v8/v8_integer.h +16 -0
  26. data/ext/v8/v8_macros.h +30 -0
  27. data/ext/v8/v8_main.cpp +53 -0
  28. data/ext/v8/v8_main.h +13 -0
  29. data/ext/v8/v8_number.cpp +62 -0
  30. data/ext/v8/v8_number.h +16 -0
  31. data/ext/v8/v8_object.cpp +172 -0
  32. data/ext/v8/v8_object.h +17 -0
  33. data/ext/v8/v8_ref.cpp +72 -0
  34. data/ext/v8/v8_ref.h +43 -0
  35. data/ext/v8/v8_regexp.cpp +148 -0
  36. data/ext/v8/v8_regexp.h +16 -0
  37. data/ext/v8/v8_string.cpp +78 -0
  38. data/ext/v8/v8_string.h +16 -0
  39. data/ext/v8/v8_value.cpp +370 -0
  40. data/ext/v8/v8_value.h +19 -0
  41. data/gemspec.yml +2 -1
  42. data/lib/core_ext/class.rb +14 -0
  43. data/lib/core_ext/object.rb +12 -0
  44. data/lib/core_ext/symbol.rb +23 -0
  45. data/lib/mustang.rb +44 -0
  46. data/lib/mustang/context.rb +69 -0
  47. data/lib/mustang/errors.rb +36 -0
  48. data/lib/support/delegated.rb +25 -0
  49. data/lib/v8/array.rb +21 -0
  50. data/lib/v8/context.rb +13 -0
  51. data/lib/v8/date.rb +20 -0
  52. data/lib/v8/error.rb +15 -0
  53. data/lib/v8/external.rb +16 -0
  54. data/lib/v8/function.rb +11 -0
  55. data/lib/v8/integer.rb +16 -0
  56. data/lib/v8/number.rb +16 -0
  57. data/lib/v8/object.rb +66 -0
  58. data/lib/v8/regexp.rb +23 -0
  59. data/lib/v8/string.rb +27 -0
  60. data/mustang.gemspec +3 -0
  61. data/spec/core_ext/class_spec.rb +19 -0
  62. data/spec/core_ext/object_spec.rb +19 -0
  63. data/spec/core_ext/symbol_spec.rb +27 -0
  64. data/spec/fixtures/test1.js +2 -0
  65. data/spec/fixtures/test2.js +2 -0
  66. data/spec/spec_helper.rb +20 -0
  67. data/spec/v8/array_spec.rb +88 -0
  68. data/spec/v8/cast_spec.rb +151 -0
  69. data/spec/v8/context_spec.rb +78 -0
  70. data/spec/v8/data_spec.rb +39 -0
  71. data/spec/v8/date_spec.rb +45 -0
  72. data/spec/v8/empty_spec.rb +27 -0
  73. data/spec/v8/errors_spec.rb +142 -0
  74. data/spec/v8/external_spec.rb +44 -0
  75. data/spec/v8/function_spec.rb +170 -0
  76. data/spec/v8/integer_spec.rb +41 -0
  77. data/spec/v8/main_spec.rb +18 -0
  78. data/spec/v8/null_spec.rb +27 -0
  79. data/spec/v8/number_spec.rb +40 -0
  80. data/spec/v8/object_spec.rb +79 -0
  81. data/spec/v8/primitive_spec.rb +9 -0
  82. data/spec/v8/regexp_spec.rb +65 -0
  83. data/spec/v8/string_spec.rb +48 -0
  84. data/spec/v8/undefined_spec.rb +27 -0
  85. data/spec/v8/value_spec.rb +215 -0
  86. data/vendor/v8/.gitignore +2 -0
  87. data/vendor/v8/AUTHORS +3 -1
  88. data/vendor/v8/ChangeLog +117 -0
  89. data/vendor/v8/SConstruct +334 -53
  90. data/vendor/v8/include/v8-debug.h +21 -11
  91. data/vendor/v8/include/v8-preparser.h +1 -1
  92. data/vendor/v8/include/v8-profiler.h +122 -43
  93. data/vendor/v8/include/v8-testing.h +5 -0
  94. data/vendor/v8/include/v8.h +171 -17
  95. data/vendor/v8/preparser/SConscript +38 -0
  96. data/vendor/v8/preparser/preparser-process.cc +77 -114
  97. data/vendor/v8/samples/shell.cc +232 -46
  98. data/vendor/v8/src/SConscript +29 -5
  99. data/vendor/v8/src/accessors.cc +70 -211
  100. data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
  101. data/vendor/v8/src/allocation.cc +0 -82
  102. data/vendor/v8/src/allocation.h +9 -42
  103. data/vendor/v8/src/api.cc +1645 -1156
  104. data/vendor/v8/src/api.h +76 -12
  105. data/vendor/v8/src/apiutils.h +0 -7
  106. data/vendor/v8/src/arguments.h +15 -4
  107. data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
  108. data/vendor/v8/src/arm/assembler-arm.cc +62 -23
  109. data/vendor/v8/src/arm/assembler-arm.h +76 -11
  110. data/vendor/v8/src/arm/builtins-arm.cc +39 -33
  111. data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
  112. data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
  113. data/vendor/v8/src/arm/codegen-arm.cc +159 -106
  114. data/vendor/v8/src/arm/codegen-arm.h +6 -6
  115. data/vendor/v8/src/arm/constants-arm.h +16 -1
  116. data/vendor/v8/src/arm/cpu-arm.cc +7 -5
  117. data/vendor/v8/src/arm/debug-arm.cc +6 -4
  118. data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
  119. data/vendor/v8/src/arm/disasm-arm.cc +47 -15
  120. data/vendor/v8/src/arm/frames-arm.h +1 -1
  121. data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
  122. data/vendor/v8/src/arm/ic-arm.cc +90 -85
  123. data/vendor/v8/src/arm/lithium-arm.cc +140 -69
  124. data/vendor/v8/src/arm/lithium-arm.h +161 -46
  125. data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
  126. data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
  127. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
  128. data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
  129. data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
  130. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
  131. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
  132. data/vendor/v8/src/arm/simulator-arm.cc +184 -101
  133. data/vendor/v8/src/arm/simulator-arm.h +26 -21
  134. data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
  135. data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
  136. data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
  137. data/vendor/v8/src/array.js +35 -18
  138. data/vendor/v8/src/assembler.cc +186 -92
  139. data/vendor/v8/src/assembler.h +106 -69
  140. data/vendor/v8/src/ast-inl.h +5 -0
  141. data/vendor/v8/src/ast.cc +46 -35
  142. data/vendor/v8/src/ast.h +107 -50
  143. data/vendor/v8/src/atomicops.h +2 -0
  144. data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
  145. data/vendor/v8/src/bootstrapper.cc +649 -399
  146. data/vendor/v8/src/bootstrapper.h +94 -27
  147. data/vendor/v8/src/builtins.cc +359 -227
  148. data/vendor/v8/src/builtins.h +157 -123
  149. data/vendor/v8/src/checks.cc +2 -2
  150. data/vendor/v8/src/checks.h +4 -0
  151. data/vendor/v8/src/code-stubs.cc +27 -17
  152. data/vendor/v8/src/code-stubs.h +38 -17
  153. data/vendor/v8/src/codegen-inl.h +5 -1
  154. data/vendor/v8/src/codegen.cc +27 -17
  155. data/vendor/v8/src/codegen.h +9 -9
  156. data/vendor/v8/src/compilation-cache.cc +92 -206
  157. data/vendor/v8/src/compilation-cache.h +205 -30
  158. data/vendor/v8/src/compiler.cc +107 -120
  159. data/vendor/v8/src/compiler.h +17 -2
  160. data/vendor/v8/src/contexts.cc +22 -15
  161. data/vendor/v8/src/contexts.h +14 -8
  162. data/vendor/v8/src/conversions.cc +86 -30
  163. data/vendor/v8/src/counters.cc +19 -4
  164. data/vendor/v8/src/counters.h +28 -16
  165. data/vendor/v8/src/cpu-profiler-inl.h +4 -3
  166. data/vendor/v8/src/cpu-profiler.cc +123 -72
  167. data/vendor/v8/src/cpu-profiler.h +33 -19
  168. data/vendor/v8/src/cpu.h +2 -0
  169. data/vendor/v8/src/d8-debug.cc +3 -3
  170. data/vendor/v8/src/d8-debug.h +7 -6
  171. data/vendor/v8/src/d8-posix.cc +2 -0
  172. data/vendor/v8/src/d8.cc +22 -12
  173. data/vendor/v8/src/d8.gyp +3 -0
  174. data/vendor/v8/src/d8.js +618 -0
  175. data/vendor/v8/src/data-flow.h +3 -3
  176. data/vendor/v8/src/dateparser.h +4 -2
  177. data/vendor/v8/src/debug-agent.cc +10 -9
  178. data/vendor/v8/src/debug-agent.h +9 -11
  179. data/vendor/v8/src/debug-debugger.js +121 -0
  180. data/vendor/v8/src/debug.cc +331 -227
  181. data/vendor/v8/src/debug.h +248 -219
  182. data/vendor/v8/src/deoptimizer.cc +173 -62
  183. data/vendor/v8/src/deoptimizer.h +119 -19
  184. data/vendor/v8/src/disasm.h +3 -0
  185. data/vendor/v8/src/disassembler.cc +10 -9
  186. data/vendor/v8/src/execution.cc +185 -129
  187. data/vendor/v8/src/execution.h +47 -78
  188. data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
  189. data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
  190. data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
  191. data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
  192. data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
  193. data/vendor/v8/src/extensions/gc-extension.cc +1 -1
  194. data/vendor/v8/src/factory.cc +261 -154
  195. data/vendor/v8/src/factory.h +162 -158
  196. data/vendor/v8/src/flag-definitions.h +17 -11
  197. data/vendor/v8/src/frame-element.cc +0 -5
  198. data/vendor/v8/src/frame-element.h +9 -13
  199. data/vendor/v8/src/frames-inl.h +7 -0
  200. data/vendor/v8/src/frames.cc +56 -46
  201. data/vendor/v8/src/frames.h +36 -25
  202. data/vendor/v8/src/full-codegen.cc +15 -24
  203. data/vendor/v8/src/full-codegen.h +13 -41
  204. data/vendor/v8/src/func-name-inferrer.cc +7 -6
  205. data/vendor/v8/src/func-name-inferrer.h +1 -1
  206. data/vendor/v8/src/gdb-jit.cc +1 -0
  207. data/vendor/v8/src/global-handles.cc +118 -56
  208. data/vendor/v8/src/global-handles.h +98 -40
  209. data/vendor/v8/src/globals.h +2 -2
  210. data/vendor/v8/src/handles-inl.h +106 -9
  211. data/vendor/v8/src/handles.cc +220 -157
  212. data/vendor/v8/src/handles.h +38 -59
  213. data/vendor/v8/src/hashmap.h +3 -3
  214. data/vendor/v8/src/heap-inl.h +141 -25
  215. data/vendor/v8/src/heap-profiler.cc +117 -63
  216. data/vendor/v8/src/heap-profiler.h +38 -21
  217. data/vendor/v8/src/heap.cc +805 -564
  218. data/vendor/v8/src/heap.h +640 -594
  219. data/vendor/v8/src/hydrogen-instructions.cc +216 -73
  220. data/vendor/v8/src/hydrogen-instructions.h +259 -124
  221. data/vendor/v8/src/hydrogen.cc +996 -1171
  222. data/vendor/v8/src/hydrogen.h +163 -144
  223. data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
  224. data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
  225. data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
  226. data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
  227. data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
  228. data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
  229. data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
  230. data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
  231. data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
  232. data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
  233. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
  234. data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
  235. data/vendor/v8/src/ia32/frames-ia32.h +1 -1
  236. data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
  237. data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
  238. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
  239. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
  240. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
  241. data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
  242. data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
  243. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
  244. data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
  245. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
  246. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
  247. data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
  248. data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
  249. data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
  250. data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
  251. data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
  252. data/vendor/v8/src/ic-inl.h +12 -2
  253. data/vendor/v8/src/ic.cc +304 -221
  254. data/vendor/v8/src/ic.h +115 -58
  255. data/vendor/v8/src/interpreter-irregexp.cc +25 -21
  256. data/vendor/v8/src/interpreter-irregexp.h +2 -1
  257. data/vendor/v8/src/isolate.cc +883 -0
  258. data/vendor/v8/src/isolate.h +1304 -0
  259. data/vendor/v8/src/json.js +10 -10
  260. data/vendor/v8/src/jsregexp.cc +111 -80
  261. data/vendor/v8/src/jsregexp.h +6 -7
  262. data/vendor/v8/src/jump-target-heavy.cc +5 -8
  263. data/vendor/v8/src/jump-target-heavy.h +0 -6
  264. data/vendor/v8/src/jump-target-inl.h +1 -1
  265. data/vendor/v8/src/jump-target-light.cc +3 -3
  266. data/vendor/v8/src/lithium-allocator-inl.h +2 -0
  267. data/vendor/v8/src/lithium-allocator.cc +42 -30
  268. data/vendor/v8/src/lithium-allocator.h +8 -22
  269. data/vendor/v8/src/lithium.cc +1 -0
  270. data/vendor/v8/src/liveedit.cc +141 -99
  271. data/vendor/v8/src/liveedit.h +7 -2
  272. data/vendor/v8/src/liveobjectlist-inl.h +90 -0
  273. data/vendor/v8/src/liveobjectlist.cc +2537 -1
  274. data/vendor/v8/src/liveobjectlist.h +245 -35
  275. data/vendor/v8/src/log-utils.cc +122 -35
  276. data/vendor/v8/src/log-utils.h +33 -36
  277. data/vendor/v8/src/log.cc +299 -241
  278. data/vendor/v8/src/log.h +177 -110
  279. data/vendor/v8/src/mark-compact.cc +612 -470
  280. data/vendor/v8/src/mark-compact.h +153 -80
  281. data/vendor/v8/src/messages.cc +16 -14
  282. data/vendor/v8/src/messages.js +30 -7
  283. data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
  284. data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
  285. data/vendor/v8/src/mips/assembler-mips.h +552 -153
  286. data/vendor/v8/src/mips/builtins-mips.cc +43 -100
  287. data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
  288. data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
  289. data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
  290. data/vendor/v8/src/mips/codegen-mips.cc +672 -896
  291. data/vendor/v8/src/mips/codegen-mips.h +271 -69
  292. data/vendor/v8/src/mips/constants-mips.cc +44 -20
  293. data/vendor/v8/src/mips/constants-mips.h +238 -40
  294. data/vendor/v8/src/mips/cpu-mips.cc +20 -3
  295. data/vendor/v8/src/mips/debug-mips.cc +35 -7
  296. data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
  297. data/vendor/v8/src/mips/disasm-mips.cc +329 -93
  298. data/vendor/v8/src/mips/frames-mips.cc +2 -50
  299. data/vendor/v8/src/mips/frames-mips.h +24 -9
  300. data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
  301. data/vendor/v8/src/mips/ic-mips.cc +81 -45
  302. data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
  303. data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
  304. data/vendor/v8/src/mips/lithium-mips.h +304 -0
  305. data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
  306. data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
  307. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  308. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  309. data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
  310. data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
  311. data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
  312. data/vendor/v8/src/mips/simulator-mips.h +119 -36
  313. data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
  314. data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
  315. data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
  316. data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
  317. data/vendor/v8/src/mirror-debugger.js +9 -8
  318. data/vendor/v8/src/mksnapshot.cc +2 -2
  319. data/vendor/v8/src/objects-debug.cc +16 -16
  320. data/vendor/v8/src/objects-inl.h +421 -195
  321. data/vendor/v8/src/objects-printer.cc +7 -7
  322. data/vendor/v8/src/objects-visiting.cc +1 -1
  323. data/vendor/v8/src/objects-visiting.h +33 -12
  324. data/vendor/v8/src/objects.cc +935 -658
  325. data/vendor/v8/src/objects.h +234 -139
  326. data/vendor/v8/src/parser.cc +484 -439
  327. data/vendor/v8/src/parser.h +35 -14
  328. data/vendor/v8/src/platform-cygwin.cc +173 -107
  329. data/vendor/v8/src/platform-freebsd.cc +224 -72
  330. data/vendor/v8/src/platform-linux.cc +234 -95
  331. data/vendor/v8/src/platform-macos.cc +215 -82
  332. data/vendor/v8/src/platform-nullos.cc +9 -3
  333. data/vendor/v8/src/platform-openbsd.cc +22 -7
  334. data/vendor/v8/src/platform-posix.cc +30 -5
  335. data/vendor/v8/src/platform-solaris.cc +120 -38
  336. data/vendor/v8/src/platform-tls-mac.h +62 -0
  337. data/vendor/v8/src/platform-tls-win32.h +62 -0
  338. data/vendor/v8/src/platform-tls.h +50 -0
  339. data/vendor/v8/src/platform-win32.cc +195 -97
  340. data/vendor/v8/src/platform.h +72 -15
  341. data/vendor/v8/src/preparse-data.cc +2 -0
  342. data/vendor/v8/src/preparser-api.cc +8 -2
  343. data/vendor/v8/src/preparser.cc +1 -1
  344. data/vendor/v8/src/prettyprinter.cc +43 -52
  345. data/vendor/v8/src/prettyprinter.h +1 -1
  346. data/vendor/v8/src/profile-generator-inl.h +0 -28
  347. data/vendor/v8/src/profile-generator.cc +942 -685
  348. data/vendor/v8/src/profile-generator.h +210 -176
  349. data/vendor/v8/src/property.cc +6 -0
  350. data/vendor/v8/src/property.h +14 -3
  351. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
  352. data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
  353. data/vendor/v8/src/regexp-macro-assembler.h +11 -6
  354. data/vendor/v8/src/regexp-stack.cc +18 -10
  355. data/vendor/v8/src/regexp-stack.h +45 -21
  356. data/vendor/v8/src/regexp.js +3 -3
  357. data/vendor/v8/src/register-allocator-inl.h +3 -3
  358. data/vendor/v8/src/register-allocator.cc +1 -7
  359. data/vendor/v8/src/register-allocator.h +5 -15
  360. data/vendor/v8/src/rewriter.cc +2 -1
  361. data/vendor/v8/src/runtime-profiler.cc +158 -128
  362. data/vendor/v8/src/runtime-profiler.h +131 -15
  363. data/vendor/v8/src/runtime.cc +2409 -1692
  364. data/vendor/v8/src/runtime.h +93 -17
  365. data/vendor/v8/src/safepoint-table.cc +3 -0
  366. data/vendor/v8/src/safepoint-table.h +9 -3
  367. data/vendor/v8/src/scanner-base.cc +21 -28
  368. data/vendor/v8/src/scanner-base.h +22 -11
  369. data/vendor/v8/src/scanner.cc +3 -5
  370. data/vendor/v8/src/scanner.h +4 -2
  371. data/vendor/v8/src/scopeinfo.cc +11 -16
  372. data/vendor/v8/src/scopeinfo.h +26 -15
  373. data/vendor/v8/src/scopes.cc +67 -37
  374. data/vendor/v8/src/scopes.h +26 -12
  375. data/vendor/v8/src/serialize.cc +193 -154
  376. data/vendor/v8/src/serialize.h +41 -36
  377. data/vendor/v8/src/small-pointer-list.h +163 -0
  378. data/vendor/v8/src/snapshot-common.cc +1 -1
  379. data/vendor/v8/src/snapshot.h +3 -1
  380. data/vendor/v8/src/spaces-inl.h +30 -25
  381. data/vendor/v8/src/spaces.cc +263 -370
  382. data/vendor/v8/src/spaces.h +178 -166
  383. data/vendor/v8/src/string-search.cc +4 -3
  384. data/vendor/v8/src/string-search.h +21 -20
  385. data/vendor/v8/src/string-stream.cc +32 -24
  386. data/vendor/v8/src/string.js +7 -7
  387. data/vendor/v8/src/stub-cache.cc +324 -248
  388. data/vendor/v8/src/stub-cache.h +181 -155
  389. data/vendor/v8/src/token.cc +3 -3
  390. data/vendor/v8/src/token.h +3 -3
  391. data/vendor/v8/src/top.cc +218 -390
  392. data/vendor/v8/src/type-info.cc +98 -32
  393. data/vendor/v8/src/type-info.h +10 -3
  394. data/vendor/v8/src/unicode.cc +1 -1
  395. data/vendor/v8/src/unicode.h +1 -1
  396. data/vendor/v8/src/utils.h +3 -0
  397. data/vendor/v8/src/v8-counters.cc +18 -11
  398. data/vendor/v8/src/v8-counters.h +34 -13
  399. data/vendor/v8/src/v8.cc +66 -121
  400. data/vendor/v8/src/v8.h +7 -4
  401. data/vendor/v8/src/v8globals.h +18 -12
  402. data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
  403. data/vendor/v8/src/v8natives.js +59 -18
  404. data/vendor/v8/src/v8threads.cc +127 -114
  405. data/vendor/v8/src/v8threads.h +42 -35
  406. data/vendor/v8/src/v8utils.h +2 -39
  407. data/vendor/v8/src/variables.h +1 -1
  408. data/vendor/v8/src/version.cc +26 -5
  409. data/vendor/v8/src/version.h +4 -0
  410. data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
  411. data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
  412. data/vendor/v8/src/vm-state-inl.h +21 -17
  413. data/vendor/v8/src/vm-state.h +7 -5
  414. data/vendor/v8/src/win32-headers.h +1 -0
  415. data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
  416. data/vendor/v8/src/x64/assembler-x64.cc +80 -40
  417. data/vendor/v8/src/x64/assembler-x64.h +67 -17
  418. data/vendor/v8/src/x64/builtins-x64.cc +34 -33
  419. data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
  420. data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
  421. data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
  422. data/vendor/v8/src/x64/codegen-x64.cc +158 -136
  423. data/vendor/v8/src/x64/codegen-x64.h +4 -1
  424. data/vendor/v8/src/x64/cpu-x64.cc +7 -5
  425. data/vendor/v8/src/x64/debug-x64.cc +8 -6
  426. data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
  427. data/vendor/v8/src/x64/disasm-x64.cc +42 -23
  428. data/vendor/v8/src/x64/frames-x64.cc +1 -1
  429. data/vendor/v8/src/x64/frames-x64.h +2 -2
  430. data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
  431. data/vendor/v8/src/x64/ic-x64.cc +77 -79
  432. data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
  433. data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
  434. data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
  435. data/vendor/v8/src/x64/lithium-x64.cc +136 -54
  436. data/vendor/v8/src/x64/lithium-x64.h +142 -51
  437. data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
  438. data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
  439. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
  440. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
  441. data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
  442. data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
  443. data/vendor/v8/src/x64/simulator-x64.h +5 -5
  444. data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
  445. data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
  446. data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
  447. data/vendor/v8/src/zone-inl.h +49 -3
  448. data/vendor/v8/src/zone.cc +42 -41
  449. data/vendor/v8/src/zone.h +37 -34
  450. data/vendor/v8/test/benchmarks/testcfg.py +100 -0
  451. data/vendor/v8/test/cctest/SConscript +5 -4
  452. data/vendor/v8/test/cctest/cctest.h +3 -2
  453. data/vendor/v8/test/cctest/cctest.status +6 -11
  454. data/vendor/v8/test/cctest/test-accessors.cc +3 -3
  455. data/vendor/v8/test/cctest/test-alloc.cc +39 -33
  456. data/vendor/v8/test/cctest/test-api.cc +1092 -205
  457. data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
  458. data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
  459. data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
  460. data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
  461. data/vendor/v8/test/cctest/test-ast.cc +1 -0
  462. data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
  463. data/vendor/v8/test/cctest/test-compiler.cc +24 -24
  464. data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
  465. data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
  466. data/vendor/v8/test/cctest/test-debug.cc +136 -77
  467. data/vendor/v8/test/cctest/test-decls.cc +1 -1
  468. data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
  469. data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
  470. data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
  471. data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
  472. data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
  473. data/vendor/v8/test/cctest/test-heap.cc +240 -217
  474. data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
  475. data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
  476. data/vendor/v8/test/cctest/test-log.cc +114 -108
  477. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
  478. data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
  479. data/vendor/v8/test/cctest/test-parsing.cc +15 -14
  480. data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
  481. data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
  482. data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
  483. data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
  484. data/vendor/v8/test/cctest/test-regexp.cc +53 -41
  485. data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
  486. data/vendor/v8/test/cctest/test-serialize.cc +44 -43
  487. data/vendor/v8/test/cctest/test-sockets.cc +8 -3
  488. data/vendor/v8/test/cctest/test-spaces.cc +47 -29
  489. data/vendor/v8/test/cctest/test-strings.cc +20 -20
  490. data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
  491. data/vendor/v8/test/cctest/test-threads.cc +5 -3
  492. data/vendor/v8/test/cctest/test-utils.cc +5 -4
  493. data/vendor/v8/test/cctest/testcfg.py +7 -3
  494. data/vendor/v8/test/es5conform/es5conform.status +2 -77
  495. data/vendor/v8/test/es5conform/testcfg.py +1 -1
  496. data/vendor/v8/test/message/testcfg.py +1 -1
  497. data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
  498. data/vendor/v8/test/mjsunit/array-concat.js +43 -1
  499. data/vendor/v8/test/mjsunit/array-join.js +25 -0
  500. data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
  501. data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
  502. data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
  503. data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
  504. data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
  505. data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
  506. data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
  507. data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
  508. data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
  509. data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
  510. data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
  511. data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
  512. data/vendor/v8/test/mjsunit/object-seal.js +4 -13
  513. data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
  514. data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
  515. data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
  516. data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
  517. data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
  518. data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
  519. data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
  520. data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
  521. data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
  522. data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
  523. data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
  524. data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
  525. data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
  526. data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
  527. data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
  528. data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
  529. data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
  530. data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
  531. data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
  532. data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
  533. data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
  534. data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
  535. data/vendor/v8/test/mjsunit/testcfg.py +23 -6
  536. data/vendor/v8/test/mozilla/mozilla.status +0 -2
  537. data/vendor/v8/test/mozilla/testcfg.py +1 -1
  538. data/vendor/v8/test/preparser/empty.js +28 -0
  539. data/vendor/v8/test/preparser/functions-only.js +38 -0
  540. data/vendor/v8/test/preparser/non-alphanum.js +34 -0
  541. data/vendor/v8/test/preparser/symbols-only.js +49 -0
  542. data/vendor/v8/test/preparser/testcfg.py +90 -0
  543. data/vendor/v8/test/sputnik/testcfg.py +1 -1
  544. data/vendor/v8/test/test262/README +16 -0
  545. data/vendor/v8/test/test262/harness-adapt.js +80 -0
  546. data/vendor/v8/test/test262/test262.status +1506 -0
  547. data/vendor/v8/test/test262/testcfg.py +123 -0
  548. data/vendor/v8/tools/freebsd-tick-processor +10 -0
  549. data/vendor/v8/tools/gyp/v8.gyp +8 -33
  550. data/vendor/v8/tools/linux-tick-processor +5 -3
  551. data/vendor/v8/tools/test.py +37 -14
  552. data/vendor/v8/tools/tickprocessor.js +22 -8
  553. data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
  554. data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
  555. data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
  556. data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
  557. metadata +1495 -1341
  558. data/ext/extconf.rb +0 -22
  559. data/ext/mustang.cpp +0 -58
  560. data/vendor/v8/src/top.h +0 -608
@@ -79,6 +79,8 @@ class ExternalReferenceEncoder {
79
79
  static bool Match(void* key1, void* key2) { return key1 == key2; }
80
80
 
81
81
  void Put(Address key, int index);
82
+
83
+ Isolate* isolate_;
82
84
  };
83
85
 
84
86
 
@@ -105,6 +107,8 @@ class ExternalReferenceDecoder {
105
107
  void Put(uint32_t key, Address value) {
106
108
  *Lookup(key) = value;
107
109
  }
110
+
111
+ Isolate* isolate_;
108
112
  };
109
113
 
110
114
 
@@ -144,7 +148,7 @@ class SnapshotByteSource {
144
148
  // This only works for objects in the first page of a space. Don't use this for
145
149
  // things in newspace since it bypasses the write barrier.
146
150
 
147
- static const int k64 = (sizeof(uintptr_t) - 4) / 4;
151
+ RLYSTC const int k64 = (sizeof(uintptr_t) - 4) / 4;
148
152
 
149
153
  #define COMMON_REFERENCE_PATTERNS(f) \
150
154
  f(kNumberOfSpaces, 2, (11 - k64)) \
@@ -177,8 +181,8 @@ static const int k64 = (sizeof(uintptr_t) - 4) / 4;
177
181
  // both.
178
182
  class SerializerDeserializer: public ObjectVisitor {
179
183
  public:
180
- static void Iterate(ObjectVisitor* visitor);
181
- static void SetSnapshotCacheSize(int size);
184
+ RLYSTC void Iterate(ObjectVisitor* visitor);
185
+ RLYSTC void SetSnapshotCacheSize(int size);
182
186
 
183
187
  protected:
184
188
  // Where the pointed-to object can be found:
@@ -216,40 +220,36 @@ class SerializerDeserializer: public ObjectVisitor {
216
220
 
217
221
  // Misc.
218
222
  // Raw data to be copied from the snapshot.
219
- static const int kRawData = 0x30;
223
+ RLYSTC const int kRawData = 0x30;
220
224
  // Some common raw lengths: 0x31-0x3f
221
225
  // A tag emitted at strategic points in the snapshot to delineate sections.
222
226
  // If the deserializer does not find these at the expected moments then it
223
227
  // is an indication that the snapshot and the VM do not fit together.
224
228
  // Examine the build process for architecture, version or configuration
225
229
  // mismatches.
226
- static const int kSynchronize = 0x70;
230
+ RLYSTC const int kSynchronize = 0x70;
227
231
  // Used for the source code of the natives, which is in the executable, but
228
232
  // is referred to from external strings in the snapshot.
229
- static const int kNativesStringResource = 0x71;
230
- static const int kNewPage = 0x72;
233
+ RLYSTC const int kNativesStringResource = 0x71;
234
+ RLYSTC const int kNewPage = 0x72;
231
235
  // 0x73-0x7f Free.
232
236
  // 0xb0-0xbf Free.
233
237
  // 0xf0-0xff Free.
234
238
 
235
239
 
236
- static const int kLargeData = LAST_SPACE;
237
- static const int kLargeCode = kLargeData + 1;
238
- static const int kLargeFixedArray = kLargeCode + 1;
239
- static const int kNumberOfSpaces = kLargeFixedArray + 1;
240
- static const int kAnyOldSpace = -1;
240
+ RLYSTC const int kLargeData = LAST_SPACE;
241
+ RLYSTC const int kLargeCode = kLargeData + 1;
242
+ RLYSTC const int kLargeFixedArray = kLargeCode + 1;
243
+ RLYSTC const int kNumberOfSpaces = kLargeFixedArray + 1;
244
+ RLYSTC const int kAnyOldSpace = -1;
241
245
 
242
246
  // A bitmask for getting the space out of an instruction.
243
- static const int kSpaceMask = 15;
247
+ RLYSTC const int kSpaceMask = 15;
244
248
 
245
- static inline bool SpaceIsLarge(int space) { return space >= kLargeData; }
246
- static inline bool SpaceIsPaged(int space) {
249
+ RLYSTC inline bool SpaceIsLarge(int space) { return space >= kLargeData; }
250
+ RLYSTC inline bool SpaceIsPaged(int space) {
247
251
  return space >= FIRST_PAGED_SPACE && space <= LAST_PAGED_SPACE;
248
252
  }
249
-
250
- static int partial_snapshot_cache_length_;
251
- static const int kPartialSnapshotCacheCapacity = 1400;
252
- static Object* partial_snapshot_cache_[];
253
253
  };
254
254
 
255
255
 
@@ -313,6 +313,9 @@ class Deserializer: public SerializerDeserializer {
313
313
  Address Allocate(int space_number, Space* space, int size);
314
314
  void ReadObject(int space_number, Space* space, Object** write_back);
315
315
 
316
+ // Cached current isolate.
317
+ Isolate* isolate_;
318
+
316
319
  // Keep track of the pages in the paged spaces.
317
320
  // (In large object space we are keeping track of individual objects
318
321
  // rather than pages.) In new space we just need the address of the
@@ -320,7 +323,6 @@ class Deserializer: public SerializerDeserializer {
320
323
  List<Address> pages_[SerializerDeserializer::kNumberOfSpaces];
321
324
 
322
325
  SnapshotByteSource* source_;
323
- static ExternalReferenceDecoder* external_reference_decoder_;
324
326
  // This is the address of the next object that will be allocated in each
325
327
  // space. It is used to calculate the addresses of back-references.
326
328
  Address high_water_[LAST_SPACE + 1];
@@ -329,6 +331,8 @@ class Deserializer: public SerializerDeserializer {
329
331
  // START_NEW_PAGE_SERIALIZATION tag.
330
332
  Address last_object_address_;
331
333
 
334
+ ExternalReferenceDecoder* external_reference_decoder_;
335
+
332
336
  DISALLOW_COPY_AND_ASSIGN(Deserializer);
333
337
  };
334
338
 
@@ -376,19 +380,19 @@ class SerializationAddressMapper {
376
380
  }
377
381
 
378
382
  private:
379
- static bool SerializationMatchFun(void* key1, void* key2) {
383
+ RLYSTC bool SerializationMatchFun(void* key1, void* key2) {
380
384
  return key1 == key2;
381
385
  }
382
386
 
383
- static uint32_t Hash(HeapObject* obj) {
387
+ RLYSTC uint32_t Hash(HeapObject* obj) {
384
388
  return static_cast<int32_t>(reinterpret_cast<intptr_t>(obj->address()));
385
389
  }
386
390
 
387
- static void* Key(HeapObject* obj) {
391
+ RLYSTC void* Key(HeapObject* obj) {
388
392
  return reinterpret_cast<void*>(obj->address());
389
393
  }
390
394
 
391
- static void* Value(int v) {
395
+ RLYSTC void* Value(int v) {
392
396
  return reinterpret_cast<void*>(v);
393
397
  }
394
398
 
@@ -398,7 +402,8 @@ class SerializationAddressMapper {
398
402
  };
399
403
 
400
404
 
401
- class Serializer : public SerializerDeserializer {
405
+ // There can be only one serializer per V8 process.
406
+ STATIC_CLASS Serializer : public SerializerDeserializer {
402
407
  public:
403
408
  explicit Serializer(SnapshotByteSink* sink);
404
409
  ~Serializer();
@@ -410,25 +415,25 @@ class Serializer : public SerializerDeserializer {
410
415
  return fullness_[space];
411
416
  }
412
417
 
413
- static void Enable() {
418
+ RLYSTC void Enable() {
414
419
  if (!serialization_enabled_) {
415
420
  ASSERT(!too_late_to_enable_now_);
416
421
  }
417
422
  serialization_enabled_ = true;
418
423
  }
419
424
 
420
- static void Disable() { serialization_enabled_ = false; }
425
+ RLYSTC void Disable() { serialization_enabled_ = false; }
421
426
  // Call this when you have made use of the fact that there is no serialization
422
427
  // going on.
423
- static void TooLateToEnableNow() { too_late_to_enable_now_ = true; }
424
- static bool enabled() { return serialization_enabled_; }
428
+ RLYSTC void TooLateToEnableNow() { too_late_to_enable_now_ = true; }
429
+ RLYSTC bool enabled() { return serialization_enabled_; }
425
430
  SerializationAddressMapper* address_mapper() { return &address_mapper_; }
426
431
  #ifdef DEBUG
427
432
  virtual void Synchronize(const char* tag);
428
433
  #endif
429
434
 
430
435
  protected:
431
- static const int kInvalidRootIndex = -1;
436
+ RLYSTC const int kInvalidRootIndex = -1;
432
437
  virtual int RootIndex(HeapObject* heap_object) = 0;
433
438
  virtual bool ShouldBeInThePartialSnapshotCache(HeapObject* o) = 0;
434
439
 
@@ -483,11 +488,11 @@ class Serializer : public SerializerDeserializer {
483
488
  // object space it may return kLargeCode or kLargeFixedArray in order
484
489
  // to indicate to the deserializer what kind of large object allocation
485
490
  // to make.
486
- static int SpaceOfObject(HeapObject* object);
491
+ RLYSTC int SpaceOfObject(HeapObject* object);
487
492
  // This just returns the space of the object. It will return LO_SPACE
488
493
  // for all large objects since you can't check the type of the object
489
494
  // once the map has been used for the serialization address.
490
- static int SpaceOfAlreadySerializedObject(HeapObject* object);
495
+ RLYSTC int SpaceOfAlreadySerializedObject(HeapObject* object);
491
496
  int Allocate(int space, int size, bool* new_page_started);
492
497
  int EncodeExternalReference(Address addr) {
493
498
  return external_reference_encoder_->Encode(addr);
@@ -501,9 +506,9 @@ class Serializer : public SerializerDeserializer {
501
506
  SnapshotByteSink* sink_;
502
507
  int current_root_index_;
503
508
  ExternalReferenceEncoder* external_reference_encoder_;
504
- static bool serialization_enabled_;
509
+ RLYSTC bool serialization_enabled_;
505
510
  // Did we already make use of the fact that serialization was not enabled?
506
- static bool too_late_to_enable_now_;
511
+ RLYSTC bool too_late_to_enable_now_;
507
512
  int large_object_total_;
508
513
  SerializationAddressMapper address_mapper_;
509
514
 
@@ -539,7 +544,7 @@ class PartialSerializer : public Serializer {
539
544
  ASSERT(!o->IsScript());
540
545
  return o->IsString() || o->IsSharedFunctionInfo() ||
541
546
  o->IsHeapNumber() || o->IsCode() ||
542
- o->map() == Heap::fixed_cow_array_map();
547
+ o->map() == HEAP->fixed_cow_array_map();
543
548
  }
544
549
 
545
550
  private:
@@ -555,7 +560,7 @@ class StartupSerializer : public Serializer {
555
560
  // strong roots have been serialized we can create a partial snapshot
556
561
  // which will repopulate the cache with objects neede by that partial
557
562
  // snapshot.
558
- partial_snapshot_cache_length_ = 0;
563
+ Isolate::Current()->set_serialize_partial_snapshot_cache_length(0);
559
564
  }
560
565
  // Serialize the current state of the heap. The order is:
561
566
  // 1) Strong references.
@@ -0,0 +1,163 @@
1
+ // Copyright 2011 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
+ #ifndef V8_SMALL_POINTER_LIST_H_
29
+ #define V8_SMALL_POINTER_LIST_H_
30
+
31
+ #include "checks.h"
32
+ #include "v8globals.h"
33
+ #include "zone.h"
34
+
35
+ namespace v8 {
36
+ namespace internal {
37
+
38
+ // SmallPointerList is a list optimized for storing no or just a
39
+ // single value. When more values are given it falls back to ZoneList.
40
+ //
41
+ // The interface tries to be as close to List from list.h as possible.
42
+ template <typename T>
43
+ class SmallPointerList {
44
+ public:
45
+ SmallPointerList() : data_(kEmptyTag) {}
46
+
47
+ bool is_empty() const { return length() == 0; }
48
+
49
+ int length() const {
50
+ if ((data_ & kTagMask) == kEmptyTag) return 0;
51
+ if ((data_ & kTagMask) == kSingletonTag) return 1;
52
+ return list()->length();
53
+ }
54
+
55
+ void Add(T* pointer) {
56
+ ASSERT(IsAligned(reinterpret_cast<intptr_t>(pointer), kPointerAlignment));
57
+ if ((data_ & kTagMask) == kEmptyTag) {
58
+ data_ = reinterpret_cast<intptr_t>(pointer) | kSingletonTag;
59
+ return;
60
+ }
61
+ if ((data_ & kTagMask) == kSingletonTag) {
62
+ PointerList* list = new PointerList(2);
63
+ list->Add(single_value());
64
+ list->Add(pointer);
65
+ ASSERT(IsAligned(reinterpret_cast<intptr_t>(list), kPointerAlignment));
66
+ data_ = reinterpret_cast<intptr_t>(list) | kListTag;
67
+ return;
68
+ }
69
+ list()->Add(pointer);
70
+ }
71
+
72
+ // Note: returns T* and not T*& (unlike List from list.h).
73
+ // This makes the implementation simpler and more const correct.
74
+ T* at(int i) const {
75
+ ASSERT((data_ & kTagMask) != kEmptyTag);
76
+ if ((data_ & kTagMask) == kSingletonTag) {
77
+ ASSERT(i == 0);
78
+ return single_value();
79
+ }
80
+ return list()->at(i);
81
+ }
82
+
83
+ // See the note above.
84
+ T* operator[](int i) const { return at(i); }
85
+
86
+ // Remove the given element from the list (if present).
87
+ void RemoveElement(T* pointer) {
88
+ if ((data_ & kTagMask) == kEmptyTag) return;
89
+ if ((data_ & kTagMask) == kSingletonTag) {
90
+ if (pointer == single_value()) {
91
+ data_ = kEmptyTag;
92
+ }
93
+ return;
94
+ }
95
+ list()->RemoveElement(pointer);
96
+ }
97
+
98
+ T* RemoveLast() {
99
+ ASSERT((data_ & kTagMask) != kEmptyTag);
100
+ if ((data_ & kTagMask) == kSingletonTag) {
101
+ T* result = single_value();
102
+ data_ = kEmptyTag;
103
+ return result;
104
+ }
105
+ return list()->RemoveLast();
106
+ }
107
+
108
+ void Rewind(int pos) {
109
+ if ((data_ & kTagMask) == kEmptyTag) {
110
+ ASSERT(pos == 0);
111
+ return;
112
+ }
113
+ if ((data_ & kTagMask) == kSingletonTag) {
114
+ ASSERT(pos == 0 || pos == 1);
115
+ if (pos == 0) {
116
+ data_ = kEmptyTag;
117
+ }
118
+ return;
119
+ }
120
+ list()->Rewind(pos);
121
+ }
122
+
123
+ int CountOccurrences(T* pointer, int start, int end) const {
124
+ if ((data_ & kTagMask) == kEmptyTag) return 0;
125
+ if ((data_ & kTagMask) == kSingletonTag) {
126
+ if (start == 0 && end >= 0) {
127
+ return (single_value() == pointer) ? 1 : 0;
128
+ }
129
+ return 0;
130
+ }
131
+ return list()->CountOccurrences(pointer, start, end);
132
+ }
133
+
134
+ private:
135
+ typedef ZoneList<T*> PointerList;
136
+
137
+ static const intptr_t kEmptyTag = 1;
138
+ static const intptr_t kSingletonTag = 0;
139
+ static const intptr_t kListTag = 2;
140
+ static const intptr_t kTagMask = 3;
141
+ static const intptr_t kValueMask = ~kTagMask;
142
+
143
+ STATIC_ASSERT(kTagMask + 1 <= kPointerAlignment);
144
+
145
+ T* single_value() const {
146
+ ASSERT((data_ & kTagMask) == kSingletonTag);
147
+ STATIC_ASSERT(kSingletonTag == 0);
148
+ return reinterpret_cast<T*>(data_);
149
+ }
150
+
151
+ PointerList* list() const {
152
+ ASSERT((data_ & kTagMask) == kListTag);
153
+ return reinterpret_cast<PointerList*>(data_ & kValueMask);
154
+ }
155
+
156
+ intptr_t data_;
157
+
158
+ DISALLOW_COPY_AND_ASSIGN(SmallPointerList);
159
+ };
160
+
161
+ } } // namespace v8::internal
162
+
163
+ #endif // V8_SMALL_POINTER_LIST_H_
@@ -64,7 +64,7 @@ Handle<Context> Snapshot::NewContextFromSnapshot() {
64
64
  if (context_size_ == 0) {
65
65
  return Handle<Context>();
66
66
  }
67
- Heap::ReserveSpace(new_space_used_,
67
+ HEAP->ReserveSpace(new_space_used_,
68
68
  pointer_space_used_,
69
69
  data_space_used_,
70
70
  code_space_used_,
@@ -25,13 +25,15 @@
25
25
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
+ #include "isolate.h"
29
+
28
30
  #ifndef V8_SNAPSHOT_H_
29
31
  #define V8_SNAPSHOT_H_
30
32
 
31
33
  namespace v8 {
32
34
  namespace internal {
33
35
 
34
- class Snapshot {
36
+ STATIC_CLASS Snapshot {
35
37
  public:
36
38
  // Initialize the VM from the given snapshot file. If snapshot_file is
37
39
  // NULL, use the internal snapshot instead. Returns false if no snapshot
@@ -28,8 +28,9 @@
28
28
  #ifndef V8_SPACES_INL_H_
29
29
  #define V8_SPACES_INL_H_
30
30
 
31
- #include "memory.h"
31
+ #include "isolate.h"
32
32
  #include "spaces.h"
33
+ #include "v8memory.h"
33
34
 
34
35
  namespace v8 {
35
36
  namespace internal {
@@ -56,18 +57,18 @@ Page* PageIterator::next() {
56
57
  // Page
57
58
 
58
59
  Page* Page::next_page() {
59
- return MemoryAllocator::GetNextPage(this);
60
+ return heap_->isolate()->memory_allocator()->GetNextPage(this);
60
61
  }
61
62
 
62
63
 
63
64
  Address Page::AllocationTop() {
64
- PagedSpace* owner = MemoryAllocator::PageOwner(this);
65
+ PagedSpace* owner = heap_->isolate()->memory_allocator()->PageOwner(this);
65
66
  return owner->PageAllocationTop(this);
66
67
  }
67
68
 
68
69
 
69
70
  Address Page::AllocationWatermark() {
70
- PagedSpace* owner = MemoryAllocator::PageOwner(this);
71
+ PagedSpace* owner = heap_->isolate()->memory_allocator()->PageOwner(this);
71
72
  if (this == owner->AllocationTopPage()) {
72
73
  return owner->top();
73
74
  }
@@ -82,7 +83,7 @@ uint32_t Page::AllocationWatermarkOffset() {
82
83
 
83
84
 
84
85
  void Page::SetAllocationWatermark(Address allocation_watermark) {
85
- if ((Heap::gc_state() == Heap::SCAVENGE) && IsWatermarkValid()) {
86
+ if ((heap_->gc_state() == Heap::SCAVENGE) && IsWatermarkValid()) {
86
87
  // When iterating intergenerational references during scavenge
87
88
  // we might decide to promote an encountered young object.
88
89
  // We will allocate a space for such an object and put it
@@ -219,23 +220,26 @@ void Page::ClearRegionMarks(Address start, Address end, bool reaches_limit) {
219
220
  }
220
221
 
221
222
 
222
- void Page::FlipMeaningOfInvalidatedWatermarkFlag() {
223
- watermark_invalidated_mark_ ^= 1 << WATERMARK_INVALIDATED;
223
+ void Page::FlipMeaningOfInvalidatedWatermarkFlag(Heap* heap) {
224
+ heap->page_watermark_invalidated_mark_ ^= 1 << WATERMARK_INVALIDATED;
224
225
  }
225
226
 
226
227
 
227
228
  bool Page::IsWatermarkValid() {
228
- return (flags_ & (1 << WATERMARK_INVALIDATED)) != watermark_invalidated_mark_;
229
+ return (flags_ & (1 << WATERMARK_INVALIDATED)) !=
230
+ heap_->page_watermark_invalidated_mark_;
229
231
  }
230
232
 
231
233
 
232
234
  void Page::InvalidateWatermark(bool value) {
233
235
  if (value) {
234
236
  flags_ = (flags_ & ~(1 << WATERMARK_INVALIDATED)) |
235
- watermark_invalidated_mark_;
237
+ heap_->page_watermark_invalidated_mark_;
236
238
  } else {
237
- flags_ = (flags_ & ~(1 << WATERMARK_INVALIDATED)) |
238
- (watermark_invalidated_mark_ ^ (1 << WATERMARK_INVALIDATED));
239
+ flags_ =
240
+ (flags_ & ~(1 << WATERMARK_INVALIDATED)) |
241
+ (heap_->page_watermark_invalidated_mark_ ^
242
+ (1 << WATERMARK_INVALIDATED));
239
243
  }
240
244
 
241
245
  ASSERT(IsWatermarkValid() == !value);
@@ -264,7 +268,7 @@ void Page::ClearPageFlags() {
264
268
  void Page::ClearGCFields() {
265
269
  InvalidateWatermark(true);
266
270
  SetAllocationWatermark(ObjectAreaStart());
267
- if (Heap::gc_state() == Heap::SCAVENGE) {
271
+ if (heap_->gc_state() == Heap::SCAVENGE) {
268
272
  SetCachedAllocationWatermark(ObjectAreaStart());
269
273
  }
270
274
  SetRegionMarks(kAllRegionsCleanMarks);
@@ -308,6 +312,7 @@ void MemoryAllocator::ChunkInfo::init(Address a, size_t s, PagedSpace* o) {
308
312
  size_ = s;
309
313
  owner_ = o;
310
314
  executable_ = (o == NULL) ? NOT_EXECUTABLE : o->executable();
315
+ owner_identity_ = (o == NULL) ? FIRST_SPACE : o->identity();
311
316
  }
312
317
 
313
318
 
@@ -408,15 +413,7 @@ void MemoryAllocator::UnprotectChunkFromPage(Page* page) {
408
413
  bool PagedSpace::Contains(Address addr) {
409
414
  Page* p = Page::FromAddress(addr);
410
415
  if (!p->is_valid()) return false;
411
- return MemoryAllocator::IsPageInSpace(p, this);
412
- }
413
-
414
-
415
- bool PagedSpace::SafeContains(Address addr) {
416
- if (!MemoryAllocator::SafeIsInAPageChunk(addr)) return false;
417
- Page* p = Page::FromAddress(addr);
418
- if (!p->is_valid()) return false;
419
- return MemoryAllocator::IsPageInSpace(p, this);
416
+ return heap()->isolate()->memory_allocator()->IsPageInSpace(p, this);
420
417
  }
421
418
 
422
419
 
@@ -477,7 +474,9 @@ Address LargeObjectChunk::GetStartAddress() {
477
474
 
478
475
 
479
476
  void LargeObjectChunk::Free(Executability executable) {
480
- MemoryAllocator::FreeRawMemory(address(), size(), executable);
477
+ Isolate* isolate =
478
+ Page::FromAddress(RoundUp(address(), Page::kPageSize))->heap_->isolate();
479
+ isolate->memory_allocator()->FreeRawMemory(address(), size(), executable);
481
480
  }
482
481
 
483
482
  // -----------------------------------------------------------------------------
@@ -501,6 +500,12 @@ MaybeObject* NewSpace::AllocateRawInternal(int size_in_bytes,
501
500
  }
502
501
 
503
502
 
503
+ intptr_t LargeObjectSpace::Available() {
504
+ return LargeObjectChunk::ObjectSizeFor(
505
+ heap()->isolate()->memory_allocator()->Available());
506
+ }
507
+
508
+
504
509
  template <typename StringType>
505
510
  void NewSpace::ShrinkStringAtAllocationBoundary(String* string, int length) {
506
511
  ASSERT(length <= string->length());
@@ -514,9 +519,9 @@ void NewSpace::ShrinkStringAtAllocationBoundary(String* string, int length) {
514
519
 
515
520
 
516
521
  bool FreeListNode::IsFreeListNode(HeapObject* object) {
517
- return object->map() == Heap::raw_unchecked_byte_array_map()
518
- || object->map() == Heap::raw_unchecked_one_pointer_filler_map()
519
- || object->map() == Heap::raw_unchecked_two_pointer_filler_map();
522
+ return object->map() == HEAP->raw_unchecked_byte_array_map()
523
+ || object->map() == HEAP->raw_unchecked_one_pointer_filler_map()
524
+ || object->map() == HEAP->raw_unchecked_two_pointer_filler_map();
520
525
  }
521
526
 
522
527
  } } // namespace v8::internal