therubyracer 0.5.0-x86-linux → 0.11.0beta5-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 (721) hide show
  1. data/.gitignore +23 -11
  2. data/.travis.yml +10 -0
  3. data/Changelog.md +242 -0
  4. data/Gemfile +16 -0
  5. data/README.md +185 -0
  6. data/Rakefile +42 -51
  7. data/benchmarks.rb +217 -0
  8. data/ext/v8/accessor.cc +181 -0
  9. data/ext/v8/array.cc +26 -0
  10. data/ext/v8/backref.cc +56 -0
  11. data/ext/v8/build.rb +52 -0
  12. data/ext/v8/constants.cc +34 -0
  13. data/ext/v8/constraints.cc +52 -0
  14. data/ext/v8/context.cc +130 -0
  15. data/ext/v8/date.cc +18 -0
  16. data/ext/v8/exception.cc +38 -0
  17. data/ext/v8/extconf.rb +16 -29
  18. data/ext/v8/external.cc +43 -0
  19. data/ext/v8/function.cc +58 -0
  20. data/ext/v8/gc.cc +43 -0
  21. data/ext/v8/handles.cc +34 -0
  22. data/ext/v8/heap.cc +31 -0
  23. data/ext/v8/init.cc +39 -0
  24. data/ext/v8/init.so +0 -0
  25. data/ext/v8/invocation.cc +86 -0
  26. data/ext/v8/locker.cc +77 -0
  27. data/ext/v8/message.cc +51 -0
  28. data/ext/v8/object.cc +334 -0
  29. data/ext/v8/primitive.cc +8 -0
  30. data/ext/v8/rr.cc +83 -0
  31. data/ext/v8/rr.h +883 -0
  32. data/ext/v8/script.cc +80 -0
  33. data/ext/v8/signature.cc +18 -0
  34. data/ext/v8/stack.cc +75 -0
  35. data/ext/v8/string.cc +47 -0
  36. data/ext/v8/template.cc +175 -0
  37. data/ext/v8/trycatch.cc +86 -0
  38. data/ext/v8/v8.cc +87 -0
  39. data/ext/v8/value.cc +239 -0
  40. data/lib/v8.rb +30 -9
  41. data/lib/v8/access.rb +5 -0
  42. data/lib/v8/access/indices.rb +40 -0
  43. data/lib/v8/access/invocation.rb +47 -0
  44. data/lib/v8/access/names.rb +65 -0
  45. data/lib/v8/array.rb +26 -0
  46. data/lib/v8/context.rb +217 -75
  47. data/lib/v8/conversion.rb +35 -0
  48. data/lib/v8/conversion/array.rb +11 -0
  49. data/lib/v8/conversion/class.rb +120 -0
  50. data/lib/v8/conversion/code.rb +38 -0
  51. data/lib/v8/conversion/fundamental.rb +11 -0
  52. data/lib/v8/conversion/hash.rb +11 -0
  53. data/lib/v8/conversion/indentity.rb +31 -0
  54. data/lib/v8/conversion/method.rb +26 -0
  55. data/lib/v8/conversion/object.rb +28 -0
  56. data/lib/v8/conversion/primitive.rb +7 -0
  57. data/lib/v8/conversion/proc.rb +5 -0
  58. data/lib/v8/conversion/reference.rb +16 -0
  59. data/lib/v8/conversion/string.rb +12 -0
  60. data/lib/v8/conversion/symbol.rb +7 -0
  61. data/lib/v8/conversion/time.rb +13 -0
  62. data/lib/v8/error.rb +25 -0
  63. data/lib/v8/error/protect.rb +20 -0
  64. data/lib/v8/error/try.rb +15 -0
  65. data/lib/v8/function.rb +28 -0
  66. data/lib/v8/object.rb +69 -28
  67. data/lib/v8/util/weakcell.rb +29 -0
  68. data/lib/v8/version.rb +3 -0
  69. data/spec/c/array_spec.rb +17 -0
  70. data/spec/c/constants_spec.rb +20 -0
  71. data/spec/c/exception_spec.rb +26 -0
  72. data/spec/c/external_spec.rb +9 -0
  73. data/spec/c/function_spec.rb +46 -0
  74. data/spec/c/handles_spec.rb +35 -0
  75. data/spec/c/locker_spec.rb +38 -0
  76. data/spec/c/object_spec.rb +46 -0
  77. data/spec/c/script_spec.rb +28 -0
  78. data/spec/c/string_spec.rb +16 -0
  79. data/spec/c/template_spec.rb +30 -0
  80. data/spec/c/trycatch_spec.rb +51 -0
  81. data/spec/mem/blunt_spec.rb +42 -0
  82. data/spec/redjs_spec.rb +10 -0
  83. data/spec/spec_helper.rb +43 -12
  84. data/spec/threading_spec.rb +52 -0
  85. data/spec/v8/context_spec.rb +19 -0
  86. data/spec/v8/conversion_spec.rb +9 -0
  87. data/spec/v8/error_spec.rb +21 -0
  88. data/spec/v8/function_spec.rb +9 -0
  89. data/spec/v8/object_spec.rb +15 -0
  90. data/thefrontside.png +0 -0
  91. data/therubyracer.gemspec +15 -676
  92. metadata +146 -680
  93. data/.gitmodules +0 -3
  94. data/Doxyfile +0 -1514
  95. data/History.txt +0 -51
  96. data/README.rdoc +0 -158
  97. data/docs/data_conversion.txt +0 -18
  98. data/ext/v8/callbacks.cpp +0 -160
  99. data/ext/v8/callbacks.h +0 -14
  100. data/ext/v8/convert_ruby.cpp +0 -8
  101. data/ext/v8/convert_ruby.h +0 -99
  102. data/ext/v8/convert_string.cpp +0 -10
  103. data/ext/v8/convert_string.h +0 -73
  104. data/ext/v8/convert_v8.cpp +0 -9
  105. data/ext/v8/convert_v8.h +0 -121
  106. data/ext/v8/converters.cpp +0 -83
  107. data/ext/v8/converters.h +0 -23
  108. data/ext/v8/upstream/2.0.6/.gitignore +0 -26
  109. data/ext/v8/upstream/2.0.6/AUTHORS +0 -23
  110. data/ext/v8/upstream/2.0.6/ChangeLog +0 -1479
  111. data/ext/v8/upstream/2.0.6/LICENSE +0 -55
  112. data/ext/v8/upstream/2.0.6/SConstruct +0 -1028
  113. data/ext/v8/upstream/2.0.6/include/v8-debug.h +0 -275
  114. data/ext/v8/upstream/2.0.6/include/v8.h +0 -3236
  115. data/ext/v8/upstream/2.0.6/src/SConscript +0 -283
  116. data/ext/v8/upstream/2.0.6/src/accessors.cc +0 -695
  117. data/ext/v8/upstream/2.0.6/src/accessors.h +0 -114
  118. data/ext/v8/upstream/2.0.6/src/allocation.cc +0 -198
  119. data/ext/v8/upstream/2.0.6/src/allocation.h +0 -169
  120. data/ext/v8/upstream/2.0.6/src/api.cc +0 -3831
  121. data/ext/v8/upstream/2.0.6/src/api.h +0 -479
  122. data/ext/v8/upstream/2.0.6/src/apinatives.js +0 -110
  123. data/ext/v8/upstream/2.0.6/src/apiutils.h +0 -69
  124. data/ext/v8/upstream/2.0.6/src/arguments.h +0 -97
  125. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +0 -277
  126. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +0 -1821
  127. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +0 -1027
  128. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +0 -267
  129. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +0 -1821
  130. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +0 -1027
  131. data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +0 -1271
  132. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +0 -74
  133. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +0 -6682
  134. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +0 -535
  135. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +0 -112
  136. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +0 -347
  137. data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +0 -132
  138. data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +0 -213
  139. data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +0 -1166
  140. data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +0 -1698
  141. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +0 -123
  142. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +0 -162
  143. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +0 -849
  144. data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +0 -238
  145. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +0 -1259
  146. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +0 -423
  147. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +0 -1266
  148. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +0 -282
  149. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +0 -103
  150. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +0 -59
  151. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +0 -43
  152. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +0 -2264
  153. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +0 -306
  154. data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +0 -1516
  155. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +0 -412
  156. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +0 -532
  157. data/ext/v8/upstream/2.0.6/src/array.js +0 -1154
  158. data/ext/v8/upstream/2.0.6/src/assembler.cc +0 -772
  159. data/ext/v8/upstream/2.0.6/src/assembler.h +0 -525
  160. data/ext/v8/upstream/2.0.6/src/ast.cc +0 -512
  161. data/ext/v8/upstream/2.0.6/src/ast.h +0 -1820
  162. data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +0 -1680
  163. data/ext/v8/upstream/2.0.6/src/bootstrapper.h +0 -103
  164. data/ext/v8/upstream/2.0.6/src/builtins.cc +0 -851
  165. data/ext/v8/upstream/2.0.6/src/builtins.h +0 -245
  166. data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +0 -104
  167. data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +0 -86
  168. data/ext/v8/upstream/2.0.6/src/char-predicates.h +0 -65
  169. data/ext/v8/upstream/2.0.6/src/checks.cc +0 -100
  170. data/ext/v8/upstream/2.0.6/src/checks.h +0 -284
  171. data/ext/v8/upstream/2.0.6/src/code-stubs.cc +0 -164
  172. data/ext/v8/upstream/2.0.6/src/code-stubs.h +0 -164
  173. data/ext/v8/upstream/2.0.6/src/code.h +0 -68
  174. data/ext/v8/upstream/2.0.6/src/codegen-inl.h +0 -88
  175. data/ext/v8/upstream/2.0.6/src/codegen.cc +0 -504
  176. data/ext/v8/upstream/2.0.6/src/codegen.h +0 -522
  177. data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +0 -490
  178. data/ext/v8/upstream/2.0.6/src/compilation-cache.h +0 -98
  179. data/ext/v8/upstream/2.0.6/src/compiler.cc +0 -1132
  180. data/ext/v8/upstream/2.0.6/src/compiler.h +0 -107
  181. data/ext/v8/upstream/2.0.6/src/contexts.cc +0 -256
  182. data/ext/v8/upstream/2.0.6/src/contexts.h +0 -345
  183. data/ext/v8/upstream/2.0.6/src/conversions-inl.h +0 -95
  184. data/ext/v8/upstream/2.0.6/src/conversions.cc +0 -709
  185. data/ext/v8/upstream/2.0.6/src/conversions.h +0 -118
  186. data/ext/v8/upstream/2.0.6/src/counters.cc +0 -78
  187. data/ext/v8/upstream/2.0.6/src/counters.h +0 -239
  188. data/ext/v8/upstream/2.0.6/src/cpu.h +0 -65
  189. data/ext/v8/upstream/2.0.6/src/d8-debug.cc +0 -345
  190. data/ext/v8/upstream/2.0.6/src/d8-debug.h +0 -155
  191. data/ext/v8/upstream/2.0.6/src/d8-posix.cc +0 -675
  192. data/ext/v8/upstream/2.0.6/src/d8-readline.cc +0 -128
  193. data/ext/v8/upstream/2.0.6/src/d8-windows.cc +0 -42
  194. data/ext/v8/upstream/2.0.6/src/d8.cc +0 -776
  195. data/ext/v8/upstream/2.0.6/src/d8.h +0 -225
  196. data/ext/v8/upstream/2.0.6/src/d8.js +0 -1625
  197. data/ext/v8/upstream/2.0.6/src/date-delay.js +0 -1138
  198. data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +0 -114
  199. data/ext/v8/upstream/2.0.6/src/dateparser.cc +0 -186
  200. data/ext/v8/upstream/2.0.6/src/dateparser.h +0 -240
  201. data/ext/v8/upstream/2.0.6/src/debug-agent.cc +0 -425
  202. data/ext/v8/upstream/2.0.6/src/debug-agent.h +0 -129
  203. data/ext/v8/upstream/2.0.6/src/debug-delay.js +0 -2073
  204. data/ext/v8/upstream/2.0.6/src/debug.cc +0 -2751
  205. data/ext/v8/upstream/2.0.6/src/debug.h +0 -866
  206. data/ext/v8/upstream/2.0.6/src/disasm.h +0 -77
  207. data/ext/v8/upstream/2.0.6/src/disassembler.cc +0 -318
  208. data/ext/v8/upstream/2.0.6/src/disassembler.h +0 -56
  209. data/ext/v8/upstream/2.0.6/src/dtoa-config.c +0 -91
  210. data/ext/v8/upstream/2.0.6/src/execution.cc +0 -701
  211. data/ext/v8/upstream/2.0.6/src/execution.h +0 -312
  212. data/ext/v8/upstream/2.0.6/src/factory.cc +0 -957
  213. data/ext/v8/upstream/2.0.6/src/factory.h +0 -393
  214. data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +0 -725
  215. data/ext/v8/upstream/2.0.6/src/fast-codegen.h +0 -371
  216. data/ext/v8/upstream/2.0.6/src/flag-definitions.h +0 -426
  217. data/ext/v8/upstream/2.0.6/src/flags.cc +0 -555
  218. data/ext/v8/upstream/2.0.6/src/flags.h +0 -81
  219. data/ext/v8/upstream/2.0.6/src/frame-element.cc +0 -45
  220. data/ext/v8/upstream/2.0.6/src/frame-element.h +0 -235
  221. data/ext/v8/upstream/2.0.6/src/frames-inl.h +0 -215
  222. data/ext/v8/upstream/2.0.6/src/frames.cc +0 -749
  223. data/ext/v8/upstream/2.0.6/src/frames.h +0 -659
  224. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +0 -76
  225. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +0 -135
  226. data/ext/v8/upstream/2.0.6/src/global-handles.cc +0 -516
  227. data/ext/v8/upstream/2.0.6/src/global-handles.h +0 -180
  228. data/ext/v8/upstream/2.0.6/src/globals.h +0 -608
  229. data/ext/v8/upstream/2.0.6/src/handles-inl.h +0 -76
  230. data/ext/v8/upstream/2.0.6/src/handles.cc +0 -811
  231. data/ext/v8/upstream/2.0.6/src/handles.h +0 -367
  232. data/ext/v8/upstream/2.0.6/src/hashmap.cc +0 -226
  233. data/ext/v8/upstream/2.0.6/src/hashmap.h +0 -120
  234. data/ext/v8/upstream/2.0.6/src/heap-inl.h +0 -407
  235. data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +0 -695
  236. data/ext/v8/upstream/2.0.6/src/heap-profiler.h +0 -277
  237. data/ext/v8/upstream/2.0.6/src/heap.cc +0 -4204
  238. data/ext/v8/upstream/2.0.6/src/heap.h +0 -1704
  239. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +0 -325
  240. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +0 -2375
  241. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +0 -914
  242. data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +0 -1222
  243. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +0 -46
  244. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +0 -9770
  245. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +0 -834
  246. data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +0 -79
  247. data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +0 -208
  248. data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +0 -1357
  249. data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +0 -1813
  250. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +0 -111
  251. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +0 -135
  252. data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +0 -1490
  253. data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +0 -432
  254. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +0 -1517
  255. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +0 -528
  256. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +0 -1219
  257. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +0 -230
  258. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +0 -82
  259. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +0 -99
  260. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +0 -43
  261. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +0 -30
  262. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +0 -62
  263. data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +0 -1961
  264. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +0 -1105
  265. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +0 -580
  266. data/ext/v8/upstream/2.0.6/src/ic-inl.h +0 -93
  267. data/ext/v8/upstream/2.0.6/src/ic.cc +0 -1426
  268. data/ext/v8/upstream/2.0.6/src/ic.h +0 -443
  269. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +0 -646
  270. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +0 -48
  271. data/ext/v8/upstream/2.0.6/src/json-delay.js +0 -254
  272. data/ext/v8/upstream/2.0.6/src/jsregexp.cc +0 -5234
  273. data/ext/v8/upstream/2.0.6/src/jsregexp.h +0 -1439
  274. data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +0 -49
  275. data/ext/v8/upstream/2.0.6/src/jump-target.cc +0 -383
  276. data/ext/v8/upstream/2.0.6/src/jump-target.h +0 -280
  277. data/ext/v8/upstream/2.0.6/src/list-inl.h +0 -166
  278. data/ext/v8/upstream/2.0.6/src/list.h +0 -158
  279. data/ext/v8/upstream/2.0.6/src/log-inl.h +0 -126
  280. data/ext/v8/upstream/2.0.6/src/log-utils.cc +0 -503
  281. data/ext/v8/upstream/2.0.6/src/log-utils.h +0 -292
  282. data/ext/v8/upstream/2.0.6/src/log.cc +0 -1457
  283. data/ext/v8/upstream/2.0.6/src/log.h +0 -371
  284. data/ext/v8/upstream/2.0.6/src/macro-assembler.h +0 -93
  285. data/ext/v8/upstream/2.0.6/src/macros.py +0 -137
  286. data/ext/v8/upstream/2.0.6/src/mark-compact.cc +0 -2007
  287. data/ext/v8/upstream/2.0.6/src/mark-compact.h +0 -442
  288. data/ext/v8/upstream/2.0.6/src/math.js +0 -263
  289. data/ext/v8/upstream/2.0.6/src/memory.h +0 -74
  290. data/ext/v8/upstream/2.0.6/src/messages.cc +0 -177
  291. data/ext/v8/upstream/2.0.6/src/messages.h +0 -112
  292. data/ext/v8/upstream/2.0.6/src/messages.js +0 -937
  293. data/ext/v8/upstream/2.0.6/src/mirror-delay.js +0 -2332
  294. data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +0 -169
  295. data/ext/v8/upstream/2.0.6/src/natives.h +0 -63
  296. data/ext/v8/upstream/2.0.6/src/objects-debug.cc +0 -1317
  297. data/ext/v8/upstream/2.0.6/src/objects-inl.h +0 -3044
  298. data/ext/v8/upstream/2.0.6/src/objects.cc +0 -8306
  299. data/ext/v8/upstream/2.0.6/src/objects.h +0 -4960
  300. data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +0 -116
  301. data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +0 -69
  302. data/ext/v8/upstream/2.0.6/src/parser.cc +0 -4810
  303. data/ext/v8/upstream/2.0.6/src/parser.h +0 -195
  304. data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +0 -645
  305. data/ext/v8/upstream/2.0.6/src/platform-linux.cc +0 -808
  306. data/ext/v8/upstream/2.0.6/src/platform-macos.cc +0 -643
  307. data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +0 -454
  308. data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +0 -597
  309. data/ext/v8/upstream/2.0.6/src/platform-posix.cc +0 -380
  310. data/ext/v8/upstream/2.0.6/src/platform-win32.cc +0 -1908
  311. data/ext/v8/upstream/2.0.6/src/platform.h +0 -556
  312. data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +0 -1511
  313. data/ext/v8/upstream/2.0.6/src/prettyprinter.h +0 -219
  314. data/ext/v8/upstream/2.0.6/src/property.cc +0 -96
  315. data/ext/v8/upstream/2.0.6/src/property.h +0 -327
  316. data/ext/v8/upstream/2.0.6/src/regexp-delay.js +0 -406
  317. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +0 -78
  318. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +0 -464
  319. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +0 -141
  320. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +0 -356
  321. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +0 -103
  322. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +0 -240
  323. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +0 -220
  324. data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +0 -103
  325. data/ext/v8/upstream/2.0.6/src/regexp-stack.h +0 -123
  326. data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +0 -74
  327. data/ext/v8/upstream/2.0.6/src/register-allocator.cc +0 -100
  328. data/ext/v8/upstream/2.0.6/src/register-allocator.h +0 -295
  329. data/ext/v8/upstream/2.0.6/src/rewriter.cc +0 -855
  330. data/ext/v8/upstream/2.0.6/src/rewriter.h +0 -54
  331. data/ext/v8/upstream/2.0.6/src/runtime.cc +0 -8163
  332. data/ext/v8/upstream/2.0.6/src/runtime.h +0 -432
  333. data/ext/v8/upstream/2.0.6/src/runtime.js +0 -626
  334. data/ext/v8/upstream/2.0.6/src/scanner.cc +0 -1098
  335. data/ext/v8/upstream/2.0.6/src/scanner.h +0 -425
  336. data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +0 -649
  337. data/ext/v8/upstream/2.0.6/src/scopeinfo.h +0 -236
  338. data/ext/v8/upstream/2.0.6/src/scopes.cc +0 -963
  339. data/ext/v8/upstream/2.0.6/src/scopes.h +0 -401
  340. data/ext/v8/upstream/2.0.6/src/serialize.cc +0 -1260
  341. data/ext/v8/upstream/2.0.6/src/serialize.h +0 -404
  342. data/ext/v8/upstream/2.0.6/src/shell.h +0 -55
  343. data/ext/v8/upstream/2.0.6/src/simulator.h +0 -41
  344. data/ext/v8/upstream/2.0.6/src/smart-pointer.h +0 -109
  345. data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +0 -97
  346. data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +0 -40
  347. data/ext/v8/upstream/2.0.6/src/snapshot.h +0 -59
  348. data/ext/v8/upstream/2.0.6/src/spaces-inl.h +0 -372
  349. data/ext/v8/upstream/2.0.6/src/spaces.cc +0 -2864
  350. data/ext/v8/upstream/2.0.6/src/spaces.h +0 -2072
  351. data/ext/v8/upstream/2.0.6/src/string-stream.cc +0 -584
  352. data/ext/v8/upstream/2.0.6/src/string-stream.h +0 -189
  353. data/ext/v8/upstream/2.0.6/src/string.js +0 -901
  354. data/ext/v8/upstream/2.0.6/src/stub-cache.cc +0 -1108
  355. data/ext/v8/upstream/2.0.6/src/stub-cache.h +0 -578
  356. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +0 -15
  357. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +0 -3330
  358. data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +0 -3925
  359. data/ext/v8/upstream/2.0.6/src/token.cc +0 -56
  360. data/ext/v8/upstream/2.0.6/src/token.h +0 -270
  361. data/ext/v8/upstream/2.0.6/src/top.cc +0 -991
  362. data/ext/v8/upstream/2.0.6/src/top.h +0 -459
  363. data/ext/v8/upstream/2.0.6/src/unicode-inl.h +0 -238
  364. data/ext/v8/upstream/2.0.6/src/unicode.cc +0 -749
  365. data/ext/v8/upstream/2.0.6/src/unicode.h +0 -279
  366. data/ext/v8/upstream/2.0.6/src/uri.js +0 -415
  367. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +0 -426
  368. data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +0 -40
  369. data/ext/v8/upstream/2.0.6/src/utils.cc +0 -322
  370. data/ext/v8/upstream/2.0.6/src/utils.h +0 -592
  371. data/ext/v8/upstream/2.0.6/src/v8-counters.cc +0 -55
  372. data/ext/v8/upstream/2.0.6/src/v8-counters.h +0 -198
  373. data/ext/v8/upstream/2.0.6/src/v8.cc +0 -193
  374. data/ext/v8/upstream/2.0.6/src/v8.h +0 -119
  375. data/ext/v8/upstream/2.0.6/src/v8natives.js +0 -846
  376. data/ext/v8/upstream/2.0.6/src/v8threads.cc +0 -450
  377. data/ext/v8/upstream/2.0.6/src/v8threads.h +0 -144
  378. data/ext/v8/upstream/2.0.6/src/variables.cc +0 -163
  379. data/ext/v8/upstream/2.0.6/src/variables.h +0 -235
  380. data/ext/v8/upstream/2.0.6/src/version.cc +0 -88
  381. data/ext/v8/upstream/2.0.6/src/version.h +0 -64
  382. data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +0 -381
  383. data/ext/v8/upstream/2.0.6/src/virtual-frame.h +0 -44
  384. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +0 -352
  385. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +0 -2539
  386. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +0 -1399
  387. data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +0 -1255
  388. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +0 -46
  389. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +0 -8223
  390. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +0 -785
  391. data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +0 -79
  392. data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +0 -202
  393. data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +0 -1596
  394. data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +0 -1820
  395. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +0 -109
  396. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +0 -121
  397. data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +0 -1392
  398. data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +0 -432
  399. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +0 -2409
  400. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +0 -765
  401. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +0 -1337
  402. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +0 -295
  403. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +0 -86
  404. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +0 -84
  405. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +0 -43
  406. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +0 -27
  407. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +0 -63
  408. data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +0 -1884
  409. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +0 -1089
  410. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +0 -560
  411. data/ext/v8/upstream/2.0.6/src/zone-inl.h +0 -297
  412. data/ext/v8/upstream/2.0.6/src/zone.cc +0 -193
  413. data/ext/v8/upstream/2.0.6/src/zone.h +0 -305
  414. data/ext/v8/upstream/2.0.6/tools/codemap.js +0 -258
  415. data/ext/v8/upstream/2.0.6/tools/consarray.js +0 -93
  416. data/ext/v8/upstream/2.0.6/tools/csvparser.js +0 -98
  417. data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +0 -620
  418. data/ext/v8/upstream/2.0.6/tools/js2c.py +0 -376
  419. data/ext/v8/upstream/2.0.6/tools/jsmin.py +0 -280
  420. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +0 -24
  421. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +0 -78
  422. data/ext/v8/upstream/2.0.6/tools/logreader.js +0 -320
  423. data/ext/v8/upstream/2.0.6/tools/mac-nm +0 -18
  424. data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +0 -6
  425. data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +0 -7
  426. data/ext/v8/upstream/2.0.6/tools/oprofile/common +0 -19
  427. data/ext/v8/upstream/2.0.6/tools/oprofile/dump +0 -7
  428. data/ext/v8/upstream/2.0.6/tools/oprofile/report +0 -7
  429. data/ext/v8/upstream/2.0.6/tools/oprofile/reset +0 -7
  430. data/ext/v8/upstream/2.0.6/tools/oprofile/run +0 -14
  431. data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +0 -7
  432. data/ext/v8/upstream/2.0.6/tools/oprofile/start +0 -7
  433. data/ext/v8/upstream/2.0.6/tools/presubmit.py +0 -299
  434. data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +0 -120
  435. data/ext/v8/upstream/2.0.6/tools/profile.js +0 -621
  436. data/ext/v8/upstream/2.0.6/tools/profile_view.js +0 -224
  437. data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +0 -77
  438. data/ext/v8/upstream/2.0.6/tools/splaytree.js +0 -322
  439. data/ext/v8/upstream/2.0.6/tools/splaytree.py +0 -226
  440. data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +0 -456
  441. data/ext/v8/upstream/2.0.6/tools/test.py +0 -1370
  442. data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +0 -53
  443. data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +0 -731
  444. data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +0 -535
  445. data/ext/v8/upstream/2.0.6/tools/utils.py +0 -82
  446. data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +0 -71
  447. data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +0 -14
  448. data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +0 -35
  449. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +0 -199
  450. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +0 -199
  451. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +0 -201
  452. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +0 -6
  453. data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +0 -17
  454. data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +0 -13
  455. data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +0 -6
  456. data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +0 -24
  457. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +0 -101
  458. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +0 -223
  459. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +0 -74
  460. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +0 -223
  461. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +0 -971
  462. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +0 -983
  463. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +0 -959
  464. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +0 -255
  465. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +0 -243
  466. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +0 -257
  467. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +0 -151
  468. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -151
  469. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +0 -151
  470. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +0 -151
  471. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +0 -151
  472. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +0 -151
  473. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -151
  474. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -153
  475. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +0 -142
  476. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +0 -92
  477. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -92
  478. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +0 -142
  479. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +0 -101
  480. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +0 -223
  481. data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +0 -13
  482. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +0 -5
  483. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +0 -137
  484. data/ext/v8/upstream/Makefile +0 -32
  485. data/ext/v8/upstream/fpic-on-linux-amd64.patch +0 -13
  486. data/ext/v8/upstream/no-strict-aliasing.patch +0 -13
  487. data/ext/v8/upstream/scons/CHANGES.txt +0 -5183
  488. data/ext/v8/upstream/scons/LICENSE.txt +0 -20
  489. data/ext/v8/upstream/scons/MANIFEST +0 -202
  490. data/ext/v8/upstream/scons/PKG-INFO +0 -13
  491. data/ext/v8/upstream/scons/README.txt +0 -273
  492. data/ext/v8/upstream/scons/RELEASE.txt +0 -1040
  493. data/ext/v8/upstream/scons/engine/SCons/Action.py +0 -1256
  494. data/ext/v8/upstream/scons/engine/SCons/Builder.py +0 -868
  495. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +0 -217
  496. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +0 -794
  497. data/ext/v8/upstream/scons/engine/SCons/Debug.py +0 -237
  498. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +0 -485
  499. data/ext/v8/upstream/scons/engine/SCons/Environment.py +0 -2327
  500. data/ext/v8/upstream/scons/engine/SCons/Errors.py +0 -207
  501. data/ext/v8/upstream/scons/engine/SCons/Executor.py +0 -636
  502. data/ext/v8/upstream/scons/engine/SCons/Job.py +0 -435
  503. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +0 -292
  504. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +0 -153
  505. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +0 -3220
  506. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +0 -128
  507. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +0 -1341
  508. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +0 -50
  509. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +0 -50
  510. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +0 -50
  511. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +0 -50
  512. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +0 -76
  513. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +0 -74
  514. data/ext/v8/upstream/scons/engine/SCons/PathList.py +0 -232
  515. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +0 -236
  516. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +0 -70
  517. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +0 -55
  518. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +0 -46
  519. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +0 -46
  520. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +0 -44
  521. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +0 -58
  522. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +0 -264
  523. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +0 -50
  524. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +0 -386
  525. data/ext/v8/upstream/scons/engine/SCons/SConf.py +0 -1038
  526. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +0 -381
  527. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +0 -132
  528. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +0 -74
  529. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +0 -111
  530. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +0 -320
  531. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +0 -48
  532. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +0 -378
  533. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +0 -103
  534. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +0 -55
  535. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +0 -415
  536. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +0 -386
  537. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +0 -1360
  538. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +0 -944
  539. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +0 -642
  540. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +0 -414
  541. data/ext/v8/upstream/scons/engine/SCons/Sig.py +0 -63
  542. data/ext/v8/upstream/scons/engine/SCons/Subst.py +0 -911
  543. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +0 -1030
  544. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +0 -61
  545. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +0 -65
  546. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +0 -73
  547. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +0 -247
  548. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +0 -324
  549. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +0 -56
  550. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +0 -61
  551. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +0 -210
  552. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +0 -84
  553. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +0 -321
  554. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +0 -367
  555. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +0 -497
  556. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +0 -104
  557. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +0 -138
  558. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +0 -64
  559. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +0 -64
  560. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +0 -71
  561. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +0 -675
  562. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +0 -82
  563. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +0 -74
  564. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +0 -80
  565. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +0 -76
  566. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +0 -71
  567. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +0 -63
  568. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +0 -78
  569. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +0 -82
  570. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +0 -99
  571. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +0 -114
  572. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +0 -58
  573. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +0 -50
  574. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +0 -224
  575. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +0 -64
  576. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +0 -125
  577. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +0 -94
  578. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +0 -62
  579. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +0 -62
  580. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +0 -63
  581. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +0 -98
  582. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +0 -63
  583. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +0 -90
  584. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +0 -73
  585. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +0 -53
  586. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +0 -80
  587. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +0 -64
  588. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +0 -63
  589. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +0 -81
  590. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +0 -85
  591. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +0 -53
  592. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +0 -77
  593. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +0 -59
  594. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +0 -52
  595. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +0 -72
  596. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +0 -90
  597. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +0 -59
  598. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +0 -60
  599. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +0 -229
  600. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +0 -490
  601. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +0 -71
  602. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +0 -110
  603. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +0 -234
  604. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +0 -138
  605. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +0 -79
  606. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +0 -99
  607. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +0 -121
  608. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +0 -112
  609. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +0 -63
  610. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +0 -77
  611. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +0 -90
  612. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +0 -159
  613. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +0 -64
  614. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +0 -266
  615. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +0 -50
  616. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +0 -269
  617. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +0 -1439
  618. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +0 -208
  619. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +0 -107
  620. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +0 -72
  621. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +0 -314
  622. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +0 -185
  623. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +0 -526
  624. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +0 -367
  625. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +0 -43
  626. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +0 -43
  627. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +0 -43
  628. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +0 -44
  629. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +0 -44
  630. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +0 -44
  631. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +0 -78
  632. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +0 -83
  633. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +0 -108
  634. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +0 -336
  635. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +0 -121
  636. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +0 -70
  637. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +0 -132
  638. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +0 -68
  639. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +0 -58
  640. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +0 -53
  641. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +0 -63
  642. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +0 -67
  643. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +0 -142
  644. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +0 -58
  645. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +0 -63
  646. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +0 -64
  647. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +0 -64
  648. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +0 -77
  649. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +0 -186
  650. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +0 -73
  651. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +0 -805
  652. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +0 -175
  653. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +0 -53
  654. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +0 -100
  655. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +0 -131
  656. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +0 -100
  657. data/ext/v8/upstream/scons/engine/SCons/Util.py +0 -1645
  658. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +0 -91
  659. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +0 -107
  660. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +0 -139
  661. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +0 -109
  662. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +0 -147
  663. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +0 -317
  664. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +0 -228
  665. data/ext/v8/upstream/scons/engine/SCons/__init__.py +0 -49
  666. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +0 -302
  667. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +0 -98
  668. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +0 -91
  669. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +0 -124
  670. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +0 -1725
  671. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +0 -583
  672. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +0 -176
  673. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +0 -325
  674. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +0 -1296
  675. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +0 -382
  676. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +0 -187
  677. data/ext/v8/upstream/scons/engine/SCons/cpp.py +0 -598
  678. data/ext/v8/upstream/scons/engine/SCons/dblite.py +0 -248
  679. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +0 -77
  680. data/ext/v8/upstream/scons/os_spawnv_fix.diff +0 -83
  681. data/ext/v8/upstream/scons/scons-time.1 +0 -1017
  682. data/ext/v8/upstream/scons/scons.1 +0 -15179
  683. data/ext/v8/upstream/scons/sconsign.1 +0 -208
  684. data/ext/v8/upstream/scons/script/scons +0 -184
  685. data/ext/v8/upstream/scons/script/scons-time +0 -1529
  686. data/ext/v8/upstream/scons/script/scons.bat +0 -31
  687. data/ext/v8/upstream/scons/script/sconsign +0 -508
  688. data/ext/v8/upstream/scons/setup.cfg +0 -6
  689. data/ext/v8/upstream/scons/setup.py +0 -427
  690. data/ext/v8/v8.cpp +0 -89
  691. data/ext/v8/v8_cxt.cpp +0 -92
  692. data/ext/v8/v8_cxt.h +0 -20
  693. data/ext/v8/v8_func.cpp +0 -10
  694. data/ext/v8/v8_func.h +0 -11
  695. data/ext/v8/v8_msg.cpp +0 -54
  696. data/ext/v8/v8_msg.h +0 -18
  697. data/ext/v8/v8_obj.cpp +0 -52
  698. data/ext/v8/v8_obj.h +0 -13
  699. data/ext/v8/v8_ref.cpp +0 -26
  700. data/ext/v8/v8_ref.h +0 -31
  701. data/ext/v8/v8_script.cpp +0 -20
  702. data/ext/v8/v8_script.h +0 -8
  703. data/ext/v8/v8_standalone.cpp +0 -69
  704. data/ext/v8/v8_standalone.h +0 -31
  705. data/ext/v8/v8_str.cpp +0 -17
  706. data/ext/v8/v8_str.h +0 -9
  707. data/ext/v8/v8_template.cpp +0 -53
  708. data/ext/v8/v8_template.h +0 -13
  709. data/lib/v8/to.rb +0 -33
  710. data/lib/v8/v8.so +0 -0
  711. data/script/console +0 -10
  712. data/script/destroy +0 -14
  713. data/script/generate +0 -14
  714. data/spec/ext/cxt_spec.rb +0 -25
  715. data/spec/ext/obj_spec.rb +0 -13
  716. data/spec/redjs/jsapi_spec.rb +0 -405
  717. data/spec/redjs/tap.rb +0 -8
  718. data/spec/redjs_helper.rb +0 -3
  719. data/spec/spec.opts +0 -1
  720. data/spec/v8/to_spec.rb +0 -15
  721. data/tasks/rspec.rake +0 -21
@@ -1,1370 +0,0 @@
1
- #!/usr/bin/env python
2
- #
3
- # Copyright 2008 the V8 project authors. All rights reserved.
4
- # Redistribution and use in source and binary forms, with or without
5
- # modification, are permitted provided that the following conditions are
6
- # met:
7
- #
8
- # * Redistributions of source code must retain the above copyright
9
- # notice, this list of conditions and the following disclaimer.
10
- # * Redistributions in binary form must reproduce the above
11
- # copyright notice, this list of conditions and the following
12
- # disclaimer in the documentation and/or other materials provided
13
- # with the distribution.
14
- # * Neither the name of Google Inc. nor the names of its
15
- # contributors may be used to endorse or promote products derived
16
- # from this software without specific prior written permission.
17
- #
18
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
-
30
-
31
- import imp
32
- import optparse
33
- import os
34
- from os.path import join, dirname, abspath, basename, isdir, exists
35
- import platform
36
- import re
37
- import signal
38
- import subprocess
39
- import sys
40
- import tempfile
41
- import time
42
- import threading
43
- import utils
44
- from Queue import Queue, Empty
45
-
46
-
47
- VERBOSE = False
48
-
49
-
50
- # ---------------------------------------------
51
- # --- P r o g r e s s I n d i c a t o r s ---
52
- # ---------------------------------------------
53
-
54
-
55
- class ProgressIndicator(object):
56
-
57
- def __init__(self, cases):
58
- self.cases = cases
59
- self.queue = Queue(len(cases))
60
- for case in cases:
61
- self.queue.put_nowait(case)
62
- self.succeeded = 0
63
- self.remaining = len(cases)
64
- self.total = len(cases)
65
- self.failed = [ ]
66
- self.crashed = 0
67
- self.terminate = False
68
- self.lock = threading.Lock()
69
-
70
- def PrintFailureHeader(self, test):
71
- if test.IsNegative():
72
- negative_marker = '[negative] '
73
- else:
74
- negative_marker = ''
75
- print "=== %(label)s %(negative)s===" % {
76
- 'label': test.GetLabel(),
77
- 'negative': negative_marker
78
- }
79
- print "Path: %s" % "/".join(test.path)
80
-
81
- def Run(self, tasks):
82
- self.Starting()
83
- threads = []
84
- # Spawn N-1 threads and then use this thread as the last one.
85
- # That way -j1 avoids threading altogether which is a nice fallback
86
- # in case of threading problems.
87
- for i in xrange(tasks - 1):
88
- thread = threading.Thread(target=self.RunSingle, args=[])
89
- threads.append(thread)
90
- thread.start()
91
- try:
92
- self.RunSingle()
93
- # Wait for the remaining threads
94
- for thread in threads:
95
- # Use a timeout so that signals (ctrl-c) will be processed.
96
- thread.join(timeout=10000000)
97
- except Exception, e:
98
- # If there's an exception we schedule an interruption for any
99
- # remaining threads.
100
- self.terminate = True
101
- # ...and then reraise the exception to bail out
102
- raise
103
- self.Done()
104
- return not self.failed
105
-
106
- def RunSingle(self):
107
- while not self.terminate:
108
- try:
109
- test = self.queue.get_nowait()
110
- except Empty:
111
- return
112
- case = test.case
113
- self.lock.acquire()
114
- self.AboutToRun(case)
115
- self.lock.release()
116
- try:
117
- start = time.time()
118
- output = case.Run()
119
- case.duration = (time.time() - start)
120
- except IOError, e:
121
- assert self.terminate
122
- return
123
- if self.terminate:
124
- return
125
- self.lock.acquire()
126
- if output.UnexpectedOutput():
127
- self.failed.append(output)
128
- if output.HasCrashed():
129
- self.crashed += 1
130
- else:
131
- self.succeeded += 1
132
- self.remaining -= 1
133
- self.HasRun(output)
134
- self.lock.release()
135
-
136
-
137
- def EscapeCommand(command):
138
- parts = []
139
- for part in command:
140
- if ' ' in part:
141
- # Escape spaces. We may need to escape more characters for this
142
- # to work properly.
143
- parts.append('"%s"' % part)
144
- else:
145
- parts.append(part)
146
- return " ".join(parts)
147
-
148
-
149
- class SimpleProgressIndicator(ProgressIndicator):
150
-
151
- def Starting(self):
152
- print 'Running %i tests' % len(self.cases)
153
-
154
- def Done(self):
155
- print
156
- for failed in self.failed:
157
- self.PrintFailureHeader(failed.test)
158
- if failed.output.stderr:
159
- print "--- stderr ---"
160
- print failed.output.stderr.strip()
161
- if failed.output.stdout:
162
- print "--- stdout ---"
163
- print failed.output.stdout.strip()
164
- print "Command: %s" % EscapeCommand(failed.command)
165
- if failed.HasCrashed():
166
- print "--- CRASHED ---"
167
- if failed.HasTimedOut():
168
- print "--- TIMEOUT ---"
169
- if len(self.failed) == 0:
170
- print "==="
171
- print "=== All tests succeeded"
172
- print "==="
173
- else:
174
- print
175
- print "==="
176
- print "=== %i tests failed" % len(self.failed)
177
- if self.crashed > 0:
178
- print "=== %i tests CRASHED" % self.crashed
179
- print "==="
180
-
181
-
182
- class VerboseProgressIndicator(SimpleProgressIndicator):
183
-
184
- def AboutToRun(self, case):
185
- print 'Starting %s...' % case.GetLabel()
186
- sys.stdout.flush()
187
-
188
- def HasRun(self, output):
189
- if output.UnexpectedOutput():
190
- if output.HasCrashed():
191
- outcome = 'CRASH'
192
- else:
193
- outcome = 'FAIL'
194
- else:
195
- outcome = 'pass'
196
- print 'Done running %s: %s' % (output.test.GetLabel(), outcome)
197
-
198
-
199
- class DotsProgressIndicator(SimpleProgressIndicator):
200
-
201
- def AboutToRun(self, case):
202
- pass
203
-
204
- def HasRun(self, output):
205
- total = self.succeeded + len(self.failed)
206
- if (total > 1) and (total % 50 == 1):
207
- sys.stdout.write('\n')
208
- if output.UnexpectedOutput():
209
- if output.HasCrashed():
210
- sys.stdout.write('C')
211
- sys.stdout.flush()
212
- elif output.HasTimedOut():
213
- sys.stdout.write('T')
214
- sys.stdout.flush()
215
- else:
216
- sys.stdout.write('F')
217
- sys.stdout.flush()
218
- else:
219
- sys.stdout.write('.')
220
- sys.stdout.flush()
221
-
222
-
223
- class CompactProgressIndicator(ProgressIndicator):
224
-
225
- def __init__(self, cases, templates):
226
- super(CompactProgressIndicator, self).__init__(cases)
227
- self.templates = templates
228
- self.last_status_length = 0
229
- self.start_time = time.time()
230
-
231
- def Starting(self):
232
- pass
233
-
234
- def Done(self):
235
- self.PrintProgress('Done')
236
-
237
- def AboutToRun(self, case):
238
- self.PrintProgress(case.GetLabel())
239
-
240
- def HasRun(self, output):
241
- if output.UnexpectedOutput():
242
- self.ClearLine(self.last_status_length)
243
- self.PrintFailureHeader(output.test)
244
- stdout = output.output.stdout.strip()
245
- if len(stdout):
246
- print self.templates['stdout'] % stdout
247
- stderr = output.output.stderr.strip()
248
- if len(stderr):
249
- print self.templates['stderr'] % stderr
250
- print "Command: %s" % EscapeCommand(output.command)
251
- if output.HasCrashed():
252
- print "--- CRASHED ---"
253
- if output.HasTimedOut():
254
- print "--- TIMEOUT ---"
255
-
256
- def Truncate(self, str, length):
257
- if length and (len(str) > (length - 3)):
258
- return str[:(length-3)] + "..."
259
- else:
260
- return str
261
-
262
- def PrintProgress(self, name):
263
- self.ClearLine(self.last_status_length)
264
- elapsed = time.time() - self.start_time
265
- status = self.templates['status_line'] % {
266
- 'passed': self.succeeded,
267
- 'remaining': (((self.total - self.remaining) * 100) // self.total),
268
- 'failed': len(self.failed),
269
- 'test': name,
270
- 'mins': int(elapsed) / 60,
271
- 'secs': int(elapsed) % 60
272
- }
273
- status = self.Truncate(status, 78)
274
- self.last_status_length = len(status)
275
- print status,
276
- sys.stdout.flush()
277
-
278
-
279
- class ColorProgressIndicator(CompactProgressIndicator):
280
-
281
- def __init__(self, cases):
282
- templates = {
283
- 'status_line': "[%(mins)02i:%(secs)02i|\033[34m%%%(remaining) 4d\033[0m|\033[32m+%(passed) 4d\033[0m|\033[31m-%(failed) 4d\033[0m]: %(test)s",
284
- 'stdout': "\033[1m%s\033[0m",
285
- 'stderr': "\033[31m%s\033[0m",
286
- }
287
- super(ColorProgressIndicator, self).__init__(cases, templates)
288
-
289
- def ClearLine(self, last_line_length):
290
- print "\033[1K\r",
291
-
292
-
293
- class MonochromeProgressIndicator(CompactProgressIndicator):
294
-
295
- def __init__(self, cases):
296
- templates = {
297
- 'status_line': "[%(mins)02i:%(secs)02i|%%%(remaining) 4d|+%(passed) 4d|-%(failed) 4d]: %(test)s",
298
- 'stdout': '%s',
299
- 'stderr': '%s',
300
- 'clear': lambda last_line_length: ("\r" + (" " * last_line_length) + "\r"),
301
- 'max_length': 78
302
- }
303
- super(MonochromeProgressIndicator, self).__init__(cases, templates)
304
-
305
- def ClearLine(self, last_line_length):
306
- print ("\r" + (" " * last_line_length) + "\r"),
307
-
308
-
309
- PROGRESS_INDICATORS = {
310
- 'verbose': VerboseProgressIndicator,
311
- 'dots': DotsProgressIndicator,
312
- 'color': ColorProgressIndicator,
313
- 'mono': MonochromeProgressIndicator
314
- }
315
-
316
-
317
- # -------------------------
318
- # --- F r a m e w o r k ---
319
- # -------------------------
320
-
321
-
322
- class CommandOutput(object):
323
-
324
- def __init__(self, exit_code, timed_out, stdout, stderr):
325
- self.exit_code = exit_code
326
- self.timed_out = timed_out
327
- self.stdout = stdout
328
- self.stderr = stderr
329
- self.failed = None
330
-
331
-
332
- class TestCase(object):
333
-
334
- def __init__(self, context, path):
335
- self.path = path
336
- self.context = context
337
- self.duration = None
338
-
339
- def IsNegative(self):
340
- return False
341
-
342
- def CompareTime(self, other):
343
- return cmp(other.duration, self.duration)
344
-
345
- def DidFail(self, output):
346
- if output.failed is None:
347
- output.failed = self.IsFailureOutput(output)
348
- return output.failed
349
-
350
- def IsFailureOutput(self, output):
351
- return output.exit_code != 0
352
-
353
- def GetSource(self):
354
- return "(no source available)"
355
-
356
- def RunCommand(self, command):
357
- full_command = self.context.processor(command)
358
- output = Execute(full_command, self.context, self.context.timeout)
359
- self.Cleanup()
360
- return TestOutput(self, full_command, output)
361
-
362
- def BeforeRun(self):
363
- pass
364
-
365
- def AfterRun(self):
366
- pass
367
-
368
- def Run(self):
369
- self.BeforeRun()
370
- try:
371
- result = self.RunCommand(self.GetCommand())
372
- finally:
373
- self.AfterRun()
374
- return result
375
-
376
- def Cleanup(self):
377
- return
378
-
379
-
380
- class TestOutput(object):
381
-
382
- def __init__(self, test, command, output):
383
- self.test = test
384
- self.command = command
385
- self.output = output
386
-
387
- def UnexpectedOutput(self):
388
- if self.HasCrashed():
389
- outcome = CRASH
390
- elif self.HasTimedOut():
391
- outcome = TIMEOUT
392
- elif self.HasFailed():
393
- outcome = FAIL
394
- else:
395
- outcome = PASS
396
- return not outcome in self.test.outcomes
397
-
398
- def HasCrashed(self):
399
- if utils.IsWindows():
400
- return 0x80000000 & self.output.exit_code and not (0x3FFFFF00 & self.output.exit_code)
401
- else:
402
- # Timed out tests will have exit_code -signal.SIGTERM.
403
- if self.output.timed_out:
404
- return False
405
- return self.output.exit_code < 0 and \
406
- self.output.exit_code != -signal.SIGABRT
407
-
408
- def HasTimedOut(self):
409
- return self.output.timed_out;
410
-
411
- def HasFailed(self):
412
- execution_failed = self.test.DidFail(self.output)
413
- if self.test.IsNegative():
414
- return not execution_failed
415
- else:
416
- return execution_failed
417
-
418
-
419
- def KillProcessWithID(pid):
420
- if utils.IsWindows():
421
- os.popen('taskkill /T /F /PID %d' % pid)
422
- else:
423
- os.kill(pid, signal.SIGTERM)
424
-
425
-
426
- MAX_SLEEP_TIME = 0.1
427
- INITIAL_SLEEP_TIME = 0.0001
428
- SLEEP_TIME_FACTOR = 1.25
429
-
430
- SEM_INVALID_VALUE = -1
431
- SEM_NOGPFAULTERRORBOX = 0x0002 # Microsoft Platform SDK WinBase.h
432
-
433
- def Win32SetErrorMode(mode):
434
- prev_error_mode = SEM_INVALID_VALUE
435
- try:
436
- import ctypes
437
- prev_error_mode = ctypes.windll.kernel32.SetErrorMode(mode);
438
- except ImportError:
439
- pass
440
- return prev_error_mode
441
-
442
- def RunProcess(context, timeout, args, **rest):
443
- if context.verbose: print "#", " ".join(args)
444
- popen_args = args
445
- prev_error_mode = SEM_INVALID_VALUE;
446
- if utils.IsWindows():
447
- popen_args = '"' + subprocess.list2cmdline(args) + '"'
448
- if context.suppress_dialogs:
449
- # Try to change the error mode to avoid dialogs on fatal errors. Don't
450
- # touch any existing error mode flags by merging the existing error mode.
451
- # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx.
452
- error_mode = SEM_NOGPFAULTERRORBOX;
453
- prev_error_mode = Win32SetErrorMode(error_mode);
454
- Win32SetErrorMode(error_mode | prev_error_mode);
455
- process = subprocess.Popen(
456
- shell = utils.IsWindows(),
457
- args = popen_args,
458
- **rest
459
- )
460
- if utils.IsWindows() and context.suppress_dialogs and prev_error_mode != SEM_INVALID_VALUE:
461
- Win32SetErrorMode(prev_error_mode)
462
- # Compute the end time - if the process crosses this limit we
463
- # consider it timed out.
464
- if timeout is None: end_time = None
465
- else: end_time = time.time() + timeout
466
- timed_out = False
467
- # Repeatedly check the exit code from the process in a
468
- # loop and keep track of whether or not it times out.
469
- exit_code = None
470
- sleep_time = INITIAL_SLEEP_TIME
471
- while exit_code is None:
472
- if (not end_time is None) and (time.time() >= end_time):
473
- # Kill the process and wait for it to exit.
474
- KillProcessWithID(process.pid)
475
- exit_code = process.wait()
476
- timed_out = True
477
- else:
478
- exit_code = process.poll()
479
- time.sleep(sleep_time)
480
- sleep_time = sleep_time * SLEEP_TIME_FACTOR
481
- if sleep_time > MAX_SLEEP_TIME:
482
- sleep_time = MAX_SLEEP_TIME
483
- return (process, exit_code, timed_out)
484
-
485
-
486
- def PrintError(str):
487
- sys.stderr.write(str)
488
- sys.stderr.write('\n')
489
-
490
-
491
- def CheckedUnlink(name):
492
- try:
493
- os.unlink(name)
494
- except OSError, e:
495
- PrintError("os.unlink() " + str(e))
496
-
497
-
498
- def Execute(args, context, timeout=None):
499
- (fd_out, outname) = tempfile.mkstemp()
500
- (fd_err, errname) = tempfile.mkstemp()
501
- (process, exit_code, timed_out) = RunProcess(
502
- context,
503
- timeout,
504
- args = args,
505
- stdout = fd_out,
506
- stderr = fd_err,
507
- )
508
- os.close(fd_out)
509
- os.close(fd_err)
510
- output = file(outname).read()
511
- errors = file(errname).read()
512
- CheckedUnlink(outname)
513
- CheckedUnlink(errname)
514
- return CommandOutput(exit_code, timed_out, output, errors)
515
-
516
-
517
- def ExecuteNoCapture(args, context, timeout=None):
518
- (process, exit_code, timed_out) = RunProcess(
519
- context,
520
- timeout,
521
- args = args,
522
- )
523
- return CommandOutput(exit_code, False, "", "")
524
-
525
-
526
- def CarCdr(path):
527
- if len(path) == 0:
528
- return (None, [ ])
529
- else:
530
- return (path[0], path[1:])
531
-
532
-
533
- class TestConfiguration(object):
534
-
535
- def __init__(self, context, root):
536
- self.context = context
537
- self.root = root
538
-
539
- def Contains(self, path, file):
540
- if len(path) > len(file):
541
- return False
542
- for i in xrange(len(path)):
543
- if not path[i].match(file[i]):
544
- return False
545
- return True
546
-
547
- def GetTestStatus(self, sections, defs):
548
- pass
549
-
550
-
551
- class TestSuite(object):
552
-
553
- def __init__(self, name):
554
- self.name = name
555
-
556
- def GetName(self):
557
- return self.name
558
-
559
-
560
- class TestRepository(TestSuite):
561
-
562
- def __init__(self, path):
563
- normalized_path = abspath(path)
564
- super(TestRepository, self).__init__(basename(normalized_path))
565
- self.path = normalized_path
566
- self.is_loaded = False
567
- self.config = None
568
-
569
- def GetConfiguration(self, context):
570
- if self.is_loaded:
571
- return self.config
572
- self.is_loaded = True
573
- file = None
574
- try:
575
- (file, pathname, description) = imp.find_module('testcfg', [ self.path ])
576
- module = imp.load_module('testcfg', file, pathname, description)
577
- self.config = module.GetConfiguration(context, self.path)
578
- finally:
579
- if file:
580
- file.close()
581
- return self.config
582
-
583
- def GetBuildRequirements(self, path, context):
584
- return self.GetConfiguration(context).GetBuildRequirements()
585
-
586
- def ListTests(self, current_path, path, context, mode):
587
- return self.GetConfiguration(context).ListTests(current_path, path, mode)
588
-
589
- def GetTestStatus(self, context, sections, defs):
590
- self.GetConfiguration(context).GetTestStatus(sections, defs)
591
-
592
-
593
- class LiteralTestSuite(TestSuite):
594
-
595
- def __init__(self, tests):
596
- super(LiteralTestSuite, self).__init__('root')
597
- self.tests = tests
598
-
599
- def GetBuildRequirements(self, path, context):
600
- (name, rest) = CarCdr(path)
601
- result = [ ]
602
- for test in self.tests:
603
- if not name or name.match(test.GetName()):
604
- result += test.GetBuildRequirements(rest, context)
605
- return result
606
-
607
- def ListTests(self, current_path, path, context, mode):
608
- (name, rest) = CarCdr(path)
609
- result = [ ]
610
- for test in self.tests:
611
- test_name = test.GetName()
612
- if not name or name.match(test_name):
613
- full_path = current_path + [test_name]
614
- result += test.ListTests(full_path, path, context, mode)
615
- return result
616
-
617
- def GetTestStatus(self, context, sections, defs):
618
- for test in self.tests:
619
- test.GetTestStatus(context, sections, defs)
620
-
621
-
622
- SUFFIX = {'debug': '_g', 'release': ''}
623
-
624
-
625
- class Context(object):
626
-
627
- def __init__(self, workspace, buildspace, verbose, vm, timeout, processor, suppress_dialogs):
628
- self.workspace = workspace
629
- self.buildspace = buildspace
630
- self.verbose = verbose
631
- self.vm_root = vm
632
- self.timeout = timeout
633
- self.processor = processor
634
- self.suppress_dialogs = suppress_dialogs
635
-
636
- def GetVm(self, mode):
637
- name = self.vm_root + SUFFIX[mode]
638
- if utils.IsWindows() and not name.endswith('.exe'):
639
- name = name + '.exe'
640
- return name
641
-
642
- def RunTestCases(all_cases, progress, tasks):
643
- def DoSkip(case):
644
- return SKIP in c.outcomes or SLOW in c.outcomes
645
- cases_to_run = [ c for c in all_cases if not DoSkip(c) ]
646
- progress = PROGRESS_INDICATORS[progress](cases_to_run)
647
- return progress.Run(tasks)
648
-
649
-
650
- def BuildRequirements(context, requirements, mode, scons_flags):
651
- command_line = (['scons', '-Y', context.workspace, 'mode=' + ",".join(mode)]
652
- + requirements
653
- + scons_flags)
654
- output = ExecuteNoCapture(command_line, context)
655
- return output.exit_code == 0
656
-
657
-
658
- # -------------------------------------------
659
- # --- T e s t C o n f i g u r a t i o n ---
660
- # -------------------------------------------
661
-
662
-
663
- SKIP = 'skip'
664
- FAIL = 'fail'
665
- PASS = 'pass'
666
- OKAY = 'okay'
667
- TIMEOUT = 'timeout'
668
- CRASH = 'crash'
669
- SLOW = 'slow'
670
-
671
-
672
- class Expression(object):
673
- pass
674
-
675
-
676
- class Constant(Expression):
677
-
678
- def __init__(self, value):
679
- self.value = value
680
-
681
- def Evaluate(self, env, defs):
682
- return self.value
683
-
684
-
685
- class Variable(Expression):
686
-
687
- def __init__(self, name):
688
- self.name = name
689
-
690
- def GetOutcomes(self, env, defs):
691
- if self.name in env: return ListSet([env[self.name]])
692
- else: return Nothing()
693
-
694
-
695
- class Outcome(Expression):
696
-
697
- def __init__(self, name):
698
- self.name = name
699
-
700
- def GetOutcomes(self, env, defs):
701
- if self.name in defs:
702
- return defs[self.name].GetOutcomes(env, defs)
703
- else:
704
- return ListSet([self.name])
705
-
706
-
707
- class Set(object):
708
- pass
709
-
710
-
711
- class ListSet(Set):
712
-
713
- def __init__(self, elms):
714
- self.elms = elms
715
-
716
- def __str__(self):
717
- return "ListSet%s" % str(self.elms)
718
-
719
- def Intersect(self, that):
720
- if not isinstance(that, ListSet):
721
- return that.Intersect(self)
722
- return ListSet([ x for x in self.elms if x in that.elms ])
723
-
724
- def Union(self, that):
725
- if not isinstance(that, ListSet):
726
- return that.Union(self)
727
- return ListSet(self.elms + [ x for x in that.elms if x not in self.elms ])
728
-
729
- def IsEmpty(self):
730
- return len(self.elms) == 0
731
-
732
-
733
- class Everything(Set):
734
-
735
- def Intersect(self, that):
736
- return that
737
-
738
- def Union(self, that):
739
- return self
740
-
741
- def IsEmpty(self):
742
- return False
743
-
744
-
745
- class Nothing(Set):
746
-
747
- def Intersect(self, that):
748
- return self
749
-
750
- def Union(self, that):
751
- return that
752
-
753
- def IsEmpty(self):
754
- return True
755
-
756
-
757
- class Operation(Expression):
758
-
759
- def __init__(self, left, op, right):
760
- self.left = left
761
- self.op = op
762
- self.right = right
763
-
764
- def Evaluate(self, env, defs):
765
- if self.op == '||' or self.op == ',':
766
- return self.left.Evaluate(env, defs) or self.right.Evaluate(env, defs)
767
- elif self.op == 'if':
768
- return False
769
- elif self.op == '==':
770
- inter = self.left.GetOutcomes(env, defs).Intersect(self.right.GetOutcomes(env, defs))
771
- return not inter.IsEmpty()
772
- else:
773
- assert self.op == '&&'
774
- return self.left.Evaluate(env, defs) and self.right.Evaluate(env, defs)
775
-
776
- def GetOutcomes(self, env, defs):
777
- if self.op == '||' or self.op == ',':
778
- return self.left.GetOutcomes(env, defs).Union(self.right.GetOutcomes(env, defs))
779
- elif self.op == 'if':
780
- if self.right.Evaluate(env, defs): return self.left.GetOutcomes(env, defs)
781
- else: return Nothing()
782
- else:
783
- assert self.op == '&&'
784
- return self.left.GetOutcomes(env, defs).Intersect(self.right.GetOutcomes(env, defs))
785
-
786
-
787
- def IsAlpha(str):
788
- for char in str:
789
- if not (char.isalpha() or char.isdigit() or char == '_'):
790
- return False
791
- return True
792
-
793
-
794
- class Tokenizer(object):
795
- """A simple string tokenizer that chops expressions into variables,
796
- parens and operators"""
797
-
798
- def __init__(self, expr):
799
- self.index = 0
800
- self.expr = expr
801
- self.length = len(expr)
802
- self.tokens = None
803
-
804
- def Current(self, length = 1):
805
- if not self.HasMore(length): return ""
806
- return self.expr[self.index:self.index+length]
807
-
808
- def HasMore(self, length = 1):
809
- return self.index < self.length + (length - 1)
810
-
811
- def Advance(self, count = 1):
812
- self.index = self.index + count
813
-
814
- def AddToken(self, token):
815
- self.tokens.append(token)
816
-
817
- def SkipSpaces(self):
818
- while self.HasMore() and self.Current().isspace():
819
- self.Advance()
820
-
821
- def Tokenize(self):
822
- self.tokens = [ ]
823
- while self.HasMore():
824
- self.SkipSpaces()
825
- if not self.HasMore():
826
- return None
827
- if self.Current() == '(':
828
- self.AddToken('(')
829
- self.Advance()
830
- elif self.Current() == ')':
831
- self.AddToken(')')
832
- self.Advance()
833
- elif self.Current() == '$':
834
- self.AddToken('$')
835
- self.Advance()
836
- elif self.Current() == ',':
837
- self.AddToken(',')
838
- self.Advance()
839
- elif IsAlpha(self.Current()):
840
- buf = ""
841
- while self.HasMore() and IsAlpha(self.Current()):
842
- buf += self.Current()
843
- self.Advance()
844
- self.AddToken(buf)
845
- elif self.Current(2) == '&&':
846
- self.AddToken('&&')
847
- self.Advance(2)
848
- elif self.Current(2) == '||':
849
- self.AddToken('||')
850
- self.Advance(2)
851
- elif self.Current(2) == '==':
852
- self.AddToken('==')
853
- self.Advance(2)
854
- else:
855
- return None
856
- return self.tokens
857
-
858
-
859
- class Scanner(object):
860
- """A simple scanner that can serve out tokens from a given list"""
861
-
862
- def __init__(self, tokens):
863
- self.tokens = tokens
864
- self.length = len(tokens)
865
- self.index = 0
866
-
867
- def HasMore(self):
868
- return self.index < self.length
869
-
870
- def Current(self):
871
- return self.tokens[self.index]
872
-
873
- def Advance(self):
874
- self.index = self.index + 1
875
-
876
-
877
- def ParseAtomicExpression(scan):
878
- if scan.Current() == "true":
879
- scan.Advance()
880
- return Constant(True)
881
- elif scan.Current() == "false":
882
- scan.Advance()
883
- return Constant(False)
884
- elif IsAlpha(scan.Current()):
885
- name = scan.Current()
886
- scan.Advance()
887
- return Outcome(name.lower())
888
- elif scan.Current() == '$':
889
- scan.Advance()
890
- if not IsAlpha(scan.Current()):
891
- return None
892
- name = scan.Current()
893
- scan.Advance()
894
- return Variable(name.lower())
895
- elif scan.Current() == '(':
896
- scan.Advance()
897
- result = ParseLogicalExpression(scan)
898
- if (not result) or (scan.Current() != ')'):
899
- return None
900
- scan.Advance()
901
- return result
902
- else:
903
- return None
904
-
905
-
906
- BINARIES = ['==']
907
- def ParseOperatorExpression(scan):
908
- left = ParseAtomicExpression(scan)
909
- if not left: return None
910
- while scan.HasMore() and (scan.Current() in BINARIES):
911
- op = scan.Current()
912
- scan.Advance()
913
- right = ParseOperatorExpression(scan)
914
- if not right:
915
- return None
916
- left = Operation(left, op, right)
917
- return left
918
-
919
-
920
- def ParseConditionalExpression(scan):
921
- left = ParseOperatorExpression(scan)
922
- if not left: return None
923
- while scan.HasMore() and (scan.Current() == 'if'):
924
- scan.Advance()
925
- right = ParseOperatorExpression(scan)
926
- if not right:
927
- return None
928
- left= Operation(left, 'if', right)
929
- return left
930
-
931
-
932
- LOGICALS = ["&&", "||", ","]
933
- def ParseLogicalExpression(scan):
934
- left = ParseConditionalExpression(scan)
935
- if not left: return None
936
- while scan.HasMore() and (scan.Current() in LOGICALS):
937
- op = scan.Current()
938
- scan.Advance()
939
- right = ParseConditionalExpression(scan)
940
- if not right:
941
- return None
942
- left = Operation(left, op, right)
943
- return left
944
-
945
-
946
- def ParseCondition(expr):
947
- """Parses a logical expression into an Expression object"""
948
- tokens = Tokenizer(expr).Tokenize()
949
- if not tokens:
950
- print "Malformed expression: '%s'" % expr
951
- return None
952
- scan = Scanner(tokens)
953
- ast = ParseLogicalExpression(scan)
954
- if not ast:
955
- print "Malformed expression: '%s'" % expr
956
- return None
957
- if scan.HasMore():
958
- print "Malformed expression: '%s'" % expr
959
- return None
960
- return ast
961
-
962
-
963
- class ClassifiedTest(object):
964
-
965
- def __init__(self, case, outcomes):
966
- self.case = case
967
- self.outcomes = outcomes
968
-
969
-
970
- class Configuration(object):
971
- """The parsed contents of a configuration file"""
972
-
973
- def __init__(self, sections, defs):
974
- self.sections = sections
975
- self.defs = defs
976
-
977
- def ClassifyTests(self, cases, env):
978
- sections = [s for s in self.sections if s.condition.Evaluate(env, self.defs)]
979
- all_rules = reduce(list.__add__, [s.rules for s in sections], [])
980
- unused_rules = set(all_rules)
981
- result = [ ]
982
- all_outcomes = set([])
983
- for case in cases:
984
- matches = [ r for r in all_rules if r.Contains(case.path) ]
985
- outcomes = set([])
986
- for rule in matches:
987
- outcomes = outcomes.union(rule.GetOutcomes(env, self.defs))
988
- unused_rules.discard(rule)
989
- if not outcomes:
990
- outcomes = [PASS]
991
- case.outcomes = outcomes
992
- all_outcomes = all_outcomes.union(outcomes)
993
- result.append(ClassifiedTest(case, outcomes))
994
- return (result, list(unused_rules), all_outcomes)
995
-
996
-
997
- class Section(object):
998
- """A section of the configuration file. Sections are enabled or
999
- disabled prior to running the tests, based on their conditions"""
1000
-
1001
- def __init__(self, condition):
1002
- self.condition = condition
1003
- self.rules = [ ]
1004
-
1005
- def AddRule(self, rule):
1006
- self.rules.append(rule)
1007
-
1008
-
1009
- class Rule(object):
1010
- """A single rule that specifies the expected outcome for a single
1011
- test."""
1012
-
1013
- def __init__(self, raw_path, path, value):
1014
- self.raw_path = raw_path
1015
- self.path = path
1016
- self.value = value
1017
-
1018
- def GetOutcomes(self, env, defs):
1019
- set = self.value.GetOutcomes(env, defs)
1020
- assert isinstance(set, ListSet)
1021
- return set.elms
1022
-
1023
- def Contains(self, path):
1024
- if len(self.path) > len(path):
1025
- return False
1026
- for i in xrange(len(self.path)):
1027
- if not self.path[i].match(path[i]):
1028
- return False
1029
- return True
1030
-
1031
-
1032
- HEADER_PATTERN = re.compile(r'\[([^]]+)\]')
1033
- RULE_PATTERN = re.compile(r'\s*([^: ]*)\s*:(.*)')
1034
- DEF_PATTERN = re.compile(r'^def\s*(\w+)\s*=(.*)$')
1035
- PREFIX_PATTERN = re.compile(r'^\s*prefix\s+([\w\_\.\-\/]+)$')
1036
-
1037
-
1038
- def ReadConfigurationInto(path, sections, defs):
1039
- current_section = Section(Constant(True))
1040
- sections.append(current_section)
1041
- prefix = []
1042
- for line in utils.ReadLinesFrom(path):
1043
- header_match = HEADER_PATTERN.match(line)
1044
- if header_match:
1045
- condition_str = header_match.group(1).strip()
1046
- condition = ParseCondition(condition_str)
1047
- new_section = Section(condition)
1048
- sections.append(new_section)
1049
- current_section = new_section
1050
- continue
1051
- rule_match = RULE_PATTERN.match(line)
1052
- if rule_match:
1053
- path = prefix + SplitPath(rule_match.group(1).strip())
1054
- value_str = rule_match.group(2).strip()
1055
- value = ParseCondition(value_str)
1056
- if not value:
1057
- return False
1058
- current_section.AddRule(Rule(rule_match.group(1), path, value))
1059
- continue
1060
- def_match = DEF_PATTERN.match(line)
1061
- if def_match:
1062
- name = def_match.group(1).lower()
1063
- value = ParseCondition(def_match.group(2).strip())
1064
- if not value:
1065
- return False
1066
- defs[name] = value
1067
- continue
1068
- prefix_match = PREFIX_PATTERN.match(line)
1069
- if prefix_match:
1070
- prefix = SplitPath(prefix_match.group(1).strip())
1071
- continue
1072
- print "Malformed line: '%s'." % line
1073
- return False
1074
- return True
1075
-
1076
-
1077
- # ---------------
1078
- # --- M a i n ---
1079
- # ---------------
1080
-
1081
-
1082
- ARCH_GUESS = utils.GuessArchitecture()
1083
-
1084
-
1085
- def BuildOptions():
1086
- result = optparse.OptionParser()
1087
- result.add_option("-m", "--mode", help="The test modes in which to run (comma-separated)",
1088
- default='release')
1089
- result.add_option("-v", "--verbose", help="Verbose output",
1090
- default=False, action="store_true")
1091
- result.add_option("-S", dest="scons_flags", help="Flag to pass through to scons",
1092
- default=[], action="append")
1093
- result.add_option("-p", "--progress",
1094
- help="The style of progress indicator (verbose, dots, color, mono)",
1095
- choices=PROGRESS_INDICATORS.keys(), default="mono")
1096
- result.add_option("--no-build", help="Don't build requirements",
1097
- default=False, action="store_true")
1098
- result.add_option("--build-only", help="Only build requirements, don't run the tests",
1099
- default=False, action="store_true")
1100
- result.add_option("--report", help="Print a summary of the tests to be run",
1101
- default=False, action="store_true")
1102
- result.add_option("-s", "--suite", help="A test suite",
1103
- default=[], action="append")
1104
- result.add_option("-t", "--timeout", help="Timeout in seconds",
1105
- default=60, type="int")
1106
- result.add_option("--arch", help='The architecture to run tests for',
1107
- default='none')
1108
- result.add_option("--snapshot", help="Run the tests with snapshot turned on",
1109
- default=False, action="store_true")
1110
- result.add_option("--simulator", help="Run tests with architecture simulator",
1111
- default='none')
1112
- result.add_option("--special-command", default=None)
1113
- result.add_option("--valgrind", help="Run tests through valgrind",
1114
- default=False, action="store_true")
1115
- result.add_option("--cat", help="Print the source of the tests",
1116
- default=False, action="store_true")
1117
- result.add_option("--warn-unused", help="Report unused rules",
1118
- default=False, action="store_true")
1119
- result.add_option("-j", help="The number of parallel tasks to run",
1120
- default=1, type="int")
1121
- result.add_option("--time", help="Print timing information after running",
1122
- default=False, action="store_true")
1123
- result.add_option("--suppress-dialogs", help="Suppress Windows dialogs for crashing tests",
1124
- dest="suppress_dialogs", default=True, action="store_true")
1125
- result.add_option("--no-suppress-dialogs", help="Display Windows dialogs for crashing tests",
1126
- dest="suppress_dialogs", action="store_false")
1127
- result.add_option("--shell", help="Path to V8 shell", default="shell");
1128
- return result
1129
-
1130
-
1131
- def ProcessOptions(options):
1132
- global VERBOSE
1133
- VERBOSE = options.verbose
1134
- options.mode = options.mode.split(',')
1135
- for mode in options.mode:
1136
- if not mode in ['debug', 'release']:
1137
- print "Unknown mode %s" % mode
1138
- return False
1139
- if options.simulator != 'none':
1140
- # Simulator argument was set. Make sure arch and simulator agree.
1141
- if options.simulator != options.arch:
1142
- if options.arch == 'none':
1143
- options.arch = options.simulator
1144
- else:
1145
- print "Architecture %s does not match sim %s" %(options.arch, options.simulator)
1146
- return False
1147
- # Ensure that the simulator argument is handed down to scons.
1148
- options.scons_flags.append("simulator=" + options.simulator)
1149
- else:
1150
- # If options.arch is not set by the command line and no simulator setting
1151
- # was found, set the arch to the guess.
1152
- if options.arch == 'none':
1153
- options.arch = ARCH_GUESS
1154
- options.scons_flags.append("arch=" + options.arch)
1155
- if options.snapshot:
1156
- options.scons_flags.append("snapshot=on")
1157
- return True
1158
-
1159
-
1160
- REPORT_TEMPLATE = """\
1161
- Total: %(total)i tests
1162
- * %(skipped)4d tests will be skipped
1163
- * %(nocrash)4d tests are expected to be flaky but not crash
1164
- * %(pass)4d tests are expected to pass
1165
- * %(fail_ok)4d tests are expected to fail that we won't fix
1166
- * %(fail)4d tests are expected to fail that we should fix\
1167
- """
1168
-
1169
- def PrintReport(cases):
1170
- def IsFlaky(o):
1171
- return (PASS in o) and (FAIL in o) and (not CRASH in o) and (not OKAY in o)
1172
- def IsFailOk(o):
1173
- return (len(o) == 2) and (FAIL in o) and (OKAY in o)
1174
- unskipped = [c for c in cases if not SKIP in c.outcomes]
1175
- print REPORT_TEMPLATE % {
1176
- 'total': len(cases),
1177
- 'skipped': len(cases) - len(unskipped),
1178
- 'nocrash': len([t for t in unskipped if IsFlaky(t.outcomes)]),
1179
- 'pass': len([t for t in unskipped if list(t.outcomes) == [PASS]]),
1180
- 'fail_ok': len([t for t in unskipped if IsFailOk(t.outcomes)]),
1181
- 'fail': len([t for t in unskipped if list(t.outcomes) == [FAIL]])
1182
- }
1183
-
1184
-
1185
- class Pattern(object):
1186
-
1187
- def __init__(self, pattern):
1188
- self.pattern = pattern
1189
- self.compiled = None
1190
-
1191
- def match(self, str):
1192
- if not self.compiled:
1193
- pattern = "^" + self.pattern.replace('*', '.*') + "$"
1194
- self.compiled = re.compile(pattern)
1195
- return self.compiled.match(str)
1196
-
1197
- def __str__(self):
1198
- return self.pattern
1199
-
1200
-
1201
- def SplitPath(s):
1202
- stripped = [ c.strip() for c in s.split('/') ]
1203
- return [ Pattern(s) for s in stripped if len(s) > 0 ]
1204
-
1205
-
1206
- def GetSpecialCommandProcessor(value):
1207
- if (not value) or (value.find('@') == -1):
1208
- def ExpandCommand(args):
1209
- return args
1210
- return ExpandCommand
1211
- else:
1212
- pos = value.find('@')
1213
- import urllib
1214
- prefix = urllib.unquote(value[:pos]).split()
1215
- suffix = urllib.unquote(value[pos+1:]).split()
1216
- def ExpandCommand(args):
1217
- return prefix + args + suffix
1218
- return ExpandCommand
1219
-
1220
-
1221
- BUILT_IN_TESTS = ['mjsunit', 'cctest', 'message']
1222
-
1223
-
1224
- def GetSuites(test_root):
1225
- def IsSuite(path):
1226
- return isdir(path) and exists(join(path, 'testcfg.py'))
1227
- return [ f for f in os.listdir(test_root) if IsSuite(join(test_root, f)) ]
1228
-
1229
-
1230
- def FormatTime(d):
1231
- millis = round(d * 1000) % 1000
1232
- return time.strftime("%M:%S.", time.gmtime(d)) + ("%03i" % millis)
1233
-
1234
-
1235
- def Main():
1236
- parser = BuildOptions()
1237
- (options, args) = parser.parse_args()
1238
- if not ProcessOptions(options):
1239
- parser.print_help()
1240
- return 1
1241
-
1242
- workspace = abspath(join(dirname(sys.argv[0]), '..'))
1243
- suites = GetSuites(join(workspace, 'test'))
1244
- repositories = [TestRepository(join(workspace, 'test', name)) for name in suites]
1245
- repositories += [TestRepository(a) for a in options.suite]
1246
-
1247
- root = LiteralTestSuite(repositories)
1248
- if len(args) == 0:
1249
- paths = [SplitPath(t) for t in BUILT_IN_TESTS]
1250
- else:
1251
- paths = [ ]
1252
- for arg in args:
1253
- path = SplitPath(arg)
1254
- paths.append(path)
1255
-
1256
- # Check for --valgrind option. If enabled, we overwrite the special
1257
- # command flag with a command that uses the run-valgrind.py script.
1258
- if options.valgrind:
1259
- run_valgrind = join(workspace, "tools", "run-valgrind.py")
1260
- options.special_command = "python -u " + run_valgrind + " @"
1261
-
1262
- shell = abspath(options.shell)
1263
- buildspace = dirname(shell)
1264
- context = Context(workspace, buildspace, VERBOSE,
1265
- shell,
1266
- options.timeout,
1267
- GetSpecialCommandProcessor(options.special_command),
1268
- options.suppress_dialogs)
1269
- # First build the required targets
1270
- if not options.no_build:
1271
- reqs = [ ]
1272
- for path in paths:
1273
- reqs += root.GetBuildRequirements(path, context)
1274
- reqs = list(set(reqs))
1275
- if len(reqs) > 0:
1276
- if options.j != 1:
1277
- options.scons_flags += ['-j', str(options.j)]
1278
- if not BuildRequirements(context, reqs, options.mode, options.scons_flags):
1279
- return 1
1280
-
1281
- # Just return if we are only building the targets for running the tests.
1282
- if options.build_only:
1283
- return 0
1284
-
1285
- # Get status for tests
1286
- sections = [ ]
1287
- defs = { }
1288
- root.GetTestStatus(context, sections, defs)
1289
- config = Configuration(sections, defs)
1290
-
1291
- # List the tests
1292
- all_cases = [ ]
1293
- all_unused = [ ]
1294
- unclassified_tests = [ ]
1295
- globally_unused_rules = None
1296
- for path in paths:
1297
- for mode in options.mode:
1298
- if not exists(context.GetVm(mode)):
1299
- print "Can't find shell executable: '%s'" % context.GetVm(mode)
1300
- continue
1301
- env = {
1302
- 'mode': mode,
1303
- 'system': utils.GuessOS(),
1304
- 'arch': options.arch,
1305
- 'simulator': options.simulator
1306
- }
1307
- test_list = root.ListTests([], path, context, mode)
1308
- unclassified_tests += test_list
1309
- (cases, unused_rules, all_outcomes) = config.ClassifyTests(test_list, env)
1310
- if globally_unused_rules is None:
1311
- globally_unused_rules = set(unused_rules)
1312
- else:
1313
- globally_unused_rules = globally_unused_rules.intersection(unused_rules)
1314
- all_cases += cases
1315
- all_unused.append(unused_rules)
1316
-
1317
- if options.cat:
1318
- visited = set()
1319
- for test in unclassified_tests:
1320
- key = tuple(test.path)
1321
- if key in visited:
1322
- continue
1323
- visited.add(key)
1324
- print "--- begin source: %s ---" % test.GetLabel()
1325
- source = test.GetSource().strip()
1326
- print source
1327
- print "--- end source: %s ---" % test.GetLabel()
1328
- return 0
1329
-
1330
- if options.warn_unused:
1331
- for rule in globally_unused_rules:
1332
- print "Rule for '%s' was not used." % '/'.join([str(s) for s in rule.path])
1333
-
1334
- if options.report:
1335
- PrintReport(all_cases)
1336
-
1337
- result = None
1338
- if len(all_cases) == 0:
1339
- print "No tests to run."
1340
- return 0
1341
- else:
1342
- try:
1343
- start = time.time()
1344
- if RunTestCases(all_cases, options.progress, options.j):
1345
- result = 0
1346
- else:
1347
- result = 1
1348
- duration = time.time() - start
1349
- except KeyboardInterrupt:
1350
- print "Interrupted"
1351
- return 1
1352
-
1353
- if options.time:
1354
- # Write the times to stderr to make it easy to separate from the
1355
- # test output.
1356
- print
1357
- sys.stderr.write("--- Total time: %s ---\n" % FormatTime(duration))
1358
- timed_tests = [ t.case for t in all_cases if not t.case.duration is None ]
1359
- timed_tests.sort(lambda a, b: a.CompareTime(b))
1360
- index = 1
1361
- for entry in timed_tests[:20]:
1362
- t = FormatTime(entry.duration)
1363
- sys.stderr.write("%4i (%s) %s\n" % (index, t, entry.GetLabel()))
1364
- index += 1
1365
-
1366
- return result
1367
-
1368
-
1369
- if __name__ == '__main__':
1370
- sys.exit(Main())