mustang 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -40,7 +40,6 @@ namespace internal {
40
40
  V(GenericBinaryOp) \
41
41
  V(TypeRecordingBinaryOp) \
42
42
  V(StringAdd) \
43
- V(StringCharAt) \
44
43
  V(SubString) \
45
44
  V(StringCompare) \
46
45
  V(SmiOp) \
@@ -81,10 +80,19 @@ namespace internal {
81
80
  #define CODE_STUB_LIST_ARM(V)
82
81
  #endif
83
82
 
83
+ // List of code stubs only used on MIPS platforms.
84
+ #ifdef V8_TARGET_ARCH_MIPS
85
+ #define CODE_STUB_LIST_MIPS(V) \
86
+ V(RegExpCEntry)
87
+ #else
88
+ #define CODE_STUB_LIST_MIPS(V)
89
+ #endif
90
+
84
91
  // Combined list of code stubs.
85
92
  #define CODE_STUB_LIST(V) \
86
93
  CODE_STUB_LIST_ALL_PLATFORMS(V) \
87
- CODE_STUB_LIST_ARM(V)
94
+ CODE_STUB_LIST_ARM(V) \
95
+ CODE_STUB_LIST_MIPS(V)
88
96
 
89
97
  // Mode to overwrite BinaryExpression values.
90
98
  enum OverwriteMode { NO_OVERWRITE, OVERWRITE_LEFT, OVERWRITE_RIGHT };
@@ -167,7 +175,11 @@ class CodeStub BASE_EMBEDDED {
167
175
  // Returns a name for logging/debugging purposes.
168
176
  virtual const char* GetName() { return MajorName(MajorKey(), false); }
169
177
 
170
- #ifdef DEBUG
178
+ // Returns whether the code generated for this stub needs to be allocated as
179
+ // a fixed (non-moveable) code object.
180
+ virtual bool NeedsImmovableCode() { return false; }
181
+
182
+ #ifdef DEBUG
171
183
  virtual void Print() { PrintF("%s\n", GetName()); }
172
184
  #endif
173
185
 
@@ -274,12 +286,17 @@ class ToNumberStub: public CodeStub {
274
286
 
275
287
  class FastNewClosureStub : public CodeStub {
276
288
  public:
289
+ explicit FastNewClosureStub(StrictModeFlag strict_mode)
290
+ : strict_mode_(strict_mode) { }
291
+
277
292
  void Generate(MacroAssembler* masm);
278
293
 
279
294
  private:
280
295
  const char* GetName() { return "FastNewClosureStub"; }
281
296
  Major MajorKey() { return FastNewClosure; }
282
- int MinorKey() { return 0; }
297
+ int MinorKey() { return strict_mode_; }
298
+
299
+ StrictModeFlag strict_mode_;
283
300
  };
284
301
 
285
302
 
@@ -434,18 +451,6 @@ class MathPowStub: public CodeStub {
434
451
  };
435
452
 
436
453
 
437
- class StringCharAtStub: public CodeStub {
438
- public:
439
- StringCharAtStub() {}
440
-
441
- private:
442
- Major MajorKey() { return StringCharAt; }
443
- int MinorKey() { return 0; }
444
-
445
- void Generate(MacroAssembler* masm);
446
- };
447
-
448
-
449
454
  class ICCompareStub: public CodeStub {
450
455
  public:
451
456
  ICCompareStub(Token::Value op, CompareIC::State state)
@@ -623,6 +628,8 @@ class CEntryStub : public CodeStub {
623
628
  Major MajorKey() { return CEntry; }
624
629
  int MinorKey();
625
630
 
631
+ bool NeedsImmovableCode();
632
+
626
633
  const char* GetName() { return "CEntryStub"; }
627
634
  };
628
635
 
@@ -661,7 +668,8 @@ class ArgumentsAccessStub: public CodeStub {
661
668
  public:
662
669
  enum Type {
663
670
  READ_ELEMENT,
664
- NEW_OBJECT
671
+ NEW_NON_STRICT,
672
+ NEW_STRICT
665
673
  };
666
674
 
667
675
  explicit ArgumentsAccessStub(Type type) : type_(type) { }
@@ -676,6 +684,19 @@ class ArgumentsAccessStub: public CodeStub {
676
684
  void GenerateReadElement(MacroAssembler* masm);
677
685
  void GenerateNewObject(MacroAssembler* masm);
678
686
 
687
+ int GetArgumentsBoilerplateIndex() const {
688
+ return (type_ == NEW_STRICT)
689
+ ? Context::STRICT_MODE_ARGUMENTS_BOILERPLATE_INDEX
690
+ : Context::ARGUMENTS_BOILERPLATE_INDEX;
691
+ }
692
+
693
+ int GetArgumentsObjectSize() const {
694
+ if (type_ == NEW_STRICT)
695
+ return Heap::kArgumentsObjectSizeStrict;
696
+ else
697
+ return Heap::kArgumentsObjectSize;
698
+ }
699
+
679
700
  const char* GetName() { return "ArgumentsAccessStub"; }
680
701
 
681
702
  #ifdef DEBUG
@@ -55,8 +55,12 @@ bool CodeGenerator::is_eval() { return info_->is_eval(); }
55
55
 
56
56
  Scope* CodeGenerator::scope() { return info_->function()->scope(); }
57
57
 
58
+ bool CodeGenerator::is_strict_mode() {
59
+ return info_->function()->strict_mode();
60
+ }
61
+
58
62
  StrictModeFlag CodeGenerator::strict_mode_flag() {
59
- return info_->function()->strict_mode() ? kStrictMode : kNonStrictMode;
63
+ return is_strict_mode() ? kStrictMode : kNonStrictMode;
60
64
  }
61
65
 
62
66
  } } // namespace v8::internal
@@ -61,9 +61,6 @@ Comment::~Comment() {
61
61
  #undef __
62
62
 
63
63
 
64
- CodeGenerator* CodeGeneratorScope::top_ = NULL;
65
-
66
-
67
64
  void CodeGenerator::ProcessDeferred() {
68
65
  while (!deferred_.is_empty()) {
69
66
  DeferredCode* code = deferred_.RemoveLast();
@@ -129,7 +126,7 @@ void CodeGenerator::MakeCodePrologue(CompilationInfo* info) {
129
126
  bool print_json_ast = false;
130
127
  const char* ftype;
131
128
 
132
- if (Bootstrapper::IsActive()) {
129
+ if (Isolate::Current()->bootstrapper()->IsActive()) {
133
130
  print_source = FLAG_print_builtin_source;
134
131
  print_ast = FLAG_print_builtin_ast;
135
132
  print_json_ast = FLAG_print_builtin_json_ast;
@@ -178,13 +175,17 @@ void CodeGenerator::MakeCodePrologue(CompilationInfo* info) {
178
175
  Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm,
179
176
  Code::Flags flags,
180
177
  CompilationInfo* info) {
178
+ Isolate* isolate = info->isolate();
179
+
181
180
  // Allocate and install the code.
182
181
  CodeDesc desc;
183
182
  masm->GetCode(&desc);
184
- Handle<Code> code = Factory::NewCode(desc, flags, masm->CodeObject());
183
+ Handle<Code> code =
184
+ isolate->factory()->NewCode(desc, flags, masm->CodeObject());
185
185
 
186
186
  if (!code.is_null()) {
187
- Counters::total_compiled_code_size.Increment(code->instruction_size());
187
+ isolate->counters()->total_compiled_code_size()->Increment(
188
+ code->instruction_size());
188
189
  }
189
190
  return code;
190
191
  }
@@ -192,7 +193,7 @@ Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm,
192
193
 
193
194
  void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
194
195
  #ifdef ENABLE_DISASSEMBLER
195
- bool print_code = Bootstrapper::IsActive()
196
+ bool print_code = Isolate::Current()->bootstrapper()->IsActive()
196
197
  ? FLAG_print_builtin_code
197
198
  : (FLAG_print_code || (info->IsOptimizing() && FLAG_print_opt_code));
198
199
  Vector<const char> filter = CStrVector(FLAG_hydrogen_filter);
@@ -238,7 +239,8 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
238
239
  Handle<Script> script = info->script();
239
240
  if (!script->IsUndefined() && !script->source()->IsUndefined()) {
240
241
  int len = String::cast(script->source())->length();
241
- Counters::total_old_codegen_source_size.Increment(len);
242
+ Counters* counters = info->isolate()->counters();
243
+ counters->total_old_codegen_source_size()->Increment(len);
242
244
  }
243
245
  if (FLAG_trace_codegen) {
244
246
  PrintF("Classic Compiler - ");
@@ -246,15 +248,15 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
246
248
  MakeCodePrologue(info);
247
249
  // Generate code.
248
250
  const int kInitialBufferSize = 4 * KB;
249
- MacroAssembler masm(NULL, kInitialBufferSize);
251
+ MacroAssembler masm(info->isolate(), NULL, kInitialBufferSize);
250
252
  #ifdef ENABLE_GDB_JIT_INTERFACE
251
253
  masm.positions_recorder()->StartGDBJITLineInfoRecording();
252
254
  #endif
253
255
  CodeGenerator cgen(&masm);
254
- CodeGeneratorScope scope(&cgen);
256
+ CodeGeneratorScope scope(Isolate::Current(), &cgen);
255
257
  cgen.Generate(info);
256
258
  if (cgen.HasStackOverflow()) {
257
- ASSERT(!Top::has_pending_exception());
259
+ ASSERT(!Isolate::Current()->has_pending_exception());
258
260
  return false;
259
261
  }
260
262
 
@@ -279,12 +281,15 @@ bool CodeGenerator::MakeCode(CompilationInfo* info) {
279
281
 
280
282
  #ifdef ENABLE_LOGGING_AND_PROFILING
281
283
 
284
+
285
+ static Vector<const char> kRegexp = CStrVector("regexp");
286
+
287
+
282
288
  bool CodeGenerator::ShouldGenerateLog(Expression* type) {
283
289
  ASSERT(type != NULL);
284
- if (!Logger::is_logging() && !CpuProfiler::is_profiling()) return false;
290
+ if (!LOGGER->is_logging() && !CpuProfiler::is_profiling()) return false;
285
291
  Handle<String> name = Handle<String>::cast(type->AsLiteral()->handle());
286
292
  if (FLAG_log_regexp) {
287
- static Vector<const char> kRegexp = CStrVector("regexp");
288
293
  if (name->IsEqualTo(kRegexp))
289
294
  return true;
290
295
  }
@@ -317,7 +322,7 @@ void CodeGenerator::ProcessDeclarations(ZoneList<Declaration*>* declarations) {
317
322
  if (globals == 0) return;
318
323
 
319
324
  // Compute array of global variable and function declarations.
320
- Handle<FixedArray> array = Factory::NewFixedArray(2 * globals, TENURED);
325
+ Handle<FixedArray> array = FACTORY->NewFixedArray(2 * globals, TENURED);
321
326
  for (int j = 0, i = 0; i < length; i++) {
322
327
  Declaration* node = declarations->at(i);
323
328
  Variable* var = node->proxy()->var();
@@ -374,7 +379,7 @@ const CodeGenerator::InlineFunctionGenerator
374
379
  bool CodeGenerator::CheckForInlineRuntimeCall(CallRuntime* node) {
375
380
  ZoneList<Expression*>* args = node->arguments();
376
381
  Handle<String> name = node->name();
377
- Runtime::Function* function = node->function();
382
+ const Runtime::Function* function = node->function();
378
383
  if (function != NULL && function->intrinsic_type == Runtime::INLINE) {
379
384
  int lookup_index = static_cast<int>(function->function_id) -
380
385
  static_cast<int>(Runtime::kFirstInlineFunction);
@@ -475,8 +480,13 @@ const char* GenericUnaryOpStub::GetName() {
475
480
 
476
481
  void ArgumentsAccessStub::Generate(MacroAssembler* masm) {
477
482
  switch (type_) {
478
- case READ_ELEMENT: GenerateReadElement(masm); break;
479
- case NEW_OBJECT: GenerateNewObject(masm); break;
483
+ case READ_ELEMENT:
484
+ GenerateReadElement(masm);
485
+ break;
486
+ case NEW_NON_STRICT:
487
+ case NEW_STRICT:
488
+ GenerateNewObject(masm);
489
+ break;
480
490
  }
481
491
  }
482
492
 
@@ -92,26 +92,26 @@ namespace internal {
92
92
  // of active code generators.
93
93
  class CodeGeneratorScope BASE_EMBEDDED {
94
94
  public:
95
- explicit CodeGeneratorScope(CodeGenerator* cgen) {
96
- previous_ = top_;
97
- top_ = cgen;
95
+ explicit CodeGeneratorScope(Isolate* isolate, CodeGenerator* cgen)
96
+ : isolate_(isolate) {
97
+ previous_ = isolate->current_code_generator();
98
+ isolate->set_current_code_generator(cgen);
98
99
  }
99
100
 
100
101
  ~CodeGeneratorScope() {
101
- top_ = previous_;
102
+ isolate_->set_current_code_generator(previous_);
102
103
  }
103
104
 
104
- static CodeGenerator* Current() {
105
- ASSERT(top_ != NULL);
106
- return top_;
105
+ static CodeGenerator* Current(Isolate* isolate) {
106
+ ASSERT(isolate->current_code_generator() != NULL);
107
+ return isolate->current_code_generator();
107
108
  }
108
109
 
109
110
  private:
110
- static CodeGenerator* top_;
111
111
  CodeGenerator* previous_;
112
+ Isolate* isolate_;
112
113
  };
113
114
 
114
-
115
115
  #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64
116
116
 
117
117
  // State of used registers in a virtual frame.
@@ -33,8 +33,6 @@
33
33
  namespace v8 {
34
34
  namespace internal {
35
35
 
36
- // The number of sub caches covering the different types to cache.
37
- static const int kSubCacheCount = 4;
38
36
 
39
37
  // The number of generations for each sub cache.
40
38
  // The number of ScriptGenerations is carefully chosen based on histograms.
@@ -47,162 +45,32 @@ static const int kRegExpGenerations = 2;
47
45
  // Initial size of each compilation cache table allocated.
48
46
  static const int kInitialCacheSize = 64;
49
47
 
50
- // Index for the first generation in the cache.
51
- static const int kFirstGeneration = 0;
52
-
53
- // The compilation cache consists of several generational sub-caches which uses
54
- // this class as a base class. A sub-cache contains a compilation cache tables
55
- // for each generation of the sub-cache. Since the same source code string has
56
- // different compiled code for scripts and evals, we use separate sub-caches
57
- // for different compilation modes, to avoid retrieving the wrong result.
58
- class CompilationSubCache {
59
- public:
60
- explicit CompilationSubCache(int generations): generations_(generations) {
61
- tables_ = NewArray<Object*>(generations);
62
- }
63
-
64
- ~CompilationSubCache() { DeleteArray(tables_); }
65
-
66
- // Get the compilation cache tables for a specific generation.
67
- Handle<CompilationCacheTable> GetTable(int generation);
68
48
 
69
- // Accessors for first generation.
70
- Handle<CompilationCacheTable> GetFirstTable() {
71
- return GetTable(kFirstGeneration);
49
+ CompilationCache::CompilationCache(Isolate* isolate)
50
+ : isolate_(isolate),
51
+ script_(isolate, kScriptGenerations),
52
+ eval_global_(isolate, kEvalGlobalGenerations),
53
+ eval_contextual_(isolate, kEvalContextualGenerations),
54
+ reg_exp_(isolate, kRegExpGenerations),
55
+ enabled_(true),
56
+ eager_optimizing_set_(NULL) {
57
+ CompilationSubCache* subcaches[kSubCacheCount] =
58
+ {&script_, &eval_global_, &eval_contextual_, &reg_exp_};
59
+ for (int i = 0; i < kSubCacheCount; ++i) {
60
+ subcaches_[i] = subcaches[i];
72
61
  }
73
- void SetFirstTable(Handle<CompilationCacheTable> value) {
74
- ASSERT(kFirstGeneration < generations_);
75
- tables_[kFirstGeneration] = *value;
76
- }
77
-
78
- // Age the sub-cache by evicting the oldest generation and creating a new
79
- // young generation.
80
- void Age();
81
-
82
- // GC support.
83
- void Iterate(ObjectVisitor* v);
84
- void IterateFunctions(ObjectVisitor* v);
85
-
86
- // Clear this sub-cache evicting all its content.
87
- void Clear();
88
-
89
- // Remove given shared function info from sub-cache.
90
- void Remove(Handle<SharedFunctionInfo> function_info);
91
-
92
- // Number of generations in this sub-cache.
93
- inline int generations() { return generations_; }
94
-
95
- private:
96
- int generations_; // Number of generations.
97
- Object** tables_; // Compilation cache tables - one for each generation.
98
-
99
- DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationSubCache);
100
- };
101
-
102
-
103
- // Sub-cache for scripts.
104
- class CompilationCacheScript : public CompilationSubCache {
105
- public:
106
- explicit CompilationCacheScript(int generations)
107
- : CompilationSubCache(generations) { }
108
-
109
- Handle<SharedFunctionInfo> Lookup(Handle<String> source,
110
- Handle<Object> name,
111
- int line_offset,
112
- int column_offset);
113
- void Put(Handle<String> source, Handle<SharedFunctionInfo> function_info);
114
-
115
- private:
116
- MUST_USE_RESULT MaybeObject* TryTablePut(
117
- Handle<String> source, Handle<SharedFunctionInfo> function_info);
118
-
119
- // Note: Returns a new hash table if operation results in expansion.
120
- Handle<CompilationCacheTable> TablePut(
121
- Handle<String> source, Handle<SharedFunctionInfo> function_info);
122
-
123
- bool HasOrigin(Handle<SharedFunctionInfo> function_info,
124
- Handle<Object> name,
125
- int line_offset,
126
- int column_offset);
127
-
128
- DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheScript);
129
- };
130
-
131
-
132
- // Sub-cache for eval scripts.
133
- class CompilationCacheEval: public CompilationSubCache {
134
- public:
135
- explicit CompilationCacheEval(int generations)
136
- : CompilationSubCache(generations) { }
137
-
138
- Handle<SharedFunctionInfo> Lookup(Handle<String> source,
139
- Handle<Context> context,
140
- StrictModeFlag strict_mode);
141
-
142
- void Put(Handle<String> source,
143
- Handle<Context> context,
144
- Handle<SharedFunctionInfo> function_info);
145
-
146
- private:
147
- MUST_USE_RESULT MaybeObject* TryTablePut(
148
- Handle<String> source,
149
- Handle<Context> context,
150
- Handle<SharedFunctionInfo> function_info);
151
-
152
-
153
- // Note: Returns a new hash table if operation results in expansion.
154
- Handle<CompilationCacheTable> TablePut(
155
- Handle<String> source,
156
- Handle<Context> context,
157
- Handle<SharedFunctionInfo> function_info);
158
-
159
- DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheEval);
160
- };
161
-
162
-
163
- // Sub-cache for regular expressions.
164
- class CompilationCacheRegExp: public CompilationSubCache {
165
- public:
166
- explicit CompilationCacheRegExp(int generations)
167
- : CompilationSubCache(generations) { }
168
-
169
- Handle<FixedArray> Lookup(Handle<String> source, JSRegExp::Flags flags);
170
-
171
- void Put(Handle<String> source,
172
- JSRegExp::Flags flags,
173
- Handle<FixedArray> data);
174
- private:
175
- MUST_USE_RESULT MaybeObject* TryTablePut(Handle<String> source,
176
- JSRegExp::Flags flags,
177
- Handle<FixedArray> data);
178
-
179
- // Note: Returns a new hash table if operation results in expansion.
180
- Handle<CompilationCacheTable> TablePut(Handle<String> source,
181
- JSRegExp::Flags flags,
182
- Handle<FixedArray> data);
183
-
184
- DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheRegExp);
185
- };
186
-
187
-
188
- // Statically allocate all the sub-caches.
189
- static CompilationCacheScript script(kScriptGenerations);
190
- static CompilationCacheEval eval_global(kEvalGlobalGenerations);
191
- static CompilationCacheEval eval_contextual(kEvalContextualGenerations);
192
- static CompilationCacheRegExp reg_exp(kRegExpGenerations);
193
- static CompilationSubCache* subcaches[kSubCacheCount] =
194
- {&script, &eval_global, &eval_contextual, &reg_exp};
62
+ }
195
63
 
196
64
 
197
- // Current enable state of the compilation cache.
198
- static bool enabled = true;
199
- static inline bool IsEnabled() {
200
- return FLAG_compilation_cache && enabled;
65
+ CompilationCache::~CompilationCache() {
66
+ delete eager_optimizing_set_;
67
+ eager_optimizing_set_ = NULL;
201
68
  }
202
69
 
203
70
 
204
- static Handle<CompilationCacheTable> AllocateTable(int size) {
205
- CALL_HEAP_FUNCTION(CompilationCacheTable::Allocate(size),
71
+ static Handle<CompilationCacheTable> AllocateTable(Isolate* isolate, int size) {
72
+ CALL_HEAP_FUNCTION(isolate,
73
+ CompilationCacheTable::Allocate(size),
206
74
  CompilationCacheTable);
207
75
  }
208
76
 
@@ -211,17 +79,16 @@ Handle<CompilationCacheTable> CompilationSubCache::GetTable(int generation) {
211
79
  ASSERT(generation < generations_);
212
80
  Handle<CompilationCacheTable> result;
213
81
  if (tables_[generation]->IsUndefined()) {
214
- result = AllocateTable(kInitialCacheSize);
82
+ result = AllocateTable(isolate(), kInitialCacheSize);
215
83
  tables_[generation] = *result;
216
84
  } else {
217
85
  CompilationCacheTable* table =
218
86
  CompilationCacheTable::cast(tables_[generation]);
219
- result = Handle<CompilationCacheTable>(table);
87
+ result = Handle<CompilationCacheTable>(table, isolate());
220
88
  }
221
89
  return result;
222
90
  }
223
91
 
224
-
225
92
  void CompilationSubCache::Age() {
226
93
  // Age the generations implicitly killing off the oldest.
227
94
  for (int i = generations_ - 1; i > 0; i--) {
@@ -229,12 +96,12 @@ void CompilationSubCache::Age() {
229
96
  }
230
97
 
231
98
  // Set the first generation as unborn.
232
- tables_[0] = Heap::undefined_value();
99
+ tables_[0] = isolate()->heap()->undefined_value();
233
100
  }
234
101
 
235
102
 
236
103
  void CompilationSubCache::IterateFunctions(ObjectVisitor* v) {
237
- Object* undefined = Heap::raw_unchecked_undefined_value();
104
+ Object* undefined = isolate()->heap()->raw_unchecked_undefined_value();
238
105
  for (int i = 0; i < generations_; i++) {
239
106
  if (tables_[i] != undefined) {
240
107
  reinterpret_cast<CompilationCacheTable*>(tables_[i])->IterateElements(v);
@@ -249,14 +116,14 @@ void CompilationSubCache::Iterate(ObjectVisitor* v) {
249
116
 
250
117
 
251
118
  void CompilationSubCache::Clear() {
252
- MemsetPointer(tables_, Heap::undefined_value(), generations_);
119
+ MemsetPointer(tables_, isolate()->heap()->undefined_value(), generations_);
253
120
  }
254
121
 
255
122
 
256
123
  void CompilationSubCache::Remove(Handle<SharedFunctionInfo> function_info) {
257
124
  // Probe the script generation tables. Make sure not to leak handles
258
125
  // into the caller's handle scope.
259
- { HandleScope scope;
126
+ { HandleScope scope(isolate());
260
127
  for (int generation = 0; generation < generations(); generation++) {
261
128
  Handle<CompilationCacheTable> table = GetTable(generation);
262
129
  table->Remove(*function_info);
@@ -265,6 +132,13 @@ void CompilationSubCache::Remove(Handle<SharedFunctionInfo> function_info) {
265
132
  }
266
133
 
267
134
 
135
+ CompilationCacheScript::CompilationCacheScript(Isolate* isolate,
136
+ int generations)
137
+ : CompilationSubCache(isolate, generations),
138
+ script_histogram_(NULL),
139
+ script_histogram_initialized_(false) { }
140
+
141
+
268
142
  // We only re-use a cached function for some script source code if the
269
143
  // script originates from the same place. This is to avoid issues
270
144
  // when reporting errors, etc.
@@ -274,7 +148,7 @@ bool CompilationCacheScript::HasOrigin(
274
148
  int line_offset,
275
149
  int column_offset) {
276
150
  Handle<Script> script =
277
- Handle<Script>(Script::cast(function_info->script()));
151
+ Handle<Script>(Script::cast(function_info->script()), isolate());
278
152
  // If the script name isn't set, the boilerplate script should have
279
153
  // an undefined name to have the same origin.
280
154
  if (name.is_null()) {
@@ -303,10 +177,10 @@ Handle<SharedFunctionInfo> CompilationCacheScript::Lookup(Handle<String> source,
303
177
 
304
178
  // Probe the script generation tables. Make sure not to leak handles
305
179
  // into the caller's handle scope.
306
- { HandleScope scope;
180
+ { HandleScope scope(isolate());
307
181
  for (generation = 0; generation < generations(); generation++) {
308
182
  Handle<CompilationCacheTable> table = GetTable(generation);
309
- Handle<Object> probe(table->Lookup(*source));
183
+ Handle<Object> probe(table->Lookup(*source), isolate());
310
184
  if (probe->IsSharedFunctionInfo()) {
311
185
  Handle<SharedFunctionInfo> function_info =
312
186
  Handle<SharedFunctionInfo>::cast(probe);
@@ -320,30 +194,34 @@ Handle<SharedFunctionInfo> CompilationCacheScript::Lookup(Handle<String> source,
320
194
  }
321
195
  }
322
196
 
323
- static void* script_histogram = StatsTable::CreateHistogram(
324
- "V8.ScriptCache",
325
- 0,
326
- kScriptGenerations,
327
- kScriptGenerations + 1);
197
+ if (!script_histogram_initialized_) {
198
+ script_histogram_ = isolate()->stats_table()->CreateHistogram(
199
+ "V8.ScriptCache",
200
+ 0,
201
+ kScriptGenerations,
202
+ kScriptGenerations + 1);
203
+ script_histogram_initialized_ = true;
204
+ }
328
205
 
329
- if (script_histogram != NULL) {
206
+ if (script_histogram_ != NULL) {
330
207
  // The level NUMBER_OF_SCRIPT_GENERATIONS is equivalent to a cache miss.
331
- StatsTable::AddHistogramSample(script_histogram, generation);
208
+ isolate()->stats_table()->AddHistogramSample(script_histogram_, generation);
332
209
  }
333
210
 
334
211
  // Once outside the manacles of the handle scope, we need to recheck
335
212
  // to see if we actually found a cached script. If so, we return a
336
213
  // handle created in the caller's handle scope.
337
214
  if (result != NULL) {
338
- Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result));
215
+ Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result),
216
+ isolate());
339
217
  ASSERT(HasOrigin(shared, name, line_offset, column_offset));
340
218
  // If the script was found in a later generation, we promote it to
341
219
  // the first generation to let it survive longer in the cache.
342
220
  if (generation != 0) Put(source, shared);
343
- Counters::compilation_cache_hits.Increment();
221
+ isolate()->counters()->compilation_cache_hits()->Increment();
344
222
  return shared;
345
223
  } else {
346
- Counters::compilation_cache_misses.Increment();
224
+ isolate()->counters()->compilation_cache_misses()->Increment();
347
225
  return Handle<SharedFunctionInfo>::null();
348
226
  }
349
227
  }
@@ -360,13 +238,15 @@ MaybeObject* CompilationCacheScript::TryTablePut(
360
238
  Handle<CompilationCacheTable> CompilationCacheScript::TablePut(
361
239
  Handle<String> source,
362
240
  Handle<SharedFunctionInfo> function_info) {
363
- CALL_HEAP_FUNCTION(TryTablePut(source, function_info), CompilationCacheTable);
241
+ CALL_HEAP_FUNCTION(isolate(),
242
+ TryTablePut(source, function_info),
243
+ CompilationCacheTable);
364
244
  }
365
245
 
366
246
 
367
247
  void CompilationCacheScript::Put(Handle<String> source,
368
248
  Handle<SharedFunctionInfo> function_info) {
369
- HandleScope scope;
249
+ HandleScope scope(isolate());
370
250
  SetFirstTable(TablePut(source, function_info));
371
251
  }
372
252
 
@@ -380,7 +260,7 @@ Handle<SharedFunctionInfo> CompilationCacheEval::Lookup(
380
260
  // having cleared the cache.
381
261
  Object* result = NULL;
382
262
  int generation;
383
- { HandleScope scope;
263
+ { HandleScope scope(isolate());
384
264
  for (generation = 0; generation < generations(); generation++) {
385
265
  Handle<CompilationCacheTable> table = GetTable(generation);
386
266
  result = table->LookupEval(*source, *context, strict_mode);
@@ -391,14 +271,14 @@ Handle<SharedFunctionInfo> CompilationCacheEval::Lookup(
391
271
  }
392
272
  if (result->IsSharedFunctionInfo()) {
393
273
  Handle<SharedFunctionInfo>
394
- function_info(SharedFunctionInfo::cast(result));
274
+ function_info(SharedFunctionInfo::cast(result), isolate());
395
275
  if (generation != 0) {
396
276
  Put(source, context, function_info);
397
277
  }
398
- Counters::compilation_cache_hits.Increment();
278
+ isolate()->counters()->compilation_cache_hits()->Increment();
399
279
  return function_info;
400
280
  } else {
401
- Counters::compilation_cache_misses.Increment();
281
+ isolate()->counters()->compilation_cache_misses()->Increment();
402
282
  return Handle<SharedFunctionInfo>::null();
403
283
  }
404
284
  }
@@ -417,7 +297,8 @@ Handle<CompilationCacheTable> CompilationCacheEval::TablePut(
417
297
  Handle<String> source,
418
298
  Handle<Context> context,
419
299
  Handle<SharedFunctionInfo> function_info) {
420
- CALL_HEAP_FUNCTION(TryTablePut(source, context, function_info),
300
+ CALL_HEAP_FUNCTION(isolate(),
301
+ TryTablePut(source, context, function_info),
421
302
  CompilationCacheTable);
422
303
  }
423
304
 
@@ -425,7 +306,7 @@ Handle<CompilationCacheTable> CompilationCacheEval::TablePut(
425
306
  void CompilationCacheEval::Put(Handle<String> source,
426
307
  Handle<Context> context,
427
308
  Handle<SharedFunctionInfo> function_info) {
428
- HandleScope scope;
309
+ HandleScope scope(isolate());
429
310
  SetFirstTable(TablePut(source, context, function_info));
430
311
  }
431
312
 
@@ -437,7 +318,7 @@ Handle<FixedArray> CompilationCacheRegExp::Lookup(Handle<String> source,
437
318
  // having cleared the cache.
438
319
  Object* result = NULL;
439
320
  int generation;
440
- { HandleScope scope;
321
+ { HandleScope scope(isolate());
441
322
  for (generation = 0; generation < generations(); generation++) {
442
323
  Handle<CompilationCacheTable> table = GetTable(generation);
443
324
  result = table->LookupRegExp(*source, flags);
@@ -447,14 +328,14 @@ Handle<FixedArray> CompilationCacheRegExp::Lookup(Handle<String> source,
447
328
  }
448
329
  }
449
330
  if (result->IsFixedArray()) {
450
- Handle<FixedArray> data(FixedArray::cast(result));
331
+ Handle<FixedArray> data(FixedArray::cast(result), isolate());
451
332
  if (generation != 0) {
452
333
  Put(source, flags, data);
453
334
  }
454
- Counters::compilation_cache_hits.Increment();
335
+ isolate()->counters()->compilation_cache_hits()->Increment();
455
336
  return data;
456
337
  } else {
457
- Counters::compilation_cache_misses.Increment();
338
+ isolate()->counters()->compilation_cache_misses()->Increment();
458
339
  return Handle<FixedArray>::null();
459
340
  }
460
341
  }
@@ -473,14 +354,16 @@ Handle<CompilationCacheTable> CompilationCacheRegExp::TablePut(
473
354
  Handle<String> source,
474
355
  JSRegExp::Flags flags,
475
356
  Handle<FixedArray> data) {
476
- CALL_HEAP_FUNCTION(TryTablePut(source, flags, data), CompilationCacheTable);
357
+ CALL_HEAP_FUNCTION(isolate(),
358
+ TryTablePut(source, flags, data),
359
+ CompilationCacheTable);
477
360
  }
478
361
 
479
362
 
480
363
  void CompilationCacheRegExp::Put(Handle<String> source,
481
364
  JSRegExp::Flags flags,
482
365
  Handle<FixedArray> data) {
483
- HandleScope scope;
366
+ HandleScope scope(isolate());
484
367
  SetFirstTable(TablePut(source, flags, data));
485
368
  }
486
369
 
@@ -488,9 +371,9 @@ void CompilationCacheRegExp::Put(Handle<String> source,
488
371
  void CompilationCache::Remove(Handle<SharedFunctionInfo> function_info) {
489
372
  if (!IsEnabled()) return;
490
373
 
491
- eval_global.Remove(function_info);
492
- eval_contextual.Remove(function_info);
493
- script.Remove(function_info);
374
+ eval_global_.Remove(function_info);
375
+ eval_contextual_.Remove(function_info);
376
+ script_.Remove(function_info);
494
377
  }
495
378
 
496
379
 
@@ -502,7 +385,7 @@ Handle<SharedFunctionInfo> CompilationCache::LookupScript(Handle<String> source,
502
385
  return Handle<SharedFunctionInfo>::null();
503
386
  }
504
387
 
505
- return script.Lookup(source, name, line_offset, column_offset);
388
+ return script_.Lookup(source, name, line_offset, column_offset);
506
389
  }
507
390
 
508
391
 
@@ -517,9 +400,9 @@ Handle<SharedFunctionInfo> CompilationCache::LookupEval(
517
400
 
518
401
  Handle<SharedFunctionInfo> result;
519
402
  if (is_global) {
520
- result = eval_global.Lookup(source, context, strict_mode);
403
+ result = eval_global_.Lookup(source, context, strict_mode);
521
404
  } else {
522
- result = eval_contextual.Lookup(source, context, strict_mode);
405
+ result = eval_contextual_.Lookup(source, context, strict_mode);
523
406
  }
524
407
  return result;
525
408
  }
@@ -531,7 +414,7 @@ Handle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source,
531
414
  return Handle<FixedArray>::null();
532
415
  }
533
416
 
534
- return reg_exp.Lookup(source, flags);
417
+ return reg_exp_.Lookup(source, flags);
535
418
  }
536
419
 
537
420
 
@@ -541,7 +424,7 @@ void CompilationCache::PutScript(Handle<String> source,
541
424
  return;
542
425
  }
543
426
 
544
- script.Put(source, function_info);
427
+ script_.Put(source, function_info);
545
428
  }
546
429
 
547
430
 
@@ -553,11 +436,11 @@ void CompilationCache::PutEval(Handle<String> source,
553
436
  return;
554
437
  }
555
438
 
556
- HandleScope scope;
439
+ HandleScope scope(isolate());
557
440
  if (is_global) {
558
- eval_global.Put(source, context, function_info);
441
+ eval_global_.Put(source, context, function_info);
559
442
  } else {
560
- eval_contextual.Put(source, context, function_info);
443
+ eval_contextual_.Put(source, context, function_info);
561
444
  }
562
445
  }
563
446
 
@@ -570,7 +453,7 @@ void CompilationCache::PutRegExp(Handle<String> source,
570
453
  return;
571
454
  }
572
455
 
573
- reg_exp.Put(source, flags, data);
456
+ reg_exp_.Put(source, flags, data);
574
457
  }
575
458
 
576
459
 
@@ -579,9 +462,11 @@ static bool SourceHashCompare(void* key1, void* key2) {
579
462
  }
580
463
 
581
464
 
582
- static HashMap* EagerOptimizingSet() {
583
- static HashMap map(&SourceHashCompare);
584
- return &map;
465
+ HashMap* CompilationCache::EagerOptimizingSet() {
466
+ if (eager_optimizing_set_ == NULL) {
467
+ eager_optimizing_set_ = new HashMap(&SourceHashCompare);
468
+ }
469
+ return eager_optimizing_set_;
585
470
  }
586
471
 
587
472
 
@@ -615,38 +500,39 @@ void CompilationCache::ResetEagerOptimizingData() {
615
500
 
616
501
  void CompilationCache::Clear() {
617
502
  for (int i = 0; i < kSubCacheCount; i++) {
618
- subcaches[i]->Clear();
503
+ subcaches_[i]->Clear();
619
504
  }
620
505
  }
621
506
 
507
+
622
508
  void CompilationCache::Iterate(ObjectVisitor* v) {
623
509
  for (int i = 0; i < kSubCacheCount; i++) {
624
- subcaches[i]->Iterate(v);
510
+ subcaches_[i]->Iterate(v);
625
511
  }
626
512
  }
627
513
 
628
514
 
629
515
  void CompilationCache::IterateFunctions(ObjectVisitor* v) {
630
516
  for (int i = 0; i < kSubCacheCount; i++) {
631
- subcaches[i]->IterateFunctions(v);
517
+ subcaches_[i]->IterateFunctions(v);
632
518
  }
633
519
  }
634
520
 
635
521
 
636
522
  void CompilationCache::MarkCompactPrologue() {
637
523
  for (int i = 0; i < kSubCacheCount; i++) {
638
- subcaches[i]->Age();
524
+ subcaches_[i]->Age();
639
525
  }
640
526
  }
641
527
 
642
528
 
643
529
  void CompilationCache::Enable() {
644
- enabled = true;
530
+ enabled_ = true;
645
531
  }
646
532
 
647
533
 
648
534
  void CompilationCache::Disable() {
649
- enabled = false;
535
+ enabled_ = false;
650
536
  Clear();
651
537
  }
652
538