therubyracer 0.4.9-x86-linux

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (637) hide show
  1. data/.gitignore +11 -0
  2. data/.gitmodules +3 -0
  3. data/Doxyfile +1514 -0
  4. data/History.txt +43 -0
  5. data/README.rdoc +157 -0
  6. data/Rakefile +51 -0
  7. data/docs/data_conversion.txt +18 -0
  8. data/ext/v8/callbacks.cpp +160 -0
  9. data/ext/v8/callbacks.h +14 -0
  10. data/ext/v8/convert_ruby.cpp +8 -0
  11. data/ext/v8/convert_ruby.h +99 -0
  12. data/ext/v8/convert_string.cpp +10 -0
  13. data/ext/v8/convert_string.h +73 -0
  14. data/ext/v8/convert_v8.cpp +9 -0
  15. data/ext/v8/convert_v8.h +121 -0
  16. data/ext/v8/converters.cpp +83 -0
  17. data/ext/v8/converters.h +23 -0
  18. data/ext/v8/extconf.rb +36 -0
  19. data/ext/v8/upstream/2.0.6/.gitignore +26 -0
  20. data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
  21. data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
  22. data/ext/v8/upstream/2.0.6/LICENSE +55 -0
  23. data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
  24. data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
  25. data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
  26. data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
  27. data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
  28. data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
  29. data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
  30. data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
  31. data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
  32. data/ext/v8/upstream/2.0.6/src/api.h +479 -0
  33. data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
  34. data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
  35. data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
  36. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
  37. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
  38. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
  39. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
  40. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
  41. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
  42. data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
  43. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
  44. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
  45. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
  46. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
  47. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
  48. data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
  49. data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
  50. data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
  51. data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
  52. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
  53. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
  54. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
  55. data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
  56. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
  57. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
  58. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
  59. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
  60. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
  61. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
  62. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
  63. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
  64. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
  65. data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
  66. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
  67. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
  68. data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
  69. data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
  70. data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
  71. data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
  72. data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
  73. data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
  74. data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
  75. data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
  76. data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
  77. data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
  78. data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
  79. data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
  80. data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
  81. data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
  82. data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
  83. data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
  84. data/ext/v8/upstream/2.0.6/src/code.h +68 -0
  85. data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
  86. data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
  87. data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
  88. data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
  89. data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
  90. data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
  91. data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
  92. data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
  93. data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
  94. data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
  95. data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
  96. data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
  97. data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
  98. data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
  99. data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
  100. data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
  101. data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
  102. data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
  103. data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
  104. data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
  105. data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
  106. data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
  107. data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
  108. data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
  109. data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
  110. data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
  111. data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
  112. data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
  113. data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
  114. data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
  115. data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
  116. data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
  117. data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
  118. data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
  119. data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
  120. data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
  121. data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
  122. data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
  123. data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
  124. data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
  125. data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
  126. data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
  127. data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
  128. data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
  129. data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
  130. data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
  131. data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
  132. data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
  133. data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
  134. data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
  135. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
  136. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
  137. data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
  138. data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
  139. data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
  140. data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
  141. data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
  142. data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
  143. data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
  144. data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
  145. data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
  146. data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
  147. data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
  148. data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
  149. data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
  150. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
  151. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
  152. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
  153. data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
  154. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
  155. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
  156. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
  157. data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
  158. data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
  159. data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
  160. data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
  161. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
  162. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
  163. data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
  164. data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
  165. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
  166. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
  167. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
  168. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
  169. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
  170. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
  171. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
  172. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
  173. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
  174. data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
  175. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
  176. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
  177. data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
  178. data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
  179. data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
  180. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
  181. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
  182. data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
  183. data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
  184. data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
  185. data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
  186. data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
  187. data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
  188. data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
  189. data/ext/v8/upstream/2.0.6/src/list.h +158 -0
  190. data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
  191. data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
  192. data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
  193. data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
  194. data/ext/v8/upstream/2.0.6/src/log.h +371 -0
  195. data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
  196. data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
  197. data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
  198. data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
  199. data/ext/v8/upstream/2.0.6/src/math.js +263 -0
  200. data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
  201. data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
  202. data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
  203. data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
  204. data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
  205. data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
  206. data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
  207. data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
  208. data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
  209. data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
  210. data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
  211. data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
  212. data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
  213. data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
  214. data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
  215. data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
  216. data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
  217. data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
  218. data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
  219. data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
  220. data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
  221. data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
  222. data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
  223. data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
  224. data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
  225. data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
  226. data/ext/v8/upstream/2.0.6/src/property.h +327 -0
  227. data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
  228. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  229. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
  230. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
  231. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
  232. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
  233. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
  234. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
  235. data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
  236. data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
  237. data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
  238. data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
  239. data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
  240. data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
  241. data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
  242. data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
  243. data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
  244. data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
  245. data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
  246. data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
  247. data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
  248. data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
  249. data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
  250. data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
  251. data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
  252. data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
  253. data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
  254. data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
  255. data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
  256. data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
  257. data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
  258. data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
  259. data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
  260. data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
  261. data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
  262. data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
  263. data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
  264. data/ext/v8/upstream/2.0.6/src/string.js +901 -0
  265. data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
  266. data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
  267. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
  268. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
  269. data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
  270. data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
  271. data/ext/v8/upstream/2.0.6/src/token.h +270 -0
  272. data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
  273. data/ext/v8/upstream/2.0.6/src/top.h +459 -0
  274. data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
  275. data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
  276. data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
  277. data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
  278. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
  279. data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
  280. data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
  281. data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
  282. data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
  283. data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
  284. data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
  285. data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
  286. data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
  287. data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
  288. data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
  289. data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
  290. data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
  291. data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
  292. data/ext/v8/upstream/2.0.6/src/version.h +64 -0
  293. data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
  294. data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
  295. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
  296. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
  297. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
  298. data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
  299. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
  300. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
  301. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
  302. data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
  303. data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
  304. data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
  305. data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
  306. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
  307. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
  308. data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
  309. data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
  310. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
  311. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
  312. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
  313. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
  314. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
  315. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
  316. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
  317. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
  318. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
  319. data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
  320. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
  321. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
  322. data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
  323. data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
  324. data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
  325. data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
  326. data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
  327. data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
  328. data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
  329. data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
  330. data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
  331. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
  332. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
  333. data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
  334. data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
  335. data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
  336. data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
  337. data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
  338. data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
  339. data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
  340. data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
  341. data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
  342. data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
  343. data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
  344. data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
  345. data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
  346. data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
  347. data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
  348. data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
  349. data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
  350. data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
  351. data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
  352. data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
  353. data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
  354. data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
  355. data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
  356. data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
  357. data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
  358. data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
  359. data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
  360. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
  361. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
  362. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
  363. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
  364. data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
  365. data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
  366. data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
  367. data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
  368. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
  369. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
  370. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
  371. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
  372. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
  373. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
  374. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
  375. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
  376. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
  377. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  378. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
  379. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
  380. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
  381. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
  382. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
  383. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
  384. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
  385. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
  386. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
  387. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  388. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  389. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  390. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
  391. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
  392. data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
  393. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
  394. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
  395. data/ext/v8/upstream/Makefile +31 -0
  396. data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
  397. data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
  398. data/ext/v8/upstream/scons/LICENSE.txt +20 -0
  399. data/ext/v8/upstream/scons/MANIFEST +202 -0
  400. data/ext/v8/upstream/scons/PKG-INFO +13 -0
  401. data/ext/v8/upstream/scons/README.txt +273 -0
  402. data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
  403. data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
  404. data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
  405. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
  406. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
  407. data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
  408. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
  409. data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
  410. data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
  411. data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
  412. data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
  413. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
  414. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
  415. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
  416. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
  417. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
  418. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
  419. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
  420. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
  421. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
  422. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
  423. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
  424. data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
  425. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
  426. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
  427. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
  428. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
  429. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
  430. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
  431. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
  432. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
  433. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
  434. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
  435. data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
  436. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
  437. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
  438. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
  439. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
  440. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
  441. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
  442. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  443. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
  444. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
  445. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
  446. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
  447. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
  448. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
  449. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
  450. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
  451. data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
  452. data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
  453. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
  454. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
  455. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  456. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
  457. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  458. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  459. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  460. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  461. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  462. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  463. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  464. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  465. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  466. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
  467. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  468. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
  469. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
  470. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
  471. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
  472. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
  473. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
  474. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
  475. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
  476. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
  477. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
  478. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
  479. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
  480. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
  481. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
  482. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
  483. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
  484. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
  485. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
  486. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
  487. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
  488. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
  489. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
  490. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
  491. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
  492. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
  493. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
  494. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
  495. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
  496. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
  497. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
  498. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
  499. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
  500. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
  501. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
  502. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
  503. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
  504. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
  505. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
  506. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
  507. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
  508. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
  509. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
  510. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
  511. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
  512. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
  513. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
  514. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
  515. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
  516. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
  517. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
  518. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
  519. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
  520. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
  521. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
  522. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
  523. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
  524. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
  525. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
  526. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
  527. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
  528. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
  529. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
  530. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
  531. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  532. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  533. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  534. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  535. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  536. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  537. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  538. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  539. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  540. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  541. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
  542. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
  543. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
  544. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
  545. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
  546. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
  547. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
  548. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
  549. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
  550. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
  551. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
  552. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
  553. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
  554. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
  555. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
  556. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
  557. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
  558. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
  559. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
  560. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
  561. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
  562. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
  563. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
  564. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
  565. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
  566. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
  567. data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
  568. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  569. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  570. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
  571. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  572. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
  573. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
  574. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
  575. data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
  576. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
  577. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  578. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  579. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  580. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  581. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
  582. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  583. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  584. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  585. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  586. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
  587. data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
  588. data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
  589. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
  590. data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
  591. data/ext/v8/upstream/scons/scons-time.1 +1017 -0
  592. data/ext/v8/upstream/scons/scons.1 +15179 -0
  593. data/ext/v8/upstream/scons/sconsign.1 +208 -0
  594. data/ext/v8/upstream/scons/script/scons +184 -0
  595. data/ext/v8/upstream/scons/script/scons-time +1529 -0
  596. data/ext/v8/upstream/scons/script/scons.bat +31 -0
  597. data/ext/v8/upstream/scons/script/sconsign +508 -0
  598. data/ext/v8/upstream/scons/setup.cfg +6 -0
  599. data/ext/v8/upstream/scons/setup.py +427 -0
  600. data/ext/v8/v8.cpp +89 -0
  601. data/ext/v8/v8_cxt.cpp +92 -0
  602. data/ext/v8/v8_cxt.h +20 -0
  603. data/ext/v8/v8_func.cpp +10 -0
  604. data/ext/v8/v8_func.h +11 -0
  605. data/ext/v8/v8_msg.cpp +54 -0
  606. data/ext/v8/v8_msg.h +18 -0
  607. data/ext/v8/v8_obj.cpp +52 -0
  608. data/ext/v8/v8_obj.h +13 -0
  609. data/ext/v8/v8_ref.cpp +26 -0
  610. data/ext/v8/v8_ref.h +31 -0
  611. data/ext/v8/v8_script.cpp +20 -0
  612. data/ext/v8/v8_script.h +8 -0
  613. data/ext/v8/v8_standalone.cpp +69 -0
  614. data/ext/v8/v8_standalone.h +31 -0
  615. data/ext/v8/v8_str.cpp +17 -0
  616. data/ext/v8/v8_str.h +9 -0
  617. data/ext/v8/v8_template.cpp +53 -0
  618. data/ext/v8/v8_template.h +13 -0
  619. data/lib/v8.rb +10 -0
  620. data/lib/v8/context.rb +101 -0
  621. data/lib/v8/object.rb +38 -0
  622. data/lib/v8/to.rb +33 -0
  623. data/lib/v8/v8.so +0 -0
  624. data/script/console +10 -0
  625. data/script/destroy +14 -0
  626. data/script/generate +14 -0
  627. data/spec/ext/cxt_spec.rb +25 -0
  628. data/spec/ext/obj_spec.rb +13 -0
  629. data/spec/redjs/jsapi_spec.rb +405 -0
  630. data/spec/redjs/tap.rb +8 -0
  631. data/spec/redjs_helper.rb +3 -0
  632. data/spec/spec.opts +1 -0
  633. data/spec/spec_helper.rb +14 -0
  634. data/spec/v8/to_spec.rb +15 -0
  635. data/tasks/rspec.rake +21 -0
  636. data/therubyracer.gemspec +680 -0
  637. metadata +697 -0
@@ -0,0 +1,1108 @@
1
+ // Copyright 2006-2009 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #include "v8.h"
29
+
30
+ #include "api.h"
31
+ #include "arguments.h"
32
+ #include "ic-inl.h"
33
+ #include "stub-cache.h"
34
+
35
+ namespace v8 {
36
+ namespace internal {
37
+
38
+ // -----------------------------------------------------------------------
39
+ // StubCache implementation.
40
+
41
+
42
+ StubCache::Entry StubCache::primary_[StubCache::kPrimaryTableSize];
43
+ StubCache::Entry StubCache::secondary_[StubCache::kSecondaryTableSize];
44
+
45
+ void StubCache::Initialize(bool create_heap_objects) {
46
+ ASSERT(IsPowerOf2(kPrimaryTableSize));
47
+ ASSERT(IsPowerOf2(kSecondaryTableSize));
48
+ if (create_heap_objects) {
49
+ HandleScope scope;
50
+ Clear();
51
+ }
52
+ }
53
+
54
+
55
+ Code* StubCache::Set(String* name, Map* map, Code* code) {
56
+ // Get the flags from the code.
57
+ Code::Flags flags = Code::RemoveTypeFromFlags(code->flags());
58
+
59
+ // Validate that the name does not move on scavenge, and that we
60
+ // can use identity checks instead of string equality checks.
61
+ ASSERT(!Heap::InNewSpace(name));
62
+ ASSERT(name->IsSymbol());
63
+
64
+ // The state bits are not important to the hash function because
65
+ // the stub cache only contains monomorphic stubs. Make sure that
66
+ // the bits are the least significant so they will be the ones
67
+ // masked out.
68
+ ASSERT(Code::ExtractICStateFromFlags(flags) == MONOMORPHIC);
69
+ ASSERT(Code::kFlagsICStateShift == 0);
70
+
71
+ // Make sure that the code type is not included in the hash.
72
+ ASSERT(Code::ExtractTypeFromFlags(flags) == 0);
73
+
74
+ // Compute the primary entry.
75
+ int primary_offset = PrimaryOffset(name, flags, map);
76
+ Entry* primary = entry(primary_, primary_offset);
77
+ Code* hit = primary->value;
78
+
79
+ // If the primary entry has useful data in it, we retire it to the
80
+ // secondary cache before overwriting it.
81
+ if (hit != Builtins::builtin(Builtins::Illegal)) {
82
+ Code::Flags primary_flags = Code::RemoveTypeFromFlags(hit->flags());
83
+ int secondary_offset =
84
+ SecondaryOffset(primary->key, primary_flags, primary_offset);
85
+ Entry* secondary = entry(secondary_, secondary_offset);
86
+ *secondary = *primary;
87
+ }
88
+
89
+ // Update primary cache.
90
+ primary->key = name;
91
+ primary->value = code;
92
+ return code;
93
+ }
94
+
95
+
96
+ Object* StubCache::ComputeLoadField(String* name,
97
+ JSObject* receiver,
98
+ JSObject* holder,
99
+ int field_index) {
100
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
101
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
102
+ if (code->IsUndefined()) {
103
+ LoadStubCompiler compiler;
104
+ code = compiler.CompileLoadField(receiver, holder, field_index, name);
105
+ if (code->IsFailure()) return code;
106
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
107
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
108
+ if (result->IsFailure()) return code;
109
+ }
110
+ return Set(name, receiver->map(), Code::cast(code));
111
+ }
112
+
113
+
114
+ Object* StubCache::ComputeLoadCallback(String* name,
115
+ JSObject* receiver,
116
+ JSObject* holder,
117
+ AccessorInfo* callback) {
118
+ ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
119
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
120
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
121
+ if (code->IsUndefined()) {
122
+ LoadStubCompiler compiler;
123
+ code = compiler.CompileLoadCallback(name, receiver, holder, callback);
124
+ if (code->IsFailure()) return code;
125
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
126
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
127
+ if (result->IsFailure()) return code;
128
+ }
129
+ return Set(name, receiver->map(), Code::cast(code));
130
+ }
131
+
132
+
133
+ Object* StubCache::ComputeLoadConstant(String* name,
134
+ JSObject* receiver,
135
+ JSObject* holder,
136
+ Object* value) {
137
+ Code::Flags flags =
138
+ Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
139
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
140
+ if (code->IsUndefined()) {
141
+ LoadStubCompiler compiler;
142
+ code = compiler.CompileLoadConstant(receiver, holder, value, name);
143
+ if (code->IsFailure()) return code;
144
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
145
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
146
+ if (result->IsFailure()) return code;
147
+ }
148
+ return Set(name, receiver->map(), Code::cast(code));
149
+ }
150
+
151
+
152
+ Object* StubCache::ComputeLoadInterceptor(String* name,
153
+ JSObject* receiver,
154
+ JSObject* holder) {
155
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
156
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
157
+ if (code->IsUndefined()) {
158
+ LoadStubCompiler compiler;
159
+ code = compiler.CompileLoadInterceptor(receiver, holder, name);
160
+ if (code->IsFailure()) return code;
161
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
162
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
163
+ if (result->IsFailure()) return code;
164
+ }
165
+ return Set(name, receiver->map(), Code::cast(code));
166
+ }
167
+
168
+
169
+ Object* StubCache::ComputeLoadNormal(String* name, JSObject* receiver) {
170
+ Code* code = Builtins::builtin(Builtins::LoadIC_Normal);
171
+ return Set(name, receiver->map(), code);
172
+ }
173
+
174
+
175
+ Object* StubCache::ComputeLoadGlobal(String* name,
176
+ JSObject* receiver,
177
+ GlobalObject* holder,
178
+ JSGlobalPropertyCell* cell,
179
+ bool is_dont_delete) {
180
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL);
181
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
182
+ if (code->IsUndefined()) {
183
+ LoadStubCompiler compiler;
184
+ code = compiler.CompileLoadGlobal(receiver,
185
+ holder,
186
+ cell,
187
+ name,
188
+ is_dont_delete);
189
+ if (code->IsFailure()) return code;
190
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
191
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
192
+ if (result->IsFailure()) return code;
193
+ }
194
+ return Set(name, receiver->map(), Code::cast(code));
195
+ }
196
+
197
+
198
+ Object* StubCache::ComputeKeyedLoadField(String* name,
199
+ JSObject* receiver,
200
+ JSObject* holder,
201
+ int field_index) {
202
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
203
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
204
+ if (code->IsUndefined()) {
205
+ KeyedLoadStubCompiler compiler;
206
+ code = compiler.CompileLoadField(name, receiver, holder, field_index);
207
+ if (code->IsFailure()) return code;
208
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
209
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
210
+ if (result->IsFailure()) return result;
211
+ }
212
+ return code;
213
+ }
214
+
215
+
216
+ Object* StubCache::ComputeKeyedLoadConstant(String* name,
217
+ JSObject* receiver,
218
+ JSObject* holder,
219
+ Object* value) {
220
+ Code::Flags flags =
221
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
222
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
223
+ if (code->IsUndefined()) {
224
+ KeyedLoadStubCompiler compiler;
225
+ code = compiler.CompileLoadConstant(name, receiver, holder, value);
226
+ if (code->IsFailure()) return code;
227
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
228
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
229
+ if (result->IsFailure()) return result;
230
+ }
231
+ return code;
232
+ }
233
+
234
+
235
+ Object* StubCache::ComputeKeyedLoadInterceptor(String* name,
236
+ JSObject* receiver,
237
+ JSObject* holder) {
238
+ Code::Flags flags =
239
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
240
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
241
+ if (code->IsUndefined()) {
242
+ KeyedLoadStubCompiler compiler;
243
+ code = compiler.CompileLoadInterceptor(receiver, holder, name);
244
+ if (code->IsFailure()) return code;
245
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
246
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
247
+ if (result->IsFailure()) return result;
248
+ }
249
+ return code;
250
+ }
251
+
252
+
253
+ Object* StubCache::ComputeKeyedLoadCallback(String* name,
254
+ JSObject* receiver,
255
+ JSObject* holder,
256
+ AccessorInfo* callback) {
257
+ Code::Flags flags =
258
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
259
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
260
+ if (code->IsUndefined()) {
261
+ KeyedLoadStubCompiler compiler;
262
+ code = compiler.CompileLoadCallback(name, receiver, holder, callback);
263
+ if (code->IsFailure()) return code;
264
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
265
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
266
+ if (result->IsFailure()) return result;
267
+ }
268
+ return code;
269
+ }
270
+
271
+
272
+
273
+ Object* StubCache::ComputeKeyedLoadArrayLength(String* name,
274
+ JSArray* receiver) {
275
+ Code::Flags flags =
276
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
277
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
278
+ if (code->IsUndefined()) {
279
+ KeyedLoadStubCompiler compiler;
280
+ code = compiler.CompileLoadArrayLength(name);
281
+ if (code->IsFailure()) return code;
282
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
283
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
284
+ if (result->IsFailure()) return result;
285
+ }
286
+ return code;
287
+ }
288
+
289
+
290
+ Object* StubCache::ComputeKeyedLoadStringLength(String* name,
291
+ String* receiver) {
292
+ Code::Flags flags =
293
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
294
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
295
+ if (code->IsUndefined()) {
296
+ KeyedLoadStubCompiler compiler;
297
+ code = compiler.CompileLoadStringLength(name);
298
+ if (code->IsFailure()) return code;
299
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
300
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
301
+ if (result->IsFailure()) return result;
302
+ }
303
+ return code;
304
+ }
305
+
306
+
307
+ Object* StubCache::ComputeKeyedLoadFunctionPrototype(String* name,
308
+ JSFunction* receiver) {
309
+ Code::Flags flags =
310
+ Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
311
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
312
+ if (code->IsUndefined()) {
313
+ KeyedLoadStubCompiler compiler;
314
+ code = compiler.CompileLoadFunctionPrototype(name);
315
+ if (code->IsFailure()) return code;
316
+ LOG(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
317
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
318
+ if (result->IsFailure()) return result;
319
+ }
320
+ return code;
321
+ }
322
+
323
+
324
+ Object* StubCache::ComputeStoreField(String* name,
325
+ JSObject* receiver,
326
+ int field_index,
327
+ Map* transition) {
328
+ PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
329
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type);
330
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
331
+ if (code->IsUndefined()) {
332
+ StoreStubCompiler compiler;
333
+ code = compiler.CompileStoreField(receiver, field_index, transition, name);
334
+ if (code->IsFailure()) return code;
335
+ LOG(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
336
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
337
+ if (result->IsFailure()) return result;
338
+ }
339
+ return Set(name, receiver->map(), Code::cast(code));
340
+ }
341
+
342
+
343
+ Object* StubCache::ComputeStoreGlobal(String* name,
344
+ GlobalObject* receiver,
345
+ JSGlobalPropertyCell* cell) {
346
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, NORMAL);
347
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
348
+ if (code->IsUndefined()) {
349
+ StoreStubCompiler compiler;
350
+ code = compiler.CompileStoreGlobal(receiver, cell, name);
351
+ if (code->IsFailure()) return code;
352
+ LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
353
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
354
+ if (result->IsFailure()) return code;
355
+ }
356
+ return Set(name, receiver->map(), Code::cast(code));
357
+ }
358
+
359
+
360
+ Object* StubCache::ComputeStoreCallback(String* name,
361
+ JSObject* receiver,
362
+ AccessorInfo* callback) {
363
+ ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
364
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, CALLBACKS);
365
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
366
+ if (code->IsUndefined()) {
367
+ StoreStubCompiler compiler;
368
+ code = compiler.CompileStoreCallback(receiver, callback, name);
369
+ if (code->IsFailure()) return code;
370
+ LOG(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
371
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
372
+ if (result->IsFailure()) return result;
373
+ }
374
+ return Set(name, receiver->map(), Code::cast(code));
375
+ }
376
+
377
+
378
+ Object* StubCache::ComputeStoreInterceptor(String* name,
379
+ JSObject* receiver) {
380
+ Code::Flags flags =
381
+ Code::ComputeMonomorphicFlags(Code::STORE_IC, INTERCEPTOR);
382
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
383
+ if (code->IsUndefined()) {
384
+ StoreStubCompiler compiler;
385
+ code = compiler.CompileStoreInterceptor(receiver, name);
386
+ if (code->IsFailure()) return code;
387
+ LOG(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
388
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
389
+ if (result->IsFailure()) return result;
390
+ }
391
+ return Set(name, receiver->map(), Code::cast(code));
392
+ }
393
+
394
+
395
+ Object* StubCache::ComputeKeyedStoreField(String* name, JSObject* receiver,
396
+ int field_index, Map* transition) {
397
+ PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
398
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, type);
399
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
400
+ if (code->IsUndefined()) {
401
+ KeyedStoreStubCompiler compiler;
402
+ code = compiler.CompileStoreField(receiver, field_index, transition, name);
403
+ if (code->IsFailure()) return code;
404
+ LOG(CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, Code::cast(code), name));
405
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
406
+ if (result->IsFailure()) return result;
407
+ }
408
+ return code;
409
+ }
410
+
411
+
412
+ Object* StubCache::ComputeCallConstant(int argc,
413
+ InLoopFlag in_loop,
414
+ String* name,
415
+ Object* object,
416
+ JSObject* holder,
417
+ JSFunction* function) {
418
+ // Compute the check type and the map.
419
+ Map* map = IC::GetCodeCacheMapForObject(object);
420
+
421
+ // Compute check type based on receiver/holder.
422
+ StubCompiler::CheckType check = StubCompiler::RECEIVER_MAP_CHECK;
423
+ if (object->IsString()) {
424
+ check = StubCompiler::STRING_CHECK;
425
+ } else if (object->IsNumber()) {
426
+ check = StubCompiler::NUMBER_CHECK;
427
+ } else if (object->IsBoolean()) {
428
+ check = StubCompiler::BOOLEAN_CHECK;
429
+ }
430
+
431
+ Code::Flags flags =
432
+ Code::ComputeMonomorphicFlags(Code::CALL_IC,
433
+ CONSTANT_FUNCTION,
434
+ in_loop,
435
+ argc);
436
+ Object* code = map->FindInCodeCache(name, flags);
437
+ if (code->IsUndefined()) {
438
+ if (object->IsJSObject()) {
439
+ Object* opt =
440
+ Top::LookupSpecialFunction(JSObject::cast(object), holder, function);
441
+ if (opt->IsJSFunction()) {
442
+ check = StubCompiler::JSARRAY_HAS_FAST_ELEMENTS_CHECK;
443
+ function = JSFunction::cast(opt);
444
+ }
445
+ }
446
+ // If the function hasn't been compiled yet, we cannot do it now
447
+ // because it may cause GC. To avoid this issue, we return an
448
+ // internal error which will make sure we do not update any
449
+ // caches.
450
+ if (!function->is_compiled()) return Failure::InternalError();
451
+ // Compile the stub - only create stubs for fully compiled functions.
452
+ CallStubCompiler compiler(argc, in_loop);
453
+ code = compiler.CompileCallConstant(object, holder, function, name, check);
454
+ if (code->IsFailure()) return code;
455
+ ASSERT_EQ(flags, Code::cast(code)->flags());
456
+ LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name));
457
+ Object* result = map->UpdateCodeCache(name, Code::cast(code));
458
+ if (result->IsFailure()) return result;
459
+ }
460
+ return Set(name, map, Code::cast(code));
461
+ }
462
+
463
+
464
+ Object* StubCache::ComputeCallField(int argc,
465
+ InLoopFlag in_loop,
466
+ String* name,
467
+ Object* object,
468
+ JSObject* holder,
469
+ int index) {
470
+ // Compute the check type and the map.
471
+ Map* map = IC::GetCodeCacheMapForObject(object);
472
+
473
+ // TODO(1233596): We cannot do receiver map check for non-JS objects
474
+ // because they may be represented as immediates without a
475
+ // map. Instead, we check against the map in the holder.
476
+ if (object->IsNumber() || object->IsBoolean() || object->IsString()) {
477
+ object = holder;
478
+ }
479
+
480
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::CALL_IC,
481
+ FIELD,
482
+ in_loop,
483
+ argc);
484
+ Object* code = map->FindInCodeCache(name, flags);
485
+ if (code->IsUndefined()) {
486
+ CallStubCompiler compiler(argc, in_loop);
487
+ code = compiler.CompileCallField(object, holder, index, name);
488
+ if (code->IsFailure()) return code;
489
+ ASSERT_EQ(flags, Code::cast(code)->flags());
490
+ LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name));
491
+ Object* result = map->UpdateCodeCache(name, Code::cast(code));
492
+ if (result->IsFailure()) return result;
493
+ }
494
+ return Set(name, map, Code::cast(code));
495
+ }
496
+
497
+
498
+ Object* StubCache::ComputeCallInterceptor(int argc,
499
+ String* name,
500
+ Object* object,
501
+ JSObject* holder) {
502
+ // Compute the check type and the map.
503
+ // If the object is a value, we use the prototype map for the cache.
504
+ Map* map = IC::GetCodeCacheMapForObject(object);
505
+
506
+ // TODO(1233596): We cannot do receiver map check for non-JS objects
507
+ // because they may be represented as immediates without a
508
+ // map. Instead, we check against the map in the holder.
509
+ if (object->IsNumber() || object->IsBoolean() || object->IsString()) {
510
+ object = holder;
511
+ }
512
+
513
+ Code::Flags flags =
514
+ Code::ComputeMonomorphicFlags(Code::CALL_IC,
515
+ INTERCEPTOR,
516
+ NOT_IN_LOOP,
517
+ argc);
518
+ Object* code = map->FindInCodeCache(name, flags);
519
+ if (code->IsUndefined()) {
520
+ CallStubCompiler compiler(argc, NOT_IN_LOOP);
521
+ code = compiler.CompileCallInterceptor(object, holder, name);
522
+ if (code->IsFailure()) return code;
523
+ ASSERT_EQ(flags, Code::cast(code)->flags());
524
+ LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name));
525
+ Object* result = map->UpdateCodeCache(name, Code::cast(code));
526
+ if (result->IsFailure()) return result;
527
+ }
528
+ return Set(name, map, Code::cast(code));
529
+ }
530
+
531
+
532
+ Object* StubCache::ComputeCallNormal(int argc,
533
+ InLoopFlag in_loop,
534
+ String* name,
535
+ JSObject* receiver) {
536
+ Object* code = ComputeCallNormal(argc, in_loop);
537
+ if (code->IsFailure()) return code;
538
+ return Set(name, receiver->map(), Code::cast(code));
539
+ }
540
+
541
+
542
+ Object* StubCache::ComputeCallGlobal(int argc,
543
+ InLoopFlag in_loop,
544
+ String* name,
545
+ JSObject* receiver,
546
+ GlobalObject* holder,
547
+ JSGlobalPropertyCell* cell,
548
+ JSFunction* function) {
549
+ Code::Flags flags =
550
+ Code::ComputeMonomorphicFlags(Code::CALL_IC, NORMAL, in_loop, argc);
551
+ Object* code = receiver->map()->FindInCodeCache(name, flags);
552
+ if (code->IsUndefined()) {
553
+ // If the function hasn't been compiled yet, we cannot do it now
554
+ // because it may cause GC. To avoid this issue, we return an
555
+ // internal error which will make sure we do not update any
556
+ // caches.
557
+ if (!function->is_compiled()) return Failure::InternalError();
558
+ CallStubCompiler compiler(argc, in_loop);
559
+ code = compiler.CompileCallGlobal(receiver, holder, cell, function, name);
560
+ if (code->IsFailure()) return code;
561
+ ASSERT_EQ(flags, Code::cast(code)->flags());
562
+ LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name));
563
+ Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
564
+ if (result->IsFailure()) return code;
565
+ }
566
+ return Set(name, receiver->map(), Code::cast(code));
567
+ }
568
+
569
+
570
+ static Object* GetProbeValue(Code::Flags flags) {
571
+ // Use raw_unchecked... so we don't get assert failures during GC.
572
+ NumberDictionary* dictionary = Heap::raw_unchecked_non_monomorphic_cache();
573
+ int entry = dictionary->FindEntry(flags);
574
+ if (entry != -1) return dictionary->ValueAt(entry);
575
+ return Heap::raw_unchecked_undefined_value();
576
+ }
577
+
578
+
579
+ static Object* ProbeCache(Code::Flags flags) {
580
+ Object* probe = GetProbeValue(flags);
581
+ if (probe != Heap::undefined_value()) return probe;
582
+ // Seed the cache with an undefined value to make sure that any
583
+ // generated code object can always be inserted into the cache
584
+ // without causing allocation failures.
585
+ Object* result =
586
+ Heap::non_monomorphic_cache()->AtNumberPut(flags,
587
+ Heap::undefined_value());
588
+ if (result->IsFailure()) return result;
589
+ Heap::public_set_non_monomorphic_cache(NumberDictionary::cast(result));
590
+ return probe;
591
+ }
592
+
593
+
594
+ static Object* FillCache(Object* code) {
595
+ if (code->IsCode()) {
596
+ int entry =
597
+ Heap::non_monomorphic_cache()->FindEntry(
598
+ Code::cast(code)->flags());
599
+ // The entry must be present see comment in ProbeCache.
600
+ ASSERT(entry != -1);
601
+ ASSERT(Heap::non_monomorphic_cache()->ValueAt(entry) ==
602
+ Heap::undefined_value());
603
+ Heap::non_monomorphic_cache()->ValueAtPut(entry, code);
604
+ CHECK(GetProbeValue(Code::cast(code)->flags()) == code);
605
+ }
606
+ return code;
607
+ }
608
+
609
+
610
+ Code* StubCache::FindCallInitialize(int argc, InLoopFlag in_loop) {
611
+ Code::Flags flags =
612
+ Code::ComputeFlags(Code::CALL_IC, in_loop, UNINITIALIZED, NORMAL, argc);
613
+ Object* result = ProbeCache(flags);
614
+ ASSERT(!result->IsUndefined());
615
+ // This might be called during the marking phase of the collector
616
+ // hence the unchecked cast.
617
+ return reinterpret_cast<Code*>(result);
618
+ }
619
+
620
+
621
+ Object* StubCache::ComputeCallInitialize(int argc, InLoopFlag in_loop) {
622
+ Code::Flags flags =
623
+ Code::ComputeFlags(Code::CALL_IC, in_loop, UNINITIALIZED, NORMAL, argc);
624
+ Object* probe = ProbeCache(flags);
625
+ if (!probe->IsUndefined()) return probe;
626
+ StubCompiler compiler;
627
+ return FillCache(compiler.CompileCallInitialize(flags));
628
+ }
629
+
630
+
631
+ Object* StubCache::ComputeCallPreMonomorphic(int argc, InLoopFlag in_loop) {
632
+ Code::Flags flags =
633
+ Code::ComputeFlags(Code::CALL_IC, in_loop, PREMONOMORPHIC, NORMAL, argc);
634
+ Object* probe = ProbeCache(flags);
635
+ if (!probe->IsUndefined()) return probe;
636
+ StubCompiler compiler;
637
+ return FillCache(compiler.CompileCallPreMonomorphic(flags));
638
+ }
639
+
640
+
641
+ Object* StubCache::ComputeCallNormal(int argc, InLoopFlag in_loop) {
642
+ Code::Flags flags =
643
+ Code::ComputeFlags(Code::CALL_IC, in_loop, MONOMORPHIC, NORMAL, argc);
644
+ Object* probe = ProbeCache(flags);
645
+ if (!probe->IsUndefined()) return probe;
646
+ StubCompiler compiler;
647
+ return FillCache(compiler.CompileCallNormal(flags));
648
+ }
649
+
650
+
651
+ Object* StubCache::ComputeCallMegamorphic(int argc, InLoopFlag in_loop) {
652
+ Code::Flags flags =
653
+ Code::ComputeFlags(Code::CALL_IC, in_loop, MEGAMORPHIC, NORMAL, argc);
654
+ Object* probe = ProbeCache(flags);
655
+ if (!probe->IsUndefined()) return probe;
656
+ StubCompiler compiler;
657
+ return FillCache(compiler.CompileCallMegamorphic(flags));
658
+ }
659
+
660
+
661
+ Object* StubCache::ComputeCallMiss(int argc) {
662
+ Code::Flags flags =
663
+ Code::ComputeFlags(Code::STUB, NOT_IN_LOOP, MEGAMORPHIC, NORMAL, argc);
664
+ Object* probe = ProbeCache(flags);
665
+ if (!probe->IsUndefined()) return probe;
666
+ StubCompiler compiler;
667
+ return FillCache(compiler.CompileCallMiss(flags));
668
+ }
669
+
670
+
671
+ #ifdef ENABLE_DEBUGGER_SUPPORT
672
+ Object* StubCache::ComputeCallDebugBreak(int argc) {
673
+ Code::Flags flags =
674
+ Code::ComputeFlags(Code::CALL_IC, NOT_IN_LOOP, DEBUG_BREAK, NORMAL, argc);
675
+ Object* probe = ProbeCache(flags);
676
+ if (!probe->IsUndefined()) return probe;
677
+ StubCompiler compiler;
678
+ return FillCache(compiler.CompileCallDebugBreak(flags));
679
+ }
680
+
681
+
682
+ Object* StubCache::ComputeCallDebugPrepareStepIn(int argc) {
683
+ Code::Flags flags =
684
+ Code::ComputeFlags(Code::CALL_IC,
685
+ NOT_IN_LOOP,
686
+ DEBUG_PREPARE_STEP_IN,
687
+ NORMAL,
688
+ argc);
689
+ Object* probe = ProbeCache(flags);
690
+ if (!probe->IsUndefined()) return probe;
691
+ StubCompiler compiler;
692
+ return FillCache(compiler.CompileCallDebugPrepareStepIn(flags));
693
+ }
694
+ #endif
695
+
696
+
697
+ Object* StubCache::ComputeLazyCompile(int argc) {
698
+ Code::Flags flags =
699
+ Code::ComputeFlags(Code::STUB, NOT_IN_LOOP, UNINITIALIZED, NORMAL, argc);
700
+ Object* probe = ProbeCache(flags);
701
+ if (!probe->IsUndefined()) return probe;
702
+ StubCompiler compiler;
703
+ Object* result = FillCache(compiler.CompileLazyCompile(flags));
704
+ if (result->IsCode()) {
705
+ Code* code = Code::cast(result);
706
+ USE(code);
707
+ LOG(CodeCreateEvent(Logger::LAZY_COMPILE_TAG,
708
+ code, code->arguments_count()));
709
+ }
710
+ return result;
711
+ }
712
+
713
+
714
+ void StubCache::Clear() {
715
+ for (int i = 0; i < kPrimaryTableSize; i++) {
716
+ primary_[i].key = Heap::empty_string();
717
+ primary_[i].value = Builtins::builtin(Builtins::Illegal);
718
+ }
719
+ for (int j = 0; j < kSecondaryTableSize; j++) {
720
+ secondary_[j].key = Heap::empty_string();
721
+ secondary_[j].value = Builtins::builtin(Builtins::Illegal);
722
+ }
723
+ }
724
+
725
+
726
+ // ------------------------------------------------------------------------
727
+ // StubCompiler implementation.
728
+
729
+
730
+ // Support function for computing call IC miss stubs.
731
+ Handle<Code> ComputeCallMiss(int argc) {
732
+ CALL_HEAP_FUNCTION(StubCache::ComputeCallMiss(argc), Code);
733
+ }
734
+
735
+
736
+
737
+ Object* LoadCallbackProperty(Arguments args) {
738
+ ASSERT(args[0]->IsJSObject());
739
+ ASSERT(args[1]->IsJSObject());
740
+ AccessorInfo* callback = AccessorInfo::cast(args[2]);
741
+ Address getter_address = v8::ToCData<Address>(callback->getter());
742
+ v8::AccessorGetter fun = FUNCTION_CAST<v8::AccessorGetter>(getter_address);
743
+ ASSERT(fun != NULL);
744
+ CustomArguments custom_args(callback->data(),
745
+ JSObject::cast(args[0]),
746
+ JSObject::cast(args[1]));
747
+ v8::AccessorInfo info(custom_args.end());
748
+ HandleScope scope;
749
+ v8::Handle<v8::Value> result;
750
+ {
751
+ // Leaving JavaScript.
752
+ VMState state(EXTERNAL);
753
+ #ifdef ENABLE_LOGGING_AND_PROFILING
754
+ state.set_external_callback(getter_address);
755
+ #endif
756
+ result = fun(v8::Utils::ToLocal(args.at<String>(4)), info);
757
+ }
758
+ RETURN_IF_SCHEDULED_EXCEPTION();
759
+ if (result.IsEmpty()) return Heap::undefined_value();
760
+ return *v8::Utils::OpenHandle(*result);
761
+ }
762
+
763
+
764
+ Object* StoreCallbackProperty(Arguments args) {
765
+ JSObject* recv = JSObject::cast(args[0]);
766
+ AccessorInfo* callback = AccessorInfo::cast(args[1]);
767
+ Address setter_address = v8::ToCData<Address>(callback->setter());
768
+ v8::AccessorSetter fun = FUNCTION_CAST<v8::AccessorSetter>(setter_address);
769
+ ASSERT(fun != NULL);
770
+ Handle<String> name = args.at<String>(2);
771
+ Handle<Object> value = args.at<Object>(3);
772
+ HandleScope scope;
773
+ LOG(ApiNamedPropertyAccess("store", recv, *name));
774
+ CustomArguments custom_args(callback->data(), recv, recv);
775
+ v8::AccessorInfo info(custom_args.end());
776
+ {
777
+ // Leaving JavaScript.
778
+ VMState state(EXTERNAL);
779
+ #ifdef ENABLE_LOGGING_AND_PROFILING
780
+ state.set_external_callback(setter_address);
781
+ #endif
782
+ fun(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), info);
783
+ }
784
+ RETURN_IF_SCHEDULED_EXCEPTION();
785
+ return *value;
786
+ }
787
+
788
+ /**
789
+ * Attempts to load a property with an interceptor (which must be present),
790
+ * but doesn't search the prototype chain.
791
+ *
792
+ * Returns |Heap::no_interceptor_result_sentinel()| if interceptor doesn't
793
+ * provide any value for the given name.
794
+ */
795
+ Object* LoadPropertyWithInterceptorOnly(Arguments args) {
796
+ JSObject* receiver_handle = JSObject::cast(args[0]);
797
+ JSObject* holder_handle = JSObject::cast(args[1]);
798
+ Handle<String> name_handle = args.at<String>(2);
799
+ Handle<InterceptorInfo> interceptor_info = args.at<InterceptorInfo>(3);
800
+ Object* data_handle = args[4];
801
+
802
+ Address getter_address = v8::ToCData<Address>(interceptor_info->getter());
803
+ v8::NamedPropertyGetter getter =
804
+ FUNCTION_CAST<v8::NamedPropertyGetter>(getter_address);
805
+ ASSERT(getter != NULL);
806
+
807
+ {
808
+ // Use the interceptor getter.
809
+ CustomArguments args(data_handle, receiver_handle, holder_handle);
810
+ v8::AccessorInfo info(args.end());
811
+ HandleScope scope;
812
+ v8::Handle<v8::Value> r;
813
+ {
814
+ // Leaving JavaScript.
815
+ VMState state(EXTERNAL);
816
+ r = getter(v8::Utils::ToLocal(name_handle), info);
817
+ }
818
+ RETURN_IF_SCHEDULED_EXCEPTION();
819
+ if (!r.IsEmpty()) {
820
+ return *v8::Utils::OpenHandle(*r);
821
+ }
822
+ }
823
+
824
+ return Heap::no_interceptor_result_sentinel();
825
+ }
826
+
827
+
828
+ static Object* ThrowReferenceError(String* name) {
829
+ // If the load is non-contextual, just return the undefined result.
830
+ // Note that both keyed and non-keyed loads may end up here, so we
831
+ // can't use either LoadIC or KeyedLoadIC constructors.
832
+ IC ic(IC::NO_EXTRA_FRAME);
833
+ ASSERT(ic.target()->is_load_stub() || ic.target()->is_keyed_load_stub());
834
+ if (!ic.SlowIsContextual()) return Heap::undefined_value();
835
+
836
+ // Throw a reference error.
837
+ HandleScope scope;
838
+ Handle<String> name_handle(name);
839
+ Handle<Object> error =
840
+ Factory::NewReferenceError("not_defined",
841
+ HandleVector(&name_handle, 1));
842
+ return Top::Throw(*error);
843
+ }
844
+
845
+
846
+ static Object* LoadWithInterceptor(Arguments* args,
847
+ PropertyAttributes* attrs) {
848
+ Handle<JSObject> receiver_handle = args->at<JSObject>(0);
849
+ Handle<JSObject> holder_handle = args->at<JSObject>(1);
850
+ Handle<String> name_handle = args->at<String>(2);
851
+ Handle<InterceptorInfo> interceptor_info = args->at<InterceptorInfo>(3);
852
+ Handle<Object> data_handle = args->at<Object>(4);
853
+
854
+ Address getter_address = v8::ToCData<Address>(interceptor_info->getter());
855
+ v8::NamedPropertyGetter getter =
856
+ FUNCTION_CAST<v8::NamedPropertyGetter>(getter_address);
857
+ ASSERT(getter != NULL);
858
+
859
+ {
860
+ // Use the interceptor getter.
861
+ CustomArguments args(*data_handle, *receiver_handle, *holder_handle);
862
+ v8::AccessorInfo info(args.end());
863
+ HandleScope scope;
864
+ v8::Handle<v8::Value> r;
865
+ {
866
+ // Leaving JavaScript.
867
+ VMState state(EXTERNAL);
868
+ r = getter(v8::Utils::ToLocal(name_handle), info);
869
+ }
870
+ RETURN_IF_SCHEDULED_EXCEPTION();
871
+ if (!r.IsEmpty()) {
872
+ *attrs = NONE;
873
+ return *v8::Utils::OpenHandle(*r);
874
+ }
875
+ }
876
+
877
+ Object* result = holder_handle->GetPropertyPostInterceptor(
878
+ *receiver_handle,
879
+ *name_handle,
880
+ attrs);
881
+ RETURN_IF_SCHEDULED_EXCEPTION();
882
+ return result;
883
+ }
884
+
885
+
886
+ /**
887
+ * Loads a property with an interceptor performing post interceptor
888
+ * lookup if interceptor failed.
889
+ */
890
+ Object* LoadPropertyWithInterceptorForLoad(Arguments args) {
891
+ PropertyAttributes attr = NONE;
892
+ Object* result = LoadWithInterceptor(&args, &attr);
893
+ if (result->IsFailure()) return result;
894
+
895
+ // If the property is present, return it.
896
+ if (attr != ABSENT) return result;
897
+ return ThrowReferenceError(String::cast(args[2]));
898
+ }
899
+
900
+
901
+ Object* LoadPropertyWithInterceptorForCall(Arguments args) {
902
+ PropertyAttributes attr;
903
+ Object* result = LoadWithInterceptor(&args, &attr);
904
+ RETURN_IF_SCHEDULED_EXCEPTION();
905
+ // This is call IC. In this case, we simply return the undefined result which
906
+ // will lead to an exception when trying to invoke the result as a
907
+ // function.
908
+ return result;
909
+ }
910
+
911
+
912
+ Object* StoreInterceptorProperty(Arguments args) {
913
+ JSObject* recv = JSObject::cast(args[0]);
914
+ String* name = String::cast(args[1]);
915
+ Object* value = args[2];
916
+ ASSERT(recv->HasNamedInterceptor());
917
+ PropertyAttributes attr = NONE;
918
+ Object* result = recv->SetPropertyWithInterceptor(name, value, attr);
919
+ return result;
920
+ }
921
+
922
+
923
+ Object* StubCompiler::CompileCallInitialize(Code::Flags flags) {
924
+ HandleScope scope;
925
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
926
+ CallIC::GenerateInitialize(masm(), argc);
927
+ Object* result = GetCodeWithFlags(flags, "CompileCallInitialize");
928
+ if (!result->IsFailure()) {
929
+ Counters::call_initialize_stubs.Increment();
930
+ Code* code = Code::cast(result);
931
+ USE(code);
932
+ LOG(CodeCreateEvent(Logger::CALL_INITIALIZE_TAG,
933
+ code, code->arguments_count()));
934
+ }
935
+ return result;
936
+ }
937
+
938
+
939
+ Object* StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) {
940
+ HandleScope scope;
941
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
942
+ // The code of the PreMonomorphic stub is the same as the code
943
+ // of the Initialized stub. They just differ on the code object flags.
944
+ CallIC::GenerateInitialize(masm(), argc);
945
+ Object* result = GetCodeWithFlags(flags, "CompileCallPreMonomorphic");
946
+ if (!result->IsFailure()) {
947
+ Counters::call_premonomorphic_stubs.Increment();
948
+ Code* code = Code::cast(result);
949
+ USE(code);
950
+ LOG(CodeCreateEvent(Logger::CALL_PRE_MONOMORPHIC_TAG,
951
+ code, code->arguments_count()));
952
+ }
953
+ return result;
954
+ }
955
+
956
+
957
+ Object* StubCompiler::CompileCallNormal(Code::Flags flags) {
958
+ HandleScope scope;
959
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
960
+ CallIC::GenerateNormal(masm(), argc);
961
+ Object* result = GetCodeWithFlags(flags, "CompileCallNormal");
962
+ if (!result->IsFailure()) {
963
+ Counters::call_normal_stubs.Increment();
964
+ Code* code = Code::cast(result);
965
+ USE(code);
966
+ LOG(CodeCreateEvent(Logger::CALL_NORMAL_TAG,
967
+ code, code->arguments_count()));
968
+ }
969
+ return result;
970
+ }
971
+
972
+
973
+ Object* StubCompiler::CompileCallMegamorphic(Code::Flags flags) {
974
+ HandleScope scope;
975
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
976
+ CallIC::GenerateMegamorphic(masm(), argc);
977
+ Object* result = GetCodeWithFlags(flags, "CompileCallMegamorphic");
978
+ if (!result->IsFailure()) {
979
+ Counters::call_megamorphic_stubs.Increment();
980
+ Code* code = Code::cast(result);
981
+ USE(code);
982
+ LOG(CodeCreateEvent(Logger::CALL_MEGAMORPHIC_TAG,
983
+ code, code->arguments_count()));
984
+ }
985
+ return result;
986
+ }
987
+
988
+
989
+ Object* StubCompiler::CompileCallMiss(Code::Flags flags) {
990
+ HandleScope scope;
991
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
992
+ CallIC::GenerateMiss(masm(), argc);
993
+ Object* result = GetCodeWithFlags(flags, "CompileCallMiss");
994
+ if (!result->IsFailure()) {
995
+ Counters::call_megamorphic_stubs.Increment();
996
+ Code* code = Code::cast(result);
997
+ USE(code);
998
+ LOG(CodeCreateEvent(Logger::CALL_MISS_TAG, code, code->arguments_count()));
999
+ }
1000
+ return result;
1001
+ }
1002
+
1003
+
1004
+ #ifdef ENABLE_DEBUGGER_SUPPORT
1005
+ Object* StubCompiler::CompileCallDebugBreak(Code::Flags flags) {
1006
+ HandleScope scope;
1007
+ Debug::GenerateCallICDebugBreak(masm());
1008
+ Object* result = GetCodeWithFlags(flags, "CompileCallDebugBreak");
1009
+ if (!result->IsFailure()) {
1010
+ Code* code = Code::cast(result);
1011
+ USE(code);
1012
+ LOG(CodeCreateEvent(Logger::CALL_DEBUG_BREAK_TAG,
1013
+ code, code->arguments_count()));
1014
+ }
1015
+ return result;
1016
+ }
1017
+
1018
+
1019
+ Object* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) {
1020
+ HandleScope scope;
1021
+ // Use the same code for the the step in preparations as we do for
1022
+ // the miss case.
1023
+ int argc = Code::ExtractArgumentsCountFromFlags(flags);
1024
+ CallIC::GenerateMiss(masm(), argc);
1025
+ Object* result = GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn");
1026
+ if (!result->IsFailure()) {
1027
+ Code* code = Code::cast(result);
1028
+ USE(code);
1029
+ LOG(CodeCreateEvent(Logger::CALL_DEBUG_PREPARE_STEP_IN_TAG,
1030
+ code, code->arguments_count()));
1031
+ }
1032
+ return result;
1033
+ }
1034
+ #endif
1035
+
1036
+
1037
+ Object* StubCompiler::GetCodeWithFlags(Code::Flags flags, const char* name) {
1038
+ // Check for allocation failures during stub compilation.
1039
+ if (failure_->IsFailure()) return failure_;
1040
+
1041
+ // Create code object in the heap.
1042
+ CodeDesc desc;
1043
+ masm_.GetCode(&desc);
1044
+ Object* result = Heap::CreateCode(desc, NULL, flags, masm_.CodeObject());
1045
+ #ifdef ENABLE_DISASSEMBLER
1046
+ if (FLAG_print_code_stubs && !result->IsFailure()) {
1047
+ Code::cast(result)->Disassemble(name);
1048
+ }
1049
+ #endif
1050
+ return result;
1051
+ }
1052
+
1053
+
1054
+ Object* StubCompiler::GetCodeWithFlags(Code::Flags flags, String* name) {
1055
+ if (FLAG_print_code_stubs && (name != NULL)) {
1056
+ return GetCodeWithFlags(flags, *name->ToCString());
1057
+ }
1058
+ return GetCodeWithFlags(flags, reinterpret_cast<char*>(NULL));
1059
+ }
1060
+
1061
+
1062
+ Object* LoadStubCompiler::GetCode(PropertyType type, String* name) {
1063
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
1064
+ return GetCodeWithFlags(flags, name);
1065
+ }
1066
+
1067
+
1068
+ Object* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) {
1069
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, type);
1070
+ return GetCodeWithFlags(flags, name);
1071
+ }
1072
+
1073
+
1074
+ Object* StoreStubCompiler::GetCode(PropertyType type, String* name) {
1075
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type);
1076
+ return GetCodeWithFlags(flags, name);
1077
+ }
1078
+
1079
+
1080
+ Object* KeyedStoreStubCompiler::GetCode(PropertyType type, String* name) {
1081
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, type);
1082
+ return GetCodeWithFlags(flags, name);
1083
+ }
1084
+
1085
+
1086
+ Object* CallStubCompiler::GetCode(PropertyType type, String* name) {
1087
+ int argc = arguments_.immediate();
1088
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::CALL_IC,
1089
+ type,
1090
+ in_loop_,
1091
+ argc);
1092
+ return GetCodeWithFlags(flags, name);
1093
+ }
1094
+
1095
+
1096
+ Object* ConstructStubCompiler::GetCode() {
1097
+ Code::Flags flags = Code::ComputeFlags(Code::STUB);
1098
+ Object* result = GetCodeWithFlags(flags, "ConstructStub");
1099
+ if (!result->IsFailure()) {
1100
+ Code* code = Code::cast(result);
1101
+ USE(code);
1102
+ LOG(CodeCreateEvent(Logger::STUB_TAG, code, "ConstructStub"));
1103
+ }
1104
+ return result;
1105
+ }
1106
+
1107
+
1108
+ } } // namespace v8::internal