mustang 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. data/.rspec +1 -0
  2. data/Isolate +9 -0
  3. data/README.md +6 -12
  4. data/Rakefile +30 -4
  5. data/TODO.md +9 -0
  6. data/ext/v8/extconf.rb +56 -0
  7. data/ext/v8/v8.cpp +37 -0
  8. data/ext/v8/v8_array.cpp +161 -0
  9. data/ext/v8/v8_array.h +17 -0
  10. data/ext/v8/v8_base.cpp +147 -0
  11. data/ext/v8/v8_base.h +23 -0
  12. data/ext/v8/v8_cast.cpp +151 -0
  13. data/ext/v8/v8_cast.h +64 -0
  14. data/ext/v8/v8_context.cpp +174 -0
  15. data/ext/v8/v8_context.h +12 -0
  16. data/ext/v8/v8_date.cpp +61 -0
  17. data/ext/v8/v8_date.h +16 -0
  18. data/ext/v8/v8_errors.cpp +147 -0
  19. data/ext/v8/v8_errors.h +19 -0
  20. data/ext/v8/v8_external.cpp +66 -0
  21. data/ext/v8/v8_external.h +16 -0
  22. data/ext/v8/v8_function.cpp +182 -0
  23. data/ext/v8/v8_function.h +14 -0
  24. data/ext/v8/v8_integer.cpp +70 -0
  25. data/ext/v8/v8_integer.h +16 -0
  26. data/ext/v8/v8_macros.h +30 -0
  27. data/ext/v8/v8_main.cpp +53 -0
  28. data/ext/v8/v8_main.h +13 -0
  29. data/ext/v8/v8_number.cpp +62 -0
  30. data/ext/v8/v8_number.h +16 -0
  31. data/ext/v8/v8_object.cpp +172 -0
  32. data/ext/v8/v8_object.h +17 -0
  33. data/ext/v8/v8_ref.cpp +72 -0
  34. data/ext/v8/v8_ref.h +43 -0
  35. data/ext/v8/v8_regexp.cpp +148 -0
  36. data/ext/v8/v8_regexp.h +16 -0
  37. data/ext/v8/v8_string.cpp +78 -0
  38. data/ext/v8/v8_string.h +16 -0
  39. data/ext/v8/v8_value.cpp +370 -0
  40. data/ext/v8/v8_value.h +19 -0
  41. data/gemspec.yml +2 -1
  42. data/lib/core_ext/class.rb +14 -0
  43. data/lib/core_ext/object.rb +12 -0
  44. data/lib/core_ext/symbol.rb +23 -0
  45. data/lib/mustang.rb +44 -0
  46. data/lib/mustang/context.rb +69 -0
  47. data/lib/mustang/errors.rb +36 -0
  48. data/lib/support/delegated.rb +25 -0
  49. data/lib/v8/array.rb +21 -0
  50. data/lib/v8/context.rb +13 -0
  51. data/lib/v8/date.rb +20 -0
  52. data/lib/v8/error.rb +15 -0
  53. data/lib/v8/external.rb +16 -0
  54. data/lib/v8/function.rb +11 -0
  55. data/lib/v8/integer.rb +16 -0
  56. data/lib/v8/number.rb +16 -0
  57. data/lib/v8/object.rb +66 -0
  58. data/lib/v8/regexp.rb +23 -0
  59. data/lib/v8/string.rb +27 -0
  60. data/mustang.gemspec +3 -0
  61. data/spec/core_ext/class_spec.rb +19 -0
  62. data/spec/core_ext/object_spec.rb +19 -0
  63. data/spec/core_ext/symbol_spec.rb +27 -0
  64. data/spec/fixtures/test1.js +2 -0
  65. data/spec/fixtures/test2.js +2 -0
  66. data/spec/spec_helper.rb +20 -0
  67. data/spec/v8/array_spec.rb +88 -0
  68. data/spec/v8/cast_spec.rb +151 -0
  69. data/spec/v8/context_spec.rb +78 -0
  70. data/spec/v8/data_spec.rb +39 -0
  71. data/spec/v8/date_spec.rb +45 -0
  72. data/spec/v8/empty_spec.rb +27 -0
  73. data/spec/v8/errors_spec.rb +142 -0
  74. data/spec/v8/external_spec.rb +44 -0
  75. data/spec/v8/function_spec.rb +170 -0
  76. data/spec/v8/integer_spec.rb +41 -0
  77. data/spec/v8/main_spec.rb +18 -0
  78. data/spec/v8/null_spec.rb +27 -0
  79. data/spec/v8/number_spec.rb +40 -0
  80. data/spec/v8/object_spec.rb +79 -0
  81. data/spec/v8/primitive_spec.rb +9 -0
  82. data/spec/v8/regexp_spec.rb +65 -0
  83. data/spec/v8/string_spec.rb +48 -0
  84. data/spec/v8/undefined_spec.rb +27 -0
  85. data/spec/v8/value_spec.rb +215 -0
  86. data/vendor/v8/.gitignore +2 -0
  87. data/vendor/v8/AUTHORS +3 -1
  88. data/vendor/v8/ChangeLog +117 -0
  89. data/vendor/v8/SConstruct +334 -53
  90. data/vendor/v8/include/v8-debug.h +21 -11
  91. data/vendor/v8/include/v8-preparser.h +1 -1
  92. data/vendor/v8/include/v8-profiler.h +122 -43
  93. data/vendor/v8/include/v8-testing.h +5 -0
  94. data/vendor/v8/include/v8.h +171 -17
  95. data/vendor/v8/preparser/SConscript +38 -0
  96. data/vendor/v8/preparser/preparser-process.cc +77 -114
  97. data/vendor/v8/samples/shell.cc +232 -46
  98. data/vendor/v8/src/SConscript +29 -5
  99. data/vendor/v8/src/accessors.cc +70 -211
  100. data/vendor/v8/{test/cctest/test-mips.cc → src/allocation-inl.h} +15 -18
  101. data/vendor/v8/src/allocation.cc +0 -82
  102. data/vendor/v8/src/allocation.h +9 -42
  103. data/vendor/v8/src/api.cc +1645 -1156
  104. data/vendor/v8/src/api.h +76 -12
  105. data/vendor/v8/src/apiutils.h +0 -7
  106. data/vendor/v8/src/arguments.h +15 -4
  107. data/vendor/v8/src/arm/assembler-arm-inl.h +10 -9
  108. data/vendor/v8/src/arm/assembler-arm.cc +62 -23
  109. data/vendor/v8/src/arm/assembler-arm.h +76 -11
  110. data/vendor/v8/src/arm/builtins-arm.cc +39 -33
  111. data/vendor/v8/src/arm/code-stubs-arm.cc +1182 -402
  112. data/vendor/v8/src/arm/code-stubs-arm.h +20 -54
  113. data/vendor/v8/src/arm/codegen-arm.cc +159 -106
  114. data/vendor/v8/src/arm/codegen-arm.h +6 -6
  115. data/vendor/v8/src/arm/constants-arm.h +16 -1
  116. data/vendor/v8/src/arm/cpu-arm.cc +7 -5
  117. data/vendor/v8/src/arm/debug-arm.cc +6 -4
  118. data/vendor/v8/src/arm/deoptimizer-arm.cc +51 -14
  119. data/vendor/v8/src/arm/disasm-arm.cc +47 -15
  120. data/vendor/v8/src/arm/frames-arm.h +1 -1
  121. data/vendor/v8/src/arm/full-codegen-arm.cc +724 -408
  122. data/vendor/v8/src/arm/ic-arm.cc +90 -85
  123. data/vendor/v8/src/arm/lithium-arm.cc +140 -69
  124. data/vendor/v8/src/arm/lithium-arm.h +161 -46
  125. data/vendor/v8/src/arm/lithium-codegen-arm.cc +567 -297
  126. data/vendor/v8/src/arm/lithium-codegen-arm.h +21 -9
  127. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +2 -0
  128. data/vendor/v8/src/arm/macro-assembler-arm.cc +457 -96
  129. data/vendor/v8/src/arm/macro-assembler-arm.h +115 -18
  130. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +20 -13
  131. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +1 -0
  132. data/vendor/v8/src/arm/simulator-arm.cc +184 -101
  133. data/vendor/v8/src/arm/simulator-arm.h +26 -21
  134. data/vendor/v8/src/arm/stub-cache-arm.cc +450 -467
  135. data/vendor/v8/src/arm/virtual-frame-arm.cc +14 -12
  136. data/vendor/v8/src/arm/virtual-frame-arm.h +11 -8
  137. data/vendor/v8/src/array.js +35 -18
  138. data/vendor/v8/src/assembler.cc +186 -92
  139. data/vendor/v8/src/assembler.h +106 -69
  140. data/vendor/v8/src/ast-inl.h +5 -0
  141. data/vendor/v8/src/ast.cc +46 -35
  142. data/vendor/v8/src/ast.h +107 -50
  143. data/vendor/v8/src/atomicops.h +2 -0
  144. data/vendor/v8/src/atomicops_internals_mips_gcc.h +169 -0
  145. data/vendor/v8/src/bootstrapper.cc +649 -399
  146. data/vendor/v8/src/bootstrapper.h +94 -27
  147. data/vendor/v8/src/builtins.cc +359 -227
  148. data/vendor/v8/src/builtins.h +157 -123
  149. data/vendor/v8/src/checks.cc +2 -2
  150. data/vendor/v8/src/checks.h +4 -0
  151. data/vendor/v8/src/code-stubs.cc +27 -17
  152. data/vendor/v8/src/code-stubs.h +38 -17
  153. data/vendor/v8/src/codegen-inl.h +5 -1
  154. data/vendor/v8/src/codegen.cc +27 -17
  155. data/vendor/v8/src/codegen.h +9 -9
  156. data/vendor/v8/src/compilation-cache.cc +92 -206
  157. data/vendor/v8/src/compilation-cache.h +205 -30
  158. data/vendor/v8/src/compiler.cc +107 -120
  159. data/vendor/v8/src/compiler.h +17 -2
  160. data/vendor/v8/src/contexts.cc +22 -15
  161. data/vendor/v8/src/contexts.h +14 -8
  162. data/vendor/v8/src/conversions.cc +86 -30
  163. data/vendor/v8/src/counters.cc +19 -4
  164. data/vendor/v8/src/counters.h +28 -16
  165. data/vendor/v8/src/cpu-profiler-inl.h +4 -3
  166. data/vendor/v8/src/cpu-profiler.cc +123 -72
  167. data/vendor/v8/src/cpu-profiler.h +33 -19
  168. data/vendor/v8/src/cpu.h +2 -0
  169. data/vendor/v8/src/d8-debug.cc +3 -3
  170. data/vendor/v8/src/d8-debug.h +7 -6
  171. data/vendor/v8/src/d8-posix.cc +2 -0
  172. data/vendor/v8/src/d8.cc +22 -12
  173. data/vendor/v8/src/d8.gyp +3 -0
  174. data/vendor/v8/src/d8.js +618 -0
  175. data/vendor/v8/src/data-flow.h +3 -3
  176. data/vendor/v8/src/dateparser.h +4 -2
  177. data/vendor/v8/src/debug-agent.cc +10 -9
  178. data/vendor/v8/src/debug-agent.h +9 -11
  179. data/vendor/v8/src/debug-debugger.js +121 -0
  180. data/vendor/v8/src/debug.cc +331 -227
  181. data/vendor/v8/src/debug.h +248 -219
  182. data/vendor/v8/src/deoptimizer.cc +173 -62
  183. data/vendor/v8/src/deoptimizer.h +119 -19
  184. data/vendor/v8/src/disasm.h +3 -0
  185. data/vendor/v8/src/disassembler.cc +10 -9
  186. data/vendor/v8/src/execution.cc +185 -129
  187. data/vendor/v8/src/execution.h +47 -78
  188. data/vendor/v8/src/extensions/experimental/break-iterator.cc +250 -0
  189. data/vendor/v8/src/extensions/experimental/break-iterator.h +89 -0
  190. data/vendor/v8/src/extensions/experimental/experimental.gyp +2 -0
  191. data/vendor/v8/src/extensions/experimental/i18n-extension.cc +22 -2
  192. data/vendor/v8/src/extensions/externalize-string-extension.cc +2 -2
  193. data/vendor/v8/src/extensions/gc-extension.cc +1 -1
  194. data/vendor/v8/src/factory.cc +261 -154
  195. data/vendor/v8/src/factory.h +162 -158
  196. data/vendor/v8/src/flag-definitions.h +17 -11
  197. data/vendor/v8/src/frame-element.cc +0 -5
  198. data/vendor/v8/src/frame-element.h +9 -13
  199. data/vendor/v8/src/frames-inl.h +7 -0
  200. data/vendor/v8/src/frames.cc +56 -46
  201. data/vendor/v8/src/frames.h +36 -25
  202. data/vendor/v8/src/full-codegen.cc +15 -24
  203. data/vendor/v8/src/full-codegen.h +13 -41
  204. data/vendor/v8/src/func-name-inferrer.cc +7 -6
  205. data/vendor/v8/src/func-name-inferrer.h +1 -1
  206. data/vendor/v8/src/gdb-jit.cc +1 -0
  207. data/vendor/v8/src/global-handles.cc +118 -56
  208. data/vendor/v8/src/global-handles.h +98 -40
  209. data/vendor/v8/src/globals.h +2 -2
  210. data/vendor/v8/src/handles-inl.h +106 -9
  211. data/vendor/v8/src/handles.cc +220 -157
  212. data/vendor/v8/src/handles.h +38 -59
  213. data/vendor/v8/src/hashmap.h +3 -3
  214. data/vendor/v8/src/heap-inl.h +141 -25
  215. data/vendor/v8/src/heap-profiler.cc +117 -63
  216. data/vendor/v8/src/heap-profiler.h +38 -21
  217. data/vendor/v8/src/heap.cc +805 -564
  218. data/vendor/v8/src/heap.h +640 -594
  219. data/vendor/v8/src/hydrogen-instructions.cc +216 -73
  220. data/vendor/v8/src/hydrogen-instructions.h +259 -124
  221. data/vendor/v8/src/hydrogen.cc +996 -1171
  222. data/vendor/v8/src/hydrogen.h +163 -144
  223. data/vendor/v8/src/ia32/assembler-ia32-inl.h +12 -11
  224. data/vendor/v8/src/ia32/assembler-ia32.cc +85 -39
  225. data/vendor/v8/src/ia32/assembler-ia32.h +82 -16
  226. data/vendor/v8/src/ia32/builtins-ia32.cc +64 -58
  227. data/vendor/v8/src/ia32/code-stubs-ia32.cc +248 -324
  228. data/vendor/v8/src/ia32/code-stubs-ia32.h +3 -44
  229. data/vendor/v8/src/ia32/codegen-ia32.cc +217 -165
  230. data/vendor/v8/src/ia32/codegen-ia32.h +3 -0
  231. data/vendor/v8/src/ia32/cpu-ia32.cc +6 -5
  232. data/vendor/v8/src/ia32/debug-ia32.cc +8 -5
  233. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +124 -14
  234. data/vendor/v8/src/ia32/disasm-ia32.cc +85 -62
  235. data/vendor/v8/src/ia32/frames-ia32.h +1 -1
  236. data/vendor/v8/src/ia32/full-codegen-ia32.cc +348 -435
  237. data/vendor/v8/src/ia32/ic-ia32.cc +91 -91
  238. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +500 -255
  239. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +13 -4
  240. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +6 -0
  241. data/vendor/v8/src/ia32/lithium-ia32.cc +122 -45
  242. data/vendor/v8/src/ia32/lithium-ia32.h +128 -41
  243. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +109 -84
  244. data/vendor/v8/src/ia32/macro-assembler-ia32.h +18 -9
  245. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +26 -15
  246. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +1 -0
  247. data/vendor/v8/src/ia32/register-allocator-ia32.cc +30 -30
  248. data/vendor/v8/src/ia32/simulator-ia32.h +4 -4
  249. data/vendor/v8/src/ia32/stub-cache-ia32.cc +383 -400
  250. data/vendor/v8/src/ia32/virtual-frame-ia32.cc +36 -13
  251. data/vendor/v8/src/ia32/virtual-frame-ia32.h +11 -5
  252. data/vendor/v8/src/ic-inl.h +12 -2
  253. data/vendor/v8/src/ic.cc +304 -221
  254. data/vendor/v8/src/ic.h +115 -58
  255. data/vendor/v8/src/interpreter-irregexp.cc +25 -21
  256. data/vendor/v8/src/interpreter-irregexp.h +2 -1
  257. data/vendor/v8/src/isolate.cc +883 -0
  258. data/vendor/v8/src/isolate.h +1304 -0
  259. data/vendor/v8/src/json.js +10 -10
  260. data/vendor/v8/src/jsregexp.cc +111 -80
  261. data/vendor/v8/src/jsregexp.h +6 -7
  262. data/vendor/v8/src/jump-target-heavy.cc +5 -8
  263. data/vendor/v8/src/jump-target-heavy.h +0 -6
  264. data/vendor/v8/src/jump-target-inl.h +1 -1
  265. data/vendor/v8/src/jump-target-light.cc +3 -3
  266. data/vendor/v8/src/lithium-allocator-inl.h +2 -0
  267. data/vendor/v8/src/lithium-allocator.cc +42 -30
  268. data/vendor/v8/src/lithium-allocator.h +8 -22
  269. data/vendor/v8/src/lithium.cc +1 -0
  270. data/vendor/v8/src/liveedit.cc +141 -99
  271. data/vendor/v8/src/liveedit.h +7 -2
  272. data/vendor/v8/src/liveobjectlist-inl.h +90 -0
  273. data/vendor/v8/src/liveobjectlist.cc +2537 -1
  274. data/vendor/v8/src/liveobjectlist.h +245 -35
  275. data/vendor/v8/src/log-utils.cc +122 -35
  276. data/vendor/v8/src/log-utils.h +33 -36
  277. data/vendor/v8/src/log.cc +299 -241
  278. data/vendor/v8/src/log.h +177 -110
  279. data/vendor/v8/src/mark-compact.cc +612 -470
  280. data/vendor/v8/src/mark-compact.h +153 -80
  281. data/vendor/v8/src/messages.cc +16 -14
  282. data/vendor/v8/src/messages.js +30 -7
  283. data/vendor/v8/src/mips/assembler-mips-inl.h +155 -35
  284. data/vendor/v8/src/mips/assembler-mips.cc +1093 -219
  285. data/vendor/v8/src/mips/assembler-mips.h +552 -153
  286. data/vendor/v8/src/mips/builtins-mips.cc +43 -100
  287. data/vendor/v8/src/mips/code-stubs-mips.cc +752 -0
  288. data/vendor/v8/src/mips/code-stubs-mips.h +511 -0
  289. data/vendor/v8/src/mips/codegen-mips-inl.h +8 -14
  290. data/vendor/v8/src/mips/codegen-mips.cc +672 -896
  291. data/vendor/v8/src/mips/codegen-mips.h +271 -69
  292. data/vendor/v8/src/mips/constants-mips.cc +44 -20
  293. data/vendor/v8/src/mips/constants-mips.h +238 -40
  294. data/vendor/v8/src/mips/cpu-mips.cc +20 -3
  295. data/vendor/v8/src/mips/debug-mips.cc +35 -7
  296. data/vendor/v8/src/mips/deoptimizer-mips.cc +91 -0
  297. data/vendor/v8/src/mips/disasm-mips.cc +329 -93
  298. data/vendor/v8/src/mips/frames-mips.cc +2 -50
  299. data/vendor/v8/src/mips/frames-mips.h +24 -9
  300. data/vendor/v8/src/mips/full-codegen-mips.cc +473 -23
  301. data/vendor/v8/src/mips/ic-mips.cc +81 -45
  302. data/vendor/v8/src/mips/jump-target-mips.cc +11 -106
  303. data/vendor/v8/src/mips/lithium-codegen-mips.h +65 -0
  304. data/vendor/v8/src/mips/lithium-mips.h +304 -0
  305. data/vendor/v8/src/mips/macro-assembler-mips.cc +2391 -390
  306. data/vendor/v8/src/mips/macro-assembler-mips.h +718 -121
  307. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +478 -0
  308. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +250 -0
  309. data/vendor/v8/src/mips/register-allocator-mips-inl.h +0 -3
  310. data/vendor/v8/src/mips/register-allocator-mips.h +3 -2
  311. data/vendor/v8/src/mips/simulator-mips.cc +1009 -221
  312. data/vendor/v8/src/mips/simulator-mips.h +119 -36
  313. data/vendor/v8/src/mips/stub-cache-mips.cc +331 -148
  314. data/vendor/v8/src/mips/{fast-codegen-mips.cc → virtual-frame-mips-inl.h} +11 -30
  315. data/vendor/v8/src/mips/virtual-frame-mips.cc +137 -149
  316. data/vendor/v8/src/mips/virtual-frame-mips.h +294 -312
  317. data/vendor/v8/src/mirror-debugger.js +9 -8
  318. data/vendor/v8/src/mksnapshot.cc +2 -2
  319. data/vendor/v8/src/objects-debug.cc +16 -16
  320. data/vendor/v8/src/objects-inl.h +421 -195
  321. data/vendor/v8/src/objects-printer.cc +7 -7
  322. data/vendor/v8/src/objects-visiting.cc +1 -1
  323. data/vendor/v8/src/objects-visiting.h +33 -12
  324. data/vendor/v8/src/objects.cc +935 -658
  325. data/vendor/v8/src/objects.h +234 -139
  326. data/vendor/v8/src/parser.cc +484 -439
  327. data/vendor/v8/src/parser.h +35 -14
  328. data/vendor/v8/src/platform-cygwin.cc +173 -107
  329. data/vendor/v8/src/platform-freebsd.cc +224 -72
  330. data/vendor/v8/src/platform-linux.cc +234 -95
  331. data/vendor/v8/src/platform-macos.cc +215 -82
  332. data/vendor/v8/src/platform-nullos.cc +9 -3
  333. data/vendor/v8/src/platform-openbsd.cc +22 -7
  334. data/vendor/v8/src/platform-posix.cc +30 -5
  335. data/vendor/v8/src/platform-solaris.cc +120 -38
  336. data/vendor/v8/src/platform-tls-mac.h +62 -0
  337. data/vendor/v8/src/platform-tls-win32.h +62 -0
  338. data/vendor/v8/src/platform-tls.h +50 -0
  339. data/vendor/v8/src/platform-win32.cc +195 -97
  340. data/vendor/v8/src/platform.h +72 -15
  341. data/vendor/v8/src/preparse-data.cc +2 -0
  342. data/vendor/v8/src/preparser-api.cc +8 -2
  343. data/vendor/v8/src/preparser.cc +1 -1
  344. data/vendor/v8/src/prettyprinter.cc +43 -52
  345. data/vendor/v8/src/prettyprinter.h +1 -1
  346. data/vendor/v8/src/profile-generator-inl.h +0 -28
  347. data/vendor/v8/src/profile-generator.cc +942 -685
  348. data/vendor/v8/src/profile-generator.h +210 -176
  349. data/vendor/v8/src/property.cc +6 -0
  350. data/vendor/v8/src/property.h +14 -3
  351. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +1 -1
  352. data/vendor/v8/src/regexp-macro-assembler.cc +28 -19
  353. data/vendor/v8/src/regexp-macro-assembler.h +11 -6
  354. data/vendor/v8/src/regexp-stack.cc +18 -10
  355. data/vendor/v8/src/regexp-stack.h +45 -21
  356. data/vendor/v8/src/regexp.js +3 -3
  357. data/vendor/v8/src/register-allocator-inl.h +3 -3
  358. data/vendor/v8/src/register-allocator.cc +1 -7
  359. data/vendor/v8/src/register-allocator.h +5 -15
  360. data/vendor/v8/src/rewriter.cc +2 -1
  361. data/vendor/v8/src/runtime-profiler.cc +158 -128
  362. data/vendor/v8/src/runtime-profiler.h +131 -15
  363. data/vendor/v8/src/runtime.cc +2409 -1692
  364. data/vendor/v8/src/runtime.h +93 -17
  365. data/vendor/v8/src/safepoint-table.cc +3 -0
  366. data/vendor/v8/src/safepoint-table.h +9 -3
  367. data/vendor/v8/src/scanner-base.cc +21 -28
  368. data/vendor/v8/src/scanner-base.h +22 -11
  369. data/vendor/v8/src/scanner.cc +3 -5
  370. data/vendor/v8/src/scanner.h +4 -2
  371. data/vendor/v8/src/scopeinfo.cc +11 -16
  372. data/vendor/v8/src/scopeinfo.h +26 -15
  373. data/vendor/v8/src/scopes.cc +67 -37
  374. data/vendor/v8/src/scopes.h +26 -12
  375. data/vendor/v8/src/serialize.cc +193 -154
  376. data/vendor/v8/src/serialize.h +41 -36
  377. data/vendor/v8/src/small-pointer-list.h +163 -0
  378. data/vendor/v8/src/snapshot-common.cc +1 -1
  379. data/vendor/v8/src/snapshot.h +3 -1
  380. data/vendor/v8/src/spaces-inl.h +30 -25
  381. data/vendor/v8/src/spaces.cc +263 -370
  382. data/vendor/v8/src/spaces.h +178 -166
  383. data/vendor/v8/src/string-search.cc +4 -3
  384. data/vendor/v8/src/string-search.h +21 -20
  385. data/vendor/v8/src/string-stream.cc +32 -24
  386. data/vendor/v8/src/string.js +7 -7
  387. data/vendor/v8/src/stub-cache.cc +324 -248
  388. data/vendor/v8/src/stub-cache.h +181 -155
  389. data/vendor/v8/src/token.cc +3 -3
  390. data/vendor/v8/src/token.h +3 -3
  391. data/vendor/v8/src/top.cc +218 -390
  392. data/vendor/v8/src/type-info.cc +98 -32
  393. data/vendor/v8/src/type-info.h +10 -3
  394. data/vendor/v8/src/unicode.cc +1 -1
  395. data/vendor/v8/src/unicode.h +1 -1
  396. data/vendor/v8/src/utils.h +3 -0
  397. data/vendor/v8/src/v8-counters.cc +18 -11
  398. data/vendor/v8/src/v8-counters.h +34 -13
  399. data/vendor/v8/src/v8.cc +66 -121
  400. data/vendor/v8/src/v8.h +7 -4
  401. data/vendor/v8/src/v8globals.h +18 -12
  402. data/vendor/v8/src/{memory.h → v8memory.h} +0 -0
  403. data/vendor/v8/src/v8natives.js +59 -18
  404. data/vendor/v8/src/v8threads.cc +127 -114
  405. data/vendor/v8/src/v8threads.h +42 -35
  406. data/vendor/v8/src/v8utils.h +2 -39
  407. data/vendor/v8/src/variables.h +1 -1
  408. data/vendor/v8/src/version.cc +26 -5
  409. data/vendor/v8/src/version.h +4 -0
  410. data/vendor/v8/src/virtual-frame-heavy-inl.h +2 -4
  411. data/vendor/v8/src/virtual-frame-light-inl.h +5 -4
  412. data/vendor/v8/src/vm-state-inl.h +21 -17
  413. data/vendor/v8/src/vm-state.h +7 -5
  414. data/vendor/v8/src/win32-headers.h +1 -0
  415. data/vendor/v8/src/x64/assembler-x64-inl.h +12 -11
  416. data/vendor/v8/src/x64/assembler-x64.cc +80 -40
  417. data/vendor/v8/src/x64/assembler-x64.h +67 -17
  418. data/vendor/v8/src/x64/builtins-x64.cc +34 -33
  419. data/vendor/v8/src/x64/code-stubs-x64.cc +636 -377
  420. data/vendor/v8/src/x64/code-stubs-x64.h +14 -48
  421. data/vendor/v8/src/x64/codegen-x64-inl.h +1 -1
  422. data/vendor/v8/src/x64/codegen-x64.cc +158 -136
  423. data/vendor/v8/src/x64/codegen-x64.h +4 -1
  424. data/vendor/v8/src/x64/cpu-x64.cc +7 -5
  425. data/vendor/v8/src/x64/debug-x64.cc +8 -6
  426. data/vendor/v8/src/x64/deoptimizer-x64.cc +195 -20
  427. data/vendor/v8/src/x64/disasm-x64.cc +42 -23
  428. data/vendor/v8/src/x64/frames-x64.cc +1 -1
  429. data/vendor/v8/src/x64/frames-x64.h +2 -2
  430. data/vendor/v8/src/x64/full-codegen-x64.cc +780 -218
  431. data/vendor/v8/src/x64/ic-x64.cc +77 -79
  432. data/vendor/v8/src/x64/jump-target-x64.cc +1 -1
  433. data/vendor/v8/src/x64/lithium-codegen-x64.cc +698 -181
  434. data/vendor/v8/src/x64/lithium-codegen-x64.h +31 -6
  435. data/vendor/v8/src/x64/lithium-x64.cc +136 -54
  436. data/vendor/v8/src/x64/lithium-x64.h +142 -51
  437. data/vendor/v8/src/x64/macro-assembler-x64.cc +456 -187
  438. data/vendor/v8/src/x64/macro-assembler-x64.h +166 -34
  439. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +44 -28
  440. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +8 -4
  441. data/vendor/v8/src/x64/register-allocator-x64-inl.h +3 -3
  442. data/vendor/v8/src/x64/register-allocator-x64.cc +12 -8
  443. data/vendor/v8/src/x64/simulator-x64.h +5 -5
  444. data/vendor/v8/src/x64/stub-cache-x64.cc +299 -344
  445. data/vendor/v8/src/x64/virtual-frame-x64.cc +37 -13
  446. data/vendor/v8/src/x64/virtual-frame-x64.h +13 -7
  447. data/vendor/v8/src/zone-inl.h +49 -3
  448. data/vendor/v8/src/zone.cc +42 -41
  449. data/vendor/v8/src/zone.h +37 -34
  450. data/vendor/v8/test/benchmarks/testcfg.py +100 -0
  451. data/vendor/v8/test/cctest/SConscript +5 -4
  452. data/vendor/v8/test/cctest/cctest.h +3 -2
  453. data/vendor/v8/test/cctest/cctest.status +6 -11
  454. data/vendor/v8/test/cctest/test-accessors.cc +3 -3
  455. data/vendor/v8/test/cctest/test-alloc.cc +39 -33
  456. data/vendor/v8/test/cctest/test-api.cc +1092 -205
  457. data/vendor/v8/test/cctest/test-assembler-arm.cc +39 -25
  458. data/vendor/v8/test/cctest/test-assembler-ia32.cc +36 -37
  459. data/vendor/v8/test/cctest/test-assembler-mips.cc +1098 -40
  460. data/vendor/v8/test/cctest/test-assembler-x64.cc +32 -25
  461. data/vendor/v8/test/cctest/test-ast.cc +1 -0
  462. data/vendor/v8/test/cctest/test-circular-queue.cc +8 -5
  463. data/vendor/v8/test/cctest/test-compiler.cc +24 -24
  464. data/vendor/v8/test/cctest/test-cpu-profiler.cc +140 -5
  465. data/vendor/v8/test/cctest/test-dataflow.cc +1 -0
  466. data/vendor/v8/test/cctest/test-debug.cc +136 -77
  467. data/vendor/v8/test/cctest/test-decls.cc +1 -1
  468. data/vendor/v8/test/cctest/test-deoptimization.cc +25 -24
  469. data/vendor/v8/test/cctest/test-disasm-arm.cc +9 -4
  470. data/vendor/v8/test/cctest/test-disasm-ia32.cc +10 -8
  471. data/vendor/v8/test/cctest/test-func-name-inference.cc +10 -4
  472. data/vendor/v8/test/cctest/test-heap-profiler.cc +226 -164
  473. data/vendor/v8/test/cctest/test-heap.cc +240 -217
  474. data/vendor/v8/test/cctest/test-liveedit.cc +1 -0
  475. data/vendor/v8/test/cctest/test-log-stack-tracer.cc +18 -20
  476. data/vendor/v8/test/cctest/test-log.cc +114 -108
  477. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +247 -177
  478. data/vendor/v8/test/cctest/test-mark-compact.cc +129 -90
  479. data/vendor/v8/test/cctest/test-parsing.cc +15 -14
  480. data/vendor/v8/test/cctest/test-platform-linux.cc +1 -0
  481. data/vendor/v8/test/cctest/test-platform-tls.cc +66 -0
  482. data/vendor/v8/test/cctest/test-platform-win32.cc +1 -0
  483. data/vendor/v8/test/cctest/test-profile-generator.cc +1 -1
  484. data/vendor/v8/test/cctest/test-regexp.cc +53 -41
  485. data/vendor/v8/test/cctest/test-reloc-info.cc +18 -11
  486. data/vendor/v8/test/cctest/test-serialize.cc +44 -43
  487. data/vendor/v8/test/cctest/test-sockets.cc +8 -3
  488. data/vendor/v8/test/cctest/test-spaces.cc +47 -29
  489. data/vendor/v8/test/cctest/test-strings.cc +20 -20
  490. data/vendor/v8/test/cctest/test-thread-termination.cc +8 -3
  491. data/vendor/v8/test/cctest/test-threads.cc +5 -3
  492. data/vendor/v8/test/cctest/test-utils.cc +5 -4
  493. data/vendor/v8/test/cctest/testcfg.py +7 -3
  494. data/vendor/v8/test/es5conform/es5conform.status +2 -77
  495. data/vendor/v8/test/es5conform/testcfg.py +1 -1
  496. data/vendor/v8/test/message/testcfg.py +1 -1
  497. data/vendor/v8/test/mjsunit/accessors-on-global-object.js +3 -3
  498. data/vendor/v8/test/mjsunit/array-concat.js +43 -1
  499. data/vendor/v8/test/mjsunit/array-join.js +25 -0
  500. data/vendor/v8/test/mjsunit/bitops-info.js +7 -1
  501. data/vendor/v8/test/mjsunit/compiler/array-length.js +2 -2
  502. data/vendor/v8/test/mjsunit/compiler/global-accessors.js +47 -0
  503. data/vendor/v8/test/mjsunit/compiler/pic.js +1 -1
  504. data/vendor/v8/test/mjsunit/compiler/regress-loadfield.js +65 -0
  505. data/vendor/v8/test/mjsunit/math-sqrt.js +5 -1
  506. data/vendor/v8/test/mjsunit/mjsunit.js +59 -8
  507. data/vendor/v8/test/mjsunit/mjsunit.status +0 -12
  508. data/vendor/v8/test/mjsunit/mul-exhaustive.js +129 -11
  509. data/vendor/v8/test/mjsunit/negate-zero.js +1 -1
  510. data/vendor/v8/test/mjsunit/object-freeze.js +5 -13
  511. data/vendor/v8/test/mjsunit/object-prevent-extensions.js +9 -50
  512. data/vendor/v8/test/mjsunit/object-seal.js +4 -13
  513. data/vendor/v8/test/mjsunit/override-eval-with-non-function.js +36 -0
  514. data/vendor/v8/test/mjsunit/regress/regress-1145.js +54 -0
  515. data/vendor/v8/test/mjsunit/regress/regress-1172-bis.js +37 -0
  516. data/vendor/v8/test/mjsunit/regress/regress-1181.js +54 -0
  517. data/vendor/v8/test/mjsunit/regress/regress-1207.js +35 -0
  518. data/vendor/v8/test/mjsunit/regress/regress-1209.js +34 -0
  519. data/vendor/v8/test/mjsunit/regress/regress-1210.js +48 -0
  520. data/vendor/v8/test/mjsunit/regress/regress-1213.js +43 -0
  521. data/vendor/v8/test/mjsunit/regress/regress-1218.js +29 -0
  522. data/vendor/v8/test/mjsunit/regress/regress-1229.js +79 -0
  523. data/vendor/v8/test/mjsunit/regress/regress-1233.js +47 -0
  524. data/vendor/v8/test/mjsunit/regress/regress-1236.js +34 -0
  525. data/vendor/v8/test/mjsunit/regress/regress-1237.js +36 -0
  526. data/vendor/v8/test/mjsunit/regress/regress-1240.js +39 -0
  527. data/vendor/v8/test/mjsunit/regress/regress-1257.js +58 -0
  528. data/vendor/v8/test/mjsunit/regress/regress-1278.js +69 -0
  529. data/vendor/v8/test/mjsunit/regress/regress-create-exception.js +1 -0
  530. data/vendor/v8/test/mjsunit/regress/regress-lazy-deopt-reloc.js +52 -0
  531. data/vendor/v8/test/mjsunit/sin-cos.js +15 -10
  532. data/vendor/v8/test/mjsunit/smi-negative-zero.js +2 -2
  533. data/vendor/v8/test/mjsunit/str-to-num.js +1 -1
  534. data/vendor/v8/test/mjsunit/strict-mode.js +435 -0
  535. data/vendor/v8/test/mjsunit/testcfg.py +23 -6
  536. data/vendor/v8/test/mozilla/mozilla.status +0 -2
  537. data/vendor/v8/test/mozilla/testcfg.py +1 -1
  538. data/vendor/v8/test/preparser/empty.js +28 -0
  539. data/vendor/v8/test/preparser/functions-only.js +38 -0
  540. data/vendor/v8/test/preparser/non-alphanum.js +34 -0
  541. data/vendor/v8/test/preparser/symbols-only.js +49 -0
  542. data/vendor/v8/test/preparser/testcfg.py +90 -0
  543. data/vendor/v8/test/sputnik/testcfg.py +1 -1
  544. data/vendor/v8/test/test262/README +16 -0
  545. data/vendor/v8/test/test262/harness-adapt.js +80 -0
  546. data/vendor/v8/test/test262/test262.status +1506 -0
  547. data/vendor/v8/test/test262/testcfg.py +123 -0
  548. data/vendor/v8/tools/freebsd-tick-processor +10 -0
  549. data/vendor/v8/tools/gyp/v8.gyp +8 -33
  550. data/vendor/v8/tools/linux-tick-processor +5 -3
  551. data/vendor/v8/tools/test.py +37 -14
  552. data/vendor/v8/tools/tickprocessor.js +22 -8
  553. data/vendor/v8/tools/visual_studio/v8_base.vcproj +13 -1
  554. data/vendor/v8/tools/visual_studio/v8_base_arm.vcproj +5 -1
  555. data/vendor/v8/tools/visual_studio/v8_base_x64.vcproj +5 -1
  556. data/vendor/v8/tools/visual_studio/x64.vsprops +1 -0
  557. metadata +1495 -1341
  558. data/ext/extconf.rb +0 -22
  559. data/ext/mustang.cpp +0 -58
  560. data/vendor/v8/src/top.h +0 -608
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/Isolate ADDED
@@ -0,0 +1,9 @@
1
+ # -*- ruby -*-
2
+
3
+ gem "ore-tasks", "~> 0.4"
4
+
5
+ env :development, :test do
6
+ gem "rspec", "~> 2.5"
7
+ gem "mocha", ">= 0.9"
8
+ gem "rake-compiler", "~> 0.7"
9
+ end
data/README.md CHANGED
@@ -1,18 +1,12 @@
1
1
  # Mustang - V8 engine in Ruby's body
2
2
 
3
3
  Mustang is ruby proxy library for awesome Google V8 JavaScript engine.
4
- It embeds the V8 engine as a C++ extension (using Rice).
5
4
 
6
5
  ## Installation
7
6
 
8
- Using rubygems:
9
-
10
- $ gem install mustang
11
-
12
- Manualy:
13
-
14
7
  $ git clone git://github.com/nu7hatch/mustang.git
15
8
  $ cd mustang
9
+ $ rake compile
16
10
  $ rake install
17
11
 
18
12
  ## Usage
@@ -21,10 +15,10 @@ For now it's only proof of concept. It implements very simple evaluation of java
21
15
 
22
16
  require 'mustang'
23
17
 
24
- rt = Mustang::Runtime.new
25
- rt.evaluate("'Hello' + ' World!';") # => 'Hello World!'
26
- rt.evaluate("var a=1;")
27
- rt.evaluate("a+5;") # => 6
18
+ cxt = Mustang::Context.new
19
+ cxt.eval("'Hello' + ' World!';") # => 'Hello World!'
20
+ cxt.eval("var a=1;")
21
+ cxt.eval("a+5;") # => 6
28
22
 
29
23
  ## Note on Patches/Pull Requests
30
24
 
@@ -36,6 +30,6 @@ For now it's only proof of concept. It implements very simple evaluation of java
36
30
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
37
31
  * Send me a pull request. Bonus points for topic branches.
38
32
 
39
- == Copyright
33
+ ## Copyright
40
34
 
41
35
  Copyright (c) 2010 Kriss 'nu7hatch' Kowalik. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,5 +1,11 @@
1
1
  # -*- ruby -*-
2
2
 
3
+ begin
4
+ require 'isolate/now'
5
+ rescue LoadError
6
+ STDERR.puts "Run `gem install isolate` to install 'isolate'."
7
+ end
8
+
3
9
  begin
4
10
  require 'ore/tasks'
5
11
  Ore::Tasks.new
@@ -7,22 +13,35 @@ rescue LoadError
7
13
  STDERR.puts "Run `gem install ore-tasks` to install 'ore/tasks'."
8
14
  end
9
15
 
16
+ begin
17
+ require 'rake/extensiontask'
18
+ Rake::ExtensionTask.new("v8") do |ext|
19
+ ext.lib_dir = 'lib'
20
+ ext.source_pattern = "*.{cpp,h}"
21
+ #ext.config_options << '--with-v8-include'
22
+ #ext.config_options << '--with-v8-lib'
23
+ end
24
+ rescue LoadError
25
+ STDERR.puts "Run `gem install rake-compiler` to install 'rake-compiler'."
26
+ end
27
+
10
28
  begin
11
29
  require 'rspec/core/rake_task'
12
- RSpec::Core::RakeTask.new(:spec)
30
+ RSpec::Core::RakeTask.new(:spec) do |t|
31
+ t.rspec_opts = ENV['RSPEC_OPTS']
32
+ end
13
33
  rescue LoadError
14
34
  task :spec do
15
35
  abort 'Run `gem install rspec` to install RSpec'
16
36
  end
17
37
  end
18
38
 
19
- task :test => :spec
39
+ task :test => [:clean, :compile, :spec]
20
40
  task :default => :test
21
41
 
22
- begin
42
+ begin
23
43
  require 'metric_fu'
24
44
  rescue LoadError
25
- STDERR.puts "Run `gem install metric_fu` to install Metric-Fu"
26
45
  end
27
46
 
28
47
  require 'rake/rdoctask'
@@ -32,3 +51,10 @@ Rake::RDocTask.new do |rdoc|
32
51
  rdoc.rdoc_files.include('README*')
33
52
  rdoc.rdoc_files.include('lib/**/*.rb')
34
53
  end
54
+
55
+ task :init_mustang do
56
+ require 'mustang'
57
+ $c = Mustang::Context.new
58
+ end
59
+
60
+ Rake::Task[:console].prerequisites << :init_mustang
data/TODO.md ADDED
@@ -0,0 +1,9 @@
1
+ # TODO list
2
+
3
+ * better exceptions handling
4
+ * V8::Integer should inherit V8::Number
5
+ * specs for Mustang's classes
6
+ * specs for support modules
7
+ * v8 debug stuff
8
+ * support for ObjectTemplates
9
+ * reflecting ruby classes to FunctionTemplates
data/ext/v8/extconf.rb ADDED
@@ -0,0 +1,56 @@
1
+ require 'rbconfig'
2
+ require 'mkmf'
3
+
4
+ def darwin?
5
+ RUBY_PLATFORM =~ /darwin/
6
+ end
7
+
8
+ def cpu_x64?
9
+ unless defined?(RUBY_ENGINE) and RUBY_ENGINE == 'rbx'
10
+ !!(RbConfig::MAKEFILE_CONFIG['arch'] =~ /x86_64/ ||
11
+ RbConfig::MAKEFILE_CONFIG['target_cpu'] == 'x86_64' ||
12
+ RbConfig::MAKEFILE_CONFIG['build_cpu'] == 'x86_64' ||
13
+ RbConfig::MAKEFILE_CONFIG['ARCH_FLAG'] =~ /x86_64/)
14
+ else
15
+ ['x'].pack('y').size == 8
16
+ end
17
+ end
18
+
19
+ def make_sure_scons_installed!
20
+ unless `hash scons; echo $?`.to_i == 0
21
+ raise RuntimeError, "ERROR: To compile V8 engine you need to install the Scons library!"
22
+ end
23
+ end
24
+
25
+ def compile_v8!(v8_dir)
26
+ Dir.chdir v8_dir do
27
+ if Dir["**/libv8.a"].empty?
28
+ make_sure_scons_installed!
29
+ defaults, ENV['CCFLAGS'] = ENV['CCFLAGS'], V8_FLAGS
30
+ build_cmd = "scons mode=release snapshot=off library=static arch=#{V8_ARCH}"
31
+ puts build_cmd
32
+ system build_cmd
33
+ ENV['CCFLAGS'] = defaults
34
+ end
35
+ end
36
+ end
37
+
38
+ V8_DIR = File.expand_path("../../../vendor/v8", __FILE__)
39
+ V8_ARCH = cpu_x64? ? 'x64' : 'ia32'
40
+ V8_FLAGS = '-fPIC -fno-builtin-memcpy'
41
+
42
+ compile_v8!(V8_DIR)
43
+
44
+ dir_config('mustang/v8')
45
+ find_header('v8.h', File.join(V8_DIR, "include"))
46
+ have_library('pthread')
47
+ have_library('objc') if darwin?
48
+
49
+ CONFIG['LDSHARED'] = '$(CXX) -shared' unless darwin?
50
+ $LOCAL_LIBS << Dir[File.join(V8_DIR, "**/**/libv8.a")].first
51
+
52
+ %w[-Wall -g -rdynamic -fPIC].each { |flag|
53
+ $CPPFLAGS += " #{flag}" unless $CPPFLAGS.include?(flag)
54
+ }
55
+
56
+ create_makefile('v8')
data/ext/v8/v8.cpp ADDED
@@ -0,0 +1,37 @@
1
+ #include "v8_main.h"
2
+ #include "v8_cast.h"
3
+ #include "v8_base.h"
4
+ #include "v8_context.h"
5
+ #include "v8_value.h"
6
+ #include "v8_object.h"
7
+ #include "v8_string.h"
8
+ #include "v8_integer.h"
9
+ #include "v8_number.h"
10
+ #include "v8_date.h"
11
+ #include "v8_array.h"
12
+ #include "v8_function.h"
13
+ #include "v8_regexp.h"
14
+ #include "v8_external.h"
15
+ #include "v8_errors.h"
16
+
17
+ extern "C" void Init_v8() {
18
+ Init_V8();
19
+ Init_V8_Cast();
20
+ Init_V8_Data();
21
+ Init_V8_Empty();
22
+ Init_V8_Undefined();
23
+ Init_V8_Null();
24
+ Init_V8_Context();
25
+ Init_V8_Value();
26
+ Init_V8_Primitive();
27
+ Init_V8_Object();
28
+ Init_V8_String();
29
+ Init_V8_Integer();
30
+ Init_V8_Number();
31
+ Init_V8_Date();
32
+ Init_V8_Array();
33
+ Init_V8_Function();
34
+ Init_V8_Regexp();
35
+ Init_V8_External();
36
+ Init_V8_Errors();
37
+ }
@@ -0,0 +1,161 @@
1
+ #include "v8_ref.h"
2
+ #include "v8_cast.h"
3
+ #include "v8_object.h"
4
+ #include "v8_string.h"
5
+ #include "v8_macros.h"
6
+
7
+ using namespace v8;
8
+
9
+ VALUE rb_cV8Array;
10
+ UNWRAPPER(Array);
11
+
12
+ /* Typecasting helpers */
13
+
14
+ Handle<Value> to_v8_array(VALUE value)
15
+ {
16
+ HandleScope scope;
17
+ Local<Array> ary = Array::New();
18
+
19
+ for (int i = 0; i < RARRAY_LEN(value); i++) {
20
+ ary->Set(i, to_v8(rb_ary_entry(value, i)));
21
+ }
22
+
23
+ return ary;
24
+ }
25
+
26
+ /* V8::Array methods */
27
+
28
+ /*
29
+ * call-seq:
30
+ * V8::Array.new => new_array
31
+ * V8::Array.new(array) => new_array
32
+ *
33
+ * Returns a new V8 array.
34
+ *
35
+ */
36
+ static VALUE rb_v8_array_new(VALUE klass, VALUE data)
37
+ {
38
+ HandleScope scope;
39
+ VALUE ary = rb_funcall2(data, rb_intern("to_a"), 0, NULL);
40
+ VALUE self = v8_ref_new(klass, to_v8_array(ary));
41
+
42
+ v8_set_peer(self);
43
+ return self;
44
+ }
45
+
46
+ /*
47
+ * call-seq:
48
+ * ary.to_a => array
49
+ *
50
+ * Returns referenced array data represented as ruby array.
51
+ *
52
+ */
53
+ static VALUE rb_v8_array_to_a(VALUE self)
54
+ {
55
+ HandleScope scope;
56
+ VALUE ary = rb_ary_new();
57
+ Handle<Array> v8ary = unwrap(self);
58
+
59
+ for (unsigned int i = 0; i < v8ary->Length(); i++) {
60
+ rb_ary_store(ary, i, to_ruby(v8ary->Get(i)));
61
+ }
62
+
63
+ return ary;
64
+ }
65
+
66
+ /*
67
+ * call-seq:
68
+ * ary[key] => value
69
+ * ary.get(key) => value
70
+ *
71
+ * Returns value of specified array entry.
72
+ *
73
+ * ary = cxt.evaluate("['foo', 'bar'];")
74
+ * ary[0] # => 'foo'
75
+ *
76
+ */
77
+ static VALUE rb_v8_array_get(VALUE self, VALUE key)
78
+ {
79
+ HandleScope scope;
80
+ return to_ruby(unwrap(self)->Get(NUM2UINT(key)));
81
+ }
82
+
83
+ /*
84
+ * call-seq:
85
+ * ary[key] = value => value
86
+ * ary.set(key, value) => value
87
+ *
88
+ * Sets given value under specified key.
89
+ *
90
+ */
91
+ static VALUE rb_v8_array_set(VALUE self, VALUE key, VALUE value)
92
+ {
93
+ HandleScope scope;
94
+ Handle<Value> _value = to_v8(value);
95
+ unwrap(self)->Set(NUM2UINT(key), _value);
96
+ return to_ruby(_value);
97
+ }
98
+
99
+ /*
100
+ * call-seq:
101
+ * ary.push(value) => value
102
+ * ary << value => value
103
+ *
104
+ * Appends given value to referenced array.
105
+ *
106
+ */
107
+ static VALUE rb_v8_array_push(VALUE self, VALUE value)
108
+ {
109
+ HandleScope scope;
110
+ Handle<Value> _value = to_v8(value);
111
+ Handle<Array> ary = unwrap(self);
112
+ ary->Set(ary->Length(), _value);
113
+ return to_ruby(_value);
114
+ }
115
+
116
+ // TODO: #pop
117
+ // TODO: #delete
118
+ // TODO: #delete_key
119
+
120
+ /*
121
+ * call-seq:
122
+ * ary.length => size
123
+ * ary.size => size
124
+ *
125
+ * Returns number of items stored in this array.
126
+ *
127
+ */
128
+ VALUE rb_v8_array_length(VALUE self)
129
+ {
130
+ HandleScope scope;
131
+ return to_ruby(unwrap(self)->Length());
132
+ }
133
+
134
+ /* Public constructors */
135
+
136
+ VALUE rb_v8_array_new2(VALUE data)
137
+ {
138
+ return rb_v8_array_new(rb_cV8Array, data);
139
+ }
140
+
141
+ VALUE rb_v8_array_new3()
142
+ {
143
+ return rb_v8_array_new(rb_cV8Array, rb_ary_new());
144
+ }
145
+
146
+
147
+ /* V8::Array initializer. */
148
+ void Init_V8_Array()
149
+ {
150
+ rb_cV8Array = rb_define_class_under(rb_mV8, "Array", rb_cV8Object);
151
+ rb_define_singleton_method(rb_cV8Array, "new", RUBY_METHOD_FUNC(rb_v8_array_new), -2);
152
+ rb_define_method(rb_cV8Array, "to_a", RUBY_METHOD_FUNC(rb_v8_array_to_a), 0);
153
+ rb_define_method(rb_cV8Array, "[]", RUBY_METHOD_FUNC(rb_v8_array_get), 1);
154
+ rb_define_method(rb_cV8Array, "get", RUBY_METHOD_FUNC(rb_v8_array_get), 1);
155
+ rb_define_method(rb_cV8Array, "[]=", RUBY_METHOD_FUNC(rb_v8_array_set), 2);
156
+ rb_define_method(rb_cV8Array, "set", RUBY_METHOD_FUNC(rb_v8_array_set), 2);
157
+ rb_define_method(rb_cV8Array, "push", RUBY_METHOD_FUNC(rb_v8_array_push), 1);
158
+ rb_define_method(rb_cV8Array, "<<", RUBY_METHOD_FUNC(rb_v8_array_push), 1);
159
+ rb_define_method(rb_cV8Array, "length", RUBY_METHOD_FUNC(rb_v8_array_length), 0);
160
+ rb_define_method(rb_cV8Array, "size", RUBY_METHOD_FUNC(rb_v8_array_length), 0);
161
+ }
data/ext/v8/v8_array.h ADDED
@@ -0,0 +1,17 @@
1
+ #ifndef __V8_ARRAY_H
2
+ #define __V8_ARRAY_H
3
+
4
+ #include "v8_main.h"
5
+
6
+ using namespace v8;
7
+
8
+ /* V8::Array class */
9
+ RUBY_EXTERN VALUE rb_cV8Array;
10
+
11
+ /* API */
12
+ Handle<Value> to_v8_array(VALUE value);
13
+ VALUE rb_v8_array_new2(VALUE data);
14
+ VALUE rb_v8_array_new3();
15
+ void Init_V8_Array();
16
+
17
+ #endif//__V8_ARRAY_H
@@ -0,0 +1,147 @@
1
+ #include "v8_ref.h"
2
+ #include "v8_cast.h"
3
+ #include "v8_base.h"
4
+ #include "v8_errors.h"
5
+ #include "v8_value.h"
6
+ #include "v8_macros.h"
7
+
8
+ using namespace v8;
9
+
10
+ VALUE rb_cV8Data;
11
+ VALUE rb_cV8EmptyClass;
12
+ VALUE rb_cV8UndefinedClass;
13
+ VALUE rb_cV8NullClass;
14
+
15
+ /* V8::Data methods */
16
+
17
+ /*
18
+ * call-seq:
19
+ * data.value? => true or false
20
+ *
21
+ * Returns <code>true</code> when value is a javascript value..
22
+ *
23
+ */
24
+ static VALUE rb_v8_data_value_p(VALUE self)
25
+ {
26
+ return rb_obj_is_kind_of(self, rb_cV8Value);
27
+ }
28
+
29
+ /*
30
+ * call-seq:
31
+ * data.error? => true or false
32
+ *
33
+ * Returns <code>true</code> when value is a handled javascipt exception.
34
+ *
35
+ */
36
+ static VALUE rb_v8_data_error_p(VALUE self)
37
+ {
38
+ return rb_obj_is_kind_of(self, rb_eV8Error);
39
+ }
40
+
41
+ /*
42
+ * call-seq:
43
+ * data.null? => true or false
44
+ *
45
+ * Returns <code>true</code> when value is a javascipt null.
46
+ *
47
+ */
48
+ static VALUE rb_v8_data_null_p(VALUE self)
49
+ {
50
+ return rb_obj_is_kind_of(self, rb_cV8NullClass);
51
+ }
52
+
53
+ /*
54
+ * call-seq:
55
+ * data.empty? => true or false
56
+ *
57
+ * Returns <code>true</code> when value is empty.
58
+ *
59
+ */
60
+ static VALUE rb_v8_data_empty_p(VALUE self)
61
+ {
62
+ return rb_obj_is_kind_of(self, rb_cV8EmptyClass);
63
+ }
64
+
65
+ /*
66
+ * call-seq:
67
+ * data.undefined? => true or false
68
+ *
69
+ * Returns <code>true</code> when value is undefined.
70
+ *
71
+ */
72
+ static VALUE rb_v8_data_undefined_p(VALUE self)
73
+ {
74
+ return rb_obj_is_kind_of(self, rb_cV8UndefinedClass);
75
+ }
76
+
77
+ /* V8::Null methods */
78
+
79
+ /*
80
+ * call-seq:
81
+ * null.to_s => "NULL"
82
+ *
83
+ */
84
+ static VALUE rb_v8_null_to_s(VALUE self)
85
+ {
86
+ return rb_str_new2("NULL");
87
+ }
88
+
89
+ /* V8::Empty methods */
90
+
91
+ /*
92
+ * call-seq:
93
+ * empty.to_s => "Empty"
94
+ *
95
+ */
96
+ static VALUE rb_v8_empty_to_s(VALUE self)
97
+ {
98
+ return rb_str_new2("Empty");
99
+ }
100
+
101
+ /* V8::Undefined methods */
102
+
103
+ /*
104
+ * call-seq:
105
+ * undefined.to_s => "Undefined"
106
+ *
107
+ */
108
+ static VALUE rb_v8_undefined_to_s(VALUE self)
109
+ {
110
+ return rb_str_new2("Undefined");
111
+ }
112
+
113
+
114
+ /* V8::Data initializer */
115
+ void Init_V8_Data()
116
+ {
117
+ rb_cV8Data = rb_define_class_under(rb_mV8, "Data", rb_cObject);
118
+ rb_define_method(rb_cV8Data, "error?", RUBY_METHOD_FUNC(rb_v8_data_error_p), 0);
119
+ rb_define_method(rb_cV8Data, "null?", RUBY_METHOD_FUNC(rb_v8_data_null_p), 0);
120
+ rb_define_method(rb_cV8Data, "empty?", RUBY_METHOD_FUNC(rb_v8_data_empty_p), 0);
121
+ rb_define_method(rb_cV8Data, "undefined?", RUBY_METHOD_FUNC(rb_v8_data_undefined_p), 0);
122
+ rb_define_method(rb_cV8Data, "value?", RUBY_METHOD_FUNC(rb_v8_data_value_p), 0);
123
+ }
124
+
125
+ /* V8::Empty initializer */
126
+ void Init_V8_Empty()
127
+ {
128
+ rb_cV8EmptyClass = rb_define_class_under(rb_mV8, "EmptyClass", rb_cV8Data);
129
+ rb_define_method(rb_cV8EmptyClass, "to_s", RUBY_METHOD_FUNC(rb_v8_empty_to_s), 0);
130
+ rb_define_const(rb_mV8, "Empty", rb_funcall2(rb_cV8EmptyClass, rb_intern("new"), 0, NULL));
131
+ }
132
+
133
+ /* V8::Undefined initializer */
134
+ void Init_V8_Undefined()
135
+ {
136
+ rb_cV8UndefinedClass = rb_define_class_under(rb_mV8, "UndefinedClass", rb_cV8Data);
137
+ rb_define_method(rb_cV8UndefinedClass, "to_s", RUBY_METHOD_FUNC(rb_v8_undefined_to_s), 0);
138
+ rb_define_const(rb_mV8, "Undefined", rb_funcall2(rb_cV8UndefinedClass, rb_intern("new"), 0, NULL));
139
+ }
140
+
141
+ /* V8::Null initializer */
142
+ void Init_V8_Null()
143
+ {
144
+ rb_cV8NullClass = rb_define_class_under(rb_mV8, "NullClass", rb_cV8Data);
145
+ rb_define_method(rb_cV8NullClass, "to_s", RUBY_METHOD_FUNC(rb_v8_null_to_s), 0);
146
+ rb_define_const(rb_mV8, "Null", rb_funcall2(rb_cV8NullClass, rb_intern("new"), 0, NULL));
147
+ }