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
@@ -1,4 +1,4 @@
1
- // Copyright 2010 the V8 project authors. All rights reserved.
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -57,8 +57,8 @@
57
57
  // - JSValue
58
58
  // - JSMessageObject
59
59
  // - ByteArray
60
- // - PixelArray
61
60
  // - ExternalArray
61
+ // - ExternalPixelArray
62
62
  // - ExternalByteArray
63
63
  // - ExternalUnsignedByteArray
64
64
  // - ExternalShortArray
@@ -135,19 +135,37 @@ class PropertyDetails BASE_EMBEDDED {
135
135
  PropertyDetails(PropertyAttributes attributes,
136
136
  PropertyType type,
137
137
  int index = 0) {
138
+ ASSERT(type != EXTERNAL_ARRAY_TRANSITION);
138
139
  ASSERT(TypeField::is_valid(type));
139
140
  ASSERT(AttributesField::is_valid(attributes));
140
- ASSERT(IndexField::is_valid(index));
141
+ ASSERT(StorageField::is_valid(index));
141
142
 
142
143
  value_ = TypeField::encode(type)
143
144
  | AttributesField::encode(attributes)
144
- | IndexField::encode(index);
145
+ | StorageField::encode(index);
145
146
 
146
147
  ASSERT(type == this->type());
147
148
  ASSERT(attributes == this->attributes());
148
149
  ASSERT(index == this->index());
149
150
  }
150
151
 
152
+ PropertyDetails(PropertyAttributes attributes,
153
+ PropertyType type,
154
+ ExternalArrayType array_type) {
155
+ ASSERT(type == EXTERNAL_ARRAY_TRANSITION);
156
+ ASSERT(TypeField::is_valid(type));
157
+ ASSERT(AttributesField::is_valid(attributes));
158
+ ASSERT(StorageField::is_valid(static_cast<int>(array_type)));
159
+
160
+ value_ = TypeField::encode(type)
161
+ | AttributesField::encode(attributes)
162
+ | StorageField::encode(static_cast<int>(array_type));
163
+
164
+ ASSERT(type == this->type());
165
+ ASSERT(attributes == this->attributes());
166
+ ASSERT(array_type == this->array_type());
167
+ }
168
+
151
169
  // Conversion for storing details as Object*.
152
170
  inline PropertyDetails(Smi* smi);
153
171
  inline Smi* AsSmi();
@@ -157,7 +175,8 @@ class PropertyDetails BASE_EMBEDDED {
157
175
  bool IsTransition() {
158
176
  PropertyType t = type();
159
177
  ASSERT(t != INTERCEPTOR);
160
- return t == MAP_TRANSITION || t == CONSTANT_TRANSITION;
178
+ return t == MAP_TRANSITION || t == CONSTANT_TRANSITION ||
179
+ t == EXTERNAL_ARRAY_TRANSITION;
161
180
  }
162
181
 
163
182
  bool IsProperty() {
@@ -166,11 +185,18 @@ class PropertyDetails BASE_EMBEDDED {
166
185
 
167
186
  PropertyAttributes attributes() { return AttributesField::decode(value_); }
168
187
 
169
- int index() { return IndexField::decode(value_); }
188
+ int index() { return StorageField::decode(value_); }
189
+
190
+ ExternalArrayType array_type() {
191
+ ASSERT(type() == EXTERNAL_ARRAY_TRANSITION);
192
+ return static_cast<ExternalArrayType>(StorageField::decode(value_));
193
+ }
170
194
 
171
195
  inline PropertyDetails AsDeleted();
172
196
 
173
- static bool IsValidIndex(int index) { return IndexField::is_valid(index); }
197
+ static bool IsValidIndex(int index) {
198
+ return StorageField::is_valid(index);
199
+ }
174
200
 
175
201
  bool IsReadOnly() { return (attributes() & READ_ONLY) != 0; }
176
202
  bool IsDontDelete() { return (attributes() & DONT_DELETE) != 0; }
@@ -179,10 +205,10 @@ class PropertyDetails BASE_EMBEDDED {
179
205
 
180
206
  // Bit fields in value_ (type, shift, size). Must be public so the
181
207
  // constants can be embedded in generated code.
182
- class TypeField: public BitField<PropertyType, 0, 3> {};
183
- class AttributesField: public BitField<PropertyAttributes, 3, 3> {};
184
- class DeletedField: public BitField<uint32_t, 6, 1> {};
185
- class IndexField: public BitField<uint32_t, 7, 32-7> {};
208
+ class TypeField: public BitField<PropertyType, 0, 4> {};
209
+ class AttributesField: public BitField<PropertyAttributes, 4, 3> {};
210
+ class DeletedField: public BitField<uint32_t, 7, 1> {};
211
+ class StorageField: public BitField<uint32_t, 8, 32-8> {};
186
212
 
187
213
  static const int kInitialIndex = 1;
188
214
  private:
@@ -262,7 +288,6 @@ static const int kVariableSizeSentinel = 0;
262
288
  V(HEAP_NUMBER_TYPE) \
263
289
  V(PROXY_TYPE) \
264
290
  V(BYTE_ARRAY_TYPE) \
265
- V(PIXEL_ARRAY_TYPE) \
266
291
  /* Note: the order of these external array */ \
267
292
  /* types is relied upon in */ \
268
293
  /* Object::IsExternalArray(). */ \
@@ -273,6 +298,7 @@ static const int kVariableSizeSentinel = 0;
273
298
  V(EXTERNAL_INT_ARRAY_TYPE) \
274
299
  V(EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) \
275
300
  V(EXTERNAL_FLOAT_ARRAY_TYPE) \
301
+ V(EXTERNAL_PIXEL_ARRAY_TYPE) \
276
302
  V(FILLER_TYPE) \
277
303
  \
278
304
  V(ACCESSOR_INFO_TYPE) \
@@ -490,14 +516,14 @@ enum InstanceType {
490
516
  HEAP_NUMBER_TYPE,
491
517
  PROXY_TYPE,
492
518
  BYTE_ARRAY_TYPE,
493
- PIXEL_ARRAY_TYPE,
494
519
  EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE
495
520
  EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE,
496
521
  EXTERNAL_SHORT_ARRAY_TYPE,
497
522
  EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE,
498
523
  EXTERNAL_INT_ARRAY_TYPE,
499
524
  EXTERNAL_UNSIGNED_INT_ARRAY_TYPE,
500
- EXTERNAL_FLOAT_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE
525
+ EXTERNAL_FLOAT_ARRAY_TYPE,
526
+ EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE
501
527
  FILLER_TYPE, // LAST_DATA_TYPE
502
528
 
503
529
  // Structs.
@@ -544,7 +570,7 @@ enum InstanceType {
544
570
  LAST_STRING_TYPE = FIRST_NONSTRING_TYPE - 1,
545
571
  // Boundaries for testing for an external array.
546
572
  FIRST_EXTERNAL_ARRAY_TYPE = EXTERNAL_BYTE_ARRAY_TYPE,
547
- LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_FLOAT_ARRAY_TYPE,
573
+ LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_PIXEL_ARRAY_TYPE,
548
574
  // Boundary for promotion to old data space/old pointer space.
549
575
  LAST_DATA_TYPE = FILLER_TYPE,
550
576
  // Boundaries for testing the type is a JavaScript "object". Note that
@@ -557,6 +583,8 @@ enum InstanceType {
557
583
  FIRST_FUNCTION_CLASS_TYPE = JS_REGEXP_TYPE
558
584
  };
559
585
 
586
+ static const int kExternalArrayTypeCount = LAST_EXTERNAL_ARRAY_TYPE -
587
+ FIRST_EXTERNAL_ARRAY_TYPE + 1;
560
588
 
561
589
  STATIC_CHECK(JS_OBJECT_TYPE == Internals::kJSObjectType);
562
590
  STATIC_CHECK(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType);
@@ -655,7 +683,6 @@ class MaybeObject BASE_EMBEDDED {
655
683
  V(SeqTwoByteString) \
656
684
  V(SeqAsciiString) \
657
685
  \
658
- V(PixelArray) \
659
686
  V(ExternalArray) \
660
687
  V(ExternalByteArray) \
661
688
  V(ExternalUnsignedByteArray) \
@@ -664,6 +691,7 @@ class MaybeObject BASE_EMBEDDED {
664
691
  V(ExternalIntArray) \
665
692
  V(ExternalUnsignedIntArray) \
666
693
  V(ExternalFloatArray) \
694
+ V(ExternalPixelArray) \
667
695
  V(ByteArray) \
668
696
  V(JSObject) \
669
697
  V(JSContextExtensionObject) \
@@ -729,6 +757,7 @@ class Object : public MaybeObject {
729
757
  // Oddball testing.
730
758
  INLINE(bool IsUndefined());
731
759
  INLINE(bool IsNull());
760
+ INLINE(bool IsTheHole()); // Shadows MaybeObject's implementation.
732
761
  INLINE(bool IsTrue());
733
762
  INLINE(bool IsFalse());
734
763
  inline bool IsArgumentsMarker();
@@ -885,7 +914,7 @@ class Failure: public MaybeObject {
885
914
  enum Type {
886
915
  RETRY_AFTER_GC = 0,
887
916
  EXCEPTION = 1, // Returning this marker tells the real exception
888
- // is in Top::pending_exception.
917
+ // is in Isolate::pending_exception.
889
918
  INTERNAL_ERROR = 2,
890
919
  OUT_OF_MEMORY_EXCEPTION = 3
891
920
  };
@@ -1073,6 +1102,14 @@ class HeapObject: public Object {
1073
1102
  inline MapWord map_word();
1074
1103
  inline void set_map_word(MapWord map_word);
1075
1104
 
1105
+ // The Heap the object was allocated in. Used also to access Isolate.
1106
+ // This method can not be used during GC, it ASSERTs this.
1107
+ inline Heap* GetHeap();
1108
+ // Convenience method to get current isolate. This method can be
1109
+ // accessed only when its result is the same as
1110
+ // Isolate::Current(), it ASSERTs this. See also comment for GetHeap.
1111
+ inline Isolate* GetIsolate();
1112
+
1076
1113
  // Converts an address to a HeapObject pointer.
1077
1114
  static inline HeapObject* FromAddress(Address address);
1078
1115
 
@@ -1297,14 +1334,14 @@ class JSObject: public HeapObject {
1297
1334
  FAST_ELEMENTS,
1298
1335
  // All the kinds below are "slow".
1299
1336
  DICTIONARY_ELEMENTS,
1300
- PIXEL_ELEMENTS,
1301
1337
  EXTERNAL_BYTE_ELEMENTS,
1302
1338
  EXTERNAL_UNSIGNED_BYTE_ELEMENTS,
1303
1339
  EXTERNAL_SHORT_ELEMENTS,
1304
1340
  EXTERNAL_UNSIGNED_SHORT_ELEMENTS,
1305
1341
  EXTERNAL_INT_ELEMENTS,
1306
1342
  EXTERNAL_UNSIGNED_INT_ELEMENTS,
1307
- EXTERNAL_FLOAT_ELEMENTS
1343
+ EXTERNAL_FLOAT_ELEMENTS,
1344
+ EXTERNAL_PIXEL_ELEMENTS
1308
1345
  };
1309
1346
 
1310
1347
  // [properties]: Backing storage for properties.
@@ -1329,15 +1366,14 @@ class JSObject: public HeapObject {
1329
1366
  // few objects and so before writing to any element the array must
1330
1367
  // be copied. Use EnsureWritableFastElements in this case.
1331
1368
  //
1332
- // In the slow mode elements is either a NumberDictionary or a
1333
- // PixelArray or an ExternalArray.
1369
+ // In the slow mode elements is either a NumberDictionary or an ExternalArray.
1334
1370
  DECL_ACCESSORS(elements, HeapObject)
1335
1371
  inline void initialize_elements();
1336
1372
  MUST_USE_RESULT inline MaybeObject* ResetElements();
1337
1373
  inline ElementsKind GetElementsKind();
1338
1374
  inline bool HasFastElements();
1339
1375
  inline bool HasDictionaryElements();
1340
- inline bool HasPixelElements();
1376
+ inline bool HasExternalPixelElements();
1341
1377
  inline bool HasExternalArrayElements();
1342
1378
  inline bool HasExternalByteElements();
1343
1379
  inline bool HasExternalUnsignedByteElements();
@@ -1361,11 +1397,13 @@ class JSObject: public HeapObject {
1361
1397
 
1362
1398
  MUST_USE_RESULT MaybeObject* SetProperty(String* key,
1363
1399
  Object* value,
1364
- PropertyAttributes attributes);
1400
+ PropertyAttributes attributes,
1401
+ StrictModeFlag strict_mode);
1365
1402
  MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result,
1366
1403
  String* key,
1367
1404
  Object* value,
1368
- PropertyAttributes attributes);
1405
+ PropertyAttributes attributes,
1406
+ StrictModeFlag strict_mode);
1369
1407
  MUST_USE_RESULT MaybeObject* SetPropertyWithFailedAccessCheck(
1370
1408
  LookupResult* result,
1371
1409
  String* name,
@@ -1380,11 +1418,13 @@ class JSObject: public HeapObject {
1380
1418
  MUST_USE_RESULT MaybeObject* SetPropertyWithInterceptor(
1381
1419
  String* name,
1382
1420
  Object* value,
1383
- PropertyAttributes attributes);
1421
+ PropertyAttributes attributes,
1422
+ StrictModeFlag strict_mode);
1384
1423
  MUST_USE_RESULT MaybeObject* SetPropertyPostInterceptor(
1385
1424
  String* name,
1386
1425
  Object* value,
1387
- PropertyAttributes attributes);
1426
+ PropertyAttributes attributes,
1427
+ StrictModeFlag strict_mode);
1388
1428
  MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes(
1389
1429
  String* key,
1390
1430
  Object* value,
@@ -1511,6 +1551,12 @@ class JSObject: public HeapObject {
1511
1551
  inline bool HasElement(uint32_t index);
1512
1552
  bool HasElementWithReceiver(JSObject* receiver, uint32_t index);
1513
1553
 
1554
+ // Computes the new capacity when expanding the elements of a JSObject.
1555
+ static int NewElementsCapacity(int old_capacity) {
1556
+ // (old_capacity + 50%) + 16
1557
+ return old_capacity + (old_capacity >> 1) + 16;
1558
+ }
1559
+
1514
1560
  // Tells whether the index'th element is present and how it is stored.
1515
1561
  enum LocalElementType {
1516
1562
  // There is no element with given index.
@@ -1536,12 +1582,14 @@ class JSObject: public HeapObject {
1536
1582
 
1537
1583
  MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index,
1538
1584
  Object* value,
1585
+ StrictModeFlag strict_mode,
1539
1586
  bool check_prototype = true);
1540
1587
 
1541
1588
  // Set the index'th array element.
1542
1589
  // A Failure object is returned if GC is needed.
1543
1590
  MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
1544
1591
  Object* value,
1592
+ StrictModeFlag strict_mode,
1545
1593
  bool check_prototype = true);
1546
1594
 
1547
1595
  // Returns the index'th element.
@@ -1576,6 +1624,7 @@ class JSObject: public HeapObject {
1576
1624
  inline int GetHeaderSize();
1577
1625
 
1578
1626
  inline int GetInternalFieldCount();
1627
+ inline int GetInternalFieldOffset(int index);
1579
1628
  inline Object* GetInternalField(int index);
1580
1629
  inline void SetInternalField(int index, Object* value);
1581
1630
 
@@ -1670,7 +1719,8 @@ class JSObject: public HeapObject {
1670
1719
  // Add a property to an object.
1671
1720
  MUST_USE_RESULT MaybeObject* AddProperty(String* name,
1672
1721
  Object* value,
1673
- PropertyAttributes attributes);
1722
+ PropertyAttributes attributes,
1723
+ StrictModeFlag strict_mode);
1674
1724
 
1675
1725
  // Convert the object to use the canonical dictionary
1676
1726
  // representation. If the object is expected to have additional properties
@@ -1693,6 +1743,7 @@ class JSObject: public HeapObject {
1693
1743
  inline Object* FastPropertyAtPut(int index, Object* value);
1694
1744
 
1695
1745
  // Access to in object properties.
1746
+ inline int GetInObjectPropertyOffset(int index);
1696
1747
  inline Object* InObjectPropertyAt(int index);
1697
1748
  inline Object* InObjectPropertyAtPut(int index,
1698
1749
  Object* value,
@@ -1801,12 +1852,15 @@ class JSObject: public HeapObject {
1801
1852
  uint32_t index,
1802
1853
  Object* value,
1803
1854
  JSObject* holder);
1804
- MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(uint32_t index,
1805
- Object* value,
1806
- bool check_prototype);
1855
+ MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(
1856
+ uint32_t index,
1857
+ Object* value,
1858
+ StrictModeFlag strict_mode,
1859
+ bool check_prototype);
1807
1860
  MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor(
1808
1861
  uint32_t index,
1809
1862
  Object* value,
1863
+ StrictModeFlag strict_mode,
1810
1864
  bool check_prototype);
1811
1865
 
1812
1866
  MaybeObject* GetElementPostInterceptor(Object* receiver, uint32_t index);
@@ -1876,13 +1930,18 @@ class FixedArray: public HeapObject {
1876
1930
 
1877
1931
  // Setters for frequently used oddballs located in old space.
1878
1932
  inline void set_undefined(int index);
1933
+ // TODO(isolates): duplicate.
1934
+ inline void set_undefined(Heap* heap, int index);
1879
1935
  inline void set_null(int index);
1936
+ // TODO(isolates): duplicate.
1937
+ inline void set_null(Heap* heap, int index);
1880
1938
  inline void set_the_hole(int index);
1881
1939
 
1882
1940
  // Setters with less debug checks for the GC to use.
1883
1941
  inline void set_unchecked(int index, Smi* value);
1884
- inline void set_null_unchecked(int index);
1885
- inline void set_unchecked(int index, Object* value, WriteBarrierMode mode);
1942
+ inline void set_null_unchecked(Heap* heap, int index);
1943
+ inline void set_unchecked(Heap* heap, int index, Object* value,
1944
+ WriteBarrierMode mode);
1886
1945
 
1887
1946
  // Gives access to raw memory which stores the array's data.
1888
1947
  inline Object** data_start();
@@ -1977,7 +2036,9 @@ class DescriptorArray: public FixedArray {
1977
2036
 
1978
2037
  // Returns the number of descriptors in the array.
1979
2038
  int number_of_descriptors() {
1980
- return IsEmpty() ? 0 : length() - kFirstIndex;
2039
+ ASSERT(length() > kFirstIndex || IsEmpty());
2040
+ int len = length();
2041
+ return len <= kFirstIndex ? 0 : len - kFirstIndex;
1981
2042
  }
1982
2043
 
1983
2044
  int NextEnumerationIndex() {
@@ -2269,7 +2330,8 @@ class HashTable: public FixedArray {
2269
2330
  (FixedArray::kMaxLength - kElementsStartOffset) / kEntrySize;
2270
2331
 
2271
2332
  // Find entry for key otherwise return kNotFound.
2272
- int FindEntry(Key key);
2333
+ inline int FindEntry(Key key);
2334
+ int FindEntry(Isolate* isolate, Key key);
2273
2335
 
2274
2336
  protected:
2275
2337
 
@@ -2341,16 +2403,16 @@ class HashTableKey {
2341
2403
 
2342
2404
  class SymbolTableShape {
2343
2405
  public:
2344
- static bool IsMatch(HashTableKey* key, Object* value) {
2406
+ static inline bool IsMatch(HashTableKey* key, Object* value) {
2345
2407
  return key->IsMatch(value);
2346
2408
  }
2347
- static uint32_t Hash(HashTableKey* key) {
2409
+ static inline uint32_t Hash(HashTableKey* key) {
2348
2410
  return key->Hash();
2349
2411
  }
2350
- static uint32_t HashForObject(HashTableKey* key, Object* object) {
2412
+ static inline uint32_t HashForObject(HashTableKey* key, Object* object) {
2351
2413
  return key->HashForObject(object);
2352
2414
  }
2353
- MUST_USE_RESULT static MaybeObject* AsObject(HashTableKey* key) {
2415
+ MUST_USE_RESULT static inline MaybeObject* AsObject(HashTableKey* key) {
2354
2416
  return key->AsObject();
2355
2417
  }
2356
2418
 
@@ -2393,18 +2455,18 @@ class SymbolTable: public HashTable<SymbolTableShape, HashTableKey*> {
2393
2455
 
2394
2456
  class MapCacheShape {
2395
2457
  public:
2396
- static bool IsMatch(HashTableKey* key, Object* value) {
2458
+ static inline bool IsMatch(HashTableKey* key, Object* value) {
2397
2459
  return key->IsMatch(value);
2398
2460
  }
2399
- static uint32_t Hash(HashTableKey* key) {
2461
+ static inline uint32_t Hash(HashTableKey* key) {
2400
2462
  return key->Hash();
2401
2463
  }
2402
2464
 
2403
- static uint32_t HashForObject(HashTableKey* key, Object* object) {
2465
+ static inline uint32_t HashForObject(HashTableKey* key, Object* object) {
2404
2466
  return key->HashForObject(object);
2405
2467
  }
2406
2468
 
2407
- MUST_USE_RESULT static MaybeObject* AsObject(HashTableKey* key) {
2469
+ MUST_USE_RESULT static inline MaybeObject* AsObject(HashTableKey* key) {
2408
2470
  return key->AsObject();
2409
2471
  }
2410
2472
 
@@ -2443,13 +2505,18 @@ class Dictionary: public HashTable<Shape, Key> {
2443
2505
  }
2444
2506
 
2445
2507
  // Set the value for entry.
2446
- void ValueAtPut(int entry, Object* value) {
2508
+ // Returns false if the put wasn't performed due to property being read only.
2509
+ // Returns true on successful put.
2510
+ bool ValueAtPut(int entry, Object* value) {
2447
2511
  // Check that this value can actually be written.
2448
2512
  PropertyDetails details = DetailsAt(entry);
2449
2513
  // If a value has not been initilized we allow writing to it even if
2450
2514
  // it is read only (a declared const that has not been initialized).
2451
- if (details.IsReadOnly() && !ValueAt(entry)->IsTheHole()) return;
2452
- this->set(HashTable<Shape, Key>::EntryToIndex(entry)+1, value);
2515
+ if (details.IsReadOnly() && !ValueAt(entry)->IsTheHole()) {
2516
+ return false;
2517
+ }
2518
+ this->set(HashTable<Shape, Key>::EntryToIndex(entry) + 1, value);
2519
+ return true;
2453
2520
  }
2454
2521
 
2455
2522
  // Returns the property details for the property at entry.
@@ -2755,59 +2822,6 @@ class ByteArray: public HeapObject {
2755
2822
  };
2756
2823
 
2757
2824
 
2758
- // A PixelArray represents a fixed-size byte array with special semantics
2759
- // used for implementing the CanvasPixelArray object. Please see the
2760
- // specification at:
2761
- // http://www.whatwg.org/specs/web-apps/current-work/
2762
- // multipage/the-canvas-element.html#canvaspixelarray
2763
- // In particular, write access clamps the value written to 0 or 255 if the
2764
- // value written is outside this range.
2765
- class PixelArray: public HeapObject {
2766
- public:
2767
- // [length]: length of the array.
2768
- inline int length();
2769
- inline void set_length(int value);
2770
-
2771
- // [external_pointer]: The pointer to the external memory area backing this
2772
- // pixel array.
2773
- DECL_ACCESSORS(external_pointer, uint8_t) // Pointer to the data store.
2774
-
2775
- // Setter and getter.
2776
- inline uint8_t get(int index);
2777
- inline void set(int index, uint8_t value);
2778
-
2779
- // This accessor applies the correct conversion from Smi, HeapNumber and
2780
- // undefined and clamps the converted value between 0 and 255.
2781
- Object* SetValue(uint32_t index, Object* value);
2782
-
2783
- // Casting.
2784
- static inline PixelArray* cast(Object* obj);
2785
-
2786
- #ifdef OBJECT_PRINT
2787
- inline void PixelArrayPrint() {
2788
- PixelArrayPrint(stdout);
2789
- }
2790
- void PixelArrayPrint(FILE* out);
2791
- #endif
2792
- #ifdef DEBUG
2793
- void PixelArrayVerify();
2794
- #endif // DEBUG
2795
-
2796
- // Maximal acceptable length for a pixel array.
2797
- static const int kMaxLength = 0x3fffffff;
2798
-
2799
- // PixelArray headers are not quadword aligned.
2800
- static const int kLengthOffset = HeapObject::kHeaderSize;
2801
- static const int kExternalPointerOffset =
2802
- POINTER_SIZE_ALIGN(kLengthOffset + kIntSize);
2803
- static const int kHeaderSize = kExternalPointerOffset + kPointerSize;
2804
- static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
2805
-
2806
- private:
2807
- DISALLOW_IMPLICIT_CONSTRUCTORS(PixelArray);
2808
- };
2809
-
2810
-
2811
2825
  // An ExternalArray represents a fixed-size array of primitive values
2812
2826
  // which live outside the JavaScript heap. Its subclasses are used to
2813
2827
  // implement the CanvasArray types being defined in the WebGL
@@ -2847,6 +2861,44 @@ class ExternalArray: public HeapObject {
2847
2861
  };
2848
2862
 
2849
2863
 
2864
+ // A ExternalPixelArray represents a fixed-size byte array with special
2865
+ // semantics used for implementing the CanvasPixelArray object. Please see the
2866
+ // specification at:
2867
+
2868
+ // http://www.whatwg.org/specs/web-apps/current-work/
2869
+ // multipage/the-canvas-element.html#canvaspixelarray
2870
+ // In particular, write access clamps the value written to 0 or 255 if the
2871
+ // value written is outside this range.
2872
+ class ExternalPixelArray: public ExternalArray {
2873
+ public:
2874
+ inline uint8_t* external_pixel_pointer();
2875
+
2876
+ // Setter and getter.
2877
+ inline uint8_t get(int index);
2878
+ inline void set(int index, uint8_t value);
2879
+
2880
+ // This accessor applies the correct conversion from Smi, HeapNumber and
2881
+ // undefined and clamps the converted value between 0 and 255.
2882
+ Object* SetValue(uint32_t index, Object* value);
2883
+
2884
+ // Casting.
2885
+ static inline ExternalPixelArray* cast(Object* obj);
2886
+
2887
+ #ifdef OBJECT_PRINT
2888
+ inline void ExternalPixelArrayPrint() {
2889
+ ExternalPixelArrayPrint(stdout);
2890
+ }
2891
+ void ExternalPixelArrayPrint(FILE* out);
2892
+ #endif
2893
+ #ifdef DEBUG
2894
+ void ExternalPixelArrayVerify();
2895
+ #endif // DEBUG
2896
+
2897
+ private:
2898
+ DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray);
2899
+ };
2900
+
2901
+
2850
2902
  class ExternalByteArray: public ExternalArray {
2851
2903
  public:
2852
2904
  // Setter and getter.
@@ -3181,10 +3233,12 @@ class Code: public HeapObject {
3181
3233
  BUILTIN,
3182
3234
  LOAD_IC,
3183
3235
  KEYED_LOAD_IC,
3236
+ KEYED_EXTERNAL_ARRAY_LOAD_IC,
3184
3237
  CALL_IC,
3185
3238
  KEYED_CALL_IC,
3186
3239
  STORE_IC,
3187
3240
  KEYED_STORE_IC,
3241
+ KEYED_EXTERNAL_ARRAY_STORE_IC,
3188
3242
  BINARY_OP_IC,
3189
3243
  TYPE_RECORDING_BINARY_OP_IC,
3190
3244
  COMPARE_IC,
@@ -3259,6 +3313,12 @@ class Code: public HeapObject {
3259
3313
  return kind() == TYPE_RECORDING_BINARY_OP_IC;
3260
3314
  }
3261
3315
  inline bool is_compare_ic_stub() { return kind() == COMPARE_IC; }
3316
+ inline bool is_external_array_load_stub() {
3317
+ return kind() == KEYED_EXTERNAL_ARRAY_LOAD_IC;
3318
+ }
3319
+ inline bool is_external_array_store_stub() {
3320
+ return kind() == KEYED_EXTERNAL_ARRAY_STORE_IC;
3321
+ }
3262
3322
 
3263
3323
  // [major_key]: For kind STUB or BINARY_OP_IC, the major key.
3264
3324
  inline int major_key();
@@ -3300,6 +3360,12 @@ class Code: public HeapObject {
3300
3360
  inline CheckType check_type();
3301
3361
  inline void set_check_type(CheckType value);
3302
3362
 
3363
+ // [external array type]: For kind KEYED_EXTERNAL_ARRAY_LOAD_IC and
3364
+ // KEYED_EXTERNAL_ARRAY_STORE_IC, identifies the type of external
3365
+ // array that the code stub is specialized for.
3366
+ inline ExternalArrayType external_array_type();
3367
+ inline void set_external_array_type(ExternalArrayType value);
3368
+
3303
3369
  // [binary op type]: For all BINARY_OP_IC.
3304
3370
  inline byte binary_op_type();
3305
3371
  inline void set_binary_op_type(byte value);
@@ -3410,7 +3476,7 @@ class Code: public HeapObject {
3410
3476
  inline void CodeIterateBody(ObjectVisitor* v);
3411
3477
 
3412
3478
  template<typename StaticVisitor>
3413
- inline void CodeIterateBody();
3479
+ inline void CodeIterateBody(Heap* heap);
3414
3480
  #ifdef OBJECT_PRINT
3415
3481
  inline void CodePrint() {
3416
3482
  CodePrint(stdout);
@@ -3421,6 +3487,10 @@ class Code: public HeapObject {
3421
3487
  void CodeVerify();
3422
3488
  #endif
3423
3489
 
3490
+ // Returns the isolate/heap this code object belongs to.
3491
+ inline Isolate* isolate();
3492
+ inline Heap* heap();
3493
+
3424
3494
  // Max loop nesting marker used to postpose OSR. We don't take loop
3425
3495
  // nesting that is deeper than 5 levels into account.
3426
3496
  static const int kMaxLoopNestingMarker = 6;
@@ -3448,6 +3518,7 @@ class Code: public HeapObject {
3448
3518
  static const int kOptimizableOffset = kKindSpecificFlagsOffset;
3449
3519
  static const int kStackSlotsOffset = kKindSpecificFlagsOffset;
3450
3520
  static const int kCheckTypeOffset = kKindSpecificFlagsOffset;
3521
+ static const int kExternalArrayTypeOffset = kKindSpecificFlagsOffset;
3451
3522
 
3452
3523
  static const int kCompareStateOffset = kStubMajorKeyOffset + 1;
3453
3524
  static const int kBinaryOpTypeOffset = kStubMajorKeyOffset + 1;
@@ -3464,18 +3535,18 @@ class Code: public HeapObject {
3464
3535
  static const int kFlagsICStateShift = 0;
3465
3536
  static const int kFlagsICInLoopShift = 3;
3466
3537
  static const int kFlagsTypeShift = 4;
3467
- static const int kFlagsKindShift = 7;
3468
- static const int kFlagsICHolderShift = 11;
3469
- static const int kFlagsExtraICStateShift = 12;
3470
- static const int kFlagsArgumentsCountShift = 14;
3538
+ static const int kFlagsKindShift = 8;
3539
+ static const int kFlagsICHolderShift = 12;
3540
+ static const int kFlagsExtraICStateShift = 13;
3541
+ static const int kFlagsArgumentsCountShift = 15;
3471
3542
 
3472
3543
  static const int kFlagsICStateMask = 0x00000007; // 00000000111
3473
3544
  static const int kFlagsICInLoopMask = 0x00000008; // 00000001000
3474
- static const int kFlagsTypeMask = 0x00000070; // 00001110000
3475
- static const int kFlagsKindMask = 0x00000780; // 11110000000
3476
- static const int kFlagsCacheInPrototypeMapMask = 0x00000800;
3477
- static const int kFlagsExtraICStateMask = 0x00003000;
3478
- static const int kFlagsArgumentsCountMask = 0xFFFFC000;
3545
+ static const int kFlagsTypeMask = 0x000000F0; // 00001110000
3546
+ static const int kFlagsKindMask = 0x00000F00; // 11110000000
3547
+ static const int kFlagsCacheInPrototypeMapMask = 0x00001000;
3548
+ static const int kFlagsExtraICStateMask = 0x00006000;
3549
+ static const int kFlagsArgumentsCountMask = 0xFFFF8000;
3479
3550
 
3480
3551
  static const int kFlagsNotUsedInLookup =
3481
3552
  (kFlagsICInLoopMask | kFlagsTypeMask | kFlagsCacheInPrototypeMapMask);
@@ -3605,16 +3676,16 @@ class Map: public HeapObject {
3605
3676
  }
3606
3677
 
3607
3678
  // Tells whether an instance has pixel array elements.
3608
- inline void set_has_pixel_array_elements(bool value) {
3679
+ inline void set_has_external_array_elements(bool value) {
3609
3680
  if (value) {
3610
- set_bit_field2(bit_field2() | (1 << kHasPixelArrayElements));
3681
+ set_bit_field2(bit_field2() | (1 << kHasExternalArrayElements));
3611
3682
  } else {
3612
- set_bit_field2(bit_field2() & ~(1 << kHasPixelArrayElements));
3683
+ set_bit_field2(bit_field2() & ~(1 << kHasExternalArrayElements));
3613
3684
  }
3614
3685
  }
3615
3686
 
3616
- inline bool has_pixel_array_elements() {
3617
- return ((1 << kHasPixelArrayElements) & bit_field2()) != 0;
3687
+ inline bool has_external_array_elements() {
3688
+ return ((1 << kHasExternalArrayElements) & bit_field2()) != 0;
3618
3689
  }
3619
3690
 
3620
3691
  // Tells whether the map is attached to SharedFunctionInfo
@@ -3675,10 +3746,11 @@ class Map: public HeapObject {
3675
3746
  // from the descriptors and the fast elements bit cleared.
3676
3747
  MUST_USE_RESULT inline MaybeObject* GetSlowElementsMap();
3677
3748
 
3678
- // Returns this map if it has the pixel array elements bit is set, otherwise
3679
- // returns a copy of the map, with all transitions dropped from the
3680
- // descriptors and the pixel array elements bit set.
3681
- MUST_USE_RESULT inline MaybeObject* GetPixelArrayElementsMap();
3749
+ // Returns a new map with all transitions dropped from the descriptors and the
3750
+ // external array elements bit set.
3751
+ MUST_USE_RESULT MaybeObject* GetExternalArrayElementsMap(
3752
+ ExternalArrayType array_type,
3753
+ bool safe_to_add_transition);
3682
3754
 
3683
3755
  // Returns the property index for name (only valid for FAST MODE).
3684
3756
  int PropertyIndexFor(String* name);
@@ -3698,7 +3770,7 @@ class Map: public HeapObject {
3698
3770
  // Code cache operations.
3699
3771
 
3700
3772
  // Clears the code cache.
3701
- inline void ClearCodeCache();
3773
+ inline void ClearCodeCache(Heap* heap);
3702
3774
 
3703
3775
  // Update code cache.
3704
3776
  MUST_USE_RESULT MaybeObject* UpdateCodeCache(String* name, Code* code);
@@ -3722,7 +3794,7 @@ class Map: public HeapObject {
3722
3794
  // Also, restore the original prototype on the targets of these
3723
3795
  // transitions, so that we do not process this map again while
3724
3796
  // following back pointers.
3725
- void ClearNonLiveTransitions(Object* real_prototype);
3797
+ void ClearNonLiveTransitions(Heap* heap, Object* real_prototype);
3726
3798
 
3727
3799
  // Dispatched behavior.
3728
3800
  #ifdef OBJECT_PRINT
@@ -3739,6 +3811,10 @@ class Map: public HeapObject {
3739
3811
  inline int visitor_id();
3740
3812
  inline void set_visitor_id(int visitor_id);
3741
3813
 
3814
+ // Returns the isolate/heap this map belongs to.
3815
+ inline Isolate* isolate();
3816
+ inline Heap* heap();
3817
+
3742
3818
  typedef void (*TraverseCallback)(Map* map, void* data);
3743
3819
 
3744
3820
  void TraverseTransitionTree(TraverseCallback callback, void* data);
@@ -3798,7 +3874,7 @@ class Map: public HeapObject {
3798
3874
  static const int kStringWrapperSafeForDefaultValueOf = 3;
3799
3875
  static const int kAttachedToSharedFunctionInfo = 4;
3800
3876
  static const int kIsShared = 5;
3801
- static const int kHasPixelArrayElements = 6;
3877
+ static const int kHasExternalArrayElements = 6;
3802
3878
 
3803
3879
  // Layout of the default cache. It holds alternating name and code objects.
3804
3880
  static const int kCodeCacheEntrySize = 2;
@@ -4183,9 +4259,6 @@ class SharedFunctionInfo: public HeapObject {
4183
4259
  // this.x = y; where y is either a constant or refers to an argument.
4184
4260
  inline bool has_only_simple_this_property_assignments();
4185
4261
 
4186
- inline bool try_full_codegen();
4187
- inline void set_try_full_codegen(bool flag);
4188
-
4189
4262
  // Indicates if this function can be lazy compiled.
4190
4263
  // This is used to determine if we can safely flush code from a function
4191
4264
  // when doing GC if we expect that the function will no longer be used.
@@ -4385,13 +4458,12 @@ class SharedFunctionInfo: public HeapObject {
4385
4458
 
4386
4459
  // Bit positions in compiler_hints.
4387
4460
  static const int kHasOnlySimpleThisPropertyAssignments = 0;
4388
- static const int kTryFullCodegen = 1;
4389
- static const int kAllowLazyCompilation = 2;
4390
- static const int kLiveObjectsMayExist = 3;
4391
- static const int kCodeAgeShift = 4;
4461
+ static const int kAllowLazyCompilation = 1;
4462
+ static const int kLiveObjectsMayExist = 2;
4463
+ static const int kCodeAgeShift = 3;
4392
4464
  static const int kCodeAgeMask = 0x7;
4393
- static const int kOptimizationDisabled = 7;
4394
- static const int kStrictModeFunction = 8;
4465
+ static const int kOptimizationDisabled = 6;
4466
+ static const int kStrictModeFunction = 7;
4395
4467
 
4396
4468
  private:
4397
4469
  #if V8_HOST_ARCH_32_BIT
@@ -5136,6 +5208,11 @@ class StringHasher {
5136
5208
  };
5137
5209
 
5138
5210
 
5211
+ // Calculates string hash.
5212
+ template <typename schar>
5213
+ inline uint32_t HashSequentialString(const schar* chars, int length);
5214
+
5215
+
5139
5216
  // The characteristics of a string are stored in its map. Retrieving these
5140
5217
  // few bits of information is moderately expensive, involving two memory
5141
5218
  // loads where the second is dependent on the first. To improve efficiency
@@ -5779,11 +5856,8 @@ class ExternalTwoByteString: public ExternalString {
5779
5856
  // iterating or updating after gc.
5780
5857
  class Relocatable BASE_EMBEDDED {
5781
5858
  public:
5782
- inline Relocatable() : prev_(top_) { top_ = this; }
5783
- virtual ~Relocatable() {
5784
- ASSERT_EQ(top_, this);
5785
- top_ = prev_;
5786
- }
5859
+ explicit inline Relocatable(Isolate* isolate);
5860
+ inline virtual ~Relocatable();
5787
5861
  virtual void IterateInstance(ObjectVisitor* v) { }
5788
5862
  virtual void PostGarbageCollection() { }
5789
5863
 
@@ -5795,7 +5869,7 @@ class Relocatable BASE_EMBEDDED {
5795
5869
  static void Iterate(ObjectVisitor* v, Relocatable* top);
5796
5870
  static char* Iterate(ObjectVisitor* v, char* t);
5797
5871
  private:
5798
- static Relocatable* top_;
5872
+ Isolate* isolate_;
5799
5873
  Relocatable* prev_;
5800
5874
  };
5801
5875
 
@@ -5805,8 +5879,8 @@ class Relocatable BASE_EMBEDDED {
5805
5879
  // must be valid as long as the reader is being used.
5806
5880
  class FlatStringReader : public Relocatable {
5807
5881
  public:
5808
- explicit FlatStringReader(Handle<String> str);
5809
- explicit FlatStringReader(Vector<const char> input);
5882
+ FlatStringReader(Isolate* isolate, Handle<String> str);
5883
+ FlatStringReader(Isolate* isolate, Vector<const char> input);
5810
5884
  void PostGarbageCollection();
5811
5885
  inline uc32 Get(int index);
5812
5886
  int length() { return length_; }
@@ -5869,6 +5943,9 @@ class Oddball: public HeapObject {
5869
5943
  // [to_number]: Cached to_number computed at startup.
5870
5944
  DECL_ACCESSORS(to_number, Object)
5871
5945
 
5946
+ inline byte kind();
5947
+ inline void set_kind(byte kind);
5948
+
5872
5949
  // Casting.
5873
5950
  static inline Oddball* cast(Object* obj);
5874
5951
 
@@ -5879,12 +5956,23 @@ class Oddball: public HeapObject {
5879
5956
 
5880
5957
  // Initialize the fields.
5881
5958
  MUST_USE_RESULT MaybeObject* Initialize(const char* to_string,
5882
- Object* to_number);
5959
+ Object* to_number,
5960
+ byte kind);
5883
5961
 
5884
5962
  // Layout description.
5885
5963
  static const int kToStringOffset = HeapObject::kHeaderSize;
5886
5964
  static const int kToNumberOffset = kToStringOffset + kPointerSize;
5887
- static const int kSize = kToNumberOffset + kPointerSize;
5965
+ static const int kKindOffset = kToNumberOffset + kPointerSize;
5966
+ static const int kSize = kKindOffset + kPointerSize;
5967
+
5968
+ static const byte kFalse = 0;
5969
+ static const byte kTrue = 1;
5970
+ static const byte kNotBooleanMask = ~1;
5971
+ static const byte kTheHole = 2;
5972
+ static const byte kNull = 3;
5973
+ static const byte kArgumentMarker = 4;
5974
+ static const byte kUndefined = 5;
5975
+ static const byte kOther = 6;
5888
5976
 
5889
5977
  typedef FixedBodyDescriptor<kToStringOffset,
5890
5978
  kToNumberOffset + kPointerSize,
@@ -5921,6 +6009,10 @@ class JSGlobalPropertyCell: public HeapObject {
5921
6009
  kValueOffset + kPointerSize,
5922
6010
  kSize> BodyDescriptor;
5923
6011
 
6012
+ // Returns the isolate/heap this cell object belongs to.
6013
+ inline Isolate* isolate();
6014
+ inline Heap* heap();
6015
+
5924
6016
  private:
5925
6017
  DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell);
5926
6018
  };
@@ -6517,6 +6609,9 @@ class ObjectVisitor BASE_EMBEDDED {
6517
6609
  VisitExternalReferences(p, p + 1);
6518
6610
  }
6519
6611
 
6612
+ // Visits a handle that has an embedder-assigned class ID.
6613
+ virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {}
6614
+
6520
6615
  #ifdef DEBUG
6521
6616
  // Intended for serialization/deserialization checking: insert, or
6522
6617
  // check for the presence of, a tag at this position in the stream.