libv8 3.3.10.4 → 3.5.10.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (538) hide show
  1. data/lib/libv8/scons/CHANGES.txt +24 -231
  2. data/lib/libv8/scons/LICENSE.txt +1 -1
  3. data/lib/libv8/scons/MANIFEST +0 -1
  4. data/lib/libv8/scons/PKG-INFO +1 -1
  5. data/lib/libv8/scons/README.txt +9 -9
  6. data/lib/libv8/scons/RELEASE.txt +75 -77
  7. data/lib/libv8/scons/engine/SCons/Action.py +6 -22
  8. data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
  9. data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
  10. data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
  11. data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
  12. data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
  13. data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
  14. data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
  15. data/lib/libv8/scons/engine/SCons/Job.py +2 -2
  16. data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
  17. data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
  18. data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
  19. data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
  20. data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
  21. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
  22. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
  23. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
  24. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
  25. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
  26. data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
  27. data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
  28. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
  29. data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
  30. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
  31. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
  32. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
  33. data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
  34. data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
  35. data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
  36. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
  37. data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
  38. data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
  39. data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
  40. data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
  41. data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
  42. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
  43. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
  44. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
  45. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
  46. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
  47. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
  48. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
  49. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
  50. data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
  51. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
  52. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
  53. data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
  54. data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
  55. data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
  56. data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
  57. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
  58. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
  59. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
  60. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
  61. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
  62. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
  63. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
  64. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
  65. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
  66. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
  67. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
  68. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
  69. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
  70. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
  71. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
  72. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
  73. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
  74. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
  75. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
  76. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
  77. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
  78. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
  79. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
  80. data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
  81. data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
  82. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
  83. data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
  84. data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
  85. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
  86. data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
  87. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
  88. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
  89. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
  90. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
  91. data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
  92. data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
  93. data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
  94. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
  95. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
  96. data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
  97. data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
  98. data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
  99. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
  100. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
  101. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
  102. data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
  103. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
  104. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
  105. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
  106. data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
  107. data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
  108. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
  109. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
  110. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
  111. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
  112. data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
  113. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
  114. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
  115. data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
  116. data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
  117. data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
  118. data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
  119. data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
  120. data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
  121. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
  122. data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
  123. data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
  124. data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
  125. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
  126. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
  127. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
  128. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
  129. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
  130. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
  131. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
  132. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
  133. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
  134. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
  135. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
  136. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
  137. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
  138. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
  139. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
  140. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
  141. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
  142. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
  143. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
  144. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
  145. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
  146. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
  147. data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
  148. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
  149. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
  150. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
  151. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
  152. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
  153. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
  154. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
  155. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
  156. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
  157. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
  158. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
  159. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
  160. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
  161. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
  162. data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
  163. data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
  164. data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
  165. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
  166. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
  167. data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
  168. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
  169. data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
  170. data/lib/libv8/scons/engine/SCons/Util.py +3 -3
  171. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
  172. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
  173. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
  174. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
  175. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
  176. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
  177. data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
  178. data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
  179. data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
  180. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
  181. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
  182. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
  183. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
  184. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
  185. data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
  186. data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
  187. data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
  188. data/lib/libv8/scons/scons-time.1 +3 -3
  189. data/lib/libv8/scons/scons.1 +1164 -1170
  190. data/lib/libv8/scons/sconsign.1 +3 -3
  191. data/lib/libv8/scons/script/scons +22 -22
  192. data/lib/libv8/scons/script/scons-time +2 -2
  193. data/lib/libv8/scons/script/scons.bat +4 -7
  194. data/lib/libv8/scons/script/sconsign +20 -21
  195. data/lib/libv8/scons/setup.cfg +1 -0
  196. data/lib/libv8/scons/setup.py +40 -38
  197. data/lib/libv8/v8/.gitignore +1 -1
  198. data/lib/libv8/v8/AUTHORS +2 -0
  199. data/lib/libv8/v8/ChangeLog +387 -0
  200. data/lib/libv8/v8/Makefile +171 -0
  201. data/lib/libv8/v8/SConstruct +124 -51
  202. data/lib/libv8/v8/build/README.txt +31 -14
  203. data/lib/libv8/v8/build/all.gyp +11 -4
  204. data/lib/libv8/v8/build/armu.gypi +6 -2
  205. data/lib/libv8/v8/build/common.gypi +240 -94
  206. data/lib/libv8/v8/build/gyp_v8 +32 -4
  207. data/lib/libv8/v8/build/standalone.gypi +200 -0
  208. data/lib/libv8/v8/include/v8-debug.h +0 -0
  209. data/lib/libv8/v8/include/v8-profiler.h +8 -11
  210. data/lib/libv8/v8/include/v8.h +191 -108
  211. data/lib/libv8/v8/preparser/SConscript +2 -2
  212. data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
  213. data/lib/libv8/v8/preparser/preparser.gyp +42 -0
  214. data/lib/libv8/v8/src/SConscript +33 -8
  215. data/lib/libv8/v8/src/accessors.cc +77 -43
  216. data/lib/libv8/v8/src/api.cc +393 -191
  217. data/lib/libv8/v8/src/api.h +4 -8
  218. data/lib/libv8/v8/src/apinatives.js +15 -3
  219. data/lib/libv8/v8/src/arguments.h +8 -0
  220. data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
  221. data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
  222. data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
  223. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
  224. data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
  225. data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
  226. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
  227. data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
  228. data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
  229. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
  230. data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
  231. data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
  232. data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
  233. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
  234. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
  235. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
  236. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
  237. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
  238. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
  239. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
  240. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
  241. data/lib/libv8/v8/src/array.js +38 -18
  242. data/lib/libv8/v8/src/assembler.cc +12 -5
  243. data/lib/libv8/v8/src/assembler.h +15 -9
  244. data/lib/libv8/v8/src/ast-inl.h +34 -25
  245. data/lib/libv8/v8/src/ast.cc +141 -72
  246. data/lib/libv8/v8/src/ast.h +255 -181
  247. data/lib/libv8/v8/src/bignum.cc +3 -4
  248. data/lib/libv8/v8/src/bootstrapper.cc +55 -11
  249. data/lib/libv8/v8/src/bootstrapper.h +3 -2
  250. data/lib/libv8/v8/src/builtins.cc +8 -2
  251. data/lib/libv8/v8/src/builtins.h +4 -0
  252. data/lib/libv8/v8/src/cached-powers.cc +8 -4
  253. data/lib/libv8/v8/src/checks.h +3 -3
  254. data/lib/libv8/v8/src/code-stubs.cc +173 -28
  255. data/lib/libv8/v8/src/code-stubs.h +104 -148
  256. data/lib/libv8/v8/src/codegen.cc +8 -8
  257. data/lib/libv8/v8/src/compilation-cache.cc +2 -47
  258. data/lib/libv8/v8/src/compilation-cache.h +0 -10
  259. data/lib/libv8/v8/src/compiler.cc +27 -16
  260. data/lib/libv8/v8/src/compiler.h +13 -18
  261. data/lib/libv8/v8/src/contexts.cc +107 -72
  262. data/lib/libv8/v8/src/contexts.h +70 -34
  263. data/lib/libv8/v8/src/conversions-inl.h +572 -14
  264. data/lib/libv8/v8/src/conversions.cc +9 -707
  265. data/lib/libv8/v8/src/conversions.h +23 -12
  266. data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
  267. data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
  268. data/lib/libv8/v8/src/cpu-profiler.h +8 -17
  269. data/lib/libv8/v8/src/d8-debug.cc +5 -3
  270. data/lib/libv8/v8/src/d8-debug.h +6 -7
  271. data/lib/libv8/v8/src/d8-posix.cc +1 -10
  272. data/lib/libv8/v8/src/d8.cc +721 -219
  273. data/lib/libv8/v8/src/d8.gyp +37 -12
  274. data/lib/libv8/v8/src/d8.h +141 -19
  275. data/lib/libv8/v8/src/d8.js +17 -8
  276. data/lib/libv8/v8/src/date.js +16 -5
  277. data/lib/libv8/v8/src/dateparser-inl.h +242 -39
  278. data/lib/libv8/v8/src/dateparser.cc +38 -4
  279. data/lib/libv8/v8/src/dateparser.h +170 -28
  280. data/lib/libv8/v8/src/debug-agent.cc +5 -3
  281. data/lib/libv8/v8/src/debug-agent.h +11 -7
  282. data/lib/libv8/v8/src/debug-debugger.js +65 -34
  283. data/lib/libv8/v8/src/debug.cc +30 -60
  284. data/lib/libv8/v8/src/debug.h +5 -3
  285. data/lib/libv8/v8/src/deoptimizer.cc +227 -10
  286. data/lib/libv8/v8/src/deoptimizer.h +133 -9
  287. data/lib/libv8/v8/src/disassembler.cc +22 -14
  288. data/lib/libv8/v8/src/diy-fp.cc +4 -3
  289. data/lib/libv8/v8/src/diy-fp.h +3 -3
  290. data/lib/libv8/v8/src/elements.cc +634 -0
  291. data/lib/libv8/v8/src/elements.h +95 -0
  292. data/lib/libv8/v8/src/execution.cc +5 -21
  293. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
  294. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
  295. data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
  296. data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
  297. data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
  298. data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
  299. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
  300. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
  301. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
  302. data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
  303. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
  304. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
  305. data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
  306. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
  307. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
  308. data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
  309. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
  310. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
  311. data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
  312. data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
  313. data/lib/libv8/v8/src/factory.cc +89 -18
  314. data/lib/libv8/v8/src/factory.h +36 -8
  315. data/lib/libv8/v8/src/flag-definitions.h +11 -44
  316. data/lib/libv8/v8/src/frames-inl.h +8 -1
  317. data/lib/libv8/v8/src/frames.cc +39 -3
  318. data/lib/libv8/v8/src/frames.h +10 -3
  319. data/lib/libv8/v8/src/full-codegen.cc +311 -293
  320. data/lib/libv8/v8/src/full-codegen.h +183 -143
  321. data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
  322. data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
  323. data/lib/libv8/v8/src/gdb-jit.cc +658 -55
  324. data/lib/libv8/v8/src/gdb-jit.h +6 -2
  325. data/lib/libv8/v8/src/global-handles.cc +368 -312
  326. data/lib/libv8/v8/src/global-handles.h +29 -36
  327. data/lib/libv8/v8/src/globals.h +3 -1
  328. data/lib/libv8/v8/src/handles.cc +43 -69
  329. data/lib/libv8/v8/src/handles.h +21 -16
  330. data/lib/libv8/v8/src/heap-inl.h +11 -13
  331. data/lib/libv8/v8/src/heap-profiler.cc +0 -999
  332. data/lib/libv8/v8/src/heap-profiler.h +0 -303
  333. data/lib/libv8/v8/src/heap.cc +366 -141
  334. data/lib/libv8/v8/src/heap.h +87 -26
  335. data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
  336. data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
  337. data/lib/libv8/v8/src/hydrogen.cc +1146 -629
  338. data/lib/libv8/v8/src/hydrogen.h +100 -64
  339. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
  340. data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
  341. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
  342. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
  343. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
  344. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
  345. data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
  346. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
  347. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
  348. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
  349. data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
  350. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
  351. data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
  352. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
  353. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
  354. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
  355. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
  356. data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
  357. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
  358. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
  359. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
  360. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
  361. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
  362. data/lib/libv8/v8/src/ic.cc +198 -234
  363. data/lib/libv8/v8/src/ic.h +32 -30
  364. data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
  365. data/lib/libv8/v8/src/isolate.cc +112 -95
  366. data/lib/libv8/v8/src/isolate.h +55 -71
  367. data/lib/libv8/v8/src/json-parser.h +486 -48
  368. data/lib/libv8/v8/src/json.js +28 -23
  369. data/lib/libv8/v8/src/jsregexp.cc +163 -208
  370. data/lib/libv8/v8/src/jsregexp.h +0 -1
  371. data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
  372. data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
  373. data/lib/libv8/v8/src/lithium-allocator.h +8 -8
  374. data/lib/libv8/v8/src/lithium.cc +16 -11
  375. data/lib/libv8/v8/src/lithium.h +31 -34
  376. data/lib/libv8/v8/src/liveedit.cc +111 -15
  377. data/lib/libv8/v8/src/liveedit.h +3 -4
  378. data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
  379. data/lib/libv8/v8/src/liveobjectlist.h +2 -2
  380. data/lib/libv8/v8/src/log-inl.h +0 -4
  381. data/lib/libv8/v8/src/log-utils.cc +25 -143
  382. data/lib/libv8/v8/src/log-utils.h +13 -92
  383. data/lib/libv8/v8/src/log.cc +26 -249
  384. data/lib/libv8/v8/src/log.h +6 -17
  385. data/lib/libv8/v8/src/macros.py +9 -6
  386. data/lib/libv8/v8/src/mark-compact.cc +276 -56
  387. data/lib/libv8/v8/src/mark-compact.h +20 -0
  388. data/lib/libv8/v8/src/messages.js +93 -39
  389. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
  390. data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
  391. data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
  392. data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
  393. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
  394. data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
  395. data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
  396. data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
  397. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
  398. data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
  399. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
  400. data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
  401. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
  402. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
  403. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
  404. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
  405. data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
  406. data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
  407. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
  408. data/lib/libv8/v8/src/mirror-debugger.js +55 -8
  409. data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
  410. data/lib/libv8/v8/src/mksnapshot.cc +36 -4
  411. data/lib/libv8/v8/src/natives.h +5 -2
  412. data/lib/libv8/v8/src/objects-debug.cc +73 -6
  413. data/lib/libv8/v8/src/objects-inl.h +529 -164
  414. data/lib/libv8/v8/src/objects-printer.cc +67 -12
  415. data/lib/libv8/v8/src/objects-visiting.cc +13 -2
  416. data/lib/libv8/v8/src/objects-visiting.h +41 -1
  417. data/lib/libv8/v8/src/objects.cc +2200 -1177
  418. data/lib/libv8/v8/src/objects.h +912 -283
  419. data/lib/libv8/v8/src/parser.cc +566 -371
  420. data/lib/libv8/v8/src/parser.h +35 -33
  421. data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
  422. data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
  423. data/lib/libv8/v8/src/platform-linux.cc +60 -57
  424. data/lib/libv8/v8/src/platform-macos.cc +4 -27
  425. data/lib/libv8/v8/src/platform-nullos.cc +3 -16
  426. data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
  427. data/lib/libv8/v8/src/platform-posix.cc +43 -1
  428. data/lib/libv8/v8/src/platform-solaris.cc +151 -112
  429. data/lib/libv8/v8/src/platform-tls.h +1 -1
  430. data/lib/libv8/v8/src/platform-win32.cc +65 -39
  431. data/lib/libv8/v8/src/platform.h +17 -14
  432. data/lib/libv8/v8/src/preparse-data-format.h +2 -2
  433. data/lib/libv8/v8/src/preparse-data.h +8 -2
  434. data/lib/libv8/v8/src/preparser-api.cc +2 -18
  435. data/lib/libv8/v8/src/preparser.cc +106 -65
  436. data/lib/libv8/v8/src/preparser.h +26 -5
  437. data/lib/libv8/v8/src/prettyprinter.cc +25 -43
  438. data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
  439. data/lib/libv8/v8/src/profile-generator.cc +213 -34
  440. data/lib/libv8/v8/src/profile-generator.h +9 -9
  441. data/lib/libv8/v8/src/property.h +1 -0
  442. data/lib/libv8/v8/src/proxy.js +74 -4
  443. data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
  444. data/lib/libv8/v8/src/regexp.js +16 -11
  445. data/lib/libv8/v8/src/rewriter.cc +24 -133
  446. data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
  447. data/lib/libv8/v8/src/runtime-profiler.h +5 -31
  448. data/lib/libv8/v8/src/runtime.cc +1450 -681
  449. data/lib/libv8/v8/src/runtime.h +47 -31
  450. data/lib/libv8/v8/src/runtime.js +2 -1
  451. data/lib/libv8/v8/src/scanner-base.cc +358 -220
  452. data/lib/libv8/v8/src/scanner-base.h +30 -138
  453. data/lib/libv8/v8/src/scanner.cc +0 -18
  454. data/lib/libv8/v8/src/scanner.h +0 -15
  455. data/lib/libv8/v8/src/scopeinfo.cc +3 -1
  456. data/lib/libv8/v8/src/scopeinfo.h +1 -6
  457. data/lib/libv8/v8/src/scopes.cc +243 -253
  458. data/lib/libv8/v8/src/scopes.h +58 -109
  459. data/lib/libv8/v8/src/serialize.cc +12 -54
  460. data/lib/libv8/v8/src/serialize.h +47 -0
  461. data/lib/libv8/v8/src/small-pointer-list.h +25 -0
  462. data/lib/libv8/v8/src/spaces-inl.h +4 -50
  463. data/lib/libv8/v8/src/spaces.cc +64 -131
  464. data/lib/libv8/v8/src/spaces.h +19 -70
  465. data/lib/libv8/v8/src/string-stream.cc +3 -1
  466. data/lib/libv8/v8/src/string.js +10 -6
  467. data/lib/libv8/v8/src/strtod.cc +7 -3
  468. data/lib/libv8/v8/src/stub-cache.cc +59 -129
  469. data/lib/libv8/v8/src/stub-cache.h +42 -54
  470. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
  471. data/lib/libv8/v8/src/token.cc +4 -4
  472. data/lib/libv8/v8/src/token.h +6 -5
  473. data/lib/libv8/v8/src/type-info.cc +173 -129
  474. data/lib/libv8/v8/src/type-info.h +40 -22
  475. data/lib/libv8/v8/src/utils.cc +25 -304
  476. data/lib/libv8/v8/src/utils.h +118 -3
  477. data/lib/libv8/v8/src/v8-counters.h +3 -6
  478. data/lib/libv8/v8/src/v8.cc +34 -27
  479. data/lib/libv8/v8/src/v8.h +7 -7
  480. data/lib/libv8/v8/src/v8conversions.cc +129 -0
  481. data/lib/libv8/v8/src/v8conversions.h +60 -0
  482. data/lib/libv8/v8/src/v8globals.h +15 -6
  483. data/lib/libv8/v8/src/v8natives.js +300 -78
  484. data/lib/libv8/v8/src/v8threads.cc +14 -6
  485. data/lib/libv8/v8/src/v8threads.h +4 -1
  486. data/lib/libv8/v8/src/v8utils.cc +360 -0
  487. data/lib/libv8/v8/src/v8utils.h +17 -66
  488. data/lib/libv8/v8/src/variables.cc +7 -12
  489. data/lib/libv8/v8/src/variables.h +12 -10
  490. data/lib/libv8/v8/src/version.cc +2 -2
  491. data/lib/libv8/v8/src/vm-state-inl.h +0 -41
  492. data/lib/libv8/v8/src/vm-state.h +0 -11
  493. data/lib/libv8/v8/src/weakmap.js +103 -0
  494. data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
  495. data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
  496. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
  497. data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
  498. data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
  499. data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
  500. data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
  501. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
  502. data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
  503. data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
  504. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
  505. data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
  506. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
  507. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
  508. data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
  509. data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
  510. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
  511. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
  512. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
  513. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
  514. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
  515. data/lib/libv8/v8/src/zone.cc +31 -22
  516. data/lib/libv8/v8/src/zone.h +12 -6
  517. data/lib/libv8/v8/tools/codemap.js +8 -0
  518. data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
  519. data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
  520. data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
  521. data/lib/libv8/v8/tools/grokdump.py +44 -35
  522. data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
  523. data/lib/libv8/v8/tools/js2c.py +83 -52
  524. data/lib/libv8/v8/tools/linux-tick-processor +4 -6
  525. data/lib/libv8/v8/tools/ll_prof.py +3 -3
  526. data/lib/libv8/v8/tools/oom_dump/README +3 -1
  527. data/lib/libv8/v8/tools/presubmit.py +11 -4
  528. data/lib/libv8/v8/tools/profile.js +46 -2
  529. data/lib/libv8/v8/tools/splaytree.js +11 -0
  530. data/lib/libv8/v8/tools/stats-viewer.py +15 -11
  531. data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
  532. data/lib/libv8/v8/tools/test.py +28 -8
  533. data/lib/libv8/v8/tools/tickprocessor.js +0 -16
  534. data/lib/libv8/version.rb +1 -1
  535. data/libv8.gemspec +2 -2
  536. metadata +31 -19
  537. data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
  538. data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
2
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -21,7 +21,7 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #
23
23
 
24
- __revision__ = "src/engine/SCons/Memoize.py 5357 2011/09/09 21:31:03 bdeegan"
24
+ __revision__ = "src/engine/SCons/Memoize.py 5134 2010/08/16 23:02:40 bdeegan"
25
25
 
26
26
  __doc__ = """Memoizer
27
27
 
@@ -8,7 +8,7 @@ This creates a hash of global Aliases (dummy targets).
8
8
  """
9
9
 
10
10
  #
11
- # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
11
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
12
12
  #
13
13
  # Permission is hereby granted, free of charge, to any person obtaining
14
14
  # a copy of this software and associated documentation files (the
@@ -30,7 +30,7 @@ This creates a hash of global Aliases (dummy targets).
30
30
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
31
  #
32
32
 
33
- __revision__ = "src/engine/SCons/Node/Alias.py 5357 2011/09/09 21:31:03 bdeegan"
33
+ __revision__ = "src/engine/SCons/Node/Alias.py 5134 2010/08/16 23:02:40 bdeegan"
34
34
 
35
35
  import collections
36
36
 
@@ -11,7 +11,7 @@ that can be used by scripts or modules looking for the canonical default.
11
11
  """
12
12
 
13
13
  #
14
- # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
14
+ # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
15
15
  #
16
16
  # Permission is hereby granted, free of charge, to any person obtaining
17
17
  # a copy of this software and associated documentation files (the
@@ -32,7 +32,7 @@ that can be used by scripts or modules looking for the canonical default.
32
32
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33
33
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34
34
 
35
- __revision__ = "src/engine/SCons/Node/FS.py 5357 2011/09/09 21:31:03 bdeegan"
35
+ __revision__ = "src/engine/SCons/Node/FS.py 5134 2010/08/16 23:02:40 bdeegan"
36
36
 
37
37
  import fnmatch
38
38
  import os
@@ -56,7 +56,6 @@ import SCons.Warnings
56
56
  from SCons.Debug import Trace
57
57
 
58
58
  do_store_info = True
59
- print_duplicate = 0
60
59
 
61
60
 
62
61
  class EntryProxyAttributeError(AttributeError):
@@ -111,85 +110,33 @@ def save_strings(val):
111
110
  #
112
111
 
113
112
  do_splitdrive = None
114
- _my_splitdrive =None
115
113
 
116
114
  def initialize_do_splitdrive():
117
115
  global do_splitdrive
118
- global has_unc
119
116
  drive, path = os.path.splitdrive('X:/foo')
120
- has_unc = hasattr(os.path, 'splitunc')
121
-
122
- do_splitdrive = not not drive or has_unc
123
-
124
- global _my_splitdrive
125
- if has_unc:
126
- def splitdrive(p):
127
- if p[1:2] == ':':
128
- return p[:2], p[2:]
129
- if p[0:2] == '//':
130
- # Note that we leave a leading slash in the path
131
- # because UNC paths are always absolute.
132
- return '//', p[1:]
133
- return '', p
134
- else:
135
- def splitdrive(p):
136
- if p[1:2] == ':':
137
- return p[:2], p[2:]
138
- return '', p
139
- _my_splitdrive = splitdrive
140
-
141
- # Keep some commonly used values in global variables to skip to
142
- # module look-up costs.
143
- global OS_SEP
144
- global UNC_PREFIX
145
- global os_sep_is_slash
146
-
147
- OS_SEP = os.sep
148
- UNC_PREFIX = OS_SEP + OS_SEP
149
- os_sep_is_slash = OS_SEP == '/'
117
+ do_splitdrive = not not drive
150
118
 
151
119
  initialize_do_splitdrive()
152
120
 
153
- # Used to avoid invoking os.path.normpath if not necessary.
154
- needs_normpath_check = re.compile(
155
- r'''
156
- # We need to renormalize the path if it contains any consecutive
157
- # '/' characters.
158
- .*// |
159
-
160
- # We need to renormalize the path if it contains a '..' directory.
161
- # Note that we check for all the following cases:
162
- #
163
- # a) The path is a single '..'
164
- # b) The path starts with '..'. E.g. '../' or '../moredirs'
165
- # but we not match '..abc/'.
166
- # c) The path ends with '..'. E.g. '/..' or 'dirs/..'
167
- # d) The path contains a '..' in the middle.
168
- # E.g. dirs/../moredirs
169
-
170
- (.*/)?\.\.(?:/|$) |
171
-
172
- # We need to renormalize the path if it contains a '.'
173
- # directory, but NOT if it is a single '.' '/' characters. We
174
- # do not want to match a single '.' because this case is checked
175
- # for explicitely since this is common enough case.
176
- #
177
- # Note that we check for all the following cases:
178
- #
179
- # a) We don't match a single '.'
180
- # b) We match if the path starts with '.'. E.g. './' or
181
- # './moredirs' but we not match '.abc/'.
182
- # c) We match if the path ends with '.'. E.g. '/.' or
183
- # 'dirs/.'
184
- # d) We match if the path contains a '.' in the middle.
185
- # E.g. dirs/./moredirs
186
-
187
- \./|.*/\.(?:/|$)
188
-
189
- ''',
190
- re.VERBOSE
191
- )
192
- needs_normpath_match = needs_normpath_check.match
121
+ #
122
+
123
+ needs_normpath_check = None
124
+
125
+ def initialize_normpath_check():
126
+ """
127
+ Initialize the normpath_check regular expression.
128
+
129
+ This function is used by the unit tests to re-initialize the pattern
130
+ when testing for behavior with different values of os.sep.
131
+ """
132
+ global needs_normpath_check
133
+ if os.sep == '/':
134
+ pattern = r'.*/|\.$|\.\.$'
135
+ else:
136
+ pattern = r'.*[/%s]|\.$|\.\.$' % re.escape(os.sep)
137
+ needs_normpath_check = re.compile(pattern)
138
+
139
+ initialize_normpath_check()
193
140
 
194
141
  #
195
142
  # SCons.Action objects for interacting with the outside world.
@@ -491,21 +438,21 @@ class EntryProxy(SCons.Util.Proxy):
491
438
  def __get_posix_path(self):
492
439
  """Return the path with / as the path separator,
493
440
  regardless of platform."""
494
- if os_sep_is_slash:
441
+ if os.sep == '/':
495
442
  return self
496
443
  else:
497
444
  entry = self.get()
498
- r = entry.get_path().replace(OS_SEP, '/')
445
+ r = entry.get_path().replace(os.sep, '/')
499
446
  return SCons.Subst.SpecialAttrWrapper(r, entry.name + "_posix")
500
447
 
501
448
  def __get_windows_path(self):
502
449
  """Return the path with \ as the path separator,
503
450
  regardless of platform."""
504
- if OS_SEP == '\\':
451
+ if os.sep == '\\':
505
452
  return self
506
453
  else:
507
454
  entry = self.get()
508
- r = entry.get_path().replace(OS_SEP, '\\')
455
+ r = entry.get_path().replace(os.sep, '\\')
509
456
  return SCons.Subst.SpecialAttrWrapper(r, entry.name + "_windows")
510
457
 
511
458
  def __get_srcnode(self):
@@ -586,13 +533,9 @@ class Base(SCons.Node.Node):
586
533
 
587
534
  # Filenames and paths are probably reused and are intern'ed to
588
535
  # save some memory.
589
-
590
- #: Filename with extension as it was specified when the object was
591
- #: created; to obtain filesystem path, use Python str() function
592
536
  self.name = SCons.Util.silent_intern(name)
593
- #: Cached filename extension
594
537
  self.suffix = SCons.Util.silent_intern(SCons.Util.splitext(name)[1])
595
- self.fs = fs #: Reference to parent Node.FS object
538
+ self.fs = fs
596
539
 
597
540
  assert directory, "A directory must be provided"
598
541
 
@@ -663,7 +606,7 @@ class Base(SCons.Node.Node):
663
606
  else:
664
607
  result = srcnode.get_path()
665
608
  if not Save_Strings:
666
- # We're not at the point where we're saving the string
609
+ # We're not at the point where we're saving the string string
667
610
  # representations of FS Nodes (because we haven't finished
668
611
  # reading the SConscript files and need to have str() return
669
612
  # things relative to them). That also means we can't yet
@@ -752,15 +695,11 @@ class Base(SCons.Node.Node):
752
695
  if self == dir:
753
696
  return '.'
754
697
  path_elems = self.path_elements
755
- pathname = ''
756
698
  try: i = path_elems.index(dir)
757
- except ValueError:
758
- for p in path_elems[:-1]:
759
- pathname += p.dirname
760
- else:
761
- for p in path_elems[i+1:-1]:
762
- pathname += p.dirname
763
- return pathname + path_elems[-1].name
699
+ except ValueError: pass
700
+ else: path_elems = path_elems[i+1:]
701
+ path_elems = [n.name for n in path_elems]
702
+ return os.sep.join(path_elems)
764
703
 
765
704
  def set_src_builder(self, builder):
766
705
  """Set the source code builder for this node."""
@@ -1124,7 +1063,7 @@ class FS(LocalFS):
1124
1063
  self.pathTop = os.getcwd()
1125
1064
  else:
1126
1065
  self.pathTop = path
1127
- self.defaultDrive = _my_normcase(_my_splitdrive(self.pathTop)[0])
1066
+ self.defaultDrive = _my_normcase(os.path.splitdrive(self.pathTop)[0])
1128
1067
 
1129
1068
  self.Top = self.Dir(self.pathTop)
1130
1069
  self.Top.path = '.'
@@ -1144,10 +1083,7 @@ class FS(LocalFS):
1144
1083
  self.max_drift = max_drift
1145
1084
 
1146
1085
  def getcwd(self):
1147
- if hasattr(self, "_cwd"):
1148
- return self._cwd
1149
- else:
1150
- return "<no cwd>"
1086
+ return self._cwd
1151
1087
 
1152
1088
  def chdir(self, dir, change_os_dir=0):
1153
1089
  """Change the current working directory for lookups.
@@ -1211,110 +1147,54 @@ class FS(LocalFS):
1211
1147
  # str(p) in case it's something like a proxy object
1212
1148
  p = str(p)
1213
1149
 
1214
- if not os_sep_is_slash:
1215
- p = p.replace(OS_SEP, '/')
1216
-
1217
- if p[0:1] == '#':
1150
+ initial_hash = (p[0:1] == '#')
1151
+ if initial_hash:
1218
1152
  # There was an initial '#', so we strip it and override
1219
1153
  # whatever directory they may have specified with the
1220
1154
  # top-level SConstruct directory.
1221
1155
  p = p[1:]
1222
1156
  directory = self.Top
1223
1157
 
1224
- # There might be a drive letter following the
1225
- # '#'. Although it is not described in the SCons man page,
1226
- # the regression test suite explicitly tests for that
1227
- # syntax. It seems to mean the following thing:
1228
- #
1229
- # Assuming the the SCons top dir is in C:/xxx/yyy,
1230
- # '#X:/toto' means X:/xxx/yyy/toto.
1231
- #
1232
- # i.e. it assumes that the X: drive has a directory
1233
- # structure similar to the one found on drive C:.
1234
- if do_splitdrive:
1235
- drive, p = _my_splitdrive(p)
1236
- if drive:
1237
- root = self.get_root(drive)
1238
- else:
1239
- root = directory.root
1240
- else:
1241
- root = directory.root
1158
+ if directory and not isinstance(directory, Dir):
1159
+ directory = self.Dir(directory)
1242
1160
 
1243
- # We can only strip trailing after splitting the drive
1244
- # since the drive might the UNC '//' prefix.
1245
- p = p.strip('/')
1246
-
1247
- needs_normpath = needs_normpath_match(p)
1248
-
1249
- # The path is relative to the top-level SCons directory.
1250
- if p in ('', '.'):
1251
- p = directory.labspath
1252
- else:
1253
- p = directory.labspath + '/' + p
1161
+ if do_splitdrive:
1162
+ drive, p = os.path.splitdrive(p)
1254
1163
  else:
1255
- if do_splitdrive:
1256
- drive, p = _my_splitdrive(p)
1257
- if drive and not p:
1258
- # This causes a naked drive letter to be treated
1259
- # as a synonym for the root directory on that
1260
- # drive.
1261
- p = '/'
1262
- else:
1263
- drive = ''
1264
-
1265
- # We can only strip trailing '/' since the drive might the
1266
- # UNC '//' prefix.
1267
- if p != '/':
1268
- p = p.rstrip('/')
1269
-
1270
- needs_normpath = needs_normpath_match(p)
1271
-
1272
- if p[0:1] == '/':
1273
- # Absolute path
1274
- root = self.get_root(drive)
1164
+ drive = ''
1165
+ if drive and not p:
1166
+ # This causes a naked drive letter to be treated as a synonym
1167
+ # for the root directory on that drive.
1168
+ p = os.sep
1169
+ absolute = os.path.isabs(p)
1170
+
1171
+ needs_normpath = needs_normpath_check.match(p)
1172
+
1173
+ if initial_hash or not absolute:
1174
+ # This is a relative lookup, either to the top-level
1175
+ # SConstruct directory (because of the initial '#') or to
1176
+ # the current directory (the path name is not absolute).
1177
+ # Add the string to the appropriate directory lookup path,
1178
+ # after which the whole thing gets normalized.
1179
+ if not directory:
1180
+ directory = self._cwd
1181
+ if p:
1182
+ p = directory.labspath + '/' + p
1275
1183
  else:
1276
- # This is a relative lookup or to the current directory
1277
- # (the path name is not absolute). Add the string to the
1278
- # appropriate directory lookup path, after which the whole
1279
- # thing gets normalized.
1280
- if directory:
1281
- if not isinstance(directory, Dir):
1282
- directory = self.Dir(directory)
1283
- else:
1284
- directory = self._cwd
1184
+ p = directory.labspath
1285
1185
 
1286
- if p in ('', '.'):
1287
- p = directory.labspath
1288
- else:
1289
- p = directory.labspath + '/' + p
1186
+ if needs_normpath:
1187
+ p = os.path.normpath(p)
1290
1188
 
1291
- if drive:
1292
- root = self.get_root(drive)
1293
- else:
1294
- root = directory.root
1295
-
1296
- if needs_normpath is not None:
1297
- # Normalize a pathname. Will return the same result for
1298
- # equivalent paths.
1299
- #
1300
- # We take advantage of the fact that we have an absolute
1301
- # path here for sure. In addition, we know that the
1302
- # components of lookup path are separated by slashes at
1303
- # this point. Because of this, this code is about 2X
1304
- # faster than calling os.path.normpath() followed by
1305
- # replacing os.sep with '/' again.
1306
- ins = p.split('/')[1:]
1307
- outs = []
1308
- for d in ins:
1309
- if d == '..':
1310
- try:
1311
- outs.pop()
1312
- except IndexError:
1313
- pass
1314
- elif d not in ('', '.'):
1315
- outs.append(d)
1316
- p = '/' + '/'.join(outs)
1189
+ if drive or absolute:
1190
+ root = self.get_root(drive)
1191
+ else:
1192
+ if not directory:
1193
+ directory = self._cwd
1194
+ root = directory.root
1317
1195
 
1196
+ if os.sep != '/':
1197
+ p = p.replace(os.sep, '/')
1318
1198
  return root._lookup_abs(p, fsclass, create)
1319
1199
 
1320
1200
  def Entry(self, name, directory = None, create = 1):
@@ -1420,7 +1300,7 @@ class DirNodeInfo(SCons.Node.NodeInfoBase):
1420
1300
  top = self.fs.Top
1421
1301
  root = top.root
1422
1302
  if do_splitdrive:
1423
- drive, s = _my_splitdrive(s)
1303
+ drive, s = os.path.splitdrive(s)
1424
1304
  if drive:
1425
1305
  root = self.fs.get_root(drive)
1426
1306
  if not os.path.isabs(s):
@@ -1470,34 +1350,11 @@ class Dir(Base):
1470
1350
  self.variant_dirs = []
1471
1351
  self.root = self.dir.root
1472
1352
 
1473
- # For directories, we make a difference between the directory
1474
- # 'name' and the directory 'dirname'. The 'name' attribute is
1475
- # used when we need to print the 'name' of the directory or
1476
- # when we it is used as the last part of a path. The 'dirname'
1477
- # is used when the directory is not the last element of the
1478
- # path. The main reason for making that distinction is that
1479
- # for RoorDir's the dirname can not be easily inferred from
1480
- # the name. For example, we have to add a '/' after a drive
1481
- # letter but not after a UNC path prefix ('//').
1482
- self.dirname = self.name + OS_SEP
1483
-
1484
1353
  # Don't just reset the executor, replace its action list,
1485
1354
  # because it might have some pre-or post-actions that need to
1486
1355
  # be preserved.
1487
- #
1488
- # But don't reset the executor if there is a non-null executor
1489
- # attached already. The existing executor might have other
1490
- # targets, in which case replacing the action list with a
1491
- # Mkdir action is a big mistake.
1492
- if not hasattr(self, 'executor'):
1493
- self.builder = get_MkdirBuilder()
1494
- self.get_executor().set_action_list(self.builder.action)
1495
- else:
1496
- # Prepend MkdirBuilder action to existing action list
1497
- l = self.get_executor().action_list
1498
- a = get_MkdirBuilder().action
1499
- l.insert(0, a)
1500
- self.get_executor().set_action_list(l)
1356
+ self.builder = get_MkdirBuilder()
1357
+ self.get_executor().set_action_list(self.builder.action)
1501
1358
 
1502
1359
  def diskcheck_match(self):
1503
1360
  diskcheck_match(self, self.isfile,
@@ -1546,6 +1403,23 @@ class Dir(Base):
1546
1403
  """
1547
1404
  return self.fs.File(name, self)
1548
1405
 
1406
+ def _lookup_rel(self, name, klass, create=1):
1407
+ """
1408
+ Looks up a *normalized* relative path name, relative to this
1409
+ directory.
1410
+
1411
+ This method is intended for use by internal lookups with
1412
+ already-normalized path data. For general-purpose lookups,
1413
+ use the Entry(), Dir() and File() methods above.
1414
+
1415
+ This method does *no* input checking and will die or give
1416
+ incorrect results if it's passed a non-normalized path name (e.g.,
1417
+ a path containing '..'), an absolute path name, a top-relative
1418
+ ('#foo') path name, or any kind of object.
1419
+ """
1420
+ name = self.entry_labspath(name)
1421
+ return self.root._lookup_abs(name, klass, create)
1422
+
1549
1423
  def link(self, srcdir, duplicate):
1550
1424
  """Set this directory as the variant directory for the
1551
1425
  supplied source directory."""
@@ -1578,7 +1452,7 @@ class Dir(Base):
1578
1452
  if fname == '.':
1579
1453
  fname = dir.name
1580
1454
  else:
1581
- fname = dir.name + OS_SEP + fname
1455
+ fname = dir.name + os.sep + fname
1582
1456
  dir = dir.up()
1583
1457
 
1584
1458
  self._memo['get_all_rdirs'] = list(result)
@@ -1592,7 +1466,7 @@ class Dir(Base):
1592
1466
  self.__clearRepositoryCache()
1593
1467
 
1594
1468
  def up(self):
1595
- return self.dir
1469
+ return self.entries['..']
1596
1470
 
1597
1471
  def _rel_path_key(self, other):
1598
1472
  return str(other)
@@ -1640,14 +1514,14 @@ class Dir(Base):
1640
1514
  if dir_rel_path == '.':
1641
1515
  result = other.name
1642
1516
  else:
1643
- result = dir_rel_path + OS_SEP + other.name
1517
+ result = dir_rel_path + os.sep + other.name
1644
1518
  else:
1645
1519
  i = self.path_elements.index(other) + 1
1646
1520
 
1647
1521
  path_elems = ['..'] * (len(self.path_elements) - i) \
1648
1522
  + [n.name for n in other.path_elements[i:]]
1649
1523
 
1650
- result = OS_SEP.join(path_elems)
1524
+ result = os.sep.join(path_elems)
1651
1525
 
1652
1526
  memo_dict[other] = result
1653
1527
 
@@ -1817,16 +1691,16 @@ class Dir(Base):
1817
1691
  return stamp
1818
1692
 
1819
1693
  def entry_abspath(self, name):
1820
- return self.abspath + OS_SEP + name
1694
+ return self.abspath + os.sep + name
1821
1695
 
1822
1696
  def entry_labspath(self, name):
1823
1697
  return self.labspath + '/' + name
1824
1698
 
1825
1699
  def entry_path(self, name):
1826
- return self.path + OS_SEP + name
1700
+ return self.path + os.sep + name
1827
1701
 
1828
1702
  def entry_tpath(self, name):
1829
- return self.tpath + OS_SEP + name
1703
+ return self.tpath + os.sep + name
1830
1704
 
1831
1705
  def entry_exists_on_disk(self, name):
1832
1706
  try:
@@ -1847,7 +1721,7 @@ class Dir(Base):
1847
1721
  if result is None:
1848
1722
  # Belt-and-suspenders for Windows: check directly for
1849
1723
  # 8.3 file names that don't show up in os.listdir().
1850
- result = os.path.exists(self.abspath + OS_SEP + name)
1724
+ result = os.path.exists(self.abspath + os.sep + name)
1851
1725
  d[name] = result
1852
1726
  return result
1853
1727
  else:
@@ -1868,7 +1742,7 @@ class Dir(Base):
1868
1742
  while dir:
1869
1743
  if dir.srcdir:
1870
1744
  result.append(dir.srcdir.Dir(dirname))
1871
- dirname = dir.name + OS_SEP + dirname
1745
+ dirname = dir.name + os.sep + dirname
1872
1746
  dir = dir.up()
1873
1747
 
1874
1748
  self._memo['srcdir_list'] = result
@@ -2112,7 +1986,7 @@ class RootDir(Dir):
2112
1986
  add a separator when creating the path names of entries within
2113
1987
  this directory.
2114
1988
  """
2115
- def __init__(self, drive, fs):
1989
+ def __init__(self, name, fs):
2116
1990
  if __debug__: logInstanceCreation(self, 'Node.FS.RootDir')
2117
1991
  # We're going to be our own parent directory (".." entry and .dir
2118
1992
  # attribute) so we have to set up some values so Base.__init__()
@@ -2124,47 +1998,29 @@ class RootDir(Dir):
2124
1998
  self.path_elements = []
2125
1999
  self.duplicate = 0
2126
2000
  self.root = self
2127
-
2128
- # Handle all the types of drives:
2129
- if drive == '':
2130
- # No drive, regular UNIX root or Windows default drive.
2131
- name = OS_SEP
2132
- dirname = OS_SEP
2133
- elif drive == '//':
2134
- # UNC path
2135
- name = UNC_PREFIX
2136
- dirname = UNC_PREFIX
2137
- else:
2138
- # Windows drive letter
2139
- name = drive
2140
- dirname = drive + OS_SEP
2141
-
2142
2001
  Base.__init__(self, name, self, fs)
2143
2002
 
2144
- # Now set our paths to what we really want them to be. The
2145
- # name should already contain any necessary separators, such
2146
- # as the initial drive letter (the name) plus the directory
2147
- # separator, except for the "lookup abspath," which does not
2148
- # have the drive letter.
2149
- self.abspath = dirname
2003
+ # Now set our paths to what we really want them to be: the
2004
+ # initial drive letter (the name) plus the directory separator,
2005
+ # except for the "lookup abspath," which does not have the
2006
+ # drive letter.
2007
+ self.abspath = name + os.sep
2150
2008
  self.labspath = ''
2151
- self.path = dirname
2152
- self.tpath = dirname
2009
+ self.path = name + os.sep
2010
+ self.tpath = name + os.sep
2153
2011
  self._morph()
2154
2012
 
2155
- # Must be reset after Dir._morph() is invoked...
2156
- self.dirname = dirname
2157
-
2158
2013
  self._lookupDict = {}
2159
2014
 
2015
+ # The // and os.sep + os.sep entries are necessary because
2016
+ # os.path.normpath() seems to preserve double slashes at the
2017
+ # beginning of a path (presumably for UNC path names), but
2018
+ # collapses triple slashes to a single slash.
2160
2019
  self._lookupDict[''] = self
2161
2020
  self._lookupDict['/'] = self
2162
-
2163
- # The // entry is necessary because os.path.normpath()
2164
- # preserves double slashes at the beginning of a path on Posix
2165
- # platforms.
2166
- if not has_unc:
2167
- self._lookupDict['//'] = self
2021
+ self._lookupDict['//'] = self
2022
+ self._lookupDict[os.sep] = self
2023
+ self._lookupDict[os.sep + os.sep] = self
2168
2024
 
2169
2025
  def must_be_same(self, klass):
2170
2026
  if klass is Dir:
@@ -2183,7 +2039,7 @@ class RootDir(Dir):
2183
2039
  normalized absolute path; we merely let Python's dictionary look
2184
2040
  up and return the One True Node.FS object for the path.
2185
2041
 
2186
- If a Node for the specified "p" doesn't already exist, and
2042
+ If no Node for the specified "p" doesn't already exist, and
2187
2043
  "create" is specified, the Node may be created after recursive
2188
2044
  invocation to find or create the parent directory or directories.
2189
2045
  """
@@ -2196,17 +2052,7 @@ class RootDir(Dir):
2196
2052
  raise SCons.Errors.UserError(msg)
2197
2053
  # There is no Node for this path name, and we're allowed
2198
2054
  # to create it.
2199
- # (note: would like to use p.rsplit('/',1) here but
2200
- # that's not in python 2.3)
2201
- # e.g.: dir_name, file_name = p.rsplit('/',1)
2202
- last_slash = p.rindex('/')
2203
- if (last_slash >= 0):
2204
- dir_name = p[:last_slash]
2205
- file_name = p[last_slash+1:]
2206
- else:
2207
- dir_name = p # shouldn't happen, just in case
2208
- file_name = ''
2209
-
2055
+ dir_name, file_name = os.path.split(p)
2210
2056
  dir_node = self._lookup_abs(dir_name, Dir)
2211
2057
  result = klass(file_name, dir_node, self.fs)
2212
2058
 
@@ -2265,7 +2111,7 @@ class FileNodeInfo(SCons.Node.NodeInfoBase):
2265
2111
  top = self.fs.Top
2266
2112
  root = top.root
2267
2113
  if do_splitdrive:
2268
- drive, s = _my_splitdrive(s)
2114
+ drive, s = os.path.splitdrive(s)
2269
2115
  if drive:
2270
2116
  root = self.fs.get_root(drive)
2271
2117
  if not os.path.isabs(s):
@@ -2283,7 +2129,7 @@ class FileBuildInfo(SCons.Node.BuildInfoBase):
2283
2129
  usual string representation: relative to the top-level SConstruct
2284
2130
  directory, or an absolute path if it's outside.
2285
2131
  """
2286
- if os_sep_is_slash:
2132
+ if os.sep == '/':
2287
2133
  node_to_str = str
2288
2134
  else:
2289
2135
  def node_to_str(n):
@@ -2292,7 +2138,7 @@ class FileBuildInfo(SCons.Node.BuildInfoBase):
2292
2138
  except AttributeError:
2293
2139
  s = str(n)
2294
2140
  else:
2295
- s = s.replace(OS_SEP, '/')
2141
+ s = s.replace(os.sep, '/')
2296
2142
  return s
2297
2143
  for attr in ['bsources', 'bdepends', 'bimplicit']:
2298
2144
  try:
@@ -2792,8 +2638,6 @@ class File(Base):
2792
2638
 
2793
2639
  def _rmv_existing(self):
2794
2640
  self.clear_memoized_values()
2795
- if print_duplicate:
2796
- print "dup: removing existing target %s"%self
2797
2641
  e = Unlink(self, [], None)
2798
2642
  if isinstance(e, SCons.Errors.BuildError):
2799
2643
  raise e
@@ -2834,8 +2678,6 @@ class File(Base):
2834
2678
 
2835
2679
  def do_duplicate(self, src):
2836
2680
  self._createDir()
2837
- if print_duplicate:
2838
- print "dup: relinking variant '%s' from '%s'"%(self, src)
2839
2681
  Unlink(self, None, None)
2840
2682
  e = Link(self, src, None)
2841
2683
  if isinstance(e, SCons.Errors.BuildError):
@@ -2869,8 +2711,6 @@ class File(Base):
2869
2711
  else:
2870
2712
  # The source file does not exist. Make sure no old
2871
2713
  # copy remains in the variant directory.
2872
- if print_duplicate:
2873
- print "dup: no src for %s, unlinking old variant copy"%self
2874
2714
  if Base.exists(self) or self.islink():
2875
2715
  self.fs.unlink(self.path)
2876
2716
  # Return None explicitly because the Base.exists() call
@@ -3142,8 +2982,8 @@ class FileFinder(object):
3142
2982
  if fd is None:
3143
2983
  fd = self.default_filedir
3144
2984
  dir, name = os.path.split(fd)
3145
- drive, d = _my_splitdrive(dir)
3146
- if not name and d[:1] in ('/', OS_SEP):
2985
+ drive, d = os.path.splitdrive(dir)
2986
+ if not name and d[:1] in ('/', os.sep):
3147
2987
  #return p.fs.get_root(drive).dir_on_disk(name)
3148
2988
  return p.fs.get_root(drive)
3149
2989
  if dir: