therubyracer 0.4.9-x86-linux

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

Potentially problematic release.


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

Files changed (637) hide show
  1. data/.gitignore +11 -0
  2. data/.gitmodules +3 -0
  3. data/Doxyfile +1514 -0
  4. data/History.txt +43 -0
  5. data/README.rdoc +157 -0
  6. data/Rakefile +51 -0
  7. data/docs/data_conversion.txt +18 -0
  8. data/ext/v8/callbacks.cpp +160 -0
  9. data/ext/v8/callbacks.h +14 -0
  10. data/ext/v8/convert_ruby.cpp +8 -0
  11. data/ext/v8/convert_ruby.h +99 -0
  12. data/ext/v8/convert_string.cpp +10 -0
  13. data/ext/v8/convert_string.h +73 -0
  14. data/ext/v8/convert_v8.cpp +9 -0
  15. data/ext/v8/convert_v8.h +121 -0
  16. data/ext/v8/converters.cpp +83 -0
  17. data/ext/v8/converters.h +23 -0
  18. data/ext/v8/extconf.rb +36 -0
  19. data/ext/v8/upstream/2.0.6/.gitignore +26 -0
  20. data/ext/v8/upstream/2.0.6/AUTHORS +23 -0
  21. data/ext/v8/upstream/2.0.6/ChangeLog +1479 -0
  22. data/ext/v8/upstream/2.0.6/LICENSE +55 -0
  23. data/ext/v8/upstream/2.0.6/SConstruct +1028 -0
  24. data/ext/v8/upstream/2.0.6/include/v8-debug.h +275 -0
  25. data/ext/v8/upstream/2.0.6/include/v8.h +3236 -0
  26. data/ext/v8/upstream/2.0.6/src/SConscript +283 -0
  27. data/ext/v8/upstream/2.0.6/src/accessors.cc +695 -0
  28. data/ext/v8/upstream/2.0.6/src/accessors.h +114 -0
  29. data/ext/v8/upstream/2.0.6/src/allocation.cc +198 -0
  30. data/ext/v8/upstream/2.0.6/src/allocation.h +169 -0
  31. data/ext/v8/upstream/2.0.6/src/api.cc +3831 -0
  32. data/ext/v8/upstream/2.0.6/src/api.h +479 -0
  33. data/ext/v8/upstream/2.0.6/src/apinatives.js +110 -0
  34. data/ext/v8/upstream/2.0.6/src/apiutils.h +69 -0
  35. data/ext/v8/upstream/2.0.6/src/arguments.h +97 -0
  36. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm-inl.h +277 -0
  37. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.cc +1821 -0
  38. data/ext/v8/upstream/2.0.6/src/arm/assembler-arm.h +1027 -0
  39. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2-inl.h +267 -0
  40. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.cc +1821 -0
  41. data/ext/v8/upstream/2.0.6/src/arm/assembler-thumb2.h +1027 -0
  42. data/ext/v8/upstream/2.0.6/src/arm/builtins-arm.cc +1271 -0
  43. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm-inl.h +74 -0
  44. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.cc +6682 -0
  45. data/ext/v8/upstream/2.0.6/src/arm/codegen-arm.h +535 -0
  46. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.cc +112 -0
  47. data/ext/v8/upstream/2.0.6/src/arm/constants-arm.h +347 -0
  48. data/ext/v8/upstream/2.0.6/src/arm/cpu-arm.cc +132 -0
  49. data/ext/v8/upstream/2.0.6/src/arm/debug-arm.cc +213 -0
  50. data/ext/v8/upstream/2.0.6/src/arm/disasm-arm.cc +1166 -0
  51. data/ext/v8/upstream/2.0.6/src/arm/fast-codegen-arm.cc +1698 -0
  52. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.cc +123 -0
  53. data/ext/v8/upstream/2.0.6/src/arm/frames-arm.h +162 -0
  54. data/ext/v8/upstream/2.0.6/src/arm/ic-arm.cc +849 -0
  55. data/ext/v8/upstream/2.0.6/src/arm/jump-target-arm.cc +238 -0
  56. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.cc +1259 -0
  57. data/ext/v8/upstream/2.0.6/src/arm/macro-assembler-arm.h +423 -0
  58. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.cc +1266 -0
  59. data/ext/v8/upstream/2.0.6/src/arm/regexp-macro-assembler-arm.h +282 -0
  60. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm-inl.h +103 -0
  61. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.cc +59 -0
  62. data/ext/v8/upstream/2.0.6/src/arm/register-allocator-arm.h +43 -0
  63. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.cc +2264 -0
  64. data/ext/v8/upstream/2.0.6/src/arm/simulator-arm.h +306 -0
  65. data/ext/v8/upstream/2.0.6/src/arm/stub-cache-arm.cc +1516 -0
  66. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.cc +412 -0
  67. data/ext/v8/upstream/2.0.6/src/arm/virtual-frame-arm.h +532 -0
  68. data/ext/v8/upstream/2.0.6/src/array.js +1154 -0
  69. data/ext/v8/upstream/2.0.6/src/assembler.cc +772 -0
  70. data/ext/v8/upstream/2.0.6/src/assembler.h +525 -0
  71. data/ext/v8/upstream/2.0.6/src/ast.cc +512 -0
  72. data/ext/v8/upstream/2.0.6/src/ast.h +1820 -0
  73. data/ext/v8/upstream/2.0.6/src/bootstrapper.cc +1680 -0
  74. data/ext/v8/upstream/2.0.6/src/bootstrapper.h +103 -0
  75. data/ext/v8/upstream/2.0.6/src/builtins.cc +851 -0
  76. data/ext/v8/upstream/2.0.6/src/builtins.h +245 -0
  77. data/ext/v8/upstream/2.0.6/src/bytecodes-irregexp.h +104 -0
  78. data/ext/v8/upstream/2.0.6/src/char-predicates-inl.h +86 -0
  79. data/ext/v8/upstream/2.0.6/src/char-predicates.h +65 -0
  80. data/ext/v8/upstream/2.0.6/src/checks.cc +100 -0
  81. data/ext/v8/upstream/2.0.6/src/checks.h +284 -0
  82. data/ext/v8/upstream/2.0.6/src/code-stubs.cc +164 -0
  83. data/ext/v8/upstream/2.0.6/src/code-stubs.h +164 -0
  84. data/ext/v8/upstream/2.0.6/src/code.h +68 -0
  85. data/ext/v8/upstream/2.0.6/src/codegen-inl.h +88 -0
  86. data/ext/v8/upstream/2.0.6/src/codegen.cc +504 -0
  87. data/ext/v8/upstream/2.0.6/src/codegen.h +522 -0
  88. data/ext/v8/upstream/2.0.6/src/compilation-cache.cc +490 -0
  89. data/ext/v8/upstream/2.0.6/src/compilation-cache.h +98 -0
  90. data/ext/v8/upstream/2.0.6/src/compiler.cc +1132 -0
  91. data/ext/v8/upstream/2.0.6/src/compiler.h +107 -0
  92. data/ext/v8/upstream/2.0.6/src/contexts.cc +256 -0
  93. data/ext/v8/upstream/2.0.6/src/contexts.h +345 -0
  94. data/ext/v8/upstream/2.0.6/src/conversions-inl.h +95 -0
  95. data/ext/v8/upstream/2.0.6/src/conversions.cc +709 -0
  96. data/ext/v8/upstream/2.0.6/src/conversions.h +118 -0
  97. data/ext/v8/upstream/2.0.6/src/counters.cc +78 -0
  98. data/ext/v8/upstream/2.0.6/src/counters.h +239 -0
  99. data/ext/v8/upstream/2.0.6/src/cpu.h +65 -0
  100. data/ext/v8/upstream/2.0.6/src/d8-debug.cc +345 -0
  101. data/ext/v8/upstream/2.0.6/src/d8-debug.h +155 -0
  102. data/ext/v8/upstream/2.0.6/src/d8-posix.cc +675 -0
  103. data/ext/v8/upstream/2.0.6/src/d8-readline.cc +128 -0
  104. data/ext/v8/upstream/2.0.6/src/d8-windows.cc +42 -0
  105. data/ext/v8/upstream/2.0.6/src/d8.cc +776 -0
  106. data/ext/v8/upstream/2.0.6/src/d8.h +225 -0
  107. data/ext/v8/upstream/2.0.6/src/d8.js +1625 -0
  108. data/ext/v8/upstream/2.0.6/src/date-delay.js +1138 -0
  109. data/ext/v8/upstream/2.0.6/src/dateparser-inl.h +114 -0
  110. data/ext/v8/upstream/2.0.6/src/dateparser.cc +186 -0
  111. data/ext/v8/upstream/2.0.6/src/dateparser.h +240 -0
  112. data/ext/v8/upstream/2.0.6/src/debug-agent.cc +425 -0
  113. data/ext/v8/upstream/2.0.6/src/debug-agent.h +129 -0
  114. data/ext/v8/upstream/2.0.6/src/debug-delay.js +2073 -0
  115. data/ext/v8/upstream/2.0.6/src/debug.cc +2751 -0
  116. data/ext/v8/upstream/2.0.6/src/debug.h +866 -0
  117. data/ext/v8/upstream/2.0.6/src/disasm.h +77 -0
  118. data/ext/v8/upstream/2.0.6/src/disassembler.cc +318 -0
  119. data/ext/v8/upstream/2.0.6/src/disassembler.h +56 -0
  120. data/ext/v8/upstream/2.0.6/src/dtoa-config.c +91 -0
  121. data/ext/v8/upstream/2.0.6/src/execution.cc +701 -0
  122. data/ext/v8/upstream/2.0.6/src/execution.h +312 -0
  123. data/ext/v8/upstream/2.0.6/src/factory.cc +957 -0
  124. data/ext/v8/upstream/2.0.6/src/factory.h +393 -0
  125. data/ext/v8/upstream/2.0.6/src/fast-codegen.cc +725 -0
  126. data/ext/v8/upstream/2.0.6/src/fast-codegen.h +371 -0
  127. data/ext/v8/upstream/2.0.6/src/flag-definitions.h +426 -0
  128. data/ext/v8/upstream/2.0.6/src/flags.cc +555 -0
  129. data/ext/v8/upstream/2.0.6/src/flags.h +81 -0
  130. data/ext/v8/upstream/2.0.6/src/frame-element.cc +45 -0
  131. data/ext/v8/upstream/2.0.6/src/frame-element.h +235 -0
  132. data/ext/v8/upstream/2.0.6/src/frames-inl.h +215 -0
  133. data/ext/v8/upstream/2.0.6/src/frames.cc +749 -0
  134. data/ext/v8/upstream/2.0.6/src/frames.h +659 -0
  135. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.cc +76 -0
  136. data/ext/v8/upstream/2.0.6/src/func-name-inferrer.h +135 -0
  137. data/ext/v8/upstream/2.0.6/src/global-handles.cc +516 -0
  138. data/ext/v8/upstream/2.0.6/src/global-handles.h +180 -0
  139. data/ext/v8/upstream/2.0.6/src/globals.h +608 -0
  140. data/ext/v8/upstream/2.0.6/src/handles-inl.h +76 -0
  141. data/ext/v8/upstream/2.0.6/src/handles.cc +811 -0
  142. data/ext/v8/upstream/2.0.6/src/handles.h +367 -0
  143. data/ext/v8/upstream/2.0.6/src/hashmap.cc +226 -0
  144. data/ext/v8/upstream/2.0.6/src/hashmap.h +120 -0
  145. data/ext/v8/upstream/2.0.6/src/heap-inl.h +407 -0
  146. data/ext/v8/upstream/2.0.6/src/heap-profiler.cc +695 -0
  147. data/ext/v8/upstream/2.0.6/src/heap-profiler.h +277 -0
  148. data/ext/v8/upstream/2.0.6/src/heap.cc +4204 -0
  149. data/ext/v8/upstream/2.0.6/src/heap.h +1704 -0
  150. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32-inl.h +325 -0
  151. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.cc +2375 -0
  152. data/ext/v8/upstream/2.0.6/src/ia32/assembler-ia32.h +914 -0
  153. data/ext/v8/upstream/2.0.6/src/ia32/builtins-ia32.cc +1222 -0
  154. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32-inl.h +46 -0
  155. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.cc +9770 -0
  156. data/ext/v8/upstream/2.0.6/src/ia32/codegen-ia32.h +834 -0
  157. data/ext/v8/upstream/2.0.6/src/ia32/cpu-ia32.cc +79 -0
  158. data/ext/v8/upstream/2.0.6/src/ia32/debug-ia32.cc +208 -0
  159. data/ext/v8/upstream/2.0.6/src/ia32/disasm-ia32.cc +1357 -0
  160. data/ext/v8/upstream/2.0.6/src/ia32/fast-codegen-ia32.cc +1813 -0
  161. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.cc +111 -0
  162. data/ext/v8/upstream/2.0.6/src/ia32/frames-ia32.h +135 -0
  163. data/ext/v8/upstream/2.0.6/src/ia32/ic-ia32.cc +1490 -0
  164. data/ext/v8/upstream/2.0.6/src/ia32/jump-target-ia32.cc +432 -0
  165. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.cc +1517 -0
  166. data/ext/v8/upstream/2.0.6/src/ia32/macro-assembler-ia32.h +528 -0
  167. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.cc +1219 -0
  168. data/ext/v8/upstream/2.0.6/src/ia32/regexp-macro-assembler-ia32.h +230 -0
  169. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32-inl.h +82 -0
  170. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.cc +99 -0
  171. data/ext/v8/upstream/2.0.6/src/ia32/register-allocator-ia32.h +43 -0
  172. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.cc +30 -0
  173. data/ext/v8/upstream/2.0.6/src/ia32/simulator-ia32.h +62 -0
  174. data/ext/v8/upstream/2.0.6/src/ia32/stub-cache-ia32.cc +1961 -0
  175. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.cc +1105 -0
  176. data/ext/v8/upstream/2.0.6/src/ia32/virtual-frame-ia32.h +580 -0
  177. data/ext/v8/upstream/2.0.6/src/ic-inl.h +93 -0
  178. data/ext/v8/upstream/2.0.6/src/ic.cc +1426 -0
  179. data/ext/v8/upstream/2.0.6/src/ic.h +443 -0
  180. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.cc +646 -0
  181. data/ext/v8/upstream/2.0.6/src/interpreter-irregexp.h +48 -0
  182. data/ext/v8/upstream/2.0.6/src/json-delay.js +254 -0
  183. data/ext/v8/upstream/2.0.6/src/jsregexp.cc +5234 -0
  184. data/ext/v8/upstream/2.0.6/src/jsregexp.h +1439 -0
  185. data/ext/v8/upstream/2.0.6/src/jump-target-inl.h +49 -0
  186. data/ext/v8/upstream/2.0.6/src/jump-target.cc +383 -0
  187. data/ext/v8/upstream/2.0.6/src/jump-target.h +280 -0
  188. data/ext/v8/upstream/2.0.6/src/list-inl.h +166 -0
  189. data/ext/v8/upstream/2.0.6/src/list.h +158 -0
  190. data/ext/v8/upstream/2.0.6/src/log-inl.h +126 -0
  191. data/ext/v8/upstream/2.0.6/src/log-utils.cc +503 -0
  192. data/ext/v8/upstream/2.0.6/src/log-utils.h +292 -0
  193. data/ext/v8/upstream/2.0.6/src/log.cc +1457 -0
  194. data/ext/v8/upstream/2.0.6/src/log.h +371 -0
  195. data/ext/v8/upstream/2.0.6/src/macro-assembler.h +93 -0
  196. data/ext/v8/upstream/2.0.6/src/macros.py +137 -0
  197. data/ext/v8/upstream/2.0.6/src/mark-compact.cc +2007 -0
  198. data/ext/v8/upstream/2.0.6/src/mark-compact.h +442 -0
  199. data/ext/v8/upstream/2.0.6/src/math.js +263 -0
  200. data/ext/v8/upstream/2.0.6/src/memory.h +74 -0
  201. data/ext/v8/upstream/2.0.6/src/messages.cc +177 -0
  202. data/ext/v8/upstream/2.0.6/src/messages.h +112 -0
  203. data/ext/v8/upstream/2.0.6/src/messages.js +937 -0
  204. data/ext/v8/upstream/2.0.6/src/mirror-delay.js +2332 -0
  205. data/ext/v8/upstream/2.0.6/src/mksnapshot.cc +169 -0
  206. data/ext/v8/upstream/2.0.6/src/natives.h +63 -0
  207. data/ext/v8/upstream/2.0.6/src/objects-debug.cc +1317 -0
  208. data/ext/v8/upstream/2.0.6/src/objects-inl.h +3044 -0
  209. data/ext/v8/upstream/2.0.6/src/objects.cc +8306 -0
  210. data/ext/v8/upstream/2.0.6/src/objects.h +4960 -0
  211. data/ext/v8/upstream/2.0.6/src/oprofile-agent.cc +116 -0
  212. data/ext/v8/upstream/2.0.6/src/oprofile-agent.h +69 -0
  213. data/ext/v8/upstream/2.0.6/src/parser.cc +4810 -0
  214. data/ext/v8/upstream/2.0.6/src/parser.h +195 -0
  215. data/ext/v8/upstream/2.0.6/src/platform-freebsd.cc +645 -0
  216. data/ext/v8/upstream/2.0.6/src/platform-linux.cc +808 -0
  217. data/ext/v8/upstream/2.0.6/src/platform-macos.cc +643 -0
  218. data/ext/v8/upstream/2.0.6/src/platform-nullos.cc +454 -0
  219. data/ext/v8/upstream/2.0.6/src/platform-openbsd.cc +597 -0
  220. data/ext/v8/upstream/2.0.6/src/platform-posix.cc +380 -0
  221. data/ext/v8/upstream/2.0.6/src/platform-win32.cc +1908 -0
  222. data/ext/v8/upstream/2.0.6/src/platform.h +556 -0
  223. data/ext/v8/upstream/2.0.6/src/prettyprinter.cc +1511 -0
  224. data/ext/v8/upstream/2.0.6/src/prettyprinter.h +219 -0
  225. data/ext/v8/upstream/2.0.6/src/property.cc +96 -0
  226. data/ext/v8/upstream/2.0.6/src/property.h +327 -0
  227. data/ext/v8/upstream/2.0.6/src/regexp-delay.js +406 -0
  228. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  229. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.cc +464 -0
  230. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-irregexp.h +141 -0
  231. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.cc +356 -0
  232. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler-tracer.h +103 -0
  233. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.cc +240 -0
  234. data/ext/v8/upstream/2.0.6/src/regexp-macro-assembler.h +220 -0
  235. data/ext/v8/upstream/2.0.6/src/regexp-stack.cc +103 -0
  236. data/ext/v8/upstream/2.0.6/src/regexp-stack.h +123 -0
  237. data/ext/v8/upstream/2.0.6/src/register-allocator-inl.h +74 -0
  238. data/ext/v8/upstream/2.0.6/src/register-allocator.cc +100 -0
  239. data/ext/v8/upstream/2.0.6/src/register-allocator.h +295 -0
  240. data/ext/v8/upstream/2.0.6/src/rewriter.cc +855 -0
  241. data/ext/v8/upstream/2.0.6/src/rewriter.h +54 -0
  242. data/ext/v8/upstream/2.0.6/src/runtime.cc +8163 -0
  243. data/ext/v8/upstream/2.0.6/src/runtime.h +432 -0
  244. data/ext/v8/upstream/2.0.6/src/runtime.js +626 -0
  245. data/ext/v8/upstream/2.0.6/src/scanner.cc +1098 -0
  246. data/ext/v8/upstream/2.0.6/src/scanner.h +425 -0
  247. data/ext/v8/upstream/2.0.6/src/scopeinfo.cc +649 -0
  248. data/ext/v8/upstream/2.0.6/src/scopeinfo.h +236 -0
  249. data/ext/v8/upstream/2.0.6/src/scopes.cc +963 -0
  250. data/ext/v8/upstream/2.0.6/src/scopes.h +401 -0
  251. data/ext/v8/upstream/2.0.6/src/serialize.cc +1260 -0
  252. data/ext/v8/upstream/2.0.6/src/serialize.h +404 -0
  253. data/ext/v8/upstream/2.0.6/src/shell.h +55 -0
  254. data/ext/v8/upstream/2.0.6/src/simulator.h +41 -0
  255. data/ext/v8/upstream/2.0.6/src/smart-pointer.h +109 -0
  256. data/ext/v8/upstream/2.0.6/src/snapshot-common.cc +97 -0
  257. data/ext/v8/upstream/2.0.6/src/snapshot-empty.cc +40 -0
  258. data/ext/v8/upstream/2.0.6/src/snapshot.h +59 -0
  259. data/ext/v8/upstream/2.0.6/src/spaces-inl.h +372 -0
  260. data/ext/v8/upstream/2.0.6/src/spaces.cc +2864 -0
  261. data/ext/v8/upstream/2.0.6/src/spaces.h +2072 -0
  262. data/ext/v8/upstream/2.0.6/src/string-stream.cc +584 -0
  263. data/ext/v8/upstream/2.0.6/src/string-stream.h +189 -0
  264. data/ext/v8/upstream/2.0.6/src/string.js +901 -0
  265. data/ext/v8/upstream/2.0.6/src/stub-cache.cc +1108 -0
  266. data/ext/v8/upstream/2.0.6/src/stub-cache.h +578 -0
  267. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/COPYING +15 -0
  268. data/ext/v8/upstream/2.0.6/src/third_party/dtoa/dtoa.c +3330 -0
  269. data/ext/v8/upstream/2.0.6/src/third_party/valgrind/valgrind.h +3925 -0
  270. data/ext/v8/upstream/2.0.6/src/token.cc +56 -0
  271. data/ext/v8/upstream/2.0.6/src/token.h +270 -0
  272. data/ext/v8/upstream/2.0.6/src/top.cc +991 -0
  273. data/ext/v8/upstream/2.0.6/src/top.h +459 -0
  274. data/ext/v8/upstream/2.0.6/src/unicode-inl.h +238 -0
  275. data/ext/v8/upstream/2.0.6/src/unicode.cc +749 -0
  276. data/ext/v8/upstream/2.0.6/src/unicode.h +279 -0
  277. data/ext/v8/upstream/2.0.6/src/uri.js +415 -0
  278. data/ext/v8/upstream/2.0.6/src/usage-analyzer.cc +426 -0
  279. data/ext/v8/upstream/2.0.6/src/usage-analyzer.h +40 -0
  280. data/ext/v8/upstream/2.0.6/src/utils.cc +322 -0
  281. data/ext/v8/upstream/2.0.6/src/utils.h +592 -0
  282. data/ext/v8/upstream/2.0.6/src/v8-counters.cc +55 -0
  283. data/ext/v8/upstream/2.0.6/src/v8-counters.h +198 -0
  284. data/ext/v8/upstream/2.0.6/src/v8.cc +193 -0
  285. data/ext/v8/upstream/2.0.6/src/v8.h +119 -0
  286. data/ext/v8/upstream/2.0.6/src/v8natives.js +846 -0
  287. data/ext/v8/upstream/2.0.6/src/v8threads.cc +450 -0
  288. data/ext/v8/upstream/2.0.6/src/v8threads.h +144 -0
  289. data/ext/v8/upstream/2.0.6/src/variables.cc +163 -0
  290. data/ext/v8/upstream/2.0.6/src/variables.h +235 -0
  291. data/ext/v8/upstream/2.0.6/src/version.cc +88 -0
  292. data/ext/v8/upstream/2.0.6/src/version.h +64 -0
  293. data/ext/v8/upstream/2.0.6/src/virtual-frame.cc +381 -0
  294. data/ext/v8/upstream/2.0.6/src/virtual-frame.h +44 -0
  295. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64-inl.h +352 -0
  296. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.cc +2539 -0
  297. data/ext/v8/upstream/2.0.6/src/x64/assembler-x64.h +1399 -0
  298. data/ext/v8/upstream/2.0.6/src/x64/builtins-x64.cc +1255 -0
  299. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64-inl.h +46 -0
  300. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.cc +8223 -0
  301. data/ext/v8/upstream/2.0.6/src/x64/codegen-x64.h +785 -0
  302. data/ext/v8/upstream/2.0.6/src/x64/cpu-x64.cc +79 -0
  303. data/ext/v8/upstream/2.0.6/src/x64/debug-x64.cc +202 -0
  304. data/ext/v8/upstream/2.0.6/src/x64/disasm-x64.cc +1596 -0
  305. data/ext/v8/upstream/2.0.6/src/x64/fast-codegen-x64.cc +1820 -0
  306. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.cc +109 -0
  307. data/ext/v8/upstream/2.0.6/src/x64/frames-x64.h +121 -0
  308. data/ext/v8/upstream/2.0.6/src/x64/ic-x64.cc +1392 -0
  309. data/ext/v8/upstream/2.0.6/src/x64/jump-target-x64.cc +432 -0
  310. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.cc +2409 -0
  311. data/ext/v8/upstream/2.0.6/src/x64/macro-assembler-x64.h +765 -0
  312. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.cc +1337 -0
  313. data/ext/v8/upstream/2.0.6/src/x64/regexp-macro-assembler-x64.h +295 -0
  314. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64-inl.h +86 -0
  315. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.cc +84 -0
  316. data/ext/v8/upstream/2.0.6/src/x64/register-allocator-x64.h +43 -0
  317. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.cc +27 -0
  318. data/ext/v8/upstream/2.0.6/src/x64/simulator-x64.h +63 -0
  319. data/ext/v8/upstream/2.0.6/src/x64/stub-cache-x64.cc +1884 -0
  320. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.cc +1089 -0
  321. data/ext/v8/upstream/2.0.6/src/x64/virtual-frame-x64.h +560 -0
  322. data/ext/v8/upstream/2.0.6/src/zone-inl.h +297 -0
  323. data/ext/v8/upstream/2.0.6/src/zone.cc +193 -0
  324. data/ext/v8/upstream/2.0.6/src/zone.h +305 -0
  325. data/ext/v8/upstream/2.0.6/tools/codemap.js +258 -0
  326. data/ext/v8/upstream/2.0.6/tools/consarray.js +93 -0
  327. data/ext/v8/upstream/2.0.6/tools/csvparser.js +98 -0
  328. data/ext/v8/upstream/2.0.6/tools/gyp/v8.gyp +620 -0
  329. data/ext/v8/upstream/2.0.6/tools/js2c.py +376 -0
  330. data/ext/v8/upstream/2.0.6/tools/jsmin.py +280 -0
  331. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor +24 -0
  332. data/ext/v8/upstream/2.0.6/tools/linux-tick-processor.py +78 -0
  333. data/ext/v8/upstream/2.0.6/tools/logreader.js +320 -0
  334. data/ext/v8/upstream/2.0.6/tools/mac-nm +18 -0
  335. data/ext/v8/upstream/2.0.6/tools/mac-tick-processor +6 -0
  336. data/ext/v8/upstream/2.0.6/tools/oprofile/annotate +7 -0
  337. data/ext/v8/upstream/2.0.6/tools/oprofile/common +19 -0
  338. data/ext/v8/upstream/2.0.6/tools/oprofile/dump +7 -0
  339. data/ext/v8/upstream/2.0.6/tools/oprofile/report +7 -0
  340. data/ext/v8/upstream/2.0.6/tools/oprofile/reset +7 -0
  341. data/ext/v8/upstream/2.0.6/tools/oprofile/run +14 -0
  342. data/ext/v8/upstream/2.0.6/tools/oprofile/shutdown +7 -0
  343. data/ext/v8/upstream/2.0.6/tools/oprofile/start +7 -0
  344. data/ext/v8/upstream/2.0.6/tools/presubmit.py +299 -0
  345. data/ext/v8/upstream/2.0.6/tools/process-heap-prof.py +120 -0
  346. data/ext/v8/upstream/2.0.6/tools/profile.js +621 -0
  347. data/ext/v8/upstream/2.0.6/tools/profile_view.js +224 -0
  348. data/ext/v8/upstream/2.0.6/tools/run-valgrind.py +77 -0
  349. data/ext/v8/upstream/2.0.6/tools/splaytree.js +322 -0
  350. data/ext/v8/upstream/2.0.6/tools/splaytree.py +226 -0
  351. data/ext/v8/upstream/2.0.6/tools/stats-viewer.py +456 -0
  352. data/ext/v8/upstream/2.0.6/tools/test.py +1370 -0
  353. data/ext/v8/upstream/2.0.6/tools/tickprocessor-driver.js +53 -0
  354. data/ext/v8/upstream/2.0.6/tools/tickprocessor.js +731 -0
  355. data/ext/v8/upstream/2.0.6/tools/tickprocessor.py +535 -0
  356. data/ext/v8/upstream/2.0.6/tools/utils.py +82 -0
  357. data/ext/v8/upstream/2.0.6/tools/visual_studio/README.txt +71 -0
  358. data/ext/v8/upstream/2.0.6/tools/visual_studio/arm.vsprops +14 -0
  359. data/ext/v8/upstream/2.0.6/tools/visual_studio/common.vsprops +35 -0
  360. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8.vcproj +199 -0
  361. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_arm.vcproj +199 -0
  362. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8_x64.vcproj +201 -0
  363. data/ext/v8/upstream/2.0.6/tools/visual_studio/d8js2c.cmd +6 -0
  364. data/ext/v8/upstream/2.0.6/tools/visual_studio/debug.vsprops +17 -0
  365. data/ext/v8/upstream/2.0.6/tools/visual_studio/ia32.vsprops +13 -0
  366. data/ext/v8/upstream/2.0.6/tools/visual_studio/js2c.cmd +6 -0
  367. data/ext/v8/upstream/2.0.6/tools/visual_studio/release.vsprops +24 -0
  368. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.sln +101 -0
  369. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8.vcproj +223 -0
  370. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.sln +74 -0
  371. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_arm.vcproj +223 -0
  372. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base.vcproj +971 -0
  373. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_arm.vcproj +983 -0
  374. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_base_x64.vcproj +959 -0
  375. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest.vcproj +255 -0
  376. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_arm.vcproj +243 -0
  377. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_cctest_x64.vcproj +257 -0
  378. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot.vcproj +151 -0
  379. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_mksnapshot_x64.vcproj +151 -0
  380. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample.vcproj +151 -0
  381. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_arm.vcproj +151 -0
  382. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_process_sample_x64.vcproj +151 -0
  383. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample.vcproj +151 -0
  384. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_arm.vcproj +151 -0
  385. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_shell_sample_x64.vcproj +153 -0
  386. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot.vcproj +142 -0
  387. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc.vcproj +92 -0
  388. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_cc_x64.vcproj +92 -0
  389. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_snapshot_x64.vcproj +142 -0
  390. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.sln +101 -0
  391. data/ext/v8/upstream/2.0.6/tools/visual_studio/v8_x64.vcproj +223 -0
  392. data/ext/v8/upstream/2.0.6/tools/visual_studio/x64.vsprops +13 -0
  393. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.bat +5 -0
  394. data/ext/v8/upstream/2.0.6/tools/windows-tick-processor.py +137 -0
  395. data/ext/v8/upstream/Makefile +31 -0
  396. data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
  397. data/ext/v8/upstream/scons/CHANGES.txt +5183 -0
  398. data/ext/v8/upstream/scons/LICENSE.txt +20 -0
  399. data/ext/v8/upstream/scons/MANIFEST +202 -0
  400. data/ext/v8/upstream/scons/PKG-INFO +13 -0
  401. data/ext/v8/upstream/scons/README.txt +273 -0
  402. data/ext/v8/upstream/scons/RELEASE.txt +1040 -0
  403. data/ext/v8/upstream/scons/engine/SCons/Action.py +1256 -0
  404. data/ext/v8/upstream/scons/engine/SCons/Builder.py +868 -0
  405. data/ext/v8/upstream/scons/engine/SCons/CacheDir.py +217 -0
  406. data/ext/v8/upstream/scons/engine/SCons/Conftest.py +794 -0
  407. data/ext/v8/upstream/scons/engine/SCons/Debug.py +237 -0
  408. data/ext/v8/upstream/scons/engine/SCons/Defaults.py +485 -0
  409. data/ext/v8/upstream/scons/engine/SCons/Environment.py +2327 -0
  410. data/ext/v8/upstream/scons/engine/SCons/Errors.py +207 -0
  411. data/ext/v8/upstream/scons/engine/SCons/Executor.py +636 -0
  412. data/ext/v8/upstream/scons/engine/SCons/Job.py +435 -0
  413. data/ext/v8/upstream/scons/engine/SCons/Memoize.py +292 -0
  414. data/ext/v8/upstream/scons/engine/SCons/Node/Alias.py +153 -0
  415. data/ext/v8/upstream/scons/engine/SCons/Node/FS.py +3220 -0
  416. data/ext/v8/upstream/scons/engine/SCons/Node/Python.py +128 -0
  417. data/ext/v8/upstream/scons/engine/SCons/Node/__init__.py +1341 -0
  418. data/ext/v8/upstream/scons/engine/SCons/Options/BoolOption.py +50 -0
  419. data/ext/v8/upstream/scons/engine/SCons/Options/EnumOption.py +50 -0
  420. data/ext/v8/upstream/scons/engine/SCons/Options/ListOption.py +50 -0
  421. data/ext/v8/upstream/scons/engine/SCons/Options/PackageOption.py +50 -0
  422. data/ext/v8/upstream/scons/engine/SCons/Options/PathOption.py +76 -0
  423. data/ext/v8/upstream/scons/engine/SCons/Options/__init__.py +74 -0
  424. data/ext/v8/upstream/scons/engine/SCons/PathList.py +232 -0
  425. data/ext/v8/upstream/scons/engine/SCons/Platform/__init__.py +236 -0
  426. data/ext/v8/upstream/scons/engine/SCons/Platform/aix.py +70 -0
  427. data/ext/v8/upstream/scons/engine/SCons/Platform/cygwin.py +55 -0
  428. data/ext/v8/upstream/scons/engine/SCons/Platform/darwin.py +46 -0
  429. data/ext/v8/upstream/scons/engine/SCons/Platform/hpux.py +46 -0
  430. data/ext/v8/upstream/scons/engine/SCons/Platform/irix.py +44 -0
  431. data/ext/v8/upstream/scons/engine/SCons/Platform/os2.py +58 -0
  432. data/ext/v8/upstream/scons/engine/SCons/Platform/posix.py +264 -0
  433. data/ext/v8/upstream/scons/engine/SCons/Platform/sunos.py +50 -0
  434. data/ext/v8/upstream/scons/engine/SCons/Platform/win32.py +386 -0
  435. data/ext/v8/upstream/scons/engine/SCons/SConf.py +1038 -0
  436. data/ext/v8/upstream/scons/engine/SCons/SConsign.py +381 -0
  437. data/ext/v8/upstream/scons/engine/SCons/Scanner/C.py +132 -0
  438. data/ext/v8/upstream/scons/engine/SCons/Scanner/D.py +74 -0
  439. data/ext/v8/upstream/scons/engine/SCons/Scanner/Dir.py +111 -0
  440. data/ext/v8/upstream/scons/engine/SCons/Scanner/Fortran.py +320 -0
  441. data/ext/v8/upstream/scons/engine/SCons/Scanner/IDL.py +48 -0
  442. data/ext/v8/upstream/scons/engine/SCons/Scanner/LaTeX.py +378 -0
  443. data/ext/v8/upstream/scons/engine/SCons/Scanner/Prog.py +103 -0
  444. data/ext/v8/upstream/scons/engine/SCons/Scanner/RC.py +55 -0
  445. data/ext/v8/upstream/scons/engine/SCons/Scanner/__init__.py +415 -0
  446. data/ext/v8/upstream/scons/engine/SCons/Script/Interactive.py +386 -0
  447. data/ext/v8/upstream/scons/engine/SCons/Script/Main.py +1360 -0
  448. data/ext/v8/upstream/scons/engine/SCons/Script/SConsOptions.py +944 -0
  449. data/ext/v8/upstream/scons/engine/SCons/Script/SConscript.py +642 -0
  450. data/ext/v8/upstream/scons/engine/SCons/Script/__init__.py +414 -0
  451. data/ext/v8/upstream/scons/engine/SCons/Sig.py +63 -0
  452. data/ext/v8/upstream/scons/engine/SCons/Subst.py +911 -0
  453. data/ext/v8/upstream/scons/engine/SCons/Taskmaster.py +1030 -0
  454. data/ext/v8/upstream/scons/engine/SCons/Tool/386asm.py +61 -0
  455. data/ext/v8/upstream/scons/engine/SCons/Tool/BitKeeper.py +65 -0
  456. data/ext/v8/upstream/scons/engine/SCons/Tool/CVS.py +73 -0
  457. data/ext/v8/upstream/scons/engine/SCons/Tool/FortranCommon.py +247 -0
  458. data/ext/v8/upstream/scons/engine/SCons/Tool/JavaCommon.py +324 -0
  459. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  460. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  461. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/common.py +210 -0
  462. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/netframework.py +84 -0
  463. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/sdk.py +321 -0
  464. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vc.py +367 -0
  465. data/ext/v8/upstream/scons/engine/SCons/Tool/MSCommon/vs.py +497 -0
  466. data/ext/v8/upstream/scons/engine/SCons/Tool/Perforce.py +104 -0
  467. data/ext/v8/upstream/scons/engine/SCons/Tool/PharLapCommon.py +138 -0
  468. data/ext/v8/upstream/scons/engine/SCons/Tool/RCS.py +64 -0
  469. data/ext/v8/upstream/scons/engine/SCons/Tool/SCCS.py +64 -0
  470. data/ext/v8/upstream/scons/engine/SCons/Tool/Subversion.py +71 -0
  471. data/ext/v8/upstream/scons/engine/SCons/Tool/__init__.py +675 -0
  472. data/ext/v8/upstream/scons/engine/SCons/Tool/aixc++.py +82 -0
  473. data/ext/v8/upstream/scons/engine/SCons/Tool/aixcc.py +74 -0
  474. data/ext/v8/upstream/scons/engine/SCons/Tool/aixf77.py +80 -0
  475. data/ext/v8/upstream/scons/engine/SCons/Tool/aixlink.py +76 -0
  476. data/ext/v8/upstream/scons/engine/SCons/Tool/applelink.py +71 -0
  477. data/ext/v8/upstream/scons/engine/SCons/Tool/ar.py +63 -0
  478. data/ext/v8/upstream/scons/engine/SCons/Tool/as.py +78 -0
  479. data/ext/v8/upstream/scons/engine/SCons/Tool/bcc32.py +82 -0
  480. data/ext/v8/upstream/scons/engine/SCons/Tool/c++.py +99 -0
  481. data/ext/v8/upstream/scons/engine/SCons/Tool/cc.py +114 -0
  482. data/ext/v8/upstream/scons/engine/SCons/Tool/cvf.py +58 -0
  483. data/ext/v8/upstream/scons/engine/SCons/Tool/default.py +50 -0
  484. data/ext/v8/upstream/scons/engine/SCons/Tool/dmd.py +224 -0
  485. data/ext/v8/upstream/scons/engine/SCons/Tool/dvi.py +64 -0
  486. data/ext/v8/upstream/scons/engine/SCons/Tool/dvipdf.py +125 -0
  487. data/ext/v8/upstream/scons/engine/SCons/Tool/dvips.py +94 -0
  488. data/ext/v8/upstream/scons/engine/SCons/Tool/f77.py +62 -0
  489. data/ext/v8/upstream/scons/engine/SCons/Tool/f90.py +62 -0
  490. data/ext/v8/upstream/scons/engine/SCons/Tool/f95.py +63 -0
  491. data/ext/v8/upstream/scons/engine/SCons/Tool/filesystem.py +98 -0
  492. data/ext/v8/upstream/scons/engine/SCons/Tool/fortran.py +63 -0
  493. data/ext/v8/upstream/scons/engine/SCons/Tool/g++.py +90 -0
  494. data/ext/v8/upstream/scons/engine/SCons/Tool/g77.py +73 -0
  495. data/ext/v8/upstream/scons/engine/SCons/Tool/gas.py +53 -0
  496. data/ext/v8/upstream/scons/engine/SCons/Tool/gcc.py +80 -0
  497. data/ext/v8/upstream/scons/engine/SCons/Tool/gfortran.py +64 -0
  498. data/ext/v8/upstream/scons/engine/SCons/Tool/gnulink.py +63 -0
  499. data/ext/v8/upstream/scons/engine/SCons/Tool/gs.py +81 -0
  500. data/ext/v8/upstream/scons/engine/SCons/Tool/hpc++.py +85 -0
  501. data/ext/v8/upstream/scons/engine/SCons/Tool/hpcc.py +53 -0
  502. data/ext/v8/upstream/scons/engine/SCons/Tool/hplink.py +77 -0
  503. data/ext/v8/upstream/scons/engine/SCons/Tool/icc.py +59 -0
  504. data/ext/v8/upstream/scons/engine/SCons/Tool/icl.py +52 -0
  505. data/ext/v8/upstream/scons/engine/SCons/Tool/ifl.py +72 -0
  506. data/ext/v8/upstream/scons/engine/SCons/Tool/ifort.py +90 -0
  507. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink.py +59 -0
  508. data/ext/v8/upstream/scons/engine/SCons/Tool/ilink32.py +60 -0
  509. data/ext/v8/upstream/scons/engine/SCons/Tool/install.py +229 -0
  510. data/ext/v8/upstream/scons/engine/SCons/Tool/intelc.py +490 -0
  511. data/ext/v8/upstream/scons/engine/SCons/Tool/ipkg.py +71 -0
  512. data/ext/v8/upstream/scons/engine/SCons/Tool/jar.py +110 -0
  513. data/ext/v8/upstream/scons/engine/SCons/Tool/javac.py +234 -0
  514. data/ext/v8/upstream/scons/engine/SCons/Tool/javah.py +138 -0
  515. data/ext/v8/upstream/scons/engine/SCons/Tool/latex.py +79 -0
  516. data/ext/v8/upstream/scons/engine/SCons/Tool/lex.py +99 -0
  517. data/ext/v8/upstream/scons/engine/SCons/Tool/link.py +121 -0
  518. data/ext/v8/upstream/scons/engine/SCons/Tool/linkloc.py +112 -0
  519. data/ext/v8/upstream/scons/engine/SCons/Tool/m4.py +63 -0
  520. data/ext/v8/upstream/scons/engine/SCons/Tool/masm.py +77 -0
  521. data/ext/v8/upstream/scons/engine/SCons/Tool/midl.py +90 -0
  522. data/ext/v8/upstream/scons/engine/SCons/Tool/mingw.py +159 -0
  523. data/ext/v8/upstream/scons/engine/SCons/Tool/mslib.py +64 -0
  524. data/ext/v8/upstream/scons/engine/SCons/Tool/mslink.py +266 -0
  525. data/ext/v8/upstream/scons/engine/SCons/Tool/mssdk.py +50 -0
  526. data/ext/v8/upstream/scons/engine/SCons/Tool/msvc.py +269 -0
  527. data/ext/v8/upstream/scons/engine/SCons/Tool/msvs.py +1439 -0
  528. data/ext/v8/upstream/scons/engine/SCons/Tool/mwcc.py +208 -0
  529. data/ext/v8/upstream/scons/engine/SCons/Tool/mwld.py +107 -0
  530. data/ext/v8/upstream/scons/engine/SCons/Tool/nasm.py +72 -0
  531. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/__init__.py +314 -0
  532. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  533. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/msi.py +526 -0
  534. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/rpm.py +367 -0
  535. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  536. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  537. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  538. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  539. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  540. data/ext/v8/upstream/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  541. data/ext/v8/upstream/scons/engine/SCons/Tool/pdf.py +78 -0
  542. data/ext/v8/upstream/scons/engine/SCons/Tool/pdflatex.py +83 -0
  543. data/ext/v8/upstream/scons/engine/SCons/Tool/pdftex.py +108 -0
  544. data/ext/v8/upstream/scons/engine/SCons/Tool/qt.py +336 -0
  545. data/ext/v8/upstream/scons/engine/SCons/Tool/rmic.py +121 -0
  546. data/ext/v8/upstream/scons/engine/SCons/Tool/rpcgen.py +70 -0
  547. data/ext/v8/upstream/scons/engine/SCons/Tool/rpm.py +132 -0
  548. data/ext/v8/upstream/scons/engine/SCons/Tool/sgiar.py +68 -0
  549. data/ext/v8/upstream/scons/engine/SCons/Tool/sgic++.py +58 -0
  550. data/ext/v8/upstream/scons/engine/SCons/Tool/sgicc.py +53 -0
  551. data/ext/v8/upstream/scons/engine/SCons/Tool/sgilink.py +63 -0
  552. data/ext/v8/upstream/scons/engine/SCons/Tool/sunar.py +67 -0
  553. data/ext/v8/upstream/scons/engine/SCons/Tool/sunc++.py +142 -0
  554. data/ext/v8/upstream/scons/engine/SCons/Tool/suncc.py +58 -0
  555. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf77.py +63 -0
  556. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf90.py +64 -0
  557. data/ext/v8/upstream/scons/engine/SCons/Tool/sunf95.py +64 -0
  558. data/ext/v8/upstream/scons/engine/SCons/Tool/sunlink.py +77 -0
  559. data/ext/v8/upstream/scons/engine/SCons/Tool/swig.py +186 -0
  560. data/ext/v8/upstream/scons/engine/SCons/Tool/tar.py +73 -0
  561. data/ext/v8/upstream/scons/engine/SCons/Tool/tex.py +805 -0
  562. data/ext/v8/upstream/scons/engine/SCons/Tool/textfile.py +175 -0
  563. data/ext/v8/upstream/scons/engine/SCons/Tool/tlib.py +53 -0
  564. data/ext/v8/upstream/scons/engine/SCons/Tool/wix.py +100 -0
  565. data/ext/v8/upstream/scons/engine/SCons/Tool/yacc.py +131 -0
  566. data/ext/v8/upstream/scons/engine/SCons/Tool/zip.py +100 -0
  567. data/ext/v8/upstream/scons/engine/SCons/Util.py +1645 -0
  568. data/ext/v8/upstream/scons/engine/SCons/Variables/BoolVariable.py +91 -0
  569. data/ext/v8/upstream/scons/engine/SCons/Variables/EnumVariable.py +107 -0
  570. data/ext/v8/upstream/scons/engine/SCons/Variables/ListVariable.py +139 -0
  571. data/ext/v8/upstream/scons/engine/SCons/Variables/PackageVariable.py +109 -0
  572. data/ext/v8/upstream/scons/engine/SCons/Variables/PathVariable.py +147 -0
  573. data/ext/v8/upstream/scons/engine/SCons/Variables/__init__.py +317 -0
  574. data/ext/v8/upstream/scons/engine/SCons/Warnings.py +228 -0
  575. data/ext/v8/upstream/scons/engine/SCons/__init__.py +49 -0
  576. data/ext/v8/upstream/scons/engine/SCons/compat/__init__.py +302 -0
  577. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_UserString.py +98 -0
  578. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_hashlib.py +91 -0
  579. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_itertools.py +124 -0
  580. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_optparse.py +1725 -0
  581. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets.py +583 -0
  582. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_sets15.py +176 -0
  583. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_shlex.py +325 -0
  584. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_subprocess.py +1296 -0
  585. data/ext/v8/upstream/scons/engine/SCons/compat/_scons_textwrap.py +382 -0
  586. data/ext/v8/upstream/scons/engine/SCons/compat/builtins.py +187 -0
  587. data/ext/v8/upstream/scons/engine/SCons/cpp.py +598 -0
  588. data/ext/v8/upstream/scons/engine/SCons/dblite.py +248 -0
  589. data/ext/v8/upstream/scons/engine/SCons/exitfuncs.py +77 -0
  590. data/ext/v8/upstream/scons/os_spawnv_fix.diff +83 -0
  591. data/ext/v8/upstream/scons/scons-time.1 +1017 -0
  592. data/ext/v8/upstream/scons/scons.1 +15179 -0
  593. data/ext/v8/upstream/scons/sconsign.1 +208 -0
  594. data/ext/v8/upstream/scons/script/scons +184 -0
  595. data/ext/v8/upstream/scons/script/scons-time +1529 -0
  596. data/ext/v8/upstream/scons/script/scons.bat +31 -0
  597. data/ext/v8/upstream/scons/script/sconsign +508 -0
  598. data/ext/v8/upstream/scons/setup.cfg +6 -0
  599. data/ext/v8/upstream/scons/setup.py +427 -0
  600. data/ext/v8/v8.cpp +89 -0
  601. data/ext/v8/v8_cxt.cpp +92 -0
  602. data/ext/v8/v8_cxt.h +20 -0
  603. data/ext/v8/v8_func.cpp +10 -0
  604. data/ext/v8/v8_func.h +11 -0
  605. data/ext/v8/v8_msg.cpp +54 -0
  606. data/ext/v8/v8_msg.h +18 -0
  607. data/ext/v8/v8_obj.cpp +52 -0
  608. data/ext/v8/v8_obj.h +13 -0
  609. data/ext/v8/v8_ref.cpp +26 -0
  610. data/ext/v8/v8_ref.h +31 -0
  611. data/ext/v8/v8_script.cpp +20 -0
  612. data/ext/v8/v8_script.h +8 -0
  613. data/ext/v8/v8_standalone.cpp +69 -0
  614. data/ext/v8/v8_standalone.h +31 -0
  615. data/ext/v8/v8_str.cpp +17 -0
  616. data/ext/v8/v8_str.h +9 -0
  617. data/ext/v8/v8_template.cpp +53 -0
  618. data/ext/v8/v8_template.h +13 -0
  619. data/lib/v8.rb +10 -0
  620. data/lib/v8/context.rb +101 -0
  621. data/lib/v8/object.rb +38 -0
  622. data/lib/v8/to.rb +33 -0
  623. data/lib/v8/v8.so +0 -0
  624. data/script/console +10 -0
  625. data/script/destroy +14 -0
  626. data/script/generate +14 -0
  627. data/spec/ext/cxt_spec.rb +25 -0
  628. data/spec/ext/obj_spec.rb +13 -0
  629. data/spec/redjs/jsapi_spec.rb +405 -0
  630. data/spec/redjs/tap.rb +8 -0
  631. data/spec/redjs_helper.rb +3 -0
  632. data/spec/spec.opts +1 -0
  633. data/spec/spec_helper.rb +14 -0
  634. data/spec/v8/to_spec.rb +15 -0
  635. data/tasks/rspec.rake +21 -0
  636. data/therubyracer.gemspec +680 -0
  637. metadata +697 -0
@@ -0,0 +1,1370 @@
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())