libv8 3.3.10.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (700) hide show
  1. data/.gitignore +8 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +4 -0
  4. data/README.md +44 -0
  5. data/Rakefile +73 -0
  6. data/ext/libv8/extconf.rb +9 -0
  7. data/lib/libv8.rb +15 -0
  8. data/lib/libv8/Makefile +38 -0
  9. data/lib/libv8/detect_cpu.rb +27 -0
  10. data/lib/libv8/fpic-on-linux-amd64.patch +13 -0
  11. data/lib/libv8/scons/CHANGES.txt +5334 -0
  12. data/lib/libv8/scons/LICENSE.txt +20 -0
  13. data/lib/libv8/scons/MANIFEST +199 -0
  14. data/lib/libv8/scons/PKG-INFO +13 -0
  15. data/lib/libv8/scons/README.txt +243 -0
  16. data/lib/libv8/scons/RELEASE.txt +98 -0
  17. data/lib/libv8/scons/engine/SCons/Action.py +1241 -0
  18. data/lib/libv8/scons/engine/SCons/Builder.py +877 -0
  19. data/lib/libv8/scons/engine/SCons/CacheDir.py +216 -0
  20. data/lib/libv8/scons/engine/SCons/Conftest.py +793 -0
  21. data/lib/libv8/scons/engine/SCons/Debug.py +220 -0
  22. data/lib/libv8/scons/engine/SCons/Defaults.py +480 -0
  23. data/lib/libv8/scons/engine/SCons/Environment.py +2318 -0
  24. data/lib/libv8/scons/engine/SCons/Errors.py +205 -0
  25. data/lib/libv8/scons/engine/SCons/Executor.py +633 -0
  26. data/lib/libv8/scons/engine/SCons/Job.py +435 -0
  27. data/lib/libv8/scons/engine/SCons/Memoize.py +244 -0
  28. data/lib/libv8/scons/engine/SCons/Node/Alias.py +152 -0
  29. data/lib/libv8/scons/engine/SCons/Node/FS.py +3142 -0
  30. data/lib/libv8/scons/engine/SCons/Node/Python.py +128 -0
  31. data/lib/libv8/scons/engine/SCons/Node/__init__.py +1328 -0
  32. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +50 -0
  33. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +50 -0
  34. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +50 -0
  35. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +50 -0
  36. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +76 -0
  37. data/lib/libv8/scons/engine/SCons/Options/__init__.py +67 -0
  38. data/lib/libv8/scons/engine/SCons/PathList.py +231 -0
  39. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +241 -0
  40. data/lib/libv8/scons/engine/SCons/Platform/aix.py +69 -0
  41. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +55 -0
  42. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +46 -0
  43. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +46 -0
  44. data/lib/libv8/scons/engine/SCons/Platform/irix.py +44 -0
  45. data/lib/libv8/scons/engine/SCons/Platform/os2.py +58 -0
  46. data/lib/libv8/scons/engine/SCons/Platform/posix.py +263 -0
  47. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +50 -0
  48. data/lib/libv8/scons/engine/SCons/Platform/win32.py +385 -0
  49. data/lib/libv8/scons/engine/SCons/SConf.py +1030 -0
  50. data/lib/libv8/scons/engine/SCons/SConsign.py +383 -0
  51. data/lib/libv8/scons/engine/SCons/Scanner/C.py +132 -0
  52. data/lib/libv8/scons/engine/SCons/Scanner/D.py +73 -0
  53. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +109 -0
  54. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +316 -0
  55. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +48 -0
  56. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +384 -0
  57. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +101 -0
  58. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +55 -0
  59. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +413 -0
  60. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +384 -0
  61. data/lib/libv8/scons/engine/SCons/Script/Main.py +1334 -0
  62. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +939 -0
  63. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +640 -0
  64. data/lib/libv8/scons/engine/SCons/Script/__init__.py +412 -0
  65. data/lib/libv8/scons/engine/SCons/Sig.py +63 -0
  66. data/lib/libv8/scons/engine/SCons/Subst.py +904 -0
  67. data/lib/libv8/scons/engine/SCons/Taskmaster.py +1017 -0
  68. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +61 -0
  69. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +67 -0
  70. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +73 -0
  71. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +246 -0
  72. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +323 -0
  73. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  74. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  75. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +240 -0
  76. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +82 -0
  77. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +391 -0
  78. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +456 -0
  79. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +499 -0
  80. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +103 -0
  81. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +137 -0
  82. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +64 -0
  83. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +64 -0
  84. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +71 -0
  85. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +681 -0
  86. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +82 -0
  87. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +74 -0
  88. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +80 -0
  89. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +76 -0
  90. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +71 -0
  91. data/lib/libv8/scons/engine/SCons/Tool/ar.py +63 -0
  92. data/lib/libv8/scons/engine/SCons/Tool/as.py +78 -0
  93. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +81 -0
  94. data/lib/libv8/scons/engine/SCons/Tool/c++.py +99 -0
  95. data/lib/libv8/scons/engine/SCons/Tool/cc.py +102 -0
  96. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +58 -0
  97. data/lib/libv8/scons/engine/SCons/Tool/default.py +50 -0
  98. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +223 -0
  99. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +64 -0
  100. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +124 -0
  101. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +94 -0
  102. data/lib/libv8/scons/engine/SCons/Tool/f77.py +62 -0
  103. data/lib/libv8/scons/engine/SCons/Tool/f90.py +62 -0
  104. data/lib/libv8/scons/engine/SCons/Tool/f95.py +63 -0
  105. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +98 -0
  106. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +62 -0
  107. data/lib/libv8/scons/engine/SCons/Tool/g++.py +90 -0
  108. data/lib/libv8/scons/engine/SCons/Tool/g77.py +73 -0
  109. data/lib/libv8/scons/engine/SCons/Tool/gas.py +53 -0
  110. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +80 -0
  111. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +64 -0
  112. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +63 -0
  113. data/lib/libv8/scons/engine/SCons/Tool/gs.py +81 -0
  114. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +84 -0
  115. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +53 -0
  116. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +77 -0
  117. data/lib/libv8/scons/engine/SCons/Tool/icc.py +59 -0
  118. data/lib/libv8/scons/engine/SCons/Tool/icl.py +52 -0
  119. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +72 -0
  120. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +88 -0
  121. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +59 -0
  122. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +60 -0
  123. data/lib/libv8/scons/engine/SCons/Tool/install.py +229 -0
  124. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +482 -0
  125. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +67 -0
  126. data/lib/libv8/scons/engine/SCons/Tool/jar.py +110 -0
  127. data/lib/libv8/scons/engine/SCons/Tool/javac.py +230 -0
  128. data/lib/libv8/scons/engine/SCons/Tool/javah.py +137 -0
  129. data/lib/libv8/scons/engine/SCons/Tool/latex.py +79 -0
  130. data/lib/libv8/scons/engine/SCons/Tool/lex.py +97 -0
  131. data/lib/libv8/scons/engine/SCons/Tool/link.py +121 -0
  132. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +112 -0
  133. data/lib/libv8/scons/engine/SCons/Tool/m4.py +63 -0
  134. data/lib/libv8/scons/engine/SCons/Tool/masm.py +77 -0
  135. data/lib/libv8/scons/engine/SCons/Tool/midl.py +88 -0
  136. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +158 -0
  137. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +64 -0
  138. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +266 -0
  139. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +50 -0
  140. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +268 -0
  141. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +1388 -0
  142. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +207 -0
  143. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +107 -0
  144. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +72 -0
  145. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +312 -0
  146. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  147. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +527 -0
  148. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +365 -0
  149. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  150. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  151. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  152. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  153. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  154. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  155. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +78 -0
  156. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +83 -0
  157. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +108 -0
  158. data/lib/libv8/scons/engine/SCons/Tool/qt.py +336 -0
  159. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +120 -0
  160. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +70 -0
  161. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +132 -0
  162. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +68 -0
  163. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +58 -0
  164. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +53 -0
  165. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +63 -0
  166. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +67 -0
  167. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +142 -0
  168. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +58 -0
  169. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +63 -0
  170. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +64 -0
  171. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +64 -0
  172. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +77 -0
  173. data/lib/libv8/scons/engine/SCons/Tool/swig.py +182 -0
  174. data/lib/libv8/scons/engine/SCons/Tool/tar.py +73 -0
  175. data/lib/libv8/scons/engine/SCons/Tool/tex.py +813 -0
  176. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +175 -0
  177. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +53 -0
  178. data/lib/libv8/scons/engine/SCons/Tool/wix.py +99 -0
  179. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +130 -0
  180. data/lib/libv8/scons/engine/SCons/Tool/zip.py +99 -0
  181. data/lib/libv8/scons/engine/SCons/Util.py +1492 -0
  182. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +89 -0
  183. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +103 -0
  184. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +135 -0
  185. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +106 -0
  186. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +147 -0
  187. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +312 -0
  188. data/lib/libv8/scons/engine/SCons/Warnings.py +246 -0
  189. data/lib/libv8/scons/engine/SCons/__init__.py +49 -0
  190. data/lib/libv8/scons/engine/SCons/compat/__init__.py +237 -0
  191. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +150 -0
  192. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +45 -0
  193. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +45 -0
  194. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +76 -0
  195. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +45 -0
  196. data/lib/libv8/scons/engine/SCons/compat/_scons_sets.py +563 -0
  197. data/lib/libv8/scons/engine/SCons/compat/_scons_subprocess.py +1281 -0
  198. data/lib/libv8/scons/engine/SCons/cpp.py +589 -0
  199. data/lib/libv8/scons/engine/SCons/dblite.py +251 -0
  200. data/lib/libv8/scons/engine/SCons/exitfuncs.py +77 -0
  201. data/lib/libv8/scons/os_spawnv_fix.diff +83 -0
  202. data/lib/libv8/scons/scons-time.1 +1017 -0
  203. data/lib/libv8/scons/scons.1 +15219 -0
  204. data/lib/libv8/scons/sconsign.1 +208 -0
  205. data/lib/libv8/scons/script/scons +196 -0
  206. data/lib/libv8/scons/script/scons-time +1544 -0
  207. data/lib/libv8/scons/script/scons.bat +31 -0
  208. data/lib/libv8/scons/script/sconsign +513 -0
  209. data/lib/libv8/scons/setup.cfg +6 -0
  210. data/lib/libv8/scons/setup.py +425 -0
  211. data/lib/libv8/v8/.gitignore +35 -0
  212. data/lib/libv8/v8/AUTHORS +44 -0
  213. data/lib/libv8/v8/ChangeLog +2839 -0
  214. data/lib/libv8/v8/LICENSE +52 -0
  215. data/lib/libv8/v8/LICENSE.strongtalk +29 -0
  216. data/lib/libv8/v8/LICENSE.v8 +26 -0
  217. data/lib/libv8/v8/LICENSE.valgrind +45 -0
  218. data/lib/libv8/v8/SConstruct +1478 -0
  219. data/lib/libv8/v8/build/README.txt +49 -0
  220. data/lib/libv8/v8/build/all.gyp +18 -0
  221. data/lib/libv8/v8/build/armu.gypi +32 -0
  222. data/lib/libv8/v8/build/common.gypi +144 -0
  223. data/lib/libv8/v8/build/gyp_v8 +145 -0
  224. data/lib/libv8/v8/include/v8-debug.h +395 -0
  225. data/lib/libv8/v8/include/v8-preparser.h +117 -0
  226. data/lib/libv8/v8/include/v8-profiler.h +505 -0
  227. data/lib/libv8/v8/include/v8-testing.h +104 -0
  228. data/lib/libv8/v8/include/v8.h +4124 -0
  229. data/lib/libv8/v8/include/v8stdint.h +53 -0
  230. data/lib/libv8/v8/preparser/SConscript +38 -0
  231. data/lib/libv8/v8/preparser/preparser-process.cc +379 -0
  232. data/lib/libv8/v8/src/SConscript +368 -0
  233. data/lib/libv8/v8/src/accessors.cc +767 -0
  234. data/lib/libv8/v8/src/accessors.h +123 -0
  235. data/lib/libv8/v8/src/allocation-inl.h +49 -0
  236. data/lib/libv8/v8/src/allocation.cc +122 -0
  237. data/lib/libv8/v8/src/allocation.h +143 -0
  238. data/lib/libv8/v8/src/api.cc +5845 -0
  239. data/lib/libv8/v8/src/api.h +574 -0
  240. data/lib/libv8/v8/src/apinatives.js +110 -0
  241. data/lib/libv8/v8/src/apiutils.h +73 -0
  242. data/lib/libv8/v8/src/arguments.h +118 -0
  243. data/lib/libv8/v8/src/arm/assembler-arm-inl.h +353 -0
  244. data/lib/libv8/v8/src/arm/assembler-arm.cc +2661 -0
  245. data/lib/libv8/v8/src/arm/assembler-arm.h +1375 -0
  246. data/lib/libv8/v8/src/arm/builtins-arm.cc +1658 -0
  247. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +6398 -0
  248. data/lib/libv8/v8/src/arm/code-stubs-arm.h +673 -0
  249. data/lib/libv8/v8/src/arm/codegen-arm.cc +52 -0
  250. data/lib/libv8/v8/src/arm/codegen-arm.h +91 -0
  251. data/lib/libv8/v8/src/arm/constants-arm.cc +152 -0
  252. data/lib/libv8/v8/src/arm/constants-arm.h +775 -0
  253. data/lib/libv8/v8/src/arm/cpu-arm.cc +120 -0
  254. data/lib/libv8/v8/src/arm/debug-arm.cc +317 -0
  255. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +754 -0
  256. data/lib/libv8/v8/src/arm/disasm-arm.cc +1506 -0
  257. data/lib/libv8/v8/src/arm/frames-arm.cc +45 -0
  258. data/lib/libv8/v8/src/arm/frames-arm.h +168 -0
  259. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +4375 -0
  260. data/lib/libv8/v8/src/arm/ic-arm.cc +1562 -0
  261. data/lib/libv8/v8/src/arm/lithium-arm.cc +2206 -0
  262. data/lib/libv8/v8/src/arm/lithium-arm.h +2348 -0
  263. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +4526 -0
  264. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +403 -0
  265. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  266. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.h +84 -0
  267. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +3163 -0
  268. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +1126 -0
  269. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  270. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  271. data/lib/libv8/v8/src/arm/simulator-arm.cc +3424 -0
  272. data/lib/libv8/v8/src/arm/simulator-arm.h +431 -0
  273. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +4243 -0
  274. data/lib/libv8/v8/src/array.js +1366 -0
  275. data/lib/libv8/v8/src/assembler.cc +1207 -0
  276. data/lib/libv8/v8/src/assembler.h +858 -0
  277. data/lib/libv8/v8/src/ast-inl.h +112 -0
  278. data/lib/libv8/v8/src/ast.cc +1146 -0
  279. data/lib/libv8/v8/src/ast.h +2188 -0
  280. data/lib/libv8/v8/src/atomicops.h +167 -0
  281. data/lib/libv8/v8/src/atomicops_internals_arm_gcc.h +145 -0
  282. data/lib/libv8/v8/src/atomicops_internals_mips_gcc.h +169 -0
  283. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.cc +133 -0
  284. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.h +287 -0
  285. data/lib/libv8/v8/src/atomicops_internals_x86_macosx.h +301 -0
  286. data/lib/libv8/v8/src/atomicops_internals_x86_msvc.h +203 -0
  287. data/lib/libv8/v8/src/bignum-dtoa.cc +655 -0
  288. data/lib/libv8/v8/src/bignum-dtoa.h +81 -0
  289. data/lib/libv8/v8/src/bignum.cc +768 -0
  290. data/lib/libv8/v8/src/bignum.h +140 -0
  291. data/lib/libv8/v8/src/bootstrapper.cc +2184 -0
  292. data/lib/libv8/v8/src/bootstrapper.h +188 -0
  293. data/lib/libv8/v8/src/builtins.cc +1707 -0
  294. data/lib/libv8/v8/src/builtins.h +371 -0
  295. data/lib/libv8/v8/src/bytecodes-irregexp.h +105 -0
  296. data/lib/libv8/v8/src/cached-powers.cc +177 -0
  297. data/lib/libv8/v8/src/cached-powers.h +65 -0
  298. data/lib/libv8/v8/src/char-predicates-inl.h +94 -0
  299. data/lib/libv8/v8/src/char-predicates.h +67 -0
  300. data/lib/libv8/v8/src/checks.cc +110 -0
  301. data/lib/libv8/v8/src/checks.h +296 -0
  302. data/lib/libv8/v8/src/circular-queue-inl.h +53 -0
  303. data/lib/libv8/v8/src/circular-queue.cc +122 -0
  304. data/lib/libv8/v8/src/circular-queue.h +103 -0
  305. data/lib/libv8/v8/src/code-stubs.cc +267 -0
  306. data/lib/libv8/v8/src/code-stubs.h +1011 -0
  307. data/lib/libv8/v8/src/code.h +70 -0
  308. data/lib/libv8/v8/src/codegen.cc +231 -0
  309. data/lib/libv8/v8/src/codegen.h +84 -0
  310. data/lib/libv8/v8/src/compilation-cache.cc +540 -0
  311. data/lib/libv8/v8/src/compilation-cache.h +287 -0
  312. data/lib/libv8/v8/src/compiler.cc +786 -0
  313. data/lib/libv8/v8/src/compiler.h +312 -0
  314. data/lib/libv8/v8/src/contexts.cc +347 -0
  315. data/lib/libv8/v8/src/contexts.h +391 -0
  316. data/lib/libv8/v8/src/conversions-inl.h +106 -0
  317. data/lib/libv8/v8/src/conversions.cc +1131 -0
  318. data/lib/libv8/v8/src/conversions.h +135 -0
  319. data/lib/libv8/v8/src/counters.cc +93 -0
  320. data/lib/libv8/v8/src/counters.h +254 -0
  321. data/lib/libv8/v8/src/cpu-profiler-inl.h +101 -0
  322. data/lib/libv8/v8/src/cpu-profiler.cc +609 -0
  323. data/lib/libv8/v8/src/cpu-profiler.h +302 -0
  324. data/lib/libv8/v8/src/cpu.h +69 -0
  325. data/lib/libv8/v8/src/d8-debug.cc +367 -0
  326. data/lib/libv8/v8/src/d8-debug.h +158 -0
  327. data/lib/libv8/v8/src/d8-posix.cc +695 -0
  328. data/lib/libv8/v8/src/d8-readline.cc +130 -0
  329. data/lib/libv8/v8/src/d8-windows.cc +42 -0
  330. data/lib/libv8/v8/src/d8.cc +803 -0
  331. data/lib/libv8/v8/src/d8.gyp +91 -0
  332. data/lib/libv8/v8/src/d8.h +235 -0
  333. data/lib/libv8/v8/src/d8.js +2798 -0
  334. data/lib/libv8/v8/src/data-flow.cc +66 -0
  335. data/lib/libv8/v8/src/data-flow.h +205 -0
  336. data/lib/libv8/v8/src/date.js +1103 -0
  337. data/lib/libv8/v8/src/dateparser-inl.h +127 -0
  338. data/lib/libv8/v8/src/dateparser.cc +178 -0
  339. data/lib/libv8/v8/src/dateparser.h +266 -0
  340. data/lib/libv8/v8/src/debug-agent.cc +447 -0
  341. data/lib/libv8/v8/src/debug-agent.h +129 -0
  342. data/lib/libv8/v8/src/debug-debugger.js +2569 -0
  343. data/lib/libv8/v8/src/debug.cc +3165 -0
  344. data/lib/libv8/v8/src/debug.h +1057 -0
  345. data/lib/libv8/v8/src/deoptimizer.cc +1256 -0
  346. data/lib/libv8/v8/src/deoptimizer.h +602 -0
  347. data/lib/libv8/v8/src/disasm.h +80 -0
  348. data/lib/libv8/v8/src/disassembler.cc +343 -0
  349. data/lib/libv8/v8/src/disassembler.h +58 -0
  350. data/lib/libv8/v8/src/diy-fp.cc +58 -0
  351. data/lib/libv8/v8/src/diy-fp.h +117 -0
  352. data/lib/libv8/v8/src/double.h +238 -0
  353. data/lib/libv8/v8/src/dtoa.cc +103 -0
  354. data/lib/libv8/v8/src/dtoa.h +85 -0
  355. data/lib/libv8/v8/src/execution.cc +849 -0
  356. data/lib/libv8/v8/src/execution.h +297 -0
  357. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +250 -0
  358. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +89 -0
  359. data/lib/libv8/v8/src/extensions/experimental/collator.cc +218 -0
  360. data/lib/libv8/v8/src/extensions/experimental/collator.h +69 -0
  361. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +94 -0
  362. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +78 -0
  363. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +54 -0
  364. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +112 -0
  365. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +60 -0
  366. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +43 -0
  367. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +49 -0
  368. data/lib/libv8/v8/src/extensions/experimental/i18n.js +180 -0
  369. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +251 -0
  370. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +95 -0
  371. data/lib/libv8/v8/src/extensions/externalize-string-extension.cc +141 -0
  372. data/lib/libv8/v8/src/extensions/externalize-string-extension.h +50 -0
  373. data/lib/libv8/v8/src/extensions/gc-extension.cc +58 -0
  374. data/lib/libv8/v8/src/extensions/gc-extension.h +49 -0
  375. data/lib/libv8/v8/src/factory.cc +1222 -0
  376. data/lib/libv8/v8/src/factory.h +442 -0
  377. data/lib/libv8/v8/src/fast-dtoa.cc +736 -0
  378. data/lib/libv8/v8/src/fast-dtoa.h +83 -0
  379. data/lib/libv8/v8/src/fixed-dtoa.cc +405 -0
  380. data/lib/libv8/v8/src/fixed-dtoa.h +55 -0
  381. data/lib/libv8/v8/src/flag-definitions.h +560 -0
  382. data/lib/libv8/v8/src/flags.cc +551 -0
  383. data/lib/libv8/v8/src/flags.h +79 -0
  384. data/lib/libv8/v8/src/frames-inl.h +247 -0
  385. data/lib/libv8/v8/src/frames.cc +1243 -0
  386. data/lib/libv8/v8/src/frames.h +870 -0
  387. data/lib/libv8/v8/src/full-codegen.cc +1374 -0
  388. data/lib/libv8/v8/src/full-codegen.h +771 -0
  389. data/lib/libv8/v8/src/func-name-inferrer.cc +92 -0
  390. data/lib/libv8/v8/src/func-name-inferrer.h +111 -0
  391. data/lib/libv8/v8/src/gdb-jit.cc +1555 -0
  392. data/lib/libv8/v8/src/gdb-jit.h +143 -0
  393. data/lib/libv8/v8/src/global-handles.cc +665 -0
  394. data/lib/libv8/v8/src/global-handles.h +284 -0
  395. data/lib/libv8/v8/src/globals.h +325 -0
  396. data/lib/libv8/v8/src/handles-inl.h +177 -0
  397. data/lib/libv8/v8/src/handles.cc +987 -0
  398. data/lib/libv8/v8/src/handles.h +382 -0
  399. data/lib/libv8/v8/src/hashmap.cc +230 -0
  400. data/lib/libv8/v8/src/hashmap.h +123 -0
  401. data/lib/libv8/v8/src/heap-inl.h +704 -0
  402. data/lib/libv8/v8/src/heap-profiler.cc +1173 -0
  403. data/lib/libv8/v8/src/heap-profiler.h +397 -0
  404. data/lib/libv8/v8/src/heap.cc +5930 -0
  405. data/lib/libv8/v8/src/heap.h +2268 -0
  406. data/lib/libv8/v8/src/hydrogen-instructions.cc +1769 -0
  407. data/lib/libv8/v8/src/hydrogen-instructions.h +3971 -0
  408. data/lib/libv8/v8/src/hydrogen.cc +6239 -0
  409. data/lib/libv8/v8/src/hydrogen.h +1202 -0
  410. data/lib/libv8/v8/src/ia32/assembler-ia32-inl.h +446 -0
  411. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +2487 -0
  412. data/lib/libv8/v8/src/ia32/assembler-ia32.h +1144 -0
  413. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +1621 -0
  414. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +6198 -0
  415. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +517 -0
  416. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +265 -0
  417. data/lib/libv8/v8/src/ia32/codegen-ia32.h +79 -0
  418. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +88 -0
  419. data/lib/libv8/v8/src/ia32/debug-ia32.cc +312 -0
  420. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  421. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +1628 -0
  422. data/lib/libv8/v8/src/ia32/frames-ia32.cc +45 -0
  423. data/lib/libv8/v8/src/ia32/frames-ia32.h +142 -0
  424. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +4338 -0
  425. data/lib/libv8/v8/src/ia32/ic-ia32.cc +1597 -0
  426. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +4461 -0
  427. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +375 -0
  428. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +475 -0
  429. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.h +110 -0
  430. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +2261 -0
  431. data/lib/libv8/v8/src/ia32/lithium-ia32.h +2396 -0
  432. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +2136 -0
  433. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +775 -0
  434. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +1263 -0
  435. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  436. data/lib/libv8/v8/src/ia32/simulator-ia32.cc +30 -0
  437. data/lib/libv8/v8/src/ia32/simulator-ia32.h +74 -0
  438. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +3847 -0
  439. data/lib/libv8/v8/src/ic-inl.h +130 -0
  440. data/lib/libv8/v8/src/ic.cc +2577 -0
  441. data/lib/libv8/v8/src/ic.h +736 -0
  442. data/lib/libv8/v8/src/inspector.cc +63 -0
  443. data/lib/libv8/v8/src/inspector.h +62 -0
  444. data/lib/libv8/v8/src/interpreter-irregexp.cc +659 -0
  445. data/lib/libv8/v8/src/interpreter-irregexp.h +49 -0
  446. data/lib/libv8/v8/src/isolate-inl.h +50 -0
  447. data/lib/libv8/v8/src/isolate.cc +1869 -0
  448. data/lib/libv8/v8/src/isolate.h +1382 -0
  449. data/lib/libv8/v8/src/json-parser.cc +504 -0
  450. data/lib/libv8/v8/src/json-parser.h +161 -0
  451. data/lib/libv8/v8/src/json.js +342 -0
  452. data/lib/libv8/v8/src/jsregexp.cc +5385 -0
  453. data/lib/libv8/v8/src/jsregexp.h +1492 -0
  454. data/lib/libv8/v8/src/list-inl.h +212 -0
  455. data/lib/libv8/v8/src/list.h +174 -0
  456. data/lib/libv8/v8/src/lithium-allocator-inl.h +142 -0
  457. data/lib/libv8/v8/src/lithium-allocator.cc +2123 -0
  458. data/lib/libv8/v8/src/lithium-allocator.h +630 -0
  459. data/lib/libv8/v8/src/lithium.cc +190 -0
  460. data/lib/libv8/v8/src/lithium.h +597 -0
  461. data/lib/libv8/v8/src/liveedit-debugger.js +1082 -0
  462. data/lib/libv8/v8/src/liveedit.cc +1691 -0
  463. data/lib/libv8/v8/src/liveedit.h +180 -0
  464. data/lib/libv8/v8/src/liveobjectlist-inl.h +126 -0
  465. data/lib/libv8/v8/src/liveobjectlist.cc +2589 -0
  466. data/lib/libv8/v8/src/liveobjectlist.h +322 -0
  467. data/lib/libv8/v8/src/log-inl.h +59 -0
  468. data/lib/libv8/v8/src/log-utils.cc +428 -0
  469. data/lib/libv8/v8/src/log-utils.h +231 -0
  470. data/lib/libv8/v8/src/log.cc +1993 -0
  471. data/lib/libv8/v8/src/log.h +476 -0
  472. data/lib/libv8/v8/src/macro-assembler.h +120 -0
  473. data/lib/libv8/v8/src/macros.py +178 -0
  474. data/lib/libv8/v8/src/mark-compact.cc +3143 -0
  475. data/lib/libv8/v8/src/mark-compact.h +506 -0
  476. data/lib/libv8/v8/src/math.js +264 -0
  477. data/lib/libv8/v8/src/messages.cc +179 -0
  478. data/lib/libv8/v8/src/messages.h +113 -0
  479. data/lib/libv8/v8/src/messages.js +1096 -0
  480. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +312 -0
  481. data/lib/libv8/v8/src/mips/assembler-mips.cc +1960 -0
  482. data/lib/libv8/v8/src/mips/assembler-mips.h +1138 -0
  483. data/lib/libv8/v8/src/mips/builtins-mips.cc +1628 -0
  484. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +6656 -0
  485. data/lib/libv8/v8/src/mips/code-stubs-mips.h +682 -0
  486. data/lib/libv8/v8/src/mips/codegen-mips.cc +52 -0
  487. data/lib/libv8/v8/src/mips/codegen-mips.h +98 -0
  488. data/lib/libv8/v8/src/mips/constants-mips.cc +352 -0
  489. data/lib/libv8/v8/src/mips/constants-mips.h +739 -0
  490. data/lib/libv8/v8/src/mips/cpu-mips.cc +96 -0
  491. data/lib/libv8/v8/src/mips/debug-mips.cc +308 -0
  492. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +91 -0
  493. data/lib/libv8/v8/src/mips/disasm-mips.cc +1050 -0
  494. data/lib/libv8/v8/src/mips/frames-mips.cc +47 -0
  495. data/lib/libv8/v8/src/mips/frames-mips.h +219 -0
  496. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +4388 -0
  497. data/lib/libv8/v8/src/mips/ic-mips.cc +1580 -0
  498. data/lib/libv8/v8/src/mips/lithium-codegen-mips.h +65 -0
  499. data/lib/libv8/v8/src/mips/lithium-mips.h +307 -0
  500. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +4056 -0
  501. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +1214 -0
  502. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +1251 -0
  503. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +252 -0
  504. data/lib/libv8/v8/src/mips/simulator-mips.cc +2621 -0
  505. data/lib/libv8/v8/src/mips/simulator-mips.h +401 -0
  506. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +4285 -0
  507. data/lib/libv8/v8/src/mirror-debugger.js +2382 -0
  508. data/lib/libv8/v8/src/mksnapshot.cc +328 -0
  509. data/lib/libv8/v8/src/natives.h +64 -0
  510. data/lib/libv8/v8/src/objects-debug.cc +738 -0
  511. data/lib/libv8/v8/src/objects-inl.h +4323 -0
  512. data/lib/libv8/v8/src/objects-printer.cc +829 -0
  513. data/lib/libv8/v8/src/objects-visiting.cc +148 -0
  514. data/lib/libv8/v8/src/objects-visiting.h +424 -0
  515. data/lib/libv8/v8/src/objects.cc +10585 -0
  516. data/lib/libv8/v8/src/objects.h +6838 -0
  517. data/lib/libv8/v8/src/parser.cc +4997 -0
  518. data/lib/libv8/v8/src/parser.h +765 -0
  519. data/lib/libv8/v8/src/platform-cygwin.cc +779 -0
  520. data/lib/libv8/v8/src/platform-freebsd.cc +826 -0
  521. data/lib/libv8/v8/src/platform-linux.cc +1149 -0
  522. data/lib/libv8/v8/src/platform-macos.cc +830 -0
  523. data/lib/libv8/v8/src/platform-nullos.cc +479 -0
  524. data/lib/libv8/v8/src/platform-openbsd.cc +640 -0
  525. data/lib/libv8/v8/src/platform-posix.cc +424 -0
  526. data/lib/libv8/v8/src/platform-solaris.cc +762 -0
  527. data/lib/libv8/v8/src/platform-tls-mac.h +62 -0
  528. data/lib/libv8/v8/src/platform-tls-win32.h +62 -0
  529. data/lib/libv8/v8/src/platform-tls.h +50 -0
  530. data/lib/libv8/v8/src/platform-win32.cc +2021 -0
  531. data/lib/libv8/v8/src/platform.h +667 -0
  532. data/lib/libv8/v8/src/preparse-data-format.h +62 -0
  533. data/lib/libv8/v8/src/preparse-data.cc +183 -0
  534. data/lib/libv8/v8/src/preparse-data.h +225 -0
  535. data/lib/libv8/v8/src/preparser-api.cc +220 -0
  536. data/lib/libv8/v8/src/preparser.cc +1450 -0
  537. data/lib/libv8/v8/src/preparser.h +493 -0
  538. data/lib/libv8/v8/src/prettyprinter.cc +1493 -0
  539. data/lib/libv8/v8/src/prettyprinter.h +223 -0
  540. data/lib/libv8/v8/src/profile-generator-inl.h +128 -0
  541. data/lib/libv8/v8/src/profile-generator.cc +3098 -0
  542. data/lib/libv8/v8/src/profile-generator.h +1126 -0
  543. data/lib/libv8/v8/src/property.cc +105 -0
  544. data/lib/libv8/v8/src/property.h +365 -0
  545. data/lib/libv8/v8/src/proxy.js +83 -0
  546. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  547. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.cc +471 -0
  548. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.h +142 -0
  549. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.cc +373 -0
  550. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.h +104 -0
  551. data/lib/libv8/v8/src/regexp-macro-assembler.cc +267 -0
  552. data/lib/libv8/v8/src/regexp-macro-assembler.h +243 -0
  553. data/lib/libv8/v8/src/regexp-stack.cc +111 -0
  554. data/lib/libv8/v8/src/regexp-stack.h +147 -0
  555. data/lib/libv8/v8/src/regexp.js +483 -0
  556. data/lib/libv8/v8/src/rewriter.cc +360 -0
  557. data/lib/libv8/v8/src/rewriter.h +50 -0
  558. data/lib/libv8/v8/src/runtime-profiler.cc +489 -0
  559. data/lib/libv8/v8/src/runtime-profiler.h +201 -0
  560. data/lib/libv8/v8/src/runtime.cc +12227 -0
  561. data/lib/libv8/v8/src/runtime.h +652 -0
  562. data/lib/libv8/v8/src/runtime.js +649 -0
  563. data/lib/libv8/v8/src/safepoint-table.cc +256 -0
  564. data/lib/libv8/v8/src/safepoint-table.h +270 -0
  565. data/lib/libv8/v8/src/scanner-base.cc +952 -0
  566. data/lib/libv8/v8/src/scanner-base.h +670 -0
  567. data/lib/libv8/v8/src/scanner.cc +345 -0
  568. data/lib/libv8/v8/src/scanner.h +146 -0
  569. data/lib/libv8/v8/src/scopeinfo.cc +646 -0
  570. data/lib/libv8/v8/src/scopeinfo.h +254 -0
  571. data/lib/libv8/v8/src/scopes.cc +1150 -0
  572. data/lib/libv8/v8/src/scopes.h +507 -0
  573. data/lib/libv8/v8/src/serialize.cc +1574 -0
  574. data/lib/libv8/v8/src/serialize.h +589 -0
  575. data/lib/libv8/v8/src/shell.h +55 -0
  576. data/lib/libv8/v8/src/simulator.h +43 -0
  577. data/lib/libv8/v8/src/small-pointer-list.h +163 -0
  578. data/lib/libv8/v8/src/smart-pointer.h +109 -0
  579. data/lib/libv8/v8/src/snapshot-common.cc +83 -0
  580. data/lib/libv8/v8/src/snapshot-empty.cc +54 -0
  581. data/lib/libv8/v8/src/snapshot.h +91 -0
  582. data/lib/libv8/v8/src/spaces-inl.h +529 -0
  583. data/lib/libv8/v8/src/spaces.cc +3145 -0
  584. data/lib/libv8/v8/src/spaces.h +2369 -0
  585. data/lib/libv8/v8/src/splay-tree-inl.h +310 -0
  586. data/lib/libv8/v8/src/splay-tree.h +205 -0
  587. data/lib/libv8/v8/src/string-search.cc +41 -0
  588. data/lib/libv8/v8/src/string-search.h +568 -0
  589. data/lib/libv8/v8/src/string-stream.cc +592 -0
  590. data/lib/libv8/v8/src/string-stream.h +191 -0
  591. data/lib/libv8/v8/src/string.js +994 -0
  592. data/lib/libv8/v8/src/strtod.cc +440 -0
  593. data/lib/libv8/v8/src/strtod.h +40 -0
  594. data/lib/libv8/v8/src/stub-cache.cc +1965 -0
  595. data/lib/libv8/v8/src/stub-cache.h +924 -0
  596. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +3925 -0
  597. data/lib/libv8/v8/src/token.cc +63 -0
  598. data/lib/libv8/v8/src/token.h +288 -0
  599. data/lib/libv8/v8/src/type-info.cc +507 -0
  600. data/lib/libv8/v8/src/type-info.h +272 -0
  601. data/lib/libv8/v8/src/unbound-queue-inl.h +95 -0
  602. data/lib/libv8/v8/src/unbound-queue.h +69 -0
  603. data/lib/libv8/v8/src/unicode-inl.h +238 -0
  604. data/lib/libv8/v8/src/unicode.cc +1624 -0
  605. data/lib/libv8/v8/src/unicode.h +280 -0
  606. data/lib/libv8/v8/src/uri.js +408 -0
  607. data/lib/libv8/v8/src/utils-inl.h +48 -0
  608. data/lib/libv8/v8/src/utils.cc +371 -0
  609. data/lib/libv8/v8/src/utils.h +800 -0
  610. data/lib/libv8/v8/src/v8-counters.cc +62 -0
  611. data/lib/libv8/v8/src/v8-counters.h +314 -0
  612. data/lib/libv8/v8/src/v8.cc +213 -0
  613. data/lib/libv8/v8/src/v8.h +131 -0
  614. data/lib/libv8/v8/src/v8checks.h +64 -0
  615. data/lib/libv8/v8/src/v8dll-main.cc +44 -0
  616. data/lib/libv8/v8/src/v8globals.h +512 -0
  617. data/lib/libv8/v8/src/v8memory.h +82 -0
  618. data/lib/libv8/v8/src/v8natives.js +1310 -0
  619. data/lib/libv8/v8/src/v8preparserdll-main.cc +39 -0
  620. data/lib/libv8/v8/src/v8threads.cc +464 -0
  621. data/lib/libv8/v8/src/v8threads.h +165 -0
  622. data/lib/libv8/v8/src/v8utils.h +319 -0
  623. data/lib/libv8/v8/src/variables.cc +114 -0
  624. data/lib/libv8/v8/src/variables.h +167 -0
  625. data/lib/libv8/v8/src/version.cc +116 -0
  626. data/lib/libv8/v8/src/version.h +68 -0
  627. data/lib/libv8/v8/src/vm-state-inl.h +138 -0
  628. data/lib/libv8/v8/src/vm-state.h +71 -0
  629. data/lib/libv8/v8/src/win32-headers.h +96 -0
  630. data/lib/libv8/v8/src/x64/assembler-x64-inl.h +462 -0
  631. data/lib/libv8/v8/src/x64/assembler-x64.cc +3027 -0
  632. data/lib/libv8/v8/src/x64/assembler-x64.h +1633 -0
  633. data/lib/libv8/v8/src/x64/builtins-x64.cc +1520 -0
  634. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +5132 -0
  635. data/lib/libv8/v8/src/x64/code-stubs-x64.h +514 -0
  636. data/lib/libv8/v8/src/x64/codegen-x64.cc +146 -0
  637. data/lib/libv8/v8/src/x64/codegen-x64.h +76 -0
  638. data/lib/libv8/v8/src/x64/cpu-x64.cc +88 -0
  639. data/lib/libv8/v8/src/x64/debug-x64.cc +319 -0
  640. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +815 -0
  641. data/lib/libv8/v8/src/x64/disasm-x64.cc +1832 -0
  642. data/lib/libv8/v8/src/x64/frames-x64.cc +45 -0
  643. data/lib/libv8/v8/src/x64/frames-x64.h +130 -0
  644. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +4318 -0
  645. data/lib/libv8/v8/src/x64/ic-x64.cc +1608 -0
  646. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +4267 -0
  647. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +367 -0
  648. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.cc +320 -0
  649. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.h +74 -0
  650. data/lib/libv8/v8/src/x64/lithium-x64.cc +2202 -0
  651. data/lib/libv8/v8/src/x64/lithium-x64.h +2333 -0
  652. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +3745 -0
  653. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +1290 -0
  654. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  655. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  656. data/lib/libv8/v8/src/x64/simulator-x64.cc +27 -0
  657. data/lib/libv8/v8/src/x64/simulator-x64.h +72 -0
  658. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +3610 -0
  659. data/lib/libv8/v8/src/zone-inl.h +140 -0
  660. data/lib/libv8/v8/src/zone.cc +196 -0
  661. data/lib/libv8/v8/src/zone.h +240 -0
  662. data/lib/libv8/v8/tools/codemap.js +265 -0
  663. data/lib/libv8/v8/tools/consarray.js +93 -0
  664. data/lib/libv8/v8/tools/csvparser.js +78 -0
  665. data/lib/libv8/v8/tools/disasm.py +92 -0
  666. data/lib/libv8/v8/tools/freebsd-tick-processor +10 -0
  667. data/lib/libv8/v8/tools/gc-nvp-trace-processor.py +342 -0
  668. data/lib/libv8/v8/tools/gcmole/README +62 -0
  669. data/lib/libv8/v8/tools/gcmole/gccause.lua +60 -0
  670. data/lib/libv8/v8/tools/gcmole/gcmole.cc +1261 -0
  671. data/lib/libv8/v8/tools/gcmole/gcmole.lua +378 -0
  672. data/lib/libv8/v8/tools/generate-ten-powers.scm +286 -0
  673. data/lib/libv8/v8/tools/grokdump.py +841 -0
  674. data/lib/libv8/v8/tools/gyp/v8.gyp +995 -0
  675. data/lib/libv8/v8/tools/js2c.py +364 -0
  676. data/lib/libv8/v8/tools/jsmin.py +280 -0
  677. data/lib/libv8/v8/tools/linux-tick-processor +35 -0
  678. data/lib/libv8/v8/tools/ll_prof.py +942 -0
  679. data/lib/libv8/v8/tools/logreader.js +185 -0
  680. data/lib/libv8/v8/tools/mac-nm +18 -0
  681. data/lib/libv8/v8/tools/mac-tick-processor +6 -0
  682. data/lib/libv8/v8/tools/oom_dump/README +31 -0
  683. data/lib/libv8/v8/tools/oom_dump/SConstruct +42 -0
  684. data/lib/libv8/v8/tools/oom_dump/oom_dump.cc +288 -0
  685. data/lib/libv8/v8/tools/presubmit.py +305 -0
  686. data/lib/libv8/v8/tools/process-heap-prof.py +120 -0
  687. data/lib/libv8/v8/tools/profile.js +751 -0
  688. data/lib/libv8/v8/tools/profile_view.js +219 -0
  689. data/lib/libv8/v8/tools/run-valgrind.py +77 -0
  690. data/lib/libv8/v8/tools/splaytree.js +316 -0
  691. data/lib/libv8/v8/tools/stats-viewer.py +468 -0
  692. data/lib/libv8/v8/tools/test.py +1510 -0
  693. data/lib/libv8/v8/tools/tickprocessor-driver.js +59 -0
  694. data/lib/libv8/v8/tools/tickprocessor.js +877 -0
  695. data/lib/libv8/v8/tools/utils.py +96 -0
  696. data/lib/libv8/v8/tools/visual_studio/README.txt +12 -0
  697. data/lib/libv8/v8/tools/windows-tick-processor.bat +30 -0
  698. data/lib/libv8/version.rb +4 -0
  699. data/libv8.gemspec +31 -0
  700. metadata +800 -0
@@ -0,0 +1,98 @@
1
+ A new SCons release, 2.0.1, is now available
2
+ on the SCons download page:
3
+
4
+ http://www.scons.org/download.php
5
+
6
+ The primary purpose of this release is to remove support for Python
7
+ versions prior to 2.4 and streamline the SCons code base using more
8
+ modern python idioms.
9
+
10
+ Here is a summary of the changes since 1.3:
11
+
12
+ NEW FUNCTIONALITY
13
+
14
+ - There should be no new functionality or bug fixes in this checkpoint.
15
+
16
+ DEPRECATED FUNCTIONALITY
17
+
18
+ - All features or usages deprecated in 1.3 should have been removed.
19
+ Uses of formerly-deprecated features should get an error.
20
+
21
+ - The BuildDir() method and the build_dir option now get warnings.
22
+
23
+ - The SourceCode() function and its associated factory functions have
24
+ started their deprecation cycle and can have a warning enabled.
25
+
26
+ CHANGED/ENHANCED EXISTING FUNCTIONALITY
27
+
28
+ - Any Command() or env.Command() calls that use the following Action
29
+ factory functions will have their targets rebuilt when upgrading
30
+ from any pre-2.0 release:
31
+
32
+ Chmod()
33
+ Copy()
34
+ Delete()
35
+ Mkdir()
36
+ Move()
37
+ Touch()
38
+
39
+ (The rebuild occurs because the underlying Python class that
40
+ implements these functions has been changed to a new-style Python
41
+ class, and that changes the Python byte code and therefore the
42
+ build signature of the functions.)
43
+
44
+ FIXES
45
+
46
+ - MSVC/MSVS/SDK support has been improved. A number of issues with
47
+ determining the correct version and architecture have been resolved.
48
+
49
+ - Fix propagation from environment of VS*COMNTOOLS to resolve issues
50
+ initializing MSVC/MSVS/SDK issues.
51
+
52
+ - Fixed a case-sensitivity problem with Fortran modules.
53
+
54
+ - Fix the ability to append to default $*FLAGS values (which are
55
+ implemented as CLVar instances) in a copied construction environment
56
+ without affecting the original construction environment's value.
57
+
58
+ - Updated the TeX command strings to include a /D on Windows in
59
+ case the new directory is on a different drive letter.
60
+
61
+ - Fixed the LaTeX scanner so dependencies are found in commands that
62
+ are broken across lines with a comment or have embedded spaces.
63
+
64
+ IMPROVEMENTS
65
+
66
+ - Support for Python versions prior to 2.4 has been removed. As of
67
+ this writing, we believe that SCons will still work with Python 2.3,
68
+ but this is not guaranteed.
69
+ - Code paths that included special cases for older Python versions have
70
+ been streamlined.
71
+ - The code base has been converted to use more modern idioms. Although
72
+ we don't have any direct measurements (yet), we believe that SCons
73
+ startup time should be decreased and the overall code should run faster.
74
+
75
+ PACKAGING
76
+
77
+ - No changes.
78
+
79
+ DOCUMENTATION
80
+
81
+ - The entries for SourceCode() and its associated factory functions now
82
+ state that the functions are deprecated.
83
+
84
+ - Document the AllowSubstExceptions() function in the User's Guide.
85
+
86
+
87
+ DEVELOPMENT
88
+
89
+ - Code no longer has to be compatible with Python versions back to 1.5.2.
90
+ Although code is tested with Python 2.3 and is still believed to work,
91
+ the official new floor is Python 2.4.
92
+
93
+ Thanks to Greg Noel, Steven Knight, Dirk Baechle, William Deegan,
94
+ W. Trevor King, Joe Zuntz, Bauke Conijn, Matt Hughes, Rob Managan,
95
+ and Jim Randall for their contributions to this release.
96
+
97
+ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
98
+ src/RELEASE.txt 5023 2010/06/14 22:05:46 scons
@@ -0,0 +1,1241 @@
1
+ """SCons.Action
2
+
3
+ This encapsulates information about executing any sort of action that
4
+ can build one or more target Nodes (typically files) from one or more
5
+ source Nodes (also typically files) given a specific Environment.
6
+
7
+ The base class here is ActionBase. The base class supplies just a few
8
+ OO utility methods and some generic methods for displaying information
9
+ about an Action in response to the various commands that control printing.
10
+
11
+ A second-level base class is _ActionAction. This extends ActionBase
12
+ by providing the methods that can be used to show and perform an
13
+ action. True Action objects will subclass _ActionAction; Action
14
+ factory class objects will subclass ActionBase.
15
+
16
+ The heavy lifting is handled by subclasses for the different types of
17
+ actions we might execute:
18
+
19
+ CommandAction
20
+ CommandGeneratorAction
21
+ FunctionAction
22
+ ListAction
23
+
24
+ The subclasses supply the following public interface methods used by
25
+ other modules:
26
+
27
+ __call__()
28
+ THE public interface, "calling" an Action object executes the
29
+ command or Python function. This also takes care of printing
30
+ a pre-substitution command for debugging purposes.
31
+
32
+ get_contents()
33
+ Fetches the "contents" of an Action for signature calculation
34
+ plus the varlist. This is what gets MD5 checksummed to decide
35
+ if a target needs to be rebuilt because its action changed.
36
+
37
+ genstring()
38
+ Returns a string representation of the Action *without*
39
+ command substitution, but allows a CommandGeneratorAction to
40
+ generate the right action based on the specified target,
41
+ source and env. This is used by the Signature subsystem
42
+ (through the Executor) to obtain an (imprecise) representation
43
+ of the Action operation for informative purposes.
44
+
45
+
46
+ Subclasses also supply the following methods for internal use within
47
+ this module:
48
+
49
+ __str__()
50
+ Returns a string approximation of the Action; no variable
51
+ substitution is performed.
52
+
53
+ execute()
54
+ The internal method that really, truly, actually handles the
55
+ execution of a command or Python function. This is used so
56
+ that the __call__() methods can take care of displaying any
57
+ pre-substitution representations, and *then* execute an action
58
+ without worrying about the specific Actions involved.
59
+
60
+ get_presig()
61
+ Fetches the "contents" of a subclass for signature calculation.
62
+ The varlist is added to this to produce the Action's contents.
63
+
64
+ strfunction()
65
+ Returns a substituted string representation of the Action.
66
+ This is used by the _ActionAction.show() command to display the
67
+ command/function that will be executed to generate the target(s).
68
+
69
+ There is a related independent ActionCaller class that looks like a
70
+ regular Action, and which serves as a wrapper for arbitrary functions
71
+ that we want to let the user specify the arguments to now, but actually
72
+ execute later (when an out-of-date check determines that it's needed to
73
+ be executed, for example). Objects of this class are returned by an
74
+ ActionFactory class that provides a __call__() method as a convenient
75
+ way for wrapping up the functions.
76
+
77
+ """
78
+
79
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
80
+ #
81
+ # Permission is hereby granted, free of charge, to any person obtaining
82
+ # a copy of this software and associated documentation files (the
83
+ # "Software"), to deal in the Software without restriction, including
84
+ # without limitation the rights to use, copy, modify, merge, publish,
85
+ # distribute, sublicense, and/or sell copies of the Software, and to
86
+ # permit persons to whom the Software is furnished to do so, subject to
87
+ # the following conditions:
88
+ #
89
+ # The above copyright notice and this permission notice shall be included
90
+ # in all copies or substantial portions of the Software.
91
+ #
92
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
93
+ # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
94
+ # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
95
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
96
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
97
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
98
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
99
+
100
+ __revision__ = "src/engine/SCons/Action.py 5134 2010/08/16 23:02:40 bdeegan"
101
+
102
+ import SCons.compat
103
+
104
+ import dis
105
+ import os
106
+ # compat layer imports "cPickle" for us if it's available.
107
+ import pickle
108
+ import re
109
+ import sys
110
+ import subprocess
111
+
112
+ from SCons.Debug import logInstanceCreation
113
+ import SCons.Errors
114
+ import SCons.Executor
115
+ import SCons.Util
116
+ import SCons.Subst
117
+
118
+ # we use these a lot, so try to optimize them
119
+ is_String = SCons.Util.is_String
120
+ is_List = SCons.Util.is_List
121
+
122
+ class _null(object):
123
+ pass
124
+
125
+ print_actions = 1
126
+ execute_actions = 1
127
+ print_actions_presub = 0
128
+
129
+ def rfile(n):
130
+ try:
131
+ return n.rfile()
132
+ except AttributeError:
133
+ return n
134
+
135
+ def default_exitstatfunc(s):
136
+ return s
137
+
138
+ try:
139
+ SET_LINENO = dis.SET_LINENO
140
+ HAVE_ARGUMENT = dis.HAVE_ARGUMENT
141
+ except AttributeError:
142
+ remove_set_lineno_codes = lambda x: x
143
+ else:
144
+ def remove_set_lineno_codes(code):
145
+ result = []
146
+ n = len(code)
147
+ i = 0
148
+ while i < n:
149
+ c = code[i]
150
+ op = ord(c)
151
+ if op >= HAVE_ARGUMENT:
152
+ if op != SET_LINENO:
153
+ result.append(code[i:i+3])
154
+ i = i+3
155
+ else:
156
+ result.append(c)
157
+ i = i+1
158
+ return ''.join(result)
159
+
160
+ strip_quotes = re.compile('^[\'"](.*)[\'"]$')
161
+
162
+
163
+ def _callable_contents(obj):
164
+ """Return the signature contents of a callable Python object.
165
+ """
166
+ try:
167
+ # Test if obj is a method.
168
+ return _function_contents(obj.im_func)
169
+
170
+ except AttributeError:
171
+ try:
172
+ # Test if obj is a callable object.
173
+ return _function_contents(obj.__call__.im_func)
174
+
175
+ except AttributeError:
176
+ try:
177
+ # Test if obj is a code object.
178
+ return _code_contents(obj)
179
+
180
+ except AttributeError:
181
+ # Test if obj is a function object.
182
+ return _function_contents(obj)
183
+
184
+
185
+ def _object_contents(obj):
186
+ """Return the signature contents of any Python object.
187
+
188
+ We have to handle the case where object contains a code object
189
+ since it can be pickled directly.
190
+ """
191
+ try:
192
+ # Test if obj is a method.
193
+ return _function_contents(obj.im_func)
194
+
195
+ except AttributeError:
196
+ try:
197
+ # Test if obj is a callable object.
198
+ return _function_contents(obj.__call__.im_func)
199
+
200
+ except AttributeError:
201
+ try:
202
+ # Test if obj is a code object.
203
+ return _code_contents(obj)
204
+
205
+ except AttributeError:
206
+ try:
207
+ # Test if obj is a function object.
208
+ return _function_contents(obj)
209
+
210
+ except AttributeError:
211
+ # Should be a pickable Python object.
212
+ try:
213
+ return pickle.dumps(obj)
214
+ except (pickle.PicklingError, TypeError):
215
+ # This is weird, but it seems that nested classes
216
+ # are unpickable. The Python docs say it should
217
+ # always be a PicklingError, but some Python
218
+ # versions seem to return TypeError. Just do
219
+ # the best we can.
220
+ return str(obj)
221
+
222
+
223
+ def _code_contents(code):
224
+ """Return the signature contents of a code object.
225
+
226
+ By providing direct access to the code object of the
227
+ function, Python makes this extremely easy. Hooray!
228
+
229
+ Unfortunately, older versions of Python include line
230
+ number indications in the compiled byte code. Boo!
231
+ So we remove the line number byte codes to prevent
232
+ recompilations from moving a Python function.
233
+ """
234
+
235
+ contents = []
236
+
237
+ # The code contents depends on the number of local variables
238
+ # but not their actual names.
239
+ contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
240
+ try:
241
+ contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
242
+ except AttributeError:
243
+ # Older versions of Python do not support closures.
244
+ contents.append(",0,0")
245
+
246
+ # The code contents depends on any constants accessed by the
247
+ # function. Note that we have to call _object_contents on each
248
+ # constants because the code object of nested functions can
249
+ # show-up among the constants.
250
+ #
251
+ # Note that we also always ignore the first entry of co_consts
252
+ # which contains the function doc string. We assume that the
253
+ # function does not access its doc string.
254
+ contents.append(',(' + ','.join(map(_object_contents,code.co_consts[1:])) + ')')
255
+
256
+ # The code contents depends on the variable names used to
257
+ # accessed global variable, as changing the variable name changes
258
+ # the variable actually accessed and therefore changes the
259
+ # function result.
260
+ contents.append(',(' + ','.join(map(_object_contents,code.co_names)) + ')')
261
+
262
+
263
+ # The code contents depends on its actual code!!!
264
+ contents.append(',(' + str(remove_set_lineno_codes(code.co_code)) + ')')
265
+
266
+ return ''.join(contents)
267
+
268
+
269
+ def _function_contents(func):
270
+ """Return the signature contents of a function."""
271
+
272
+ contents = [_code_contents(func.func_code)]
273
+
274
+ # The function contents depends on the value of defaults arguments
275
+ if func.func_defaults:
276
+ contents.append(',(' + ','.join(map(_object_contents,func.func_defaults)) + ')')
277
+ else:
278
+ contents.append(',()')
279
+
280
+ # The function contents depends on the closure captured cell values.
281
+ try:
282
+ closure = func.func_closure or []
283
+ except AttributeError:
284
+ # Older versions of Python do not support closures.
285
+ closure = []
286
+
287
+ #xxx = [_object_contents(x.cell_contents) for x in closure]
288
+ try:
289
+ xxx = [_object_contents(x.cell_contents) for x in closure]
290
+ except AttributeError:
291
+ xxx = []
292
+ contents.append(',(' + ','.join(xxx) + ')')
293
+
294
+ return ''.join(contents)
295
+
296
+
297
+ def _actionAppend(act1, act2):
298
+ # This function knows how to slap two actions together.
299
+ # Mainly, it handles ListActions by concatenating into
300
+ # a single ListAction.
301
+ a1 = Action(act1)
302
+ a2 = Action(act2)
303
+ if a1 is None or a2 is None:
304
+ raise TypeError("Cannot append %s to %s" % (type(act1), type(act2)))
305
+ if isinstance(a1, ListAction):
306
+ if isinstance(a2, ListAction):
307
+ return ListAction(a1.list + a2.list)
308
+ else:
309
+ return ListAction(a1.list + [ a2 ])
310
+ else:
311
+ if isinstance(a2, ListAction):
312
+ return ListAction([ a1 ] + a2.list)
313
+ else:
314
+ return ListAction([ a1, a2 ])
315
+
316
+ def _do_create_keywords(args, kw):
317
+ """This converts any arguments after the action argument into
318
+ their equivalent keywords and adds them to the kw argument.
319
+ """
320
+ v = kw.get('varlist', ())
321
+ # prevent varlist="FOO" from being interpreted as ['F', 'O', 'O']
322
+ if is_String(v): v = (v,)
323
+ kw['varlist'] = tuple(v)
324
+ if args:
325
+ # turn positional args into equivalent keywords
326
+ cmdstrfunc = args[0]
327
+ if cmdstrfunc is None or is_String(cmdstrfunc):
328
+ kw['cmdstr'] = cmdstrfunc
329
+ elif callable(cmdstrfunc):
330
+ kw['strfunction'] = cmdstrfunc
331
+ else:
332
+ raise SCons.Errors.UserError(
333
+ 'Invalid command display variable type. '
334
+ 'You must either pass a string or a callback which '
335
+ 'accepts (target, source, env) as parameters.')
336
+ if len(args) > 1:
337
+ kw['varlist'] = args[1:] + kw['varlist']
338
+ if kw.get('strfunction', _null) is not _null \
339
+ and kw.get('cmdstr', _null) is not _null:
340
+ raise SCons.Errors.UserError(
341
+ 'Cannot have both strfunction and cmdstr args to Action()')
342
+
343
+ def _do_create_action(act, kw):
344
+ """This is the actual "implementation" for the
345
+ Action factory method, below. This handles the
346
+ fact that passing lists to Action() itself has
347
+ different semantics than passing lists as elements
348
+ of lists.
349
+
350
+ The former will create a ListAction, the latter
351
+ will create a CommandAction by converting the inner
352
+ list elements to strings."""
353
+
354
+ if isinstance(act, ActionBase):
355
+ return act
356
+
357
+ if is_List(act):
358
+ return CommandAction(act, **kw)
359
+
360
+ if callable(act):
361
+ try:
362
+ gen = kw['generator']
363
+ del kw['generator']
364
+ except KeyError:
365
+ gen = 0
366
+ if gen:
367
+ action_type = CommandGeneratorAction
368
+ else:
369
+ action_type = FunctionAction
370
+ return action_type(act, kw)
371
+
372
+ if is_String(act):
373
+ var=SCons.Util.get_environment_var(act)
374
+ if var:
375
+ # This looks like a string that is purely an Environment
376
+ # variable reference, like "$FOO" or "${FOO}". We do
377
+ # something special here...we lazily evaluate the contents
378
+ # of that Environment variable, so a user could put something
379
+ # like a function or a CommandGenerator in that variable
380
+ # instead of a string.
381
+ return LazyAction(var, kw)
382
+ commands = str(act).split('\n')
383
+ if len(commands) == 1:
384
+ return CommandAction(commands[0], **kw)
385
+ # The list of string commands may include a LazyAction, so we
386
+ # reprocess them via _do_create_list_action.
387
+ return _do_create_list_action(commands, kw)
388
+ return None
389
+
390
+ def _do_create_list_action(act, kw):
391
+ """A factory for list actions. Convert the input list into Actions
392
+ and then wrap them in a ListAction."""
393
+ acts = []
394
+ for a in act:
395
+ aa = _do_create_action(a, kw)
396
+ if aa is not None: acts.append(aa)
397
+ if not acts:
398
+ return ListAction([])
399
+ elif len(acts) == 1:
400
+ return acts[0]
401
+ else:
402
+ return ListAction(acts)
403
+
404
+ def Action(act, *args, **kw):
405
+ """A factory for action objects."""
406
+ # Really simple: the _do_create_* routines do the heavy lifting.
407
+ _do_create_keywords(args, kw)
408
+ if is_List(act):
409
+ return _do_create_list_action(act, kw)
410
+ return _do_create_action(act, kw)
411
+
412
+ class ActionBase(object):
413
+ """Base class for all types of action objects that can be held by
414
+ other objects (Builders, Executors, etc.) This provides the
415
+ common methods for manipulating and combining those actions."""
416
+
417
+ def __cmp__(self, other):
418
+ return cmp(self.__dict__, other)
419
+
420
+ def no_batch_key(self, env, target, source):
421
+ return None
422
+
423
+ batch_key = no_batch_key
424
+
425
+ def genstring(self, target, source, env):
426
+ return str(self)
427
+
428
+ def get_contents(self, target, source, env):
429
+ result = [ self.get_presig(target, source, env) ]
430
+ # This should never happen, as the Action() factory should wrap
431
+ # the varlist, but just in case an action is created directly,
432
+ # we duplicate this check here.
433
+ vl = self.get_varlist(target, source, env)
434
+ if is_String(vl): vl = (vl,)
435
+ for v in vl:
436
+ result.append(env.subst('${'+v+'}'))
437
+ return ''.join(result)
438
+
439
+ def __add__(self, other):
440
+ return _actionAppend(self, other)
441
+
442
+ def __radd__(self, other):
443
+ return _actionAppend(other, self)
444
+
445
+ def presub_lines(self, env):
446
+ # CommandGeneratorAction needs a real environment
447
+ # in order to return the proper string here, since
448
+ # it may call LazyAction, which looks up a key
449
+ # in that env. So we temporarily remember the env here,
450
+ # and CommandGeneratorAction will use this env
451
+ # when it calls its _generate method.
452
+ self.presub_env = env
453
+ lines = str(self).split('\n')
454
+ self.presub_env = None # don't need this any more
455
+ return lines
456
+
457
+ def get_varlist(self, target, source, env, executor=None):
458
+ return self.varlist
459
+
460
+ def get_targets(self, env, executor):
461
+ """
462
+ Returns the type of targets ($TARGETS, $CHANGED_TARGETS) used
463
+ by this action.
464
+ """
465
+ return self.targets
466
+
467
+ class _ActionAction(ActionBase):
468
+ """Base class for actions that create output objects."""
469
+ def __init__(self, cmdstr=_null, strfunction=_null, varlist=(),
470
+ presub=_null, chdir=None, exitstatfunc=None,
471
+ batch_key=None, targets='$TARGETS',
472
+ **kw):
473
+ self.cmdstr = cmdstr
474
+ if strfunction is not _null:
475
+ if strfunction is None:
476
+ self.cmdstr = None
477
+ else:
478
+ self.strfunction = strfunction
479
+ self.varlist = varlist
480
+ self.presub = presub
481
+ self.chdir = chdir
482
+ if not exitstatfunc:
483
+ exitstatfunc = default_exitstatfunc
484
+ self.exitstatfunc = exitstatfunc
485
+
486
+ self.targets = targets
487
+
488
+ if batch_key:
489
+ if not callable(batch_key):
490
+ # They have set batch_key, but not to their own
491
+ # callable. The default behavior here will batch
492
+ # *all* targets+sources using this action, separated
493
+ # for each construction environment.
494
+ def default_batch_key(self, env, target, source):
495
+ return (id(self), id(env))
496
+ batch_key = default_batch_key
497
+ SCons.Util.AddMethod(self, batch_key, 'batch_key')
498
+
499
+ def print_cmd_line(self, s, target, source, env):
500
+ sys.stdout.write(s + u"\n")
501
+
502
+ def __call__(self, target, source, env,
503
+ exitstatfunc=_null,
504
+ presub=_null,
505
+ show=_null,
506
+ execute=_null,
507
+ chdir=_null,
508
+ executor=None):
509
+ if not is_List(target):
510
+ target = [target]
511
+ if not is_List(source):
512
+ source = [source]
513
+
514
+ if presub is _null:
515
+ presub = self.presub
516
+ if presub is _null:
517
+ presub = print_actions_presub
518
+ if exitstatfunc is _null: exitstatfunc = self.exitstatfunc
519
+ if show is _null: show = print_actions
520
+ if execute is _null: execute = execute_actions
521
+ if chdir is _null: chdir = self.chdir
522
+ save_cwd = None
523
+ if chdir:
524
+ save_cwd = os.getcwd()
525
+ try:
526
+ chdir = str(chdir.abspath)
527
+ except AttributeError:
528
+ if not is_String(chdir):
529
+ if executor:
530
+ chdir = str(executor.batches[0].targets[0].dir)
531
+ else:
532
+ chdir = str(target[0].dir)
533
+ if presub:
534
+ if executor:
535
+ target = executor.get_all_targets()
536
+ source = executor.get_all_sources()
537
+ t = ' and '.join(map(str, target))
538
+ l = '\n '.join(self.presub_lines(env))
539
+ out = u"Building %s with action:\n %s\n" % (t, l)
540
+ sys.stdout.write(out)
541
+ cmd = None
542
+ if show and self.strfunction:
543
+ if executor:
544
+ target = executor.get_all_targets()
545
+ source = executor.get_all_sources()
546
+ try:
547
+ cmd = self.strfunction(target, source, env, executor)
548
+ except TypeError:
549
+ cmd = self.strfunction(target, source, env)
550
+ if cmd:
551
+ if chdir:
552
+ cmd = ('os.chdir(%s)\n' % repr(chdir)) + cmd
553
+ try:
554
+ get = env.get
555
+ except AttributeError:
556
+ print_func = self.print_cmd_line
557
+ else:
558
+ print_func = get('PRINT_CMD_LINE_FUNC')
559
+ if not print_func:
560
+ print_func = self.print_cmd_line
561
+ print_func(cmd, target, source, env)
562
+ stat = 0
563
+ if execute:
564
+ if chdir:
565
+ os.chdir(chdir)
566
+ try:
567
+ stat = self.execute(target, source, env, executor=executor)
568
+ if isinstance(stat, SCons.Errors.BuildError):
569
+ s = exitstatfunc(stat.status)
570
+ if s:
571
+ stat.status = s
572
+ else:
573
+ stat = s
574
+ else:
575
+ stat = exitstatfunc(stat)
576
+ finally:
577
+ if save_cwd:
578
+ os.chdir(save_cwd)
579
+ if cmd and save_cwd:
580
+ print_func('os.chdir(%s)' % repr(save_cwd), target, source, env)
581
+
582
+ return stat
583
+
584
+
585
+ def _string_from_cmd_list(cmd_list):
586
+ """Takes a list of command line arguments and returns a pretty
587
+ representation for printing."""
588
+ cl = []
589
+ for arg in map(str, cmd_list):
590
+ if ' ' in arg or '\t' in arg:
591
+ arg = '"' + arg + '"'
592
+ cl.append(arg)
593
+ return ' '.join(cl)
594
+
595
+ # A fiddlin' little function that has an 'import SCons.Environment' which
596
+ # can't be moved to the top level without creating an import loop. Since
597
+ # this import creates a local variable named 'SCons', it blocks access to
598
+ # the global variable, so we move it here to prevent complaints about local
599
+ # variables being used uninitialized.
600
+ default_ENV = None
601
+ def get_default_ENV(env):
602
+ global default_ENV
603
+ try:
604
+ return env['ENV']
605
+ except KeyError:
606
+ if not default_ENV:
607
+ import SCons.Environment
608
+ # This is a hideously expensive way to get a default shell
609
+ # environment. What it really should do is run the platform
610
+ # setup to get the default ENV. Fortunately, it's incredibly
611
+ # rare for an Environment not to have a shell environment, so
612
+ # we're not going to worry about it overmuch.
613
+ default_ENV = SCons.Environment.Environment()['ENV']
614
+ return default_ENV
615
+
616
+ # This function is still in draft mode. We're going to need something like
617
+ # it in the long run as more and more places use subprocess, but I'm sure
618
+ # it'll have to be tweaked to get the full desired functionality.
619
+ # one special arg (so far?), 'error', to tell what to do with exceptions.
620
+ def _subproc(scons_env, cmd, error = 'ignore', **kw):
621
+ """Do common setup for a subprocess.Popen() call"""
622
+ # allow std{in,out,err} to be "'devnull'"
623
+ io = kw.get('stdin')
624
+ if is_String(io) and io == 'devnull':
625
+ kw['stdin'] = open(os.devnull)
626
+ io = kw.get('stdout')
627
+ if is_String(io) and io == 'devnull':
628
+ kw['stdout'] = open(os.devnull, 'w')
629
+ io = kw.get('stderr')
630
+ if is_String(io) and io == 'devnull':
631
+ kw['stderr'] = open(os.devnull, 'w')
632
+
633
+ # Figure out what shell environment to use
634
+ ENV = kw.get('env', None)
635
+ if ENV is None: ENV = get_default_ENV(scons_env)
636
+
637
+ # Ensure that the ENV values are all strings:
638
+ new_env = {}
639
+ for key, value in ENV.items():
640
+ if is_List(value):
641
+ # If the value is a list, then we assume it is a path list,
642
+ # because that's a pretty common list-like value to stick
643
+ # in an environment variable:
644
+ value = SCons.Util.flatten_sequence(value)
645
+ new_env[key] = os.pathsep.join(map(str, value))
646
+ else:
647
+ # It's either a string or something else. If it's a string,
648
+ # we still want to call str() because it might be a *Unicode*
649
+ # string, which makes subprocess.Popen() gag. If it isn't a
650
+ # string or a list, then we just coerce it to a string, which
651
+ # is the proper way to handle Dir and File instances and will
652
+ # produce something reasonable for just about everything else:
653
+ new_env[key] = str(value)
654
+ kw['env'] = new_env
655
+
656
+ try:
657
+ #FUTURE return subprocess.Popen(cmd, **kw)
658
+ return subprocess.Popen(cmd, **kw)
659
+ except EnvironmentError, e:
660
+ if error == 'raise': raise
661
+ # return a dummy Popen instance that only returns error
662
+ class dummyPopen(object):
663
+ def __init__(self, e): self.exception = e
664
+ def communicate(self): return ('','')
665
+ def wait(self): return -self.exception.errno
666
+ stdin = None
667
+ class f(object):
668
+ def read(self): return ''
669
+ def readline(self): return ''
670
+ stdout = stderr = f()
671
+ return dummyPopen(e)
672
+
673
+ class CommandAction(_ActionAction):
674
+ """Class for command-execution actions."""
675
+ def __init__(self, cmd, **kw):
676
+ # Cmd can actually be a list or a single item; if it's a
677
+ # single item it should be the command string to execute; if a
678
+ # list then it should be the words of the command string to
679
+ # execute. Only a single command should be executed by this
680
+ # object; lists of commands should be handled by embedding
681
+ # these objects in a ListAction object (which the Action()
682
+ # factory above does). cmd will be passed to
683
+ # Environment.subst_list() for substituting environment
684
+ # variables.
685
+ if __debug__: logInstanceCreation(self, 'Action.CommandAction')
686
+
687
+ _ActionAction.__init__(self, **kw)
688
+ if is_List(cmd):
689
+ if list(filter(is_List, cmd)):
690
+ raise TypeError("CommandAction should be given only " \
691
+ "a single command")
692
+ self.cmd_list = cmd
693
+
694
+ def __str__(self):
695
+ if is_List(self.cmd_list):
696
+ return ' '.join(map(str, self.cmd_list))
697
+ return str(self.cmd_list)
698
+
699
+ def process(self, target, source, env, executor=None):
700
+ if executor:
701
+ result = env.subst_list(self.cmd_list, 0, executor=executor)
702
+ else:
703
+ result = env.subst_list(self.cmd_list, 0, target, source)
704
+ silent = None
705
+ ignore = None
706
+ while True:
707
+ try: c = result[0][0][0]
708
+ except IndexError: c = None
709
+ if c == '@': silent = 1
710
+ elif c == '-': ignore = 1
711
+ else: break
712
+ result[0][0] = result[0][0][1:]
713
+ try:
714
+ if not result[0][0]:
715
+ result[0] = result[0][1:]
716
+ except IndexError:
717
+ pass
718
+ return result, ignore, silent
719
+
720
+ def strfunction(self, target, source, env, executor=None):
721
+ if self.cmdstr is None:
722
+ return None
723
+ if self.cmdstr is not _null:
724
+ from SCons.Subst import SUBST_RAW
725
+ if executor:
726
+ c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
727
+ else:
728
+ c = env.subst(self.cmdstr, SUBST_RAW, target, source)
729
+ if c:
730
+ return c
731
+ cmd_list, ignore, silent = self.process(target, source, env, executor)
732
+ if silent:
733
+ return ''
734
+ return _string_from_cmd_list(cmd_list[0])
735
+
736
+ def execute(self, target, source, env, executor=None):
737
+ """Execute a command action.
738
+
739
+ This will handle lists of commands as well as individual commands,
740
+ because construction variable substitution may turn a single
741
+ "command" into a list. This means that this class can actually
742
+ handle lists of commands, even though that's not how we use it
743
+ externally.
744
+ """
745
+ escape_list = SCons.Subst.escape_list
746
+ flatten_sequence = SCons.Util.flatten_sequence
747
+
748
+ try:
749
+ shell = env['SHELL']
750
+ except KeyError:
751
+ raise SCons.Errors.UserError('Missing SHELL construction variable.')
752
+
753
+ try:
754
+ spawn = env['SPAWN']
755
+ except KeyError:
756
+ raise SCons.Errors.UserError('Missing SPAWN construction variable.')
757
+ else:
758
+ if is_String(spawn):
759
+ spawn = env.subst(spawn, raw=1, conv=lambda x: x)
760
+
761
+ escape = env.get('ESCAPE', lambda x: x)
762
+
763
+ ENV = get_default_ENV(env)
764
+
765
+ # Ensure that the ENV values are all strings:
766
+ for key, value in ENV.items():
767
+ if not is_String(value):
768
+ if is_List(value):
769
+ # If the value is a list, then we assume it is a
770
+ # path list, because that's a pretty common list-like
771
+ # value to stick in an environment variable:
772
+ value = flatten_sequence(value)
773
+ ENV[key] = os.pathsep.join(map(str, value))
774
+ else:
775
+ # If it isn't a string or a list, then we just coerce
776
+ # it to a string, which is the proper way to handle
777
+ # Dir and File instances and will produce something
778
+ # reasonable for just about everything else:
779
+ ENV[key] = str(value)
780
+
781
+ if executor:
782
+ target = executor.get_all_targets()
783
+ source = executor.get_all_sources()
784
+ cmd_list, ignore, silent = self.process(target, list(map(rfile, source)), env, executor)
785
+
786
+ # Use len() to filter out any "command" that's zero-length.
787
+ for cmd_line in filter(len, cmd_list):
788
+ # Escape the command line for the interpreter we are using.
789
+ cmd_line = escape_list(cmd_line, escape)
790
+ result = spawn(shell, escape, cmd_line[0], cmd_line, ENV)
791
+ if not ignore and result:
792
+ msg = "Error %s" % result
793
+ return SCons.Errors.BuildError(errstr=msg,
794
+ status=result,
795
+ action=self,
796
+ command=cmd_line)
797
+ return 0
798
+
799
+ def get_presig(self, target, source, env, executor=None):
800
+ """Return the signature contents of this action's command line.
801
+
802
+ This strips $(-$) and everything in between the string,
803
+ since those parts don't affect signatures.
804
+ """
805
+ from SCons.Subst import SUBST_SIG
806
+ cmd = self.cmd_list
807
+ if is_List(cmd):
808
+ cmd = ' '.join(map(str, cmd))
809
+ else:
810
+ cmd = str(cmd)
811
+ if executor:
812
+ return env.subst_target_source(cmd, SUBST_SIG, executor=executor)
813
+ else:
814
+ return env.subst_target_source(cmd, SUBST_SIG, target, source)
815
+
816
+ def get_implicit_deps(self, target, source, env, executor=None):
817
+ icd = env.get('IMPLICIT_COMMAND_DEPENDENCIES', True)
818
+ if is_String(icd) and icd[:1] == '$':
819
+ icd = env.subst(icd)
820
+ if not icd or icd in ('0', 'None'):
821
+ return []
822
+ from SCons.Subst import SUBST_SIG
823
+ if executor:
824
+ cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, executor=executor)
825
+ else:
826
+ cmd_list = env.subst_list(self.cmd_list, SUBST_SIG, target, source)
827
+ res = []
828
+ for cmd_line in cmd_list:
829
+ if cmd_line:
830
+ d = str(cmd_line[0])
831
+ m = strip_quotes.match(d)
832
+ if m:
833
+ d = m.group(1)
834
+ d = env.WhereIs(d)
835
+ if d:
836
+ res.append(env.fs.File(d))
837
+ return res
838
+
839
+ class CommandGeneratorAction(ActionBase):
840
+ """Class for command-generator actions."""
841
+ def __init__(self, generator, kw):
842
+ if __debug__: logInstanceCreation(self, 'Action.CommandGeneratorAction')
843
+ self.generator = generator
844
+ self.gen_kw = kw
845
+ self.varlist = kw.get('varlist', ())
846
+ self.targets = kw.get('targets', '$TARGETS')
847
+
848
+ def _generate(self, target, source, env, for_signature, executor=None):
849
+ # ensure that target is a list, to make it easier to write
850
+ # generator functions:
851
+ if not is_List(target):
852
+ target = [target]
853
+
854
+ if executor:
855
+ target = executor.get_all_targets()
856
+ source = executor.get_all_sources()
857
+ ret = self.generator(target=target,
858
+ source=source,
859
+ env=env,
860
+ for_signature=for_signature)
861
+ gen_cmd = Action(ret, **self.gen_kw)
862
+ if not gen_cmd:
863
+ raise SCons.Errors.UserError("Object returned from command generator: %s cannot be used to create an Action." % repr(ret))
864
+ return gen_cmd
865
+
866
+ def __str__(self):
867
+ try:
868
+ env = self.presub_env
869
+ except AttributeError:
870
+ env = None
871
+ if env is None:
872
+ env = SCons.Defaults.DefaultEnvironment()
873
+ act = self._generate([], [], env, 1)
874
+ return str(act)
875
+
876
+ def batch_key(self, env, target, source):
877
+ return self._generate(target, source, env, 1).batch_key(env, target, source)
878
+
879
+ def genstring(self, target, source, env, executor=None):
880
+ return self._generate(target, source, env, 1, executor).genstring(target, source, env)
881
+
882
+ def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
883
+ show=_null, execute=_null, chdir=_null, executor=None):
884
+ act = self._generate(target, source, env, 0, executor)
885
+ if act is None:
886
+ raise UserError("While building `%s': "
887
+ "Cannot deduce file extension from source files: %s"
888
+ % (repr(list(map(str, target))), repr(list(map(str, source)))))
889
+ return act(target, source, env, exitstatfunc, presub,
890
+ show, execute, chdir, executor)
891
+
892
+ def get_presig(self, target, source, env, executor=None):
893
+ """Return the signature contents of this action's command line.
894
+
895
+ This strips $(-$) and everything in between the string,
896
+ since those parts don't affect signatures.
897
+ """
898
+ return self._generate(target, source, env, 1, executor).get_presig(target, source, env)
899
+
900
+ def get_implicit_deps(self, target, source, env, executor=None):
901
+ return self._generate(target, source, env, 1, executor).get_implicit_deps(target, source, env)
902
+
903
+ def get_varlist(self, target, source, env, executor=None):
904
+ return self._generate(target, source, env, 1, executor).get_varlist(target, source, env, executor)
905
+
906
+ def get_targets(self, env, executor):
907
+ return self._generate(None, None, env, 1, executor).get_targets(env, executor)
908
+
909
+
910
+
911
+ # A LazyAction is a kind of hybrid generator and command action for
912
+ # strings of the form "$VAR". These strings normally expand to other
913
+ # strings (think "$CCCOM" to "$CC -c -o $TARGET $SOURCE"), but we also
914
+ # want to be able to replace them with functions in the construction
915
+ # environment. Consequently, we want lazy evaluation and creation of
916
+ # an Action in the case of the function, but that's overkill in the more
917
+ # normal case of expansion to other strings.
918
+ #
919
+ # So we do this with a subclass that's both a generator *and*
920
+ # a command action. The overridden methods all do a quick check
921
+ # of the construction variable, and if it's a string we just call
922
+ # the corresponding CommandAction method to do the heavy lifting.
923
+ # If not, then we call the same-named CommandGeneratorAction method.
924
+ # The CommandGeneratorAction methods work by using the overridden
925
+ # _generate() method, that is, our own way of handling "generation" of
926
+ # an action based on what's in the construction variable.
927
+
928
+ class LazyAction(CommandGeneratorAction, CommandAction):
929
+
930
+ def __init__(self, var, kw):
931
+ if __debug__: logInstanceCreation(self, 'Action.LazyAction')
932
+ #FUTURE CommandAction.__init__(self, '${'+var+'}', **kw)
933
+ CommandAction.__init__(self, '${'+var+'}', **kw)
934
+ self.var = SCons.Util.to_String(var)
935
+ self.gen_kw = kw
936
+
937
+ def get_parent_class(self, env):
938
+ c = env.get(self.var)
939
+ if is_String(c) and not '\n' in c:
940
+ return CommandAction
941
+ return CommandGeneratorAction
942
+
943
+ def _generate_cache(self, env):
944
+ if env:
945
+ c = env.get(self.var, '')
946
+ else:
947
+ c = ''
948
+ gen_cmd = Action(c, **self.gen_kw)
949
+ if not gen_cmd:
950
+ raise SCons.Errors.UserError("$%s value %s cannot be used to create an Action." % (self.var, repr(c)))
951
+ return gen_cmd
952
+
953
+ def _generate(self, target, source, env, for_signature, executor=None):
954
+ return self._generate_cache(env)
955
+
956
+ def __call__(self, target, source, env, *args, **kw):
957
+ c = self.get_parent_class(env)
958
+ return c.__call__(self, target, source, env, *args, **kw)
959
+
960
+ def get_presig(self, target, source, env):
961
+ c = self.get_parent_class(env)
962
+ return c.get_presig(self, target, source, env)
963
+
964
+ def get_varlist(self, target, source, env, executor=None):
965
+ c = self.get_parent_class(env)
966
+ return c.get_varlist(self, target, source, env, executor)
967
+
968
+
969
+ class FunctionAction(_ActionAction):
970
+ """Class for Python function actions."""
971
+
972
+ def __init__(self, execfunction, kw):
973
+ if __debug__: logInstanceCreation(self, 'Action.FunctionAction')
974
+
975
+ self.execfunction = execfunction
976
+ try:
977
+ self.funccontents = _callable_contents(execfunction)
978
+ except AttributeError:
979
+ try:
980
+ # See if execfunction will do the heavy lifting for us.
981
+ self.gc = execfunction.get_contents
982
+ except AttributeError:
983
+ # This is weird, just do the best we can.
984
+ self.funccontents = _object_contents(execfunction)
985
+
986
+ _ActionAction.__init__(self, **kw)
987
+
988
+ def function_name(self):
989
+ try:
990
+ return self.execfunction.__name__
991
+ except AttributeError:
992
+ try:
993
+ return self.execfunction.__class__.__name__
994
+ except AttributeError:
995
+ return "unknown_python_function"
996
+
997
+ def strfunction(self, target, source, env, executor=None):
998
+ if self.cmdstr is None:
999
+ return None
1000
+ if self.cmdstr is not _null:
1001
+ from SCons.Subst import SUBST_RAW
1002
+ if executor:
1003
+ c = env.subst(self.cmdstr, SUBST_RAW, executor=executor)
1004
+ else:
1005
+ c = env.subst(self.cmdstr, SUBST_RAW, target, source)
1006
+ if c:
1007
+ return c
1008
+ def array(a):
1009
+ def quote(s):
1010
+ try:
1011
+ str_for_display = s.str_for_display
1012
+ except AttributeError:
1013
+ s = repr(s)
1014
+ else:
1015
+ s = str_for_display()
1016
+ return s
1017
+ return '[' + ", ".join(map(quote, a)) + ']'
1018
+ try:
1019
+ strfunc = self.execfunction.strfunction
1020
+ except AttributeError:
1021
+ pass
1022
+ else:
1023
+ if strfunc is None:
1024
+ return None
1025
+ if callable(strfunc):
1026
+ return strfunc(target, source, env)
1027
+ name = self.function_name()
1028
+ tstr = array(target)
1029
+ sstr = array(source)
1030
+ return "%s(%s, %s)" % (name, tstr, sstr)
1031
+
1032
+ def __str__(self):
1033
+ name = self.function_name()
1034
+ if name == 'ActionCaller':
1035
+ return str(self.execfunction)
1036
+ return "%s(target, source, env)" % name
1037
+
1038
+ def execute(self, target, source, env, executor=None):
1039
+ exc_info = (None,None,None)
1040
+ try:
1041
+ if executor:
1042
+ target = executor.get_all_targets()
1043
+ source = executor.get_all_sources()
1044
+ rsources = list(map(rfile, source))
1045
+ try:
1046
+ result = self.execfunction(target=target, source=rsources, env=env)
1047
+ except KeyboardInterrupt, e:
1048
+ raise
1049
+ except SystemExit, e:
1050
+ raise
1051
+ except Exception, e:
1052
+ result = e
1053
+ exc_info = sys.exc_info()
1054
+
1055
+ if result:
1056
+ result = SCons.Errors.convert_to_BuildError(result, exc_info)
1057
+ result.node=target
1058
+ result.action=self
1059
+ try:
1060
+ result.command=self.strfunction(target, source, env, executor)
1061
+ except TypeError:
1062
+ result.command=self.strfunction(target, source, env)
1063
+
1064
+ # FIXME: This maintains backward compatibility with respect to
1065
+ # which type of exceptions were returned by raising an
1066
+ # exception and which ones were returned by value. It would
1067
+ # probably be best to always return them by value here, but
1068
+ # some codes do not check the return value of Actions and I do
1069
+ # not have the time to modify them at this point.
1070
+ if (exc_info[1] and
1071
+ not isinstance(exc_info[1],EnvironmentError)):
1072
+ raise result
1073
+
1074
+ return result
1075
+ finally:
1076
+ # Break the cycle between the traceback object and this
1077
+ # function stack frame. See the sys.exc_info() doc info for
1078
+ # more information about this issue.
1079
+ del exc_info
1080
+
1081
+
1082
+ def get_presig(self, target, source, env):
1083
+ """Return the signature contents of this callable action."""
1084
+ try:
1085
+ return self.gc(target, source, env)
1086
+ except AttributeError:
1087
+ return self.funccontents
1088
+
1089
+ def get_implicit_deps(self, target, source, env):
1090
+ return []
1091
+
1092
+ class ListAction(ActionBase):
1093
+ """Class for lists of other actions."""
1094
+ def __init__(self, actionlist):
1095
+ if __debug__: logInstanceCreation(self, 'Action.ListAction')
1096
+ def list_of_actions(x):
1097
+ if isinstance(x, ActionBase):
1098
+ return x
1099
+ return Action(x)
1100
+ self.list = list(map(list_of_actions, actionlist))
1101
+ # our children will have had any varlist
1102
+ # applied; we don't need to do it again
1103
+ self.varlist = ()
1104
+ self.targets = '$TARGETS'
1105
+
1106
+ def genstring(self, target, source, env):
1107
+ return '\n'.join([a.genstring(target, source, env) for a in self.list])
1108
+
1109
+ def __str__(self):
1110
+ return '\n'.join(map(str, self.list))
1111
+
1112
+ def presub_lines(self, env):
1113
+ return SCons.Util.flatten_sequence(
1114
+ [a.presub_lines(env) for a in self.list])
1115
+
1116
+ def get_presig(self, target, source, env):
1117
+ """Return the signature contents of this action list.
1118
+
1119
+ Simple concatenation of the signatures of the elements.
1120
+ """
1121
+ return "".join([x.get_contents(target, source, env) for x in self.list])
1122
+
1123
+ def __call__(self, target, source, env, exitstatfunc=_null, presub=_null,
1124
+ show=_null, execute=_null, chdir=_null, executor=None):
1125
+ if executor:
1126
+ target = executor.get_all_targets()
1127
+ source = executor.get_all_sources()
1128
+ for act in self.list:
1129
+ stat = act(target, source, env, exitstatfunc, presub,
1130
+ show, execute, chdir, executor)
1131
+ if stat:
1132
+ return stat
1133
+ return 0
1134
+
1135
+ def get_implicit_deps(self, target, source, env):
1136
+ result = []
1137
+ for act in self.list:
1138
+ result.extend(act.get_implicit_deps(target, source, env))
1139
+ return result
1140
+
1141
+ def get_varlist(self, target, source, env, executor=None):
1142
+ result = SCons.Util.OrderedDict()
1143
+ for act in self.list:
1144
+ for var in act.get_varlist(target, source, env, executor):
1145
+ result[var] = True
1146
+ return list(result.keys())
1147
+
1148
+ class ActionCaller(object):
1149
+ """A class for delaying calling an Action function with specific
1150
+ (positional and keyword) arguments until the Action is actually
1151
+ executed.
1152
+
1153
+ This class looks to the rest of the world like a normal Action object,
1154
+ but what it's really doing is hanging on to the arguments until we
1155
+ have a target, source and env to use for the expansion.
1156
+ """
1157
+ def __init__(self, parent, args, kw):
1158
+ self.parent = parent
1159
+ self.args = args
1160
+ self.kw = kw
1161
+
1162
+ def get_contents(self, target, source, env):
1163
+ actfunc = self.parent.actfunc
1164
+ try:
1165
+ # "self.actfunc" is a function.
1166
+ contents = str(actfunc.func_code.co_code)
1167
+ except AttributeError:
1168
+ # "self.actfunc" is a callable object.
1169
+ try:
1170
+ contents = str(actfunc.__call__.im_func.func_code.co_code)
1171
+ except AttributeError:
1172
+ # No __call__() method, so it might be a builtin
1173
+ # or something like that. Do the best we can.
1174
+ contents = str(actfunc)
1175
+ contents = remove_set_lineno_codes(contents)
1176
+ return contents
1177
+
1178
+ def subst(self, s, target, source, env):
1179
+ # If s is a list, recursively apply subst()
1180
+ # to every element in the list
1181
+ if is_List(s):
1182
+ result = []
1183
+ for elem in s:
1184
+ result.append(self.subst(elem, target, source, env))
1185
+ return self.parent.convert(result)
1186
+
1187
+ # Special-case hack: Let a custom function wrapped in an
1188
+ # ActionCaller get at the environment through which the action
1189
+ # was called by using this hard-coded value as a special return.
1190
+ if s == '$__env__':
1191
+ return env
1192
+ elif is_String(s):
1193
+ return env.subst(s, 1, target, source)
1194
+ return self.parent.convert(s)
1195
+
1196
+ def subst_args(self, target, source, env):
1197
+ return [self.subst(x, target, source, env) for x in self.args]
1198
+
1199
+ def subst_kw(self, target, source, env):
1200
+ kw = {}
1201
+ for key in self.kw.keys():
1202
+ kw[key] = self.subst(self.kw[key], target, source, env)
1203
+ return kw
1204
+
1205
+ def __call__(self, target, source, env, executor=None):
1206
+ args = self.subst_args(target, source, env)
1207
+ kw = self.subst_kw(target, source, env)
1208
+ return self.parent.actfunc(*args, **kw)
1209
+
1210
+ def strfunction(self, target, source, env):
1211
+ args = self.subst_args(target, source, env)
1212
+ kw = self.subst_kw(target, source, env)
1213
+ return self.parent.strfunc(*args, **kw)
1214
+
1215
+ def __str__(self):
1216
+ return self.parent.strfunc(*self.args, **self.kw)
1217
+
1218
+ class ActionFactory(object):
1219
+ """A factory class that will wrap up an arbitrary function
1220
+ as an SCons-executable Action object.
1221
+
1222
+ The real heavy lifting here is done by the ActionCaller class.
1223
+ We just collect the (positional and keyword) arguments that we're
1224
+ called with and give them to the ActionCaller object we create,
1225
+ so it can hang onto them until it needs them.
1226
+ """
1227
+ def __init__(self, actfunc, strfunc, convert=lambda x: x):
1228
+ self.actfunc = actfunc
1229
+ self.strfunc = strfunc
1230
+ self.convert = convert
1231
+
1232
+ def __call__(self, *args, **kw):
1233
+ ac = ActionCaller(self, args, kw)
1234
+ action = Action(ac, strfunction=ac.strfunction)
1235
+ return action
1236
+
1237
+ # Local Variables:
1238
+ # tab-width:4
1239
+ # indent-tabs-mode:nil
1240
+ # End:
1241
+ # vim: set expandtab tabstop=4 shiftwidth=4: