libv8-freebsd 3.3.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (703) hide show
  1. data/.gitignore +9 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +4 -0
  4. data/README.md +75 -0
  5. data/Rakefile +115 -0
  6. data/ext/libv8/extconf.rb +27 -0
  7. data/lib/libv8.rb +15 -0
  8. data/lib/libv8/Makefile +39 -0
  9. data/lib/libv8/detect_cpu.rb +27 -0
  10. data/lib/libv8/fpic-on-freebsd-amd64.patch +16 -0
  11. data/lib/libv8/fpic-on-linux-amd64.patch +13 -0
  12. data/lib/libv8/scons/CHANGES.txt +5541 -0
  13. data/lib/libv8/scons/LICENSE.txt +20 -0
  14. data/lib/libv8/scons/MANIFEST +200 -0
  15. data/lib/libv8/scons/PKG-INFO +13 -0
  16. data/lib/libv8/scons/README.txt +243 -0
  17. data/lib/libv8/scons/RELEASE.txt +100 -0
  18. data/lib/libv8/scons/engine/SCons/Action.py +1257 -0
  19. data/lib/libv8/scons/engine/SCons/Builder.py +877 -0
  20. data/lib/libv8/scons/engine/SCons/CacheDir.py +216 -0
  21. data/lib/libv8/scons/engine/SCons/Conftest.py +793 -0
  22. data/lib/libv8/scons/engine/SCons/Debug.py +220 -0
  23. data/lib/libv8/scons/engine/SCons/Defaults.py +494 -0
  24. data/lib/libv8/scons/engine/SCons/Environment.py +2417 -0
  25. data/lib/libv8/scons/engine/SCons/Errors.py +205 -0
  26. data/lib/libv8/scons/engine/SCons/Executor.py +633 -0
  27. data/lib/libv8/scons/engine/SCons/Job.py +435 -0
  28. data/lib/libv8/scons/engine/SCons/Memoize.py +244 -0
  29. data/lib/libv8/scons/engine/SCons/Node/Alias.py +152 -0
  30. data/lib/libv8/scons/engine/SCons/Node/FS.py +3302 -0
  31. data/lib/libv8/scons/engine/SCons/Node/Python.py +128 -0
  32. data/lib/libv8/scons/engine/SCons/Node/__init__.py +1329 -0
  33. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +50 -0
  34. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +50 -0
  35. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +50 -0
  36. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +50 -0
  37. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +76 -0
  38. data/lib/libv8/scons/engine/SCons/Options/__init__.py +67 -0
  39. data/lib/libv8/scons/engine/SCons/PathList.py +231 -0
  40. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +241 -0
  41. data/lib/libv8/scons/engine/SCons/Platform/aix.py +69 -0
  42. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +55 -0
  43. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +70 -0
  44. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +46 -0
  45. data/lib/libv8/scons/engine/SCons/Platform/irix.py +44 -0
  46. data/lib/libv8/scons/engine/SCons/Platform/os2.py +58 -0
  47. data/lib/libv8/scons/engine/SCons/Platform/posix.py +263 -0
  48. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +50 -0
  49. data/lib/libv8/scons/engine/SCons/Platform/win32.py +385 -0
  50. data/lib/libv8/scons/engine/SCons/SConf.py +1030 -0
  51. data/lib/libv8/scons/engine/SCons/SConsign.py +389 -0
  52. data/lib/libv8/scons/engine/SCons/Scanner/C.py +132 -0
  53. data/lib/libv8/scons/engine/SCons/Scanner/D.py +73 -0
  54. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +109 -0
  55. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +316 -0
  56. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +48 -0
  57. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +387 -0
  58. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +101 -0
  59. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +55 -0
  60. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +413 -0
  61. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +384 -0
  62. data/lib/libv8/scons/engine/SCons/Script/Main.py +1405 -0
  63. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +939 -0
  64. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +640 -0
  65. data/lib/libv8/scons/engine/SCons/Script/__init__.py +412 -0
  66. data/lib/libv8/scons/engine/SCons/Sig.py +63 -0
  67. data/lib/libv8/scons/engine/SCons/Subst.py +904 -0
  68. data/lib/libv8/scons/engine/SCons/Taskmaster.py +1025 -0
  69. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +61 -0
  70. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +67 -0
  71. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +73 -0
  72. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +263 -0
  73. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +323 -0
  74. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  75. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  76. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +240 -0
  77. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +82 -0
  78. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +391 -0
  79. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +459 -0
  80. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +526 -0
  81. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +103 -0
  82. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +137 -0
  83. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +64 -0
  84. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +64 -0
  85. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +71 -0
  86. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +681 -0
  87. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +82 -0
  88. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +74 -0
  89. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +80 -0
  90. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +76 -0
  91. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +71 -0
  92. data/lib/libv8/scons/engine/SCons/Tool/ar.py +63 -0
  93. data/lib/libv8/scons/engine/SCons/Tool/as.py +78 -0
  94. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +81 -0
  95. data/lib/libv8/scons/engine/SCons/Tool/c++.py +99 -0
  96. data/lib/libv8/scons/engine/SCons/Tool/cc.py +102 -0
  97. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +58 -0
  98. data/lib/libv8/scons/engine/SCons/Tool/default.py +50 -0
  99. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +240 -0
  100. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +64 -0
  101. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +125 -0
  102. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +95 -0
  103. data/lib/libv8/scons/engine/SCons/Tool/f03.py +63 -0
  104. data/lib/libv8/scons/engine/SCons/Tool/f77.py +62 -0
  105. data/lib/libv8/scons/engine/SCons/Tool/f90.py +62 -0
  106. data/lib/libv8/scons/engine/SCons/Tool/f95.py +63 -0
  107. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +98 -0
  108. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +62 -0
  109. data/lib/libv8/scons/engine/SCons/Tool/g++.py +90 -0
  110. data/lib/libv8/scons/engine/SCons/Tool/g77.py +73 -0
  111. data/lib/libv8/scons/engine/SCons/Tool/gas.py +53 -0
  112. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +80 -0
  113. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +64 -0
  114. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +62 -0
  115. data/lib/libv8/scons/engine/SCons/Tool/gs.py +81 -0
  116. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +84 -0
  117. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +53 -0
  118. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +77 -0
  119. data/lib/libv8/scons/engine/SCons/Tool/icc.py +59 -0
  120. data/lib/libv8/scons/engine/SCons/Tool/icl.py +52 -0
  121. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +72 -0
  122. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +88 -0
  123. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +59 -0
  124. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +60 -0
  125. data/lib/libv8/scons/engine/SCons/Tool/install.py +283 -0
  126. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +522 -0
  127. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +67 -0
  128. data/lib/libv8/scons/engine/SCons/Tool/jar.py +116 -0
  129. data/lib/libv8/scons/engine/SCons/Tool/javac.py +230 -0
  130. data/lib/libv8/scons/engine/SCons/Tool/javah.py +137 -0
  131. data/lib/libv8/scons/engine/SCons/Tool/latex.py +80 -0
  132. data/lib/libv8/scons/engine/SCons/Tool/lex.py +97 -0
  133. data/lib/libv8/scons/engine/SCons/Tool/link.py +122 -0
  134. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +112 -0
  135. data/lib/libv8/scons/engine/SCons/Tool/m4.py +63 -0
  136. data/lib/libv8/scons/engine/SCons/Tool/masm.py +77 -0
  137. data/lib/libv8/scons/engine/SCons/Tool/midl.py +88 -0
  138. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +179 -0
  139. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +64 -0
  140. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +318 -0
  141. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +50 -0
  142. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +278 -0
  143. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +1806 -0
  144. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +207 -0
  145. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +107 -0
  146. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +72 -0
  147. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +312 -0
  148. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  149. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +527 -0
  150. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +365 -0
  151. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  152. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  153. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  154. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  155. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  156. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  157. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +78 -0
  158. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +84 -0
  159. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +109 -0
  160. data/lib/libv8/scons/engine/SCons/Tool/qt.py +336 -0
  161. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +126 -0
  162. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +70 -0
  163. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +132 -0
  164. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +68 -0
  165. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +58 -0
  166. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +53 -0
  167. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +62 -0
  168. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +67 -0
  169. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +142 -0
  170. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +58 -0
  171. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +63 -0
  172. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +64 -0
  173. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +64 -0
  174. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +76 -0
  175. data/lib/libv8/scons/engine/SCons/Tool/swig.py +183 -0
  176. data/lib/libv8/scons/engine/SCons/Tool/tar.py +73 -0
  177. data/lib/libv8/scons/engine/SCons/Tool/tex.py +866 -0
  178. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +175 -0
  179. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +53 -0
  180. data/lib/libv8/scons/engine/SCons/Tool/wix.py +99 -0
  181. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +140 -0
  182. data/lib/libv8/scons/engine/SCons/Tool/zip.py +99 -0
  183. data/lib/libv8/scons/engine/SCons/Util.py +1492 -0
  184. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +89 -0
  185. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +103 -0
  186. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +135 -0
  187. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +106 -0
  188. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +147 -0
  189. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +312 -0
  190. data/lib/libv8/scons/engine/SCons/Warnings.py +246 -0
  191. data/lib/libv8/scons/engine/SCons/__init__.py +49 -0
  192. data/lib/libv8/scons/engine/SCons/compat/__init__.py +237 -0
  193. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +150 -0
  194. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +45 -0
  195. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +45 -0
  196. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +76 -0
  197. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +45 -0
  198. data/lib/libv8/scons/engine/SCons/compat/_scons_sets.py +563 -0
  199. data/lib/libv8/scons/engine/SCons/compat/_scons_subprocess.py +1281 -0
  200. data/lib/libv8/scons/engine/SCons/cpp.py +589 -0
  201. data/lib/libv8/scons/engine/SCons/dblite.py +254 -0
  202. data/lib/libv8/scons/engine/SCons/exitfuncs.py +77 -0
  203. data/lib/libv8/scons/os_spawnv_fix.diff +83 -0
  204. data/lib/libv8/scons/scons-time.1 +1017 -0
  205. data/lib/libv8/scons/scons.1 +15225 -0
  206. data/lib/libv8/scons/sconsign.1 +208 -0
  207. data/lib/libv8/scons/script/scons +196 -0
  208. data/lib/libv8/scons/script/scons-time +1544 -0
  209. data/lib/libv8/scons/script/scons.bat +34 -0
  210. data/lib/libv8/scons/script/sconsign +514 -0
  211. data/lib/libv8/scons/setup.cfg +5 -0
  212. data/lib/libv8/scons/setup.py +423 -0
  213. data/lib/libv8/v8/.gitignore +35 -0
  214. data/lib/libv8/v8/AUTHORS +44 -0
  215. data/lib/libv8/v8/ChangeLog +2839 -0
  216. data/lib/libv8/v8/LICENSE +52 -0
  217. data/lib/libv8/v8/LICENSE.strongtalk +29 -0
  218. data/lib/libv8/v8/LICENSE.v8 +26 -0
  219. data/lib/libv8/v8/LICENSE.valgrind +45 -0
  220. data/lib/libv8/v8/SConstruct +1478 -0
  221. data/lib/libv8/v8/build/README.txt +49 -0
  222. data/lib/libv8/v8/build/all.gyp +18 -0
  223. data/lib/libv8/v8/build/armu.gypi +32 -0
  224. data/lib/libv8/v8/build/common.gypi +144 -0
  225. data/lib/libv8/v8/build/gyp_v8 +145 -0
  226. data/lib/libv8/v8/include/v8-debug.h +395 -0
  227. data/lib/libv8/v8/include/v8-preparser.h +117 -0
  228. data/lib/libv8/v8/include/v8-profiler.h +505 -0
  229. data/lib/libv8/v8/include/v8-testing.h +104 -0
  230. data/lib/libv8/v8/include/v8.h +4124 -0
  231. data/lib/libv8/v8/include/v8stdint.h +53 -0
  232. data/lib/libv8/v8/preparser/SConscript +38 -0
  233. data/lib/libv8/v8/preparser/preparser-process.cc +379 -0
  234. data/lib/libv8/v8/src/SConscript +368 -0
  235. data/lib/libv8/v8/src/accessors.cc +767 -0
  236. data/lib/libv8/v8/src/accessors.h +123 -0
  237. data/lib/libv8/v8/src/allocation-inl.h +49 -0
  238. data/lib/libv8/v8/src/allocation.cc +122 -0
  239. data/lib/libv8/v8/src/allocation.h +143 -0
  240. data/lib/libv8/v8/src/api.cc +5845 -0
  241. data/lib/libv8/v8/src/api.h +574 -0
  242. data/lib/libv8/v8/src/apinatives.js +110 -0
  243. data/lib/libv8/v8/src/apiutils.h +73 -0
  244. data/lib/libv8/v8/src/arguments.h +118 -0
  245. data/lib/libv8/v8/src/arm/assembler-arm-inl.h +353 -0
  246. data/lib/libv8/v8/src/arm/assembler-arm.cc +2661 -0
  247. data/lib/libv8/v8/src/arm/assembler-arm.h +1375 -0
  248. data/lib/libv8/v8/src/arm/builtins-arm.cc +1658 -0
  249. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +6398 -0
  250. data/lib/libv8/v8/src/arm/code-stubs-arm.h +673 -0
  251. data/lib/libv8/v8/src/arm/codegen-arm.cc +52 -0
  252. data/lib/libv8/v8/src/arm/codegen-arm.h +91 -0
  253. data/lib/libv8/v8/src/arm/constants-arm.cc +152 -0
  254. data/lib/libv8/v8/src/arm/constants-arm.h +775 -0
  255. data/lib/libv8/v8/src/arm/cpu-arm.cc +120 -0
  256. data/lib/libv8/v8/src/arm/debug-arm.cc +317 -0
  257. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +754 -0
  258. data/lib/libv8/v8/src/arm/disasm-arm.cc +1506 -0
  259. data/lib/libv8/v8/src/arm/frames-arm.cc +45 -0
  260. data/lib/libv8/v8/src/arm/frames-arm.h +168 -0
  261. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +4375 -0
  262. data/lib/libv8/v8/src/arm/ic-arm.cc +1562 -0
  263. data/lib/libv8/v8/src/arm/lithium-arm.cc +2206 -0
  264. data/lib/libv8/v8/src/arm/lithium-arm.h +2348 -0
  265. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +4526 -0
  266. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +403 -0
  267. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  268. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.h +84 -0
  269. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +3163 -0
  270. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +1126 -0
  271. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  272. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  273. data/lib/libv8/v8/src/arm/simulator-arm.cc +3424 -0
  274. data/lib/libv8/v8/src/arm/simulator-arm.h +431 -0
  275. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +4243 -0
  276. data/lib/libv8/v8/src/array.js +1366 -0
  277. data/lib/libv8/v8/src/assembler.cc +1207 -0
  278. data/lib/libv8/v8/src/assembler.h +858 -0
  279. data/lib/libv8/v8/src/ast-inl.h +112 -0
  280. data/lib/libv8/v8/src/ast.cc +1146 -0
  281. data/lib/libv8/v8/src/ast.h +2188 -0
  282. data/lib/libv8/v8/src/atomicops.h +167 -0
  283. data/lib/libv8/v8/src/atomicops_internals_arm_gcc.h +145 -0
  284. data/lib/libv8/v8/src/atomicops_internals_mips_gcc.h +169 -0
  285. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.cc +133 -0
  286. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.h +287 -0
  287. data/lib/libv8/v8/src/atomicops_internals_x86_macosx.h +301 -0
  288. data/lib/libv8/v8/src/atomicops_internals_x86_msvc.h +203 -0
  289. data/lib/libv8/v8/src/bignum-dtoa.cc +655 -0
  290. data/lib/libv8/v8/src/bignum-dtoa.h +81 -0
  291. data/lib/libv8/v8/src/bignum.cc +768 -0
  292. data/lib/libv8/v8/src/bignum.h +140 -0
  293. data/lib/libv8/v8/src/bootstrapper.cc +2184 -0
  294. data/lib/libv8/v8/src/bootstrapper.h +188 -0
  295. data/lib/libv8/v8/src/builtins.cc +1707 -0
  296. data/lib/libv8/v8/src/builtins.h +371 -0
  297. data/lib/libv8/v8/src/bytecodes-irregexp.h +105 -0
  298. data/lib/libv8/v8/src/cached-powers.cc +177 -0
  299. data/lib/libv8/v8/src/cached-powers.h +65 -0
  300. data/lib/libv8/v8/src/char-predicates-inl.h +94 -0
  301. data/lib/libv8/v8/src/char-predicates.h +67 -0
  302. data/lib/libv8/v8/src/checks.cc +110 -0
  303. data/lib/libv8/v8/src/checks.h +296 -0
  304. data/lib/libv8/v8/src/circular-queue-inl.h +53 -0
  305. data/lib/libv8/v8/src/circular-queue.cc +122 -0
  306. data/lib/libv8/v8/src/circular-queue.h +103 -0
  307. data/lib/libv8/v8/src/code-stubs.cc +267 -0
  308. data/lib/libv8/v8/src/code-stubs.h +1011 -0
  309. data/lib/libv8/v8/src/code.h +70 -0
  310. data/lib/libv8/v8/src/codegen.cc +231 -0
  311. data/lib/libv8/v8/src/codegen.h +84 -0
  312. data/lib/libv8/v8/src/compilation-cache.cc +540 -0
  313. data/lib/libv8/v8/src/compilation-cache.h +287 -0
  314. data/lib/libv8/v8/src/compiler.cc +786 -0
  315. data/lib/libv8/v8/src/compiler.h +312 -0
  316. data/lib/libv8/v8/src/contexts.cc +347 -0
  317. data/lib/libv8/v8/src/contexts.h +391 -0
  318. data/lib/libv8/v8/src/conversions-inl.h +106 -0
  319. data/lib/libv8/v8/src/conversions.cc +1131 -0
  320. data/lib/libv8/v8/src/conversions.h +135 -0
  321. data/lib/libv8/v8/src/counters.cc +93 -0
  322. data/lib/libv8/v8/src/counters.h +254 -0
  323. data/lib/libv8/v8/src/cpu-profiler-inl.h +101 -0
  324. data/lib/libv8/v8/src/cpu-profiler.cc +609 -0
  325. data/lib/libv8/v8/src/cpu-profiler.h +302 -0
  326. data/lib/libv8/v8/src/cpu.h +69 -0
  327. data/lib/libv8/v8/src/d8-debug.cc +367 -0
  328. data/lib/libv8/v8/src/d8-debug.h +158 -0
  329. data/lib/libv8/v8/src/d8-posix.cc +695 -0
  330. data/lib/libv8/v8/src/d8-readline.cc +130 -0
  331. data/lib/libv8/v8/src/d8-windows.cc +42 -0
  332. data/lib/libv8/v8/src/d8.cc +803 -0
  333. data/lib/libv8/v8/src/d8.gyp +91 -0
  334. data/lib/libv8/v8/src/d8.h +235 -0
  335. data/lib/libv8/v8/src/d8.js +2798 -0
  336. data/lib/libv8/v8/src/data-flow.cc +66 -0
  337. data/lib/libv8/v8/src/data-flow.h +205 -0
  338. data/lib/libv8/v8/src/date.js +1103 -0
  339. data/lib/libv8/v8/src/dateparser-inl.h +127 -0
  340. data/lib/libv8/v8/src/dateparser.cc +178 -0
  341. data/lib/libv8/v8/src/dateparser.h +266 -0
  342. data/lib/libv8/v8/src/debug-agent.cc +447 -0
  343. data/lib/libv8/v8/src/debug-agent.h +129 -0
  344. data/lib/libv8/v8/src/debug-debugger.js +2569 -0
  345. data/lib/libv8/v8/src/debug.cc +3165 -0
  346. data/lib/libv8/v8/src/debug.h +1057 -0
  347. data/lib/libv8/v8/src/deoptimizer.cc +1256 -0
  348. data/lib/libv8/v8/src/deoptimizer.h +602 -0
  349. data/lib/libv8/v8/src/disasm.h +80 -0
  350. data/lib/libv8/v8/src/disassembler.cc +343 -0
  351. data/lib/libv8/v8/src/disassembler.h +58 -0
  352. data/lib/libv8/v8/src/diy-fp.cc +58 -0
  353. data/lib/libv8/v8/src/diy-fp.h +117 -0
  354. data/lib/libv8/v8/src/double.h +238 -0
  355. data/lib/libv8/v8/src/dtoa.cc +103 -0
  356. data/lib/libv8/v8/src/dtoa.h +85 -0
  357. data/lib/libv8/v8/src/execution.cc +849 -0
  358. data/lib/libv8/v8/src/execution.h +297 -0
  359. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +250 -0
  360. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +89 -0
  361. data/lib/libv8/v8/src/extensions/experimental/collator.cc +218 -0
  362. data/lib/libv8/v8/src/extensions/experimental/collator.h +69 -0
  363. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +94 -0
  364. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +78 -0
  365. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +54 -0
  366. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +112 -0
  367. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +60 -0
  368. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +43 -0
  369. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +49 -0
  370. data/lib/libv8/v8/src/extensions/experimental/i18n.js +180 -0
  371. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +251 -0
  372. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +95 -0
  373. data/lib/libv8/v8/src/extensions/externalize-string-extension.cc +141 -0
  374. data/lib/libv8/v8/src/extensions/externalize-string-extension.h +50 -0
  375. data/lib/libv8/v8/src/extensions/gc-extension.cc +58 -0
  376. data/lib/libv8/v8/src/extensions/gc-extension.h +49 -0
  377. data/lib/libv8/v8/src/factory.cc +1222 -0
  378. data/lib/libv8/v8/src/factory.h +442 -0
  379. data/lib/libv8/v8/src/fast-dtoa.cc +736 -0
  380. data/lib/libv8/v8/src/fast-dtoa.h +83 -0
  381. data/lib/libv8/v8/src/fixed-dtoa.cc +405 -0
  382. data/lib/libv8/v8/src/fixed-dtoa.h +55 -0
  383. data/lib/libv8/v8/src/flag-definitions.h +560 -0
  384. data/lib/libv8/v8/src/flags.cc +551 -0
  385. data/lib/libv8/v8/src/flags.h +79 -0
  386. data/lib/libv8/v8/src/frames-inl.h +247 -0
  387. data/lib/libv8/v8/src/frames.cc +1243 -0
  388. data/lib/libv8/v8/src/frames.h +870 -0
  389. data/lib/libv8/v8/src/full-codegen.cc +1374 -0
  390. data/lib/libv8/v8/src/full-codegen.h +771 -0
  391. data/lib/libv8/v8/src/func-name-inferrer.cc +92 -0
  392. data/lib/libv8/v8/src/func-name-inferrer.h +111 -0
  393. data/lib/libv8/v8/src/gdb-jit.cc +1555 -0
  394. data/lib/libv8/v8/src/gdb-jit.h +143 -0
  395. data/lib/libv8/v8/src/global-handles.cc +665 -0
  396. data/lib/libv8/v8/src/global-handles.h +284 -0
  397. data/lib/libv8/v8/src/globals.h +325 -0
  398. data/lib/libv8/v8/src/handles-inl.h +177 -0
  399. data/lib/libv8/v8/src/handles.cc +987 -0
  400. data/lib/libv8/v8/src/handles.h +382 -0
  401. data/lib/libv8/v8/src/hashmap.cc +230 -0
  402. data/lib/libv8/v8/src/hashmap.h +123 -0
  403. data/lib/libv8/v8/src/heap-inl.h +704 -0
  404. data/lib/libv8/v8/src/heap-profiler.cc +1173 -0
  405. data/lib/libv8/v8/src/heap-profiler.h +397 -0
  406. data/lib/libv8/v8/src/heap.cc +5930 -0
  407. data/lib/libv8/v8/src/heap.h +2268 -0
  408. data/lib/libv8/v8/src/hydrogen-instructions.cc +1769 -0
  409. data/lib/libv8/v8/src/hydrogen-instructions.h +3971 -0
  410. data/lib/libv8/v8/src/hydrogen.cc +6239 -0
  411. data/lib/libv8/v8/src/hydrogen.h +1202 -0
  412. data/lib/libv8/v8/src/ia32/assembler-ia32-inl.h +446 -0
  413. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +2487 -0
  414. data/lib/libv8/v8/src/ia32/assembler-ia32.h +1144 -0
  415. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +1621 -0
  416. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +6198 -0
  417. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +517 -0
  418. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +265 -0
  419. data/lib/libv8/v8/src/ia32/codegen-ia32.h +79 -0
  420. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +88 -0
  421. data/lib/libv8/v8/src/ia32/debug-ia32.cc +312 -0
  422. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  423. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +1628 -0
  424. data/lib/libv8/v8/src/ia32/frames-ia32.cc +45 -0
  425. data/lib/libv8/v8/src/ia32/frames-ia32.h +142 -0
  426. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +4338 -0
  427. data/lib/libv8/v8/src/ia32/ic-ia32.cc +1597 -0
  428. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +4461 -0
  429. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +375 -0
  430. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +475 -0
  431. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.h +110 -0
  432. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +2261 -0
  433. data/lib/libv8/v8/src/ia32/lithium-ia32.h +2396 -0
  434. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +2136 -0
  435. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +775 -0
  436. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +1263 -0
  437. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  438. data/lib/libv8/v8/src/ia32/simulator-ia32.cc +30 -0
  439. data/lib/libv8/v8/src/ia32/simulator-ia32.h +74 -0
  440. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +3847 -0
  441. data/lib/libv8/v8/src/ic-inl.h +130 -0
  442. data/lib/libv8/v8/src/ic.cc +2577 -0
  443. data/lib/libv8/v8/src/ic.h +736 -0
  444. data/lib/libv8/v8/src/inspector.cc +63 -0
  445. data/lib/libv8/v8/src/inspector.h +62 -0
  446. data/lib/libv8/v8/src/interpreter-irregexp.cc +659 -0
  447. data/lib/libv8/v8/src/interpreter-irregexp.h +49 -0
  448. data/lib/libv8/v8/src/isolate-inl.h +50 -0
  449. data/lib/libv8/v8/src/isolate.cc +1869 -0
  450. data/lib/libv8/v8/src/isolate.h +1382 -0
  451. data/lib/libv8/v8/src/json-parser.cc +504 -0
  452. data/lib/libv8/v8/src/json-parser.h +161 -0
  453. data/lib/libv8/v8/src/json.js +342 -0
  454. data/lib/libv8/v8/src/jsregexp.cc +5385 -0
  455. data/lib/libv8/v8/src/jsregexp.h +1492 -0
  456. data/lib/libv8/v8/src/list-inl.h +212 -0
  457. data/lib/libv8/v8/src/list.h +174 -0
  458. data/lib/libv8/v8/src/lithium-allocator-inl.h +142 -0
  459. data/lib/libv8/v8/src/lithium-allocator.cc +2123 -0
  460. data/lib/libv8/v8/src/lithium-allocator.h +630 -0
  461. data/lib/libv8/v8/src/lithium.cc +190 -0
  462. data/lib/libv8/v8/src/lithium.h +597 -0
  463. data/lib/libv8/v8/src/liveedit-debugger.js +1082 -0
  464. data/lib/libv8/v8/src/liveedit.cc +1691 -0
  465. data/lib/libv8/v8/src/liveedit.h +180 -0
  466. data/lib/libv8/v8/src/liveobjectlist-inl.h +126 -0
  467. data/lib/libv8/v8/src/liveobjectlist.cc +2589 -0
  468. data/lib/libv8/v8/src/liveobjectlist.h +322 -0
  469. data/lib/libv8/v8/src/log-inl.h +59 -0
  470. data/lib/libv8/v8/src/log-utils.cc +428 -0
  471. data/lib/libv8/v8/src/log-utils.h +231 -0
  472. data/lib/libv8/v8/src/log.cc +1993 -0
  473. data/lib/libv8/v8/src/log.h +476 -0
  474. data/lib/libv8/v8/src/macro-assembler.h +120 -0
  475. data/lib/libv8/v8/src/macros.py +178 -0
  476. data/lib/libv8/v8/src/mark-compact.cc +3143 -0
  477. data/lib/libv8/v8/src/mark-compact.h +506 -0
  478. data/lib/libv8/v8/src/math.js +264 -0
  479. data/lib/libv8/v8/src/messages.cc +179 -0
  480. data/lib/libv8/v8/src/messages.h +113 -0
  481. data/lib/libv8/v8/src/messages.js +1096 -0
  482. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +312 -0
  483. data/lib/libv8/v8/src/mips/assembler-mips.cc +1960 -0
  484. data/lib/libv8/v8/src/mips/assembler-mips.h +1138 -0
  485. data/lib/libv8/v8/src/mips/builtins-mips.cc +1628 -0
  486. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +6656 -0
  487. data/lib/libv8/v8/src/mips/code-stubs-mips.h +682 -0
  488. data/lib/libv8/v8/src/mips/codegen-mips.cc +52 -0
  489. data/lib/libv8/v8/src/mips/codegen-mips.h +98 -0
  490. data/lib/libv8/v8/src/mips/constants-mips.cc +352 -0
  491. data/lib/libv8/v8/src/mips/constants-mips.h +739 -0
  492. data/lib/libv8/v8/src/mips/cpu-mips.cc +96 -0
  493. data/lib/libv8/v8/src/mips/debug-mips.cc +308 -0
  494. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +91 -0
  495. data/lib/libv8/v8/src/mips/disasm-mips.cc +1050 -0
  496. data/lib/libv8/v8/src/mips/frames-mips.cc +47 -0
  497. data/lib/libv8/v8/src/mips/frames-mips.h +219 -0
  498. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +4388 -0
  499. data/lib/libv8/v8/src/mips/ic-mips.cc +1580 -0
  500. data/lib/libv8/v8/src/mips/lithium-codegen-mips.h +65 -0
  501. data/lib/libv8/v8/src/mips/lithium-mips.h +307 -0
  502. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +4056 -0
  503. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +1214 -0
  504. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +1251 -0
  505. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +252 -0
  506. data/lib/libv8/v8/src/mips/simulator-mips.cc +2621 -0
  507. data/lib/libv8/v8/src/mips/simulator-mips.h +401 -0
  508. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +4285 -0
  509. data/lib/libv8/v8/src/mirror-debugger.js +2382 -0
  510. data/lib/libv8/v8/src/mksnapshot.cc +328 -0
  511. data/lib/libv8/v8/src/natives.h +64 -0
  512. data/lib/libv8/v8/src/objects-debug.cc +738 -0
  513. data/lib/libv8/v8/src/objects-inl.h +4323 -0
  514. data/lib/libv8/v8/src/objects-printer.cc +829 -0
  515. data/lib/libv8/v8/src/objects-visiting.cc +148 -0
  516. data/lib/libv8/v8/src/objects-visiting.h +424 -0
  517. data/lib/libv8/v8/src/objects.cc +10585 -0
  518. data/lib/libv8/v8/src/objects.h +6838 -0
  519. data/lib/libv8/v8/src/parser.cc +4997 -0
  520. data/lib/libv8/v8/src/parser.h +765 -0
  521. data/lib/libv8/v8/src/platform-cygwin.cc +779 -0
  522. data/lib/libv8/v8/src/platform-freebsd.cc +826 -0
  523. data/lib/libv8/v8/src/platform-linux.cc +1149 -0
  524. data/lib/libv8/v8/src/platform-macos.cc +830 -0
  525. data/lib/libv8/v8/src/platform-nullos.cc +479 -0
  526. data/lib/libv8/v8/src/platform-openbsd.cc +640 -0
  527. data/lib/libv8/v8/src/platform-posix.cc +424 -0
  528. data/lib/libv8/v8/src/platform-solaris.cc +762 -0
  529. data/lib/libv8/v8/src/platform-tls-mac.h +62 -0
  530. data/lib/libv8/v8/src/platform-tls-win32.h +62 -0
  531. data/lib/libv8/v8/src/platform-tls.h +50 -0
  532. data/lib/libv8/v8/src/platform-win32.cc +2021 -0
  533. data/lib/libv8/v8/src/platform.h +667 -0
  534. data/lib/libv8/v8/src/preparse-data-format.h +62 -0
  535. data/lib/libv8/v8/src/preparse-data.cc +183 -0
  536. data/lib/libv8/v8/src/preparse-data.h +225 -0
  537. data/lib/libv8/v8/src/preparser-api.cc +220 -0
  538. data/lib/libv8/v8/src/preparser.cc +1450 -0
  539. data/lib/libv8/v8/src/preparser.h +493 -0
  540. data/lib/libv8/v8/src/prettyprinter.cc +1493 -0
  541. data/lib/libv8/v8/src/prettyprinter.h +223 -0
  542. data/lib/libv8/v8/src/profile-generator-inl.h +128 -0
  543. data/lib/libv8/v8/src/profile-generator.cc +3098 -0
  544. data/lib/libv8/v8/src/profile-generator.h +1126 -0
  545. data/lib/libv8/v8/src/property.cc +105 -0
  546. data/lib/libv8/v8/src/property.h +365 -0
  547. data/lib/libv8/v8/src/proxy.js +83 -0
  548. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  549. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.cc +471 -0
  550. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.h +142 -0
  551. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.cc +373 -0
  552. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.h +104 -0
  553. data/lib/libv8/v8/src/regexp-macro-assembler.cc +267 -0
  554. data/lib/libv8/v8/src/regexp-macro-assembler.h +243 -0
  555. data/lib/libv8/v8/src/regexp-stack.cc +111 -0
  556. data/lib/libv8/v8/src/regexp-stack.h +147 -0
  557. data/lib/libv8/v8/src/regexp.js +483 -0
  558. data/lib/libv8/v8/src/rewriter.cc +360 -0
  559. data/lib/libv8/v8/src/rewriter.h +50 -0
  560. data/lib/libv8/v8/src/runtime-profiler.cc +489 -0
  561. data/lib/libv8/v8/src/runtime-profiler.h +201 -0
  562. data/lib/libv8/v8/src/runtime.cc +12227 -0
  563. data/lib/libv8/v8/src/runtime.h +652 -0
  564. data/lib/libv8/v8/src/runtime.js +649 -0
  565. data/lib/libv8/v8/src/safepoint-table.cc +256 -0
  566. data/lib/libv8/v8/src/safepoint-table.h +270 -0
  567. data/lib/libv8/v8/src/scanner-base.cc +952 -0
  568. data/lib/libv8/v8/src/scanner-base.h +670 -0
  569. data/lib/libv8/v8/src/scanner.cc +345 -0
  570. data/lib/libv8/v8/src/scanner.h +146 -0
  571. data/lib/libv8/v8/src/scopeinfo.cc +646 -0
  572. data/lib/libv8/v8/src/scopeinfo.h +254 -0
  573. data/lib/libv8/v8/src/scopes.cc +1150 -0
  574. data/lib/libv8/v8/src/scopes.h +507 -0
  575. data/lib/libv8/v8/src/serialize.cc +1574 -0
  576. data/lib/libv8/v8/src/serialize.h +589 -0
  577. data/lib/libv8/v8/src/shell.h +55 -0
  578. data/lib/libv8/v8/src/simulator.h +43 -0
  579. data/lib/libv8/v8/src/small-pointer-list.h +163 -0
  580. data/lib/libv8/v8/src/smart-pointer.h +109 -0
  581. data/lib/libv8/v8/src/snapshot-common.cc +83 -0
  582. data/lib/libv8/v8/src/snapshot-empty.cc +54 -0
  583. data/lib/libv8/v8/src/snapshot.h +91 -0
  584. data/lib/libv8/v8/src/spaces-inl.h +529 -0
  585. data/lib/libv8/v8/src/spaces.cc +3145 -0
  586. data/lib/libv8/v8/src/spaces.h +2369 -0
  587. data/lib/libv8/v8/src/splay-tree-inl.h +310 -0
  588. data/lib/libv8/v8/src/splay-tree.h +205 -0
  589. data/lib/libv8/v8/src/string-search.cc +41 -0
  590. data/lib/libv8/v8/src/string-search.h +568 -0
  591. data/lib/libv8/v8/src/string-stream.cc +592 -0
  592. data/lib/libv8/v8/src/string-stream.h +191 -0
  593. data/lib/libv8/v8/src/string.js +994 -0
  594. data/lib/libv8/v8/src/strtod.cc +440 -0
  595. data/lib/libv8/v8/src/strtod.h +40 -0
  596. data/lib/libv8/v8/src/stub-cache.cc +1965 -0
  597. data/lib/libv8/v8/src/stub-cache.h +924 -0
  598. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +3925 -0
  599. data/lib/libv8/v8/src/token.cc +63 -0
  600. data/lib/libv8/v8/src/token.h +288 -0
  601. data/lib/libv8/v8/src/type-info.cc +507 -0
  602. data/lib/libv8/v8/src/type-info.h +272 -0
  603. data/lib/libv8/v8/src/unbound-queue-inl.h +95 -0
  604. data/lib/libv8/v8/src/unbound-queue.h +69 -0
  605. data/lib/libv8/v8/src/unicode-inl.h +238 -0
  606. data/lib/libv8/v8/src/unicode.cc +1624 -0
  607. data/lib/libv8/v8/src/unicode.h +280 -0
  608. data/lib/libv8/v8/src/uri.js +408 -0
  609. data/lib/libv8/v8/src/utils-inl.h +48 -0
  610. data/lib/libv8/v8/src/utils.cc +371 -0
  611. data/lib/libv8/v8/src/utils.h +800 -0
  612. data/lib/libv8/v8/src/v8-counters.cc +62 -0
  613. data/lib/libv8/v8/src/v8-counters.h +314 -0
  614. data/lib/libv8/v8/src/v8.cc +213 -0
  615. data/lib/libv8/v8/src/v8.h +131 -0
  616. data/lib/libv8/v8/src/v8checks.h +64 -0
  617. data/lib/libv8/v8/src/v8dll-main.cc +44 -0
  618. data/lib/libv8/v8/src/v8globals.h +512 -0
  619. data/lib/libv8/v8/src/v8memory.h +82 -0
  620. data/lib/libv8/v8/src/v8natives.js +1310 -0
  621. data/lib/libv8/v8/src/v8preparserdll-main.cc +39 -0
  622. data/lib/libv8/v8/src/v8threads.cc +464 -0
  623. data/lib/libv8/v8/src/v8threads.h +165 -0
  624. data/lib/libv8/v8/src/v8utils.h +319 -0
  625. data/lib/libv8/v8/src/variables.cc +114 -0
  626. data/lib/libv8/v8/src/variables.h +167 -0
  627. data/lib/libv8/v8/src/version.cc +116 -0
  628. data/lib/libv8/v8/src/version.h +68 -0
  629. data/lib/libv8/v8/src/vm-state-inl.h +138 -0
  630. data/lib/libv8/v8/src/vm-state.h +71 -0
  631. data/lib/libv8/v8/src/win32-headers.h +96 -0
  632. data/lib/libv8/v8/src/x64/assembler-x64-inl.h +462 -0
  633. data/lib/libv8/v8/src/x64/assembler-x64.cc +3027 -0
  634. data/lib/libv8/v8/src/x64/assembler-x64.h +1633 -0
  635. data/lib/libv8/v8/src/x64/builtins-x64.cc +1520 -0
  636. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +5132 -0
  637. data/lib/libv8/v8/src/x64/code-stubs-x64.h +514 -0
  638. data/lib/libv8/v8/src/x64/codegen-x64.cc +146 -0
  639. data/lib/libv8/v8/src/x64/codegen-x64.h +76 -0
  640. data/lib/libv8/v8/src/x64/cpu-x64.cc +88 -0
  641. data/lib/libv8/v8/src/x64/debug-x64.cc +319 -0
  642. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +815 -0
  643. data/lib/libv8/v8/src/x64/disasm-x64.cc +1832 -0
  644. data/lib/libv8/v8/src/x64/frames-x64.cc +45 -0
  645. data/lib/libv8/v8/src/x64/frames-x64.h +130 -0
  646. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +4318 -0
  647. data/lib/libv8/v8/src/x64/ic-x64.cc +1608 -0
  648. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +4267 -0
  649. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +367 -0
  650. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.cc +320 -0
  651. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.h +74 -0
  652. data/lib/libv8/v8/src/x64/lithium-x64.cc +2202 -0
  653. data/lib/libv8/v8/src/x64/lithium-x64.h +2333 -0
  654. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +3745 -0
  655. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +1290 -0
  656. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  657. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  658. data/lib/libv8/v8/src/x64/simulator-x64.cc +27 -0
  659. data/lib/libv8/v8/src/x64/simulator-x64.h +72 -0
  660. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +3610 -0
  661. data/lib/libv8/v8/src/zone-inl.h +140 -0
  662. data/lib/libv8/v8/src/zone.cc +196 -0
  663. data/lib/libv8/v8/src/zone.h +240 -0
  664. data/lib/libv8/v8/tools/codemap.js +265 -0
  665. data/lib/libv8/v8/tools/consarray.js +93 -0
  666. data/lib/libv8/v8/tools/csvparser.js +78 -0
  667. data/lib/libv8/v8/tools/disasm.py +92 -0
  668. data/lib/libv8/v8/tools/freebsd-tick-processor +10 -0
  669. data/lib/libv8/v8/tools/gc-nvp-trace-processor.py +342 -0
  670. data/lib/libv8/v8/tools/gcmole/README +62 -0
  671. data/lib/libv8/v8/tools/gcmole/gccause.lua +60 -0
  672. data/lib/libv8/v8/tools/gcmole/gcmole.cc +1261 -0
  673. data/lib/libv8/v8/tools/gcmole/gcmole.lua +378 -0
  674. data/lib/libv8/v8/tools/generate-ten-powers.scm +286 -0
  675. data/lib/libv8/v8/tools/grokdump.py +841 -0
  676. data/lib/libv8/v8/tools/gyp/v8.gyp +995 -0
  677. data/lib/libv8/v8/tools/js2c.py +364 -0
  678. data/lib/libv8/v8/tools/jsmin.py +280 -0
  679. data/lib/libv8/v8/tools/linux-tick-processor +35 -0
  680. data/lib/libv8/v8/tools/ll_prof.py +942 -0
  681. data/lib/libv8/v8/tools/logreader.js +185 -0
  682. data/lib/libv8/v8/tools/mac-nm +18 -0
  683. data/lib/libv8/v8/tools/mac-tick-processor +6 -0
  684. data/lib/libv8/v8/tools/oom_dump/README +31 -0
  685. data/lib/libv8/v8/tools/oom_dump/SConstruct +42 -0
  686. data/lib/libv8/v8/tools/oom_dump/oom_dump.cc +288 -0
  687. data/lib/libv8/v8/tools/presubmit.py +305 -0
  688. data/lib/libv8/v8/tools/process-heap-prof.py +120 -0
  689. data/lib/libv8/v8/tools/profile.js +751 -0
  690. data/lib/libv8/v8/tools/profile_view.js +219 -0
  691. data/lib/libv8/v8/tools/run-valgrind.py +77 -0
  692. data/lib/libv8/v8/tools/splaytree.js +316 -0
  693. data/lib/libv8/v8/tools/stats-viewer.py +468 -0
  694. data/lib/libv8/v8/tools/test.py +1510 -0
  695. data/lib/libv8/v8/tools/tickprocessor-driver.js +59 -0
  696. data/lib/libv8/v8/tools/tickprocessor.js +877 -0
  697. data/lib/libv8/v8/tools/utils.py +96 -0
  698. data/lib/libv8/v8/tools/visual_studio/README.txt +12 -0
  699. data/lib/libv8/v8/tools/windows-tick-processor.bat +30 -0
  700. data/lib/libv8/version.rb +6 -0
  701. data/libv8.gemspec +36 -0
  702. data/thefrontside.png +0 -0
  703. metadata +776 -0
@@ -0,0 +1,128 @@
1
+ """scons.Node.Python
2
+
3
+ Python nodes.
4
+
5
+ """
6
+
7
+ #
8
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
9
+ #
10
+ # Permission is hereby granted, free of charge, to any person obtaining
11
+ # a copy of this software and associated documentation files (the
12
+ # "Software"), to deal in the Software without restriction, including
13
+ # without limitation the rights to use, copy, modify, merge, publish,
14
+ # distribute, sublicense, and/or sell copies of the Software, and to
15
+ # permit persons to whom the Software is furnished to do so, subject to
16
+ # the following conditions:
17
+ #
18
+ # The above copyright notice and this permission notice shall be included
19
+ # in all copies or substantial portions of the Software.
20
+ #
21
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
22
+ # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
23
+ # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+ #
29
+
30
+ __revision__ = "src/engine/SCons/Node/Python.py 5357 2011/09/09 21:31:03 bdeegan"
31
+
32
+ import SCons.Node
33
+
34
+ class ValueNodeInfo(SCons.Node.NodeInfoBase):
35
+ current_version_id = 1
36
+
37
+ field_list = ['csig']
38
+
39
+ def str_to_node(self, s):
40
+ return Value(s)
41
+
42
+ class ValueBuildInfo(SCons.Node.BuildInfoBase):
43
+ current_version_id = 1
44
+
45
+ class Value(SCons.Node.Node):
46
+ """A class for Python variables, typically passed on the command line
47
+ or generated by a script, but not from a file or some other source.
48
+ """
49
+
50
+ NodeInfo = ValueNodeInfo
51
+ BuildInfo = ValueBuildInfo
52
+
53
+ def __init__(self, value, built_value=None):
54
+ SCons.Node.Node.__init__(self)
55
+ self.value = value
56
+ if built_value is not None:
57
+ self.built_value = built_value
58
+
59
+ def str_for_display(self):
60
+ return repr(self.value)
61
+
62
+ def __str__(self):
63
+ return str(self.value)
64
+
65
+ def make_ready(self):
66
+ self.get_csig()
67
+
68
+ def build(self, **kw):
69
+ if not hasattr(self, 'built_value'):
70
+ SCons.Node.Node.build(self, **kw)
71
+
72
+ is_up_to_date = SCons.Node.Node.children_are_up_to_date
73
+
74
+ def is_under(self, dir):
75
+ # Make Value nodes get built regardless of
76
+ # what directory scons was run from. Value nodes
77
+ # are outside the filesystem:
78
+ return 1
79
+
80
+ def write(self, built_value):
81
+ """Set the value of the node."""
82
+ self.built_value = built_value
83
+
84
+ def read(self):
85
+ """Return the value. If necessary, the value is built."""
86
+ self.build()
87
+ if not hasattr(self, 'built_value'):
88
+ self.built_value = self.value
89
+ return self.built_value
90
+
91
+ def get_text_contents(self):
92
+ """By the assumption that the node.built_value is a
93
+ deterministic product of the sources, the contents of a Value
94
+ are the concatenation of all the contents of its sources. As
95
+ the value need not be built when get_contents() is called, we
96
+ cannot use the actual node.built_value."""
97
+ ###TODO: something reasonable about universal newlines
98
+ contents = str(self.value)
99
+ for kid in self.children(None):
100
+ contents = contents + kid.get_contents()
101
+ return contents
102
+
103
+ get_contents = get_text_contents ###TODO should return 'bytes' value
104
+
105
+ def changed_since_last_build(self, target, prev_ni):
106
+ cur_csig = self.get_csig()
107
+ try:
108
+ return cur_csig != prev_ni.csig
109
+ except AttributeError:
110
+ return 1
111
+
112
+ def get_csig(self, calc=None):
113
+ """Because we're a Python value node and don't have a real
114
+ timestamp, we get to ignore the calculator and just use the
115
+ value contents."""
116
+ try:
117
+ return self.ninfo.csig
118
+ except AttributeError:
119
+ pass
120
+ contents = self.get_contents()
121
+ self.get_ninfo().csig = contents
122
+ return contents
123
+
124
+ # Local Variables:
125
+ # tab-width:4
126
+ # indent-tabs-mode:nil
127
+ # End:
128
+ # vim: set expandtab tabstop=4 shiftwidth=4:
@@ -0,0 +1,1329 @@
1
+ """SCons.Node
2
+
3
+ The Node package for the SCons software construction utility.
4
+
5
+ This is, in many ways, the heart of SCons.
6
+
7
+ A Node is where we encapsulate all of the dependency information about
8
+ any thing that SCons can build, or about any thing which SCons can use
9
+ to build some other thing. The canonical "thing," of course, is a file,
10
+ but a Node can also represent something remote (like a web page) or
11
+ something completely abstract (like an Alias).
12
+
13
+ Each specific type of "thing" is specifically represented by a subclass
14
+ of the Node base class: Node.FS.File for files, Node.Alias for aliases,
15
+ etc. Dependency information is kept here in the base class, and
16
+ information specific to files/aliases/etc. is in the subclass. The
17
+ goal, if we've done this correctly, is that any type of "thing" should
18
+ be able to depend on any other type of "thing."
19
+
20
+ """
21
+
22
+ #
23
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
24
+ #
25
+ # Permission is hereby granted, free of charge, to any person obtaining
26
+ # a copy of this software and associated documentation files (the
27
+ # "Software"), to deal in the Software without restriction, including
28
+ # without limitation the rights to use, copy, modify, merge, publish,
29
+ # distribute, sublicense, and/or sell copies of the Software, and to
30
+ # permit persons to whom the Software is furnished to do so, subject to
31
+ # the following conditions:
32
+ #
33
+ # The above copyright notice and this permission notice shall be included
34
+ # in all copies or substantial portions of the Software.
35
+ #
36
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
37
+ # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
38
+ # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
39
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
40
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
41
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
42
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43
+
44
+ __revision__ = "src/engine/SCons/Node/__init__.py 5357 2011/09/09 21:31:03 bdeegan"
45
+
46
+ import collections
47
+ import copy
48
+ from itertools import chain
49
+
50
+ from SCons.Debug import logInstanceCreation
51
+ import SCons.Executor
52
+ import SCons.Memoize
53
+ import SCons.Util
54
+
55
+ from SCons.Debug import Trace
56
+
57
+ def classname(obj):
58
+ return str(obj.__class__).split('.')[-1]
59
+
60
+ # Node states
61
+ #
62
+ # These are in "priority" order, so that the maximum value for any
63
+ # child/dependency of a node represents the state of that node if
64
+ # it has no builder of its own. The canonical example is a file
65
+ # system directory, which is only up to date if all of its children
66
+ # were up to date.
67
+ no_state = 0
68
+ pending = 1
69
+ executing = 2
70
+ up_to_date = 3
71
+ executed = 4
72
+ failed = 5
73
+
74
+ StateString = {
75
+ 0 : "no_state",
76
+ 1 : "pending",
77
+ 2 : "executing",
78
+ 3 : "up_to_date",
79
+ 4 : "executed",
80
+ 5 : "failed",
81
+ }
82
+
83
+ # controls whether implicit dependencies are cached:
84
+ implicit_cache = 0
85
+
86
+ # controls whether implicit dep changes are ignored:
87
+ implicit_deps_unchanged = 0
88
+
89
+ # controls whether the cached implicit deps are ignored:
90
+ implicit_deps_changed = 0
91
+
92
+ # A variable that can be set to an interface-specific function be called
93
+ # to annotate a Node with information about its creation.
94
+ def do_nothing(node): pass
95
+
96
+ Annotate = do_nothing
97
+
98
+ # Classes for signature info for Nodes.
99
+
100
+ class NodeInfoBase(object):
101
+ """
102
+ The generic base class for signature information for a Node.
103
+
104
+ Node subclasses should subclass NodeInfoBase to provide their own
105
+ logic for dealing with their own Node-specific signature information.
106
+ """
107
+ current_version_id = 1
108
+ def __init__(self, node=None):
109
+ # Create an object attribute from the class attribute so it ends up
110
+ # in the pickled data in the .sconsign file.
111
+ self._version_id = self.current_version_id
112
+ def update(self, node):
113
+ try:
114
+ field_list = self.field_list
115
+ except AttributeError:
116
+ return
117
+ for f in field_list:
118
+ try:
119
+ delattr(self, f)
120
+ except AttributeError:
121
+ pass
122
+ try:
123
+ func = getattr(node, 'get_' + f)
124
+ except AttributeError:
125
+ pass
126
+ else:
127
+ setattr(self, f, func())
128
+ def convert(self, node, val):
129
+ pass
130
+ def merge(self, other):
131
+ self.__dict__.update(other.__dict__)
132
+ def format(self, field_list=None, names=0):
133
+ if field_list is None:
134
+ try:
135
+ field_list = self.field_list
136
+ except AttributeError:
137
+ field_list = sorted(self.__dict__.keys())
138
+ fields = []
139
+ for field in field_list:
140
+ try:
141
+ f = getattr(self, field)
142
+ except AttributeError:
143
+ f = None
144
+ f = str(f)
145
+ if names:
146
+ f = field + ': ' + f
147
+ fields.append(f)
148
+ return fields
149
+
150
+ class BuildInfoBase(object):
151
+ """
152
+ The generic base class for build information for a Node.
153
+
154
+ This is what gets stored in a .sconsign file for each target file.
155
+ It contains a NodeInfo instance for this node (signature information
156
+ that's specific to the type of Node) and direct attributes for the
157
+ generic build stuff we have to track: sources, explicit dependencies,
158
+ implicit dependencies, and action information.
159
+ """
160
+ current_version_id = 1
161
+ def __init__(self, node=None):
162
+ # Create an object attribute from the class attribute so it ends up
163
+ # in the pickled data in the .sconsign file.
164
+ self._version_id = self.current_version_id
165
+ self.bsourcesigs = []
166
+ self.bdependsigs = []
167
+ self.bimplicitsigs = []
168
+ self.bactsig = None
169
+ def merge(self, other):
170
+ self.__dict__.update(other.__dict__)
171
+
172
+ class Node(object):
173
+ """The base Node class, for entities that we know how to
174
+ build, or use to build other Nodes.
175
+ """
176
+
177
+ if SCons.Memoize.use_memoizer:
178
+ __metaclass__ = SCons.Memoize.Memoized_Metaclass
179
+
180
+ memoizer_counters = []
181
+
182
+ class Attrs(object):
183
+ pass
184
+
185
+ def __init__(self):
186
+ if __debug__: logInstanceCreation(self, 'Node.Node')
187
+ # Note that we no longer explicitly initialize a self.builder
188
+ # attribute to None here. That's because the self.builder
189
+ # attribute may be created on-the-fly later by a subclass (the
190
+ # canonical example being a builder to fetch a file from a
191
+ # source code system like CVS or Subversion).
192
+
193
+ # Each list of children that we maintain is accompanied by a
194
+ # dictionary used to look up quickly whether a node is already
195
+ # present in the list. Empirical tests showed that it was
196
+ # fastest to maintain them as side-by-side Node attributes in
197
+ # this way, instead of wrapping up each list+dictionary pair in
198
+ # a class. (Of course, we could always still do that in the
199
+ # future if we had a good reason to...).
200
+ self.sources = [] # source files used to build node
201
+ self.sources_set = set()
202
+ self._specific_sources = False
203
+ self.depends = [] # explicit dependencies (from Depends)
204
+ self.depends_set = set()
205
+ self.ignore = [] # dependencies to ignore
206
+ self.ignore_set = set()
207
+ self.prerequisites = SCons.Util.UniqueList()
208
+ self.implicit = None # implicit (scanned) dependencies (None means not scanned yet)
209
+ self.waiting_parents = set()
210
+ self.waiting_s_e = set()
211
+ self.ref_count = 0
212
+ self.wkids = None # Kids yet to walk, when it's an array
213
+
214
+ self.env = None
215
+ self.state = no_state
216
+ self.precious = None
217
+ self.noclean = 0
218
+ self.nocache = 0
219
+ self.always_build = None
220
+ self.includes = None
221
+ self.attributes = self.Attrs() # Generic place to stick information about the Node.
222
+ self.side_effect = 0 # true iff this node is a side effect
223
+ self.side_effects = [] # the side effects of building this target
224
+ self.linked = 0 # is this node linked to the variant directory?
225
+
226
+ self.clear_memoized_values()
227
+
228
+ # Let the interface in which the build engine is embedded
229
+ # annotate this Node with its own info (like a description of
230
+ # what line in what file created the node, for example).
231
+ Annotate(self)
232
+
233
+ def disambiguate(self, must_exist=None):
234
+ return self
235
+
236
+ def get_suffix(self):
237
+ return ''
238
+
239
+ memoizer_counters.append(SCons.Memoize.CountValue('get_build_env'))
240
+
241
+ def get_build_env(self):
242
+ """Fetch the appropriate Environment to build this node.
243
+ """
244
+ try:
245
+ return self._memo['get_build_env']
246
+ except KeyError:
247
+ pass
248
+ result = self.get_executor().get_build_env()
249
+ self._memo['get_build_env'] = result
250
+ return result
251
+
252
+ def get_build_scanner_path(self, scanner):
253
+ """Fetch the appropriate scanner path for this node."""
254
+ return self.get_executor().get_build_scanner_path(scanner)
255
+
256
+ def set_executor(self, executor):
257
+ """Set the action executor for this node."""
258
+ self.executor = executor
259
+
260
+ def get_executor(self, create=1):
261
+ """Fetch the action executor for this node. Create one if
262
+ there isn't already one, and requested to do so."""
263
+ try:
264
+ executor = self.executor
265
+ except AttributeError:
266
+ if not create:
267
+ raise
268
+ try:
269
+ act = self.builder.action
270
+ except AttributeError:
271
+ executor = SCons.Executor.Null(targets=[self])
272
+ else:
273
+ executor = SCons.Executor.Executor(act,
274
+ self.env or self.builder.env,
275
+ [self.builder.overrides],
276
+ [self],
277
+ self.sources)
278
+ self.executor = executor
279
+ return executor
280
+
281
+ def executor_cleanup(self):
282
+ """Let the executor clean up any cached information."""
283
+ try:
284
+ executor = self.get_executor(create=None)
285
+ except AttributeError:
286
+ pass
287
+ else:
288
+ executor.cleanup()
289
+
290
+ def reset_executor(self):
291
+ "Remove cached executor; forces recompute when needed."
292
+ try:
293
+ delattr(self, 'executor')
294
+ except AttributeError:
295
+ pass
296
+
297
+ def push_to_cache(self):
298
+ """Try to push a node into a cache
299
+ """
300
+ pass
301
+
302
+ def retrieve_from_cache(self):
303
+ """Try to retrieve the node's content from a cache
304
+
305
+ This method is called from multiple threads in a parallel build,
306
+ so only do thread safe stuff here. Do thread unsafe stuff in
307
+ built().
308
+
309
+ Returns true iff the node was successfully retrieved.
310
+ """
311
+ return 0
312
+
313
+ #
314
+ # Taskmaster interface subsystem
315
+ #
316
+
317
+ def make_ready(self):
318
+ """Get a Node ready for evaluation.
319
+
320
+ This is called before the Taskmaster decides if the Node is
321
+ up-to-date or not. Overriding this method allows for a Node
322
+ subclass to be disambiguated if necessary, or for an implicit
323
+ source builder to be attached.
324
+ """
325
+ pass
326
+
327
+ def prepare(self):
328
+ """Prepare for this Node to be built.
329
+
330
+ This is called after the Taskmaster has decided that the Node
331
+ is out-of-date and must be rebuilt, but before actually calling
332
+ the method to build the Node.
333
+
334
+ This default implementation checks that explicit or implicit
335
+ dependencies either exist or are derived, and initializes the
336
+ BuildInfo structure that will hold the information about how
337
+ this node is, uh, built.
338
+
339
+ (The existence of source files is checked separately by the
340
+ Executor, which aggregates checks for all of the targets built
341
+ by a specific action.)
342
+
343
+ Overriding this method allows for for a Node subclass to remove
344
+ the underlying file from the file system. Note that subclass
345
+ methods should call this base class method to get the child
346
+ check and the BuildInfo structure.
347
+ """
348
+ for d in self.depends:
349
+ if d.missing():
350
+ msg = "Explicit dependency `%s' not found, needed by target `%s'."
351
+ raise SCons.Errors.StopError(msg % (d, self))
352
+ if self.implicit is not None:
353
+ for i in self.implicit:
354
+ if i.missing():
355
+ msg = "Implicit dependency `%s' not found, needed by target `%s'."
356
+ raise SCons.Errors.StopError(msg % (i, self))
357
+ self.binfo = self.get_binfo()
358
+
359
+ def build(self, **kw):
360
+ """Actually build the node.
361
+
362
+ This is called by the Taskmaster after it's decided that the
363
+ Node is out-of-date and must be rebuilt, and after the prepare()
364
+ method has gotten everything, uh, prepared.
365
+
366
+ This method is called from multiple threads in a parallel build,
367
+ so only do thread safe stuff here. Do thread unsafe stuff
368
+ in built().
369
+
370
+ """
371
+ try:
372
+ self.get_executor()(self, **kw)
373
+ except SCons.Errors.BuildError, e:
374
+ e.node = self
375
+ raise
376
+
377
+ def built(self):
378
+ """Called just after this node is successfully built."""
379
+
380
+ # Clear the implicit dependency caches of any Nodes
381
+ # waiting for this Node to be built.
382
+ for parent in self.waiting_parents:
383
+ parent.implicit = None
384
+
385
+ self.clear()
386
+
387
+ self.ninfo.update(self)
388
+
389
+ def visited(self):
390
+ """Called just after this node has been visited (with or
391
+ without a build)."""
392
+ try:
393
+ binfo = self.binfo
394
+ except AttributeError:
395
+ # Apparently this node doesn't need build info, so
396
+ # don't bother calculating or storing it.
397
+ pass
398
+ else:
399
+ self.ninfo.update(self)
400
+ self.store_info()
401
+
402
+ #
403
+ #
404
+ #
405
+
406
+ def add_to_waiting_s_e(self, node):
407
+ self.waiting_s_e.add(node)
408
+
409
+ def add_to_waiting_parents(self, node):
410
+ """
411
+ Returns the number of nodes added to our waiting parents list:
412
+ 1 if we add a unique waiting parent, 0 if not. (Note that the
413
+ returned values are intended to be used to increment a reference
414
+ count, so don't think you can "clean up" this function by using
415
+ True and False instead...)
416
+ """
417
+ wp = self.waiting_parents
418
+ if node in wp:
419
+ return 0
420
+ wp.add(node)
421
+ return 1
422
+
423
+ def postprocess(self):
424
+ """Clean up anything we don't need to hang onto after we've
425
+ been built."""
426
+ self.executor_cleanup()
427
+ self.waiting_parents = set()
428
+
429
+ def clear(self):
430
+ """Completely clear a Node of all its cached state (so that it
431
+ can be re-evaluated by interfaces that do continuous integration
432
+ builds).
433
+ """
434
+ # The del_binfo() call here isn't necessary for normal execution,
435
+ # but is for interactive mode, where we might rebuild the same
436
+ # target and need to start from scratch.
437
+ self.del_binfo()
438
+ self.clear_memoized_values()
439
+ self.ninfo = self.new_ninfo()
440
+ self.executor_cleanup()
441
+ try:
442
+ delattr(self, '_calculated_sig')
443
+ except AttributeError:
444
+ pass
445
+ self.includes = None
446
+
447
+ def clear_memoized_values(self):
448
+ self._memo = {}
449
+
450
+ def builder_set(self, builder):
451
+ self.builder = builder
452
+ try:
453
+ del self.executor
454
+ except AttributeError:
455
+ pass
456
+
457
+ def has_builder(self):
458
+ """Return whether this Node has a builder or not.
459
+
460
+ In Boolean tests, this turns out to be a *lot* more efficient
461
+ than simply examining the builder attribute directly ("if
462
+ node.builder: ..."). When the builder attribute is examined
463
+ directly, it ends up calling __getattr__ for both the __len__
464
+ and __nonzero__ attributes on instances of our Builder Proxy
465
+ class(es), generating a bazillion extra calls and slowing
466
+ things down immensely.
467
+ """
468
+ try:
469
+ b = self.builder
470
+ except AttributeError:
471
+ # There was no explicit builder for this Node, so initialize
472
+ # the self.builder attribute to None now.
473
+ b = self.builder = None
474
+ return b is not None
475
+
476
+ def set_explicit(self, is_explicit):
477
+ self.is_explicit = is_explicit
478
+
479
+ def has_explicit_builder(self):
480
+ """Return whether this Node has an explicit builder
481
+
482
+ This allows an internal Builder created by SCons to be marked
483
+ non-explicit, so that it can be overridden by an explicit
484
+ builder that the user supplies (the canonical example being
485
+ directories)."""
486
+ try:
487
+ return self.is_explicit
488
+ except AttributeError:
489
+ self.is_explicit = None
490
+ return self.is_explicit
491
+
492
+ def get_builder(self, default_builder=None):
493
+ """Return the set builder, or a specified default value"""
494
+ try:
495
+ return self.builder
496
+ except AttributeError:
497
+ return default_builder
498
+
499
+ multiple_side_effect_has_builder = has_builder
500
+
501
+ def is_derived(self):
502
+ """
503
+ Returns true iff this node is derived (i.e. built).
504
+
505
+ This should return true only for nodes whose path should be in
506
+ the variant directory when duplicate=0 and should contribute their build
507
+ signatures when they are used as source files to other derived files. For
508
+ example: source with source builders are not derived in this sense,
509
+ and hence should not return true.
510
+ """
511
+ return self.has_builder() or self.side_effect
512
+
513
+ def alter_targets(self):
514
+ """Return a list of alternate targets for this Node.
515
+ """
516
+ return [], None
517
+
518
+ def get_found_includes(self, env, scanner, path):
519
+ """Return the scanned include lines (implicit dependencies)
520
+ found in this node.
521
+
522
+ The default is no implicit dependencies. We expect this method
523
+ to be overridden by any subclass that can be scanned for
524
+ implicit dependencies.
525
+ """
526
+ return []
527
+
528
+ def get_implicit_deps(self, env, scanner, path):
529
+ """Return a list of implicit dependencies for this node.
530
+
531
+ This method exists to handle recursive invocation of the scanner
532
+ on the implicit dependencies returned by the scanner, if the
533
+ scanner's recursive flag says that we should.
534
+ """
535
+ if not scanner:
536
+ return []
537
+
538
+ # Give the scanner a chance to select a more specific scanner
539
+ # for this Node.
540
+ #scanner = scanner.select(self)
541
+
542
+ nodes = [self]
543
+ seen = {}
544
+ seen[self] = 1
545
+ deps = []
546
+ while nodes:
547
+ n = nodes.pop(0)
548
+ d = [x for x in n.get_found_includes(env, scanner, path) if x not in seen]
549
+ if d:
550
+ deps.extend(d)
551
+ for n in d:
552
+ seen[n] = 1
553
+ nodes.extend(scanner.recurse_nodes(d))
554
+
555
+ return deps
556
+
557
+ def get_env_scanner(self, env, kw={}):
558
+ return env.get_scanner(self.scanner_key())
559
+
560
+ def get_target_scanner(self):
561
+ return self.builder.target_scanner
562
+
563
+ def get_source_scanner(self, node):
564
+ """Fetch the source scanner for the specified node
565
+
566
+ NOTE: "self" is the target being built, "node" is
567
+ the source file for which we want to fetch the scanner.
568
+
569
+ Implies self.has_builder() is true; again, expect to only be
570
+ called from locations where this is already verified.
571
+
572
+ This function may be called very often; it attempts to cache
573
+ the scanner found to improve performance.
574
+ """
575
+ scanner = None
576
+ try:
577
+ scanner = self.builder.source_scanner
578
+ except AttributeError:
579
+ pass
580
+ if not scanner:
581
+ # The builder didn't have an explicit scanner, so go look up
582
+ # a scanner from env['SCANNERS'] based on the node's scanner
583
+ # key (usually the file extension).
584
+ scanner = self.get_env_scanner(self.get_build_env())
585
+ if scanner:
586
+ scanner = scanner.select(node)
587
+ return scanner
588
+
589
+ def add_to_implicit(self, deps):
590
+ if not hasattr(self, 'implicit') or self.implicit is None:
591
+ self.implicit = []
592
+ self.implicit_set = set()
593
+ self._children_reset()
594
+ self._add_child(self.implicit, self.implicit_set, deps)
595
+
596
+ def scan(self):
597
+ """Scan this node's dependents for implicit dependencies."""
598
+ # Don't bother scanning non-derived files, because we don't
599
+ # care what their dependencies are.
600
+ # Don't scan again, if we already have scanned.
601
+ if self.implicit is not None:
602
+ return
603
+ self.implicit = []
604
+ self.implicit_set = set()
605
+ self._children_reset()
606
+ if not self.has_builder():
607
+ return
608
+
609
+ build_env = self.get_build_env()
610
+ executor = self.get_executor()
611
+
612
+ # Here's where we implement --implicit-cache.
613
+ if implicit_cache and not implicit_deps_changed:
614
+ implicit = self.get_stored_implicit()
615
+ if implicit is not None:
616
+ # We now add the implicit dependencies returned from the
617
+ # stored .sconsign entry to have already been converted
618
+ # to Nodes for us. (We used to run them through a
619
+ # source_factory function here.)
620
+
621
+ # Update all of the targets with them. This
622
+ # essentially short-circuits an N*M scan of the
623
+ # sources for each individual target, which is a hell
624
+ # of a lot more efficient.
625
+ for tgt in executor.get_all_targets():
626
+ tgt.add_to_implicit(implicit)
627
+
628
+ if implicit_deps_unchanged or self.is_up_to_date():
629
+ return
630
+ # one of this node's sources has changed,
631
+ # so we must recalculate the implicit deps for all targets
632
+ for tgt in executor.get_all_targets():
633
+ tgt.implicit = []
634
+ tgt.implicit_set = set()
635
+
636
+ # Have the executor scan the sources.
637
+ executor.scan_sources(self.builder.source_scanner)
638
+
639
+ # If there's a target scanner, have the executor scan the target
640
+ # node itself and associated targets that might be built.
641
+ scanner = self.get_target_scanner()
642
+ if scanner:
643
+ executor.scan_targets(scanner)
644
+
645
+ def scanner_key(self):
646
+ return None
647
+
648
+ def select_scanner(self, scanner):
649
+ """Selects a scanner for this Node.
650
+
651
+ This is a separate method so it can be overridden by Node
652
+ subclasses (specifically, Node.FS.Dir) that *must* use their
653
+ own Scanner and don't select one the Scanner.Selector that's
654
+ configured for the target.
655
+ """
656
+ return scanner.select(self)
657
+
658
+ def env_set(self, env, safe=0):
659
+ if safe and self.env:
660
+ return
661
+ self.env = env
662
+
663
+ #
664
+ # SIGNATURE SUBSYSTEM
665
+ #
666
+
667
+ NodeInfo = NodeInfoBase
668
+ BuildInfo = BuildInfoBase
669
+
670
+ def new_ninfo(self):
671
+ ninfo = self.NodeInfo(self)
672
+ return ninfo
673
+
674
+ def get_ninfo(self):
675
+ try:
676
+ return self.ninfo
677
+ except AttributeError:
678
+ self.ninfo = self.new_ninfo()
679
+ return self.ninfo
680
+
681
+ def new_binfo(self):
682
+ binfo = self.BuildInfo(self)
683
+ return binfo
684
+
685
+ def get_binfo(self):
686
+ """
687
+ Fetch a node's build information.
688
+
689
+ node - the node whose sources will be collected
690
+ cache - alternate node to use for the signature cache
691
+ returns - the build signature
692
+
693
+ This no longer handles the recursive descent of the
694
+ node's children's signatures. We expect that they're
695
+ already built and updated by someone else, if that's
696
+ what's wanted.
697
+ """
698
+ try:
699
+ return self.binfo
700
+ except AttributeError:
701
+ pass
702
+
703
+ binfo = self.new_binfo()
704
+ self.binfo = binfo
705
+
706
+ executor = self.get_executor()
707
+ ignore_set = self.ignore_set
708
+
709
+ if self.has_builder():
710
+ binfo.bact = str(executor)
711
+ binfo.bactsig = SCons.Util.MD5signature(executor.get_contents())
712
+
713
+ if self._specific_sources:
714
+ sources = []
715
+ for s in self.sources:
716
+ if s not in ignore_set:
717
+ sources.append(s)
718
+ else:
719
+ sources = executor.get_unignored_sources(self, self.ignore)
720
+ seen = set()
721
+ bsources = []
722
+ bsourcesigs = []
723
+ for s in sources:
724
+ if not s in seen:
725
+ seen.add(s)
726
+ bsources.append(s)
727
+ bsourcesigs.append(s.get_ninfo())
728
+ binfo.bsources = bsources
729
+ binfo.bsourcesigs = bsourcesigs
730
+
731
+ depends = self.depends
732
+ dependsigs = []
733
+ for d in depends:
734
+ if d not in ignore_set:
735
+ dependsigs.append(d.get_ninfo())
736
+ binfo.bdepends = depends
737
+ binfo.bdependsigs = dependsigs
738
+
739
+ implicit = self.implicit or []
740
+ implicitsigs = []
741
+ for i in implicit:
742
+ if i not in ignore_set:
743
+ implicitsigs.append(i.get_ninfo())
744
+ binfo.bimplicit = implicit
745
+ binfo.bimplicitsigs = implicitsigs
746
+
747
+ return binfo
748
+
749
+ def del_binfo(self):
750
+ """Delete the build info from this node."""
751
+ try:
752
+ delattr(self, 'binfo')
753
+ except AttributeError:
754
+ pass
755
+
756
+ def get_csig(self):
757
+ try:
758
+ return self.ninfo.csig
759
+ except AttributeError:
760
+ ninfo = self.get_ninfo()
761
+ ninfo.csig = SCons.Util.MD5signature(self.get_contents())
762
+ return self.ninfo.csig
763
+
764
+ def get_cachedir_csig(self):
765
+ return self.get_csig()
766
+
767
+ def store_info(self):
768
+ """Make the build signature permanent (that is, store it in the
769
+ .sconsign file or equivalent)."""
770
+ pass
771
+
772
+ def do_not_store_info(self):
773
+ pass
774
+
775
+ def get_stored_info(self):
776
+ return None
777
+
778
+ def get_stored_implicit(self):
779
+ """Fetch the stored implicit dependencies"""
780
+ return None
781
+
782
+ #
783
+ #
784
+ #
785
+
786
+ def set_precious(self, precious = 1):
787
+ """Set the Node's precious value."""
788
+ self.precious = precious
789
+
790
+ def set_noclean(self, noclean = 1):
791
+ """Set the Node's noclean value."""
792
+ # Make sure noclean is an integer so the --debug=stree
793
+ # output in Util.py can use it as an index.
794
+ self.noclean = noclean and 1 or 0
795
+
796
+ def set_nocache(self, nocache = 1):
797
+ """Set the Node's nocache value."""
798
+ # Make sure nocache is an integer so the --debug=stree
799
+ # output in Util.py can use it as an index.
800
+ self.nocache = nocache and 1 or 0
801
+
802
+ def set_always_build(self, always_build = 1):
803
+ """Set the Node's always_build value."""
804
+ self.always_build = always_build
805
+
806
+ def exists(self):
807
+ """Does this node exists?"""
808
+ # All node exist by default:
809
+ return 1
810
+
811
+ def rexists(self):
812
+ """Does this node exist locally or in a repositiory?"""
813
+ # There are no repositories by default:
814
+ return self.exists()
815
+
816
+ def missing(self):
817
+ return not self.is_derived() and \
818
+ not self.linked and \
819
+ not self.rexists()
820
+
821
+ def remove(self):
822
+ """Remove this Node: no-op by default."""
823
+ return None
824
+
825
+ def add_dependency(self, depend):
826
+ """Adds dependencies."""
827
+ try:
828
+ self._add_child(self.depends, self.depends_set, depend)
829
+ except TypeError, e:
830
+ e = e.args[0]
831
+ if SCons.Util.is_List(e):
832
+ s = list(map(str, e))
833
+ else:
834
+ s = str(e)
835
+ raise SCons.Errors.UserError("attempted to add a non-Node dependency to %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
836
+
837
+ def add_prerequisite(self, prerequisite):
838
+ """Adds prerequisites"""
839
+ self.prerequisites.extend(prerequisite)
840
+ self._children_reset()
841
+
842
+ def add_ignore(self, depend):
843
+ """Adds dependencies to ignore."""
844
+ try:
845
+ self._add_child(self.ignore, self.ignore_set, depend)
846
+ except TypeError, e:
847
+ e = e.args[0]
848
+ if SCons.Util.is_List(e):
849
+ s = list(map(str, e))
850
+ else:
851
+ s = str(e)
852
+ raise SCons.Errors.UserError("attempted to ignore a non-Node dependency of %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
853
+
854
+ def add_source(self, source):
855
+ """Adds sources."""
856
+ if self._specific_sources:
857
+ return
858
+ try:
859
+ self._add_child(self.sources, self.sources_set, source)
860
+ except TypeError, e:
861
+ e = e.args[0]
862
+ if SCons.Util.is_List(e):
863
+ s = list(map(str, e))
864
+ else:
865
+ s = str(e)
866
+ raise SCons.Errors.UserError("attempted to add a non-Node as source of %s:\n\t%s is a %s, not a Node" % (str(self), s, type(e)))
867
+
868
+ def _add_child(self, collection, set, child):
869
+ """Adds 'child' to 'collection', first checking 'set' to see if it's
870
+ already present."""
871
+ #if type(child) is not type([]):
872
+ # child = [child]
873
+ #for c in child:
874
+ # if not isinstance(c, Node):
875
+ # raise TypeError, c
876
+ added = None
877
+ for c in child:
878
+ if c not in set:
879
+ set.add(c)
880
+ collection.append(c)
881
+ added = 1
882
+ if added:
883
+ self._children_reset()
884
+
885
+ def set_specific_source(self, source):
886
+ self.add_source(source)
887
+ self._specific_sources = True
888
+
889
+ def add_wkid(self, wkid):
890
+ """Add a node to the list of kids waiting to be evaluated"""
891
+ if self.wkids is not None:
892
+ self.wkids.append(wkid)
893
+
894
+ def _children_reset(self):
895
+ self.clear_memoized_values()
896
+ # We need to let the Executor clear out any calculated
897
+ # build info that it's cached so we can re-calculate it.
898
+ self.executor_cleanup()
899
+
900
+ memoizer_counters.append(SCons.Memoize.CountValue('_children_get'))
901
+
902
+ def _children_get(self):
903
+ try:
904
+ return self._memo['children_get']
905
+ except KeyError:
906
+ pass
907
+
908
+ # The return list may contain duplicate Nodes, especially in
909
+ # source trees where there are a lot of repeated #includes
910
+ # of a tangle of .h files. Profiling shows, however, that
911
+ # eliminating the duplicates with a brute-force approach that
912
+ # preserves the order (that is, something like:
913
+ #
914
+ # u = []
915
+ # for n in list:
916
+ # if n not in u:
917
+ # u.append(n)"
918
+ #
919
+ # takes more cycles than just letting the underlying methods
920
+ # hand back cached values if a Node's information is requested
921
+ # multiple times. (Other methods of removing duplicates, like
922
+ # using dictionary keys, lose the order, and the only ordered
923
+ # dictionary patterns I found all ended up using "not in"
924
+ # internally anyway...)
925
+ if self.ignore_set:
926
+ if self.implicit is None:
927
+ iter = chain(self.sources,self.depends)
928
+ else:
929
+ iter = chain(self.sources, self.depends, self.implicit)
930
+
931
+ children = []
932
+ for i in iter:
933
+ if i not in self.ignore_set:
934
+ children.append(i)
935
+ else:
936
+ if self.implicit is None:
937
+ children = self.sources + self.depends
938
+ else:
939
+ children = self.sources + self.depends + self.implicit
940
+
941
+ self._memo['children_get'] = children
942
+ return children
943
+
944
+ def all_children(self, scan=1):
945
+ """Return a list of all the node's direct children."""
946
+ if scan:
947
+ self.scan()
948
+
949
+ # The return list may contain duplicate Nodes, especially in
950
+ # source trees where there are a lot of repeated #includes
951
+ # of a tangle of .h files. Profiling shows, however, that
952
+ # eliminating the duplicates with a brute-force approach that
953
+ # preserves the order (that is, something like:
954
+ #
955
+ # u = []
956
+ # for n in list:
957
+ # if n not in u:
958
+ # u.append(n)"
959
+ #
960
+ # takes more cycles than just letting the underlying methods
961
+ # hand back cached values if a Node's information is requested
962
+ # multiple times. (Other methods of removing duplicates, like
963
+ # using dictionary keys, lose the order, and the only ordered
964
+ # dictionary patterns I found all ended up using "not in"
965
+ # internally anyway...)
966
+ if self.implicit is None:
967
+ return self.sources + self.depends
968
+ else:
969
+ return self.sources + self.depends + self.implicit
970
+
971
+ def children(self, scan=1):
972
+ """Return a list of the node's direct children, minus those
973
+ that are ignored by this node."""
974
+ if scan:
975
+ self.scan()
976
+ return self._children_get()
977
+
978
+ def set_state(self, state):
979
+ self.state = state
980
+
981
+ def get_state(self):
982
+ return self.state
983
+
984
+ def state_has_changed(self, target, prev_ni):
985
+ return (self.state != SCons.Node.up_to_date)
986
+
987
+ def get_env(self):
988
+ env = self.env
989
+ if not env:
990
+ import SCons.Defaults
991
+ env = SCons.Defaults.DefaultEnvironment()
992
+ return env
993
+
994
+ def changed_since_last_build(self, target, prev_ni):
995
+ """
996
+
997
+ Must be overridden in a specific subclass to return True if this
998
+ Node (a dependency) has changed since the last time it was used
999
+ to build the specified target. prev_ni is this Node's state (for
1000
+ example, its file timestamp, length, maybe content signature)
1001
+ as of the last time the target was built.
1002
+
1003
+ Note that this method is called through the dependency, not the
1004
+ target, because a dependency Node must be able to use its own
1005
+ logic to decide if it changed. For example, File Nodes need to
1006
+ obey if we're configured to use timestamps, but Python Value Nodes
1007
+ never use timestamps and always use the content. If this method
1008
+ were called through the target, then each Node's implementation
1009
+ of this method would have to have more complicated logic to
1010
+ handle all the different Node types on which it might depend.
1011
+ """
1012
+ raise NotImplementedError
1013
+
1014
+ def Decider(self, function):
1015
+ SCons.Util.AddMethod(self, function, 'changed_since_last_build')
1016
+
1017
+ def changed(self, node=None):
1018
+ """
1019
+ Returns if the node is up-to-date with respect to the BuildInfo
1020
+ stored last time it was built. The default behavior is to compare
1021
+ it against our own previously stored BuildInfo, but the stored
1022
+ BuildInfo from another Node (typically one in a Repository)
1023
+ can be used instead.
1024
+
1025
+ Note that we now *always* check every dependency. We used to
1026
+ short-circuit the check by returning as soon as we detected
1027
+ any difference, but we now rely on checking every dependency
1028
+ to make sure that any necessary Node information (for example,
1029
+ the content signature of an #included .h file) is updated.
1030
+ """
1031
+ t = 0
1032
+ if t: Trace('changed(%s [%s], %s)' % (self, classname(self), node))
1033
+ if node is None:
1034
+ node = self
1035
+
1036
+ result = False
1037
+
1038
+ bi = node.get_stored_info().binfo
1039
+ then = bi.bsourcesigs + bi.bdependsigs + bi.bimplicitsigs
1040
+ children = self.children()
1041
+
1042
+ diff = len(children) - len(then)
1043
+ if diff:
1044
+ # The old and new dependency lists are different lengths.
1045
+ # This always indicates that the Node must be rebuilt.
1046
+ # We also extend the old dependency list with enough None
1047
+ # entries to equal the new dependency list, for the benefit
1048
+ # of the loop below that updates node information.
1049
+ then.extend([None] * diff)
1050
+ if t: Trace(': old %s new %s' % (len(then), len(children)))
1051
+ result = True
1052
+
1053
+ for child, prev_ni in zip(children, then):
1054
+ if child.changed_since_last_build(self, prev_ni):
1055
+ if t: Trace(': %s changed' % child)
1056
+ result = True
1057
+
1058
+ contents = self.get_executor().get_contents()
1059
+ if self.has_builder():
1060
+ import SCons.Util
1061
+ newsig = SCons.Util.MD5signature(contents)
1062
+ if bi.bactsig != newsig:
1063
+ if t: Trace(': bactsig %s != newsig %s' % (bi.bactsig, newsig))
1064
+ result = True
1065
+
1066
+ if not result:
1067
+ if t: Trace(': up to date')
1068
+
1069
+ if t: Trace('\n')
1070
+
1071
+ return result
1072
+
1073
+ def is_up_to_date(self):
1074
+ """Default check for whether the Node is current: unknown Node
1075
+ subtypes are always out of date, so they will always get built."""
1076
+ return None
1077
+
1078
+ def children_are_up_to_date(self):
1079
+ """Alternate check for whether the Node is current: If all of
1080
+ our children were up-to-date, then this Node was up-to-date, too.
1081
+
1082
+ The SCons.Node.Alias and SCons.Node.Python.Value subclasses
1083
+ rebind their current() method to this method."""
1084
+ # Allow the children to calculate their signatures.
1085
+ self.binfo = self.get_binfo()
1086
+ if self.always_build:
1087
+ return None
1088
+ state = 0
1089
+ for kid in self.children(None):
1090
+ s = kid.get_state()
1091
+ if s and (not state or s > state):
1092
+ state = s
1093
+ return (state == 0 or state == SCons.Node.up_to_date)
1094
+
1095
+ def is_literal(self):
1096
+ """Always pass the string representation of a Node to
1097
+ the command interpreter literally."""
1098
+ return 1
1099
+
1100
+ def render_include_tree(self):
1101
+ """
1102
+ Return a text representation, suitable for displaying to the
1103
+ user, of the include tree for the sources of this node.
1104
+ """
1105
+ if self.is_derived() and self.env:
1106
+ env = self.get_build_env()
1107
+ for s in self.sources:
1108
+ scanner = self.get_source_scanner(s)
1109
+ if scanner:
1110
+ path = self.get_build_scanner_path(scanner)
1111
+ else:
1112
+ path = None
1113
+ def f(node, env=env, scanner=scanner, path=path):
1114
+ return node.get_found_includes(env, scanner, path)
1115
+ return SCons.Util.render_tree(s, f, 1)
1116
+ else:
1117
+ return None
1118
+
1119
+ def get_abspath(self):
1120
+ """
1121
+ Return an absolute path to the Node. This will return simply
1122
+ str(Node) by default, but for Node types that have a concept of
1123
+ relative path, this might return something different.
1124
+ """
1125
+ return str(self)
1126
+
1127
+ def for_signature(self):
1128
+ """
1129
+ Return a string representation of the Node that will always
1130
+ be the same for this particular Node, no matter what. This
1131
+ is by contrast to the __str__() method, which might, for
1132
+ instance, return a relative path for a file Node. The purpose
1133
+ of this method is to generate a value to be used in signature
1134
+ calculation for the command line used to build a target, and
1135
+ we use this method instead of str() to avoid unnecessary
1136
+ rebuilds. This method does not need to return something that
1137
+ would actually work in a command line; it can return any kind of
1138
+ nonsense, so long as it does not change.
1139
+ """
1140
+ return str(self)
1141
+
1142
+ def get_string(self, for_signature):
1143
+ """This is a convenience function designed primarily to be
1144
+ used in command generators (i.e., CommandGeneratorActions or
1145
+ Environment variables that are callable), which are called
1146
+ with a for_signature argument that is nonzero if the command
1147
+ generator is being called to generate a signature for the
1148
+ command line, which determines if we should rebuild or not.
1149
+
1150
+ Such command generators should use this method in preference
1151
+ to str(Node) when converting a Node to a string, passing
1152
+ in the for_signature parameter, such that we will call
1153
+ Node.for_signature() or str(Node) properly, depending on whether
1154
+ we are calculating a signature or actually constructing a
1155
+ command line."""
1156
+ if for_signature:
1157
+ return self.for_signature()
1158
+ return str(self)
1159
+
1160
+ def get_subst_proxy(self):
1161
+ """
1162
+ This method is expected to return an object that will function
1163
+ exactly like this Node, except that it implements any additional
1164
+ special features that we would like to be in effect for
1165
+ Environment variable substitution. The principle use is that
1166
+ some Nodes would like to implement a __getattr__() method,
1167
+ but putting that in the Node type itself has a tendency to kill
1168
+ performance. We instead put it in a proxy and return it from
1169
+ this method. It is legal for this method to return self
1170
+ if no new functionality is needed for Environment substitution.
1171
+ """
1172
+ return self
1173
+
1174
+ def explain(self):
1175
+ if not self.exists():
1176
+ return "building `%s' because it doesn't exist\n" % self
1177
+
1178
+ if self.always_build:
1179
+ return "rebuilding `%s' because AlwaysBuild() is specified\n" % self
1180
+
1181
+ old = self.get_stored_info()
1182
+ if old is None:
1183
+ return None
1184
+
1185
+ old = old.binfo
1186
+ old.prepare_dependencies()
1187
+
1188
+ try:
1189
+ old_bkids = old.bsources + old.bdepends + old.bimplicit
1190
+ old_bkidsigs = old.bsourcesigs + old.bdependsigs + old.bimplicitsigs
1191
+ except AttributeError:
1192
+ return "Cannot explain why `%s' is being rebuilt: No previous build information found\n" % self
1193
+
1194
+ new = self.get_binfo()
1195
+
1196
+ new_bkids = new.bsources + new.bdepends + new.bimplicit
1197
+ new_bkidsigs = new.bsourcesigs + new.bdependsigs + new.bimplicitsigs
1198
+
1199
+ osig = dict(zip(old_bkids, old_bkidsigs))
1200
+ nsig = dict(zip(new_bkids, new_bkidsigs))
1201
+
1202
+ # The sources and dependencies we'll want to report are all stored
1203
+ # as relative paths to this target's directory, but we want to
1204
+ # report them relative to the top-level SConstruct directory,
1205
+ # so we only print them after running them through this lambda
1206
+ # to turn them into the right relative Node and then return
1207
+ # its string.
1208
+ def stringify( s, E=self.dir.Entry ) :
1209
+ if hasattr( s, 'dir' ) :
1210
+ return str(E(s))
1211
+ return str(s)
1212
+
1213
+ lines = []
1214
+
1215
+ removed = [x for x in old_bkids if not x in new_bkids]
1216
+ if removed:
1217
+ removed = list(map(stringify, removed))
1218
+ fmt = "`%s' is no longer a dependency\n"
1219
+ lines.extend([fmt % s for s in removed])
1220
+
1221
+ for k in new_bkids:
1222
+ if not k in old_bkids:
1223
+ lines.append("`%s' is a new dependency\n" % stringify(k))
1224
+ elif k.changed_since_last_build(self, osig[k]):
1225
+ lines.append("`%s' changed\n" % stringify(k))
1226
+
1227
+ if len(lines) == 0 and old_bkids != new_bkids:
1228
+ lines.append("the dependency order changed:\n" +
1229
+ "%sold: %s\n" % (' '*15, list(map(stringify, old_bkids))) +
1230
+ "%snew: %s\n" % (' '*15, list(map(stringify, new_bkids))))
1231
+
1232
+ if len(lines) == 0:
1233
+ def fmt_with_title(title, strlines):
1234
+ lines = strlines.split('\n')
1235
+ sep = '\n' + ' '*(15 + len(title))
1236
+ return ' '*15 + title + sep.join(lines) + '\n'
1237
+ if old.bactsig != new.bactsig:
1238
+ if old.bact == new.bact:
1239
+ lines.append("the contents of the build action changed\n" +
1240
+ fmt_with_title('action: ', new.bact))
1241
+ else:
1242
+ lines.append("the build action changed:\n" +
1243
+ fmt_with_title('old: ', old.bact) +
1244
+ fmt_with_title('new: ', new.bact))
1245
+
1246
+ if len(lines) == 0:
1247
+ return "rebuilding `%s' for unknown reasons\n" % self
1248
+
1249
+ preamble = "rebuilding `%s' because" % self
1250
+ if len(lines) == 1:
1251
+ return "%s %s" % (preamble, lines[0])
1252
+ else:
1253
+ lines = ["%s:\n" % preamble] + lines
1254
+ return ( ' '*11).join(lines)
1255
+
1256
+ class NodeList(collections.UserList):
1257
+ def __str__(self):
1258
+ return str(list(map(str, self.data)))
1259
+
1260
+ def get_children(node, parent): return node.children()
1261
+ def ignore_cycle(node, stack): pass
1262
+ def do_nothing(node, parent): pass
1263
+
1264
+ class Walker(object):
1265
+ """An iterator for walking a Node tree.
1266
+
1267
+ This is depth-first, children are visited before the parent.
1268
+ The Walker object can be initialized with any node, and
1269
+ returns the next node on the descent with each get_next() call.
1270
+ 'kids_func' is an optional function that will be called to
1271
+ get the children of a node instead of calling 'children'.
1272
+ 'cycle_func' is an optional function that will be called
1273
+ when a cycle is detected.
1274
+
1275
+ This class does not get caught in node cycles caused, for example,
1276
+ by C header file include loops.
1277
+ """
1278
+ def __init__(self, node, kids_func=get_children,
1279
+ cycle_func=ignore_cycle,
1280
+ eval_func=do_nothing):
1281
+ self.kids_func = kids_func
1282
+ self.cycle_func = cycle_func
1283
+ self.eval_func = eval_func
1284
+ node.wkids = copy.copy(kids_func(node, None))
1285
+ self.stack = [node]
1286
+ self.history = {} # used to efficiently detect and avoid cycles
1287
+ self.history[node] = None
1288
+
1289
+ def get_next(self):
1290
+ """Return the next node for this walk of the tree.
1291
+
1292
+ This function is intentionally iterative, not recursive,
1293
+ to sidestep any issues of stack size limitations.
1294
+ """
1295
+
1296
+ while self.stack:
1297
+ if self.stack[-1].wkids:
1298
+ node = self.stack[-1].wkids.pop(0)
1299
+ if not self.stack[-1].wkids:
1300
+ self.stack[-1].wkids = None
1301
+ if node in self.history:
1302
+ self.cycle_func(node, self.stack)
1303
+ else:
1304
+ node.wkids = copy.copy(self.kids_func(node, self.stack[-1]))
1305
+ self.stack.append(node)
1306
+ self.history[node] = None
1307
+ else:
1308
+ node = self.stack.pop()
1309
+ del self.history[node]
1310
+ if node:
1311
+ if self.stack:
1312
+ parent = self.stack[-1]
1313
+ else:
1314
+ parent = None
1315
+ self.eval_func(node, parent)
1316
+ return node
1317
+ return None
1318
+
1319
+ def is_done(self):
1320
+ return not self.stack
1321
+
1322
+
1323
+ arg2nodes_lookups = []
1324
+
1325
+ # Local Variables:
1326
+ # tab-width:4
1327
+ # indent-tabs-mode:nil
1328
+ # End:
1329
+ # vim: set expandtab tabstop=4 shiftwidth=4: