therubyracer-heroku 0.8.1.pre2 → 0.8.1.pre3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1239) hide show
  1. data/ext/v8/upstream/build/v8/libv8.a +0 -0
  2. data/lib/v8/version.rb +1 -1
  3. metadata +3 -1238
  4. data/ext/v8/upstream/build/scons/CHANGES.txt +0 -5183
  5. data/ext/v8/upstream/build/scons/LICENSE.txt +0 -20
  6. data/ext/v8/upstream/build/scons/MANIFEST +0 -202
  7. data/ext/v8/upstream/build/scons/PKG-INFO +0 -13
  8. data/ext/v8/upstream/build/scons/README.txt +0 -273
  9. data/ext/v8/upstream/build/scons/RELEASE.txt +0 -1040
  10. data/ext/v8/upstream/build/scons/build/lib/SCons/Action.py +0 -1256
  11. data/ext/v8/upstream/build/scons/build/lib/SCons/Builder.py +0 -868
  12. data/ext/v8/upstream/build/scons/build/lib/SCons/CacheDir.py +0 -217
  13. data/ext/v8/upstream/build/scons/build/lib/SCons/Conftest.py +0 -794
  14. data/ext/v8/upstream/build/scons/build/lib/SCons/Debug.py +0 -237
  15. data/ext/v8/upstream/build/scons/build/lib/SCons/Defaults.py +0 -485
  16. data/ext/v8/upstream/build/scons/build/lib/SCons/Environment.py +0 -2327
  17. data/ext/v8/upstream/build/scons/build/lib/SCons/Errors.py +0 -207
  18. data/ext/v8/upstream/build/scons/build/lib/SCons/Executor.py +0 -636
  19. data/ext/v8/upstream/build/scons/build/lib/SCons/Job.py +0 -435
  20. data/ext/v8/upstream/build/scons/build/lib/SCons/Memoize.py +0 -292
  21. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/Alias.py +0 -153
  22. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/FS.py +0 -3220
  23. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/Python.py +0 -128
  24. data/ext/v8/upstream/build/scons/build/lib/SCons/Node/__init__.py +0 -1341
  25. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/BoolOption.py +0 -50
  26. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/EnumOption.py +0 -50
  27. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/ListOption.py +0 -50
  28. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/PackageOption.py +0 -50
  29. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/PathOption.py +0 -76
  30. data/ext/v8/upstream/build/scons/build/lib/SCons/Options/__init__.py +0 -74
  31. data/ext/v8/upstream/build/scons/build/lib/SCons/PathList.py +0 -232
  32. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/__init__.py +0 -236
  33. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/aix.py +0 -70
  34. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/cygwin.py +0 -55
  35. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/darwin.py +0 -46
  36. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/hpux.py +0 -46
  37. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/irix.py +0 -44
  38. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/os2.py +0 -58
  39. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/posix.py +0 -264
  40. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/sunos.py +0 -50
  41. data/ext/v8/upstream/build/scons/build/lib/SCons/Platform/win32.py +0 -386
  42. data/ext/v8/upstream/build/scons/build/lib/SCons/SConf.py +0 -1038
  43. data/ext/v8/upstream/build/scons/build/lib/SCons/SConsign.py +0 -381
  44. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/C.py +0 -132
  45. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/D.py +0 -74
  46. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Dir.py +0 -111
  47. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Fortran.py +0 -320
  48. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/IDL.py +0 -48
  49. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/LaTeX.py +0 -378
  50. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/Prog.py +0 -103
  51. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/RC.py +0 -55
  52. data/ext/v8/upstream/build/scons/build/lib/SCons/Scanner/__init__.py +0 -415
  53. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/Interactive.py +0 -386
  54. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/Main.py +0 -1360
  55. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/SConsOptions.py +0 -944
  56. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/SConscript.py +0 -642
  57. data/ext/v8/upstream/build/scons/build/lib/SCons/Script/__init__.py +0 -414
  58. data/ext/v8/upstream/build/scons/build/lib/SCons/Sig.py +0 -63
  59. data/ext/v8/upstream/build/scons/build/lib/SCons/Subst.py +0 -911
  60. data/ext/v8/upstream/build/scons/build/lib/SCons/Taskmaster.py +0 -1030
  61. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/386asm.py +0 -61
  62. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/BitKeeper.py +0 -65
  63. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/CVS.py +0 -73
  64. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/FortranCommon.py +0 -247
  65. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/JavaCommon.py +0 -324
  66. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/__init__.py +0 -56
  67. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/arch.py +0 -61
  68. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/common.py +0 -210
  69. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/netframework.py +0 -84
  70. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/sdk.py +0 -321
  71. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/vc.py +0 -367
  72. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/MSCommon/vs.py +0 -497
  73. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/Perforce.py +0 -104
  74. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/PharLapCommon.py +0 -138
  75. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/RCS.py +0 -64
  76. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/SCCS.py +0 -64
  77. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/Subversion.py +0 -71
  78. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/__init__.py +0 -675
  79. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixc++.py +0 -82
  80. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixcc.py +0 -74
  81. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixf77.py +0 -80
  82. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/aixlink.py +0 -76
  83. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/applelink.py +0 -71
  84. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ar.py +0 -63
  85. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/as.py +0 -78
  86. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/bcc32.py +0 -82
  87. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/c++.py +0 -99
  88. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/cc.py +0 -114
  89. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/cvf.py +0 -58
  90. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/default.py +0 -50
  91. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dmd.py +0 -224
  92. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvi.py +0 -64
  93. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvipdf.py +0 -125
  94. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/dvips.py +0 -94
  95. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f77.py +0 -62
  96. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f90.py +0 -62
  97. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/f95.py +0 -63
  98. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/filesystem.py +0 -98
  99. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/fortran.py +0 -63
  100. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/g++.py +0 -90
  101. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/g77.py +0 -73
  102. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gas.py +0 -53
  103. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gcc.py +0 -80
  104. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gfortran.py +0 -64
  105. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gnulink.py +0 -63
  106. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/gs.py +0 -81
  107. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hpc++.py +0 -85
  108. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hpcc.py +0 -53
  109. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/hplink.py +0 -77
  110. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/icc.py +0 -59
  111. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/icl.py +0 -52
  112. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ifl.py +0 -72
  113. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ifort.py +0 -90
  114. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ilink.py +0 -59
  115. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ilink32.py +0 -60
  116. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/install.py +0 -229
  117. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/intelc.py +0 -490
  118. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/ipkg.py +0 -71
  119. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/jar.py +0 -110
  120. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/javac.py +0 -234
  121. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/javah.py +0 -138
  122. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/latex.py +0 -79
  123. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/lex.py +0 -99
  124. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/link.py +0 -121
  125. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/linkloc.py +0 -112
  126. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/m4.py +0 -63
  127. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/masm.py +0 -77
  128. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/midl.py +0 -90
  129. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mingw.py +0 -159
  130. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mslib.py +0 -64
  131. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mslink.py +0 -266
  132. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mssdk.py +0 -50
  133. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/msvc.py +0 -269
  134. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/msvs.py +0 -1439
  135. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mwcc.py +0 -208
  136. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/mwld.py +0 -107
  137. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/nasm.py +0 -72
  138. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/__init__.py +0 -314
  139. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/ipk.py +0 -185
  140. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/msi.py +0 -526
  141. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/rpm.py +0 -367
  142. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_tarbz2.py +0 -43
  143. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_targz.py +0 -43
  144. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/src_zip.py +0 -43
  145. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/tarbz2.py +0 -44
  146. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/targz.py +0 -44
  147. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/packaging/zip.py +0 -44
  148. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdf.py +0 -78
  149. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdflatex.py +0 -83
  150. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/pdftex.py +0 -108
  151. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/qt.py +0 -336
  152. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rmic.py +0 -121
  153. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rpcgen.py +0 -70
  154. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/rpm.py +0 -132
  155. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgiar.py +0 -68
  156. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgic++.py +0 -58
  157. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgicc.py +0 -53
  158. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sgilink.py +0 -63
  159. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunar.py +0 -67
  160. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunc++.py +0 -142
  161. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/suncc.py +0 -58
  162. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf77.py +0 -63
  163. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf90.py +0 -64
  164. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunf95.py +0 -64
  165. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/sunlink.py +0 -77
  166. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/swig.py +0 -186
  167. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tar.py +0 -73
  168. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tex.py +0 -805
  169. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/textfile.py +0 -175
  170. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/tlib.py +0 -53
  171. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/wix.py +0 -100
  172. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/yacc.py +0 -131
  173. data/ext/v8/upstream/build/scons/build/lib/SCons/Tool/zip.py +0 -100
  174. data/ext/v8/upstream/build/scons/build/lib/SCons/Util.py +0 -1645
  175. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/BoolVariable.py +0 -91
  176. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/EnumVariable.py +0 -107
  177. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/ListVariable.py +0 -139
  178. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/PackageVariable.py +0 -109
  179. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/PathVariable.py +0 -147
  180. data/ext/v8/upstream/build/scons/build/lib/SCons/Variables/__init__.py +0 -317
  181. data/ext/v8/upstream/build/scons/build/lib/SCons/Warnings.py +0 -228
  182. data/ext/v8/upstream/build/scons/build/lib/SCons/__init__.py +0 -49
  183. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/__init__.py +0 -302
  184. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_UserString.py +0 -98
  185. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_hashlib.py +0 -91
  186. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_itertools.py +0 -124
  187. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_optparse.py +0 -1725
  188. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_sets.py +0 -583
  189. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_sets15.py +0 -176
  190. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_shlex.py +0 -325
  191. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_subprocess.py +0 -1296
  192. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/_scons_textwrap.py +0 -382
  193. data/ext/v8/upstream/build/scons/build/lib/SCons/compat/builtins.py +0 -187
  194. data/ext/v8/upstream/build/scons/build/lib/SCons/cpp.py +0 -598
  195. data/ext/v8/upstream/build/scons/build/lib/SCons/dblite.py +0 -248
  196. data/ext/v8/upstream/build/scons/build/lib/SCons/exitfuncs.py +0 -77
  197. data/ext/v8/upstream/build/scons/build/scripts/scons +0 -184
  198. data/ext/v8/upstream/build/scons/build/scripts/scons-time +0 -1529
  199. data/ext/v8/upstream/build/scons/build/scripts/scons.bat +0 -31
  200. data/ext/v8/upstream/build/scons/build/scripts/sconsign +0 -508
  201. data/ext/v8/upstream/build/scons/engine/SCons/Action.py +0 -1256
  202. data/ext/v8/upstream/build/scons/engine/SCons/Builder.py +0 -868
  203. data/ext/v8/upstream/build/scons/engine/SCons/CacheDir.py +0 -217
  204. data/ext/v8/upstream/build/scons/engine/SCons/Conftest.py +0 -794
  205. data/ext/v8/upstream/build/scons/engine/SCons/Debug.py +0 -237
  206. data/ext/v8/upstream/build/scons/engine/SCons/Defaults.py +0 -485
  207. data/ext/v8/upstream/build/scons/engine/SCons/Environment.py +0 -2327
  208. data/ext/v8/upstream/build/scons/engine/SCons/Errors.py +0 -207
  209. data/ext/v8/upstream/build/scons/engine/SCons/Executor.py +0 -636
  210. data/ext/v8/upstream/build/scons/engine/SCons/Job.py +0 -435
  211. data/ext/v8/upstream/build/scons/engine/SCons/Memoize.py +0 -292
  212. data/ext/v8/upstream/build/scons/engine/SCons/Node/Alias.py +0 -153
  213. data/ext/v8/upstream/build/scons/engine/SCons/Node/FS.py +0 -3220
  214. data/ext/v8/upstream/build/scons/engine/SCons/Node/Python.py +0 -128
  215. data/ext/v8/upstream/build/scons/engine/SCons/Node/__init__.py +0 -1341
  216. data/ext/v8/upstream/build/scons/engine/SCons/Options/BoolOption.py +0 -50
  217. data/ext/v8/upstream/build/scons/engine/SCons/Options/EnumOption.py +0 -50
  218. data/ext/v8/upstream/build/scons/engine/SCons/Options/ListOption.py +0 -50
  219. data/ext/v8/upstream/build/scons/engine/SCons/Options/PackageOption.py +0 -50
  220. data/ext/v8/upstream/build/scons/engine/SCons/Options/PathOption.py +0 -76
  221. data/ext/v8/upstream/build/scons/engine/SCons/Options/__init__.py +0 -74
  222. data/ext/v8/upstream/build/scons/engine/SCons/PathList.py +0 -232
  223. data/ext/v8/upstream/build/scons/engine/SCons/Platform/__init__.py +0 -236
  224. data/ext/v8/upstream/build/scons/engine/SCons/Platform/aix.py +0 -70
  225. data/ext/v8/upstream/build/scons/engine/SCons/Platform/cygwin.py +0 -55
  226. data/ext/v8/upstream/build/scons/engine/SCons/Platform/darwin.py +0 -46
  227. data/ext/v8/upstream/build/scons/engine/SCons/Platform/hpux.py +0 -46
  228. data/ext/v8/upstream/build/scons/engine/SCons/Platform/irix.py +0 -44
  229. data/ext/v8/upstream/build/scons/engine/SCons/Platform/os2.py +0 -58
  230. data/ext/v8/upstream/build/scons/engine/SCons/Platform/posix.py +0 -264
  231. data/ext/v8/upstream/build/scons/engine/SCons/Platform/sunos.py +0 -50
  232. data/ext/v8/upstream/build/scons/engine/SCons/Platform/win32.py +0 -386
  233. data/ext/v8/upstream/build/scons/engine/SCons/SConf.py +0 -1038
  234. data/ext/v8/upstream/build/scons/engine/SCons/SConsign.py +0 -381
  235. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/C.py +0 -132
  236. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/D.py +0 -74
  237. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Dir.py +0 -111
  238. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Fortran.py +0 -320
  239. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/IDL.py +0 -48
  240. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/LaTeX.py +0 -378
  241. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/Prog.py +0 -103
  242. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/RC.py +0 -55
  243. data/ext/v8/upstream/build/scons/engine/SCons/Scanner/__init__.py +0 -415
  244. data/ext/v8/upstream/build/scons/engine/SCons/Script/Interactive.py +0 -386
  245. data/ext/v8/upstream/build/scons/engine/SCons/Script/Main.py +0 -1360
  246. data/ext/v8/upstream/build/scons/engine/SCons/Script/SConsOptions.py +0 -944
  247. data/ext/v8/upstream/build/scons/engine/SCons/Script/SConscript.py +0 -642
  248. data/ext/v8/upstream/build/scons/engine/SCons/Script/__init__.py +0 -414
  249. data/ext/v8/upstream/build/scons/engine/SCons/Sig.py +0 -63
  250. data/ext/v8/upstream/build/scons/engine/SCons/Subst.py +0 -911
  251. data/ext/v8/upstream/build/scons/engine/SCons/Taskmaster.py +0 -1030
  252. data/ext/v8/upstream/build/scons/engine/SCons/Tool/386asm.py +0 -61
  253. data/ext/v8/upstream/build/scons/engine/SCons/Tool/BitKeeper.py +0 -65
  254. data/ext/v8/upstream/build/scons/engine/SCons/Tool/CVS.py +0 -73
  255. data/ext/v8/upstream/build/scons/engine/SCons/Tool/FortranCommon.py +0 -247
  256. data/ext/v8/upstream/build/scons/engine/SCons/Tool/JavaCommon.py +0 -324
  257. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/__init__.py +0 -56
  258. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/arch.py +0 -61
  259. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/common.py +0 -210
  260. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/netframework.py +0 -84
  261. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/sdk.py +0 -321
  262. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/vc.py +0 -367
  263. data/ext/v8/upstream/build/scons/engine/SCons/Tool/MSCommon/vs.py +0 -497
  264. data/ext/v8/upstream/build/scons/engine/SCons/Tool/Perforce.py +0 -104
  265. data/ext/v8/upstream/build/scons/engine/SCons/Tool/PharLapCommon.py +0 -138
  266. data/ext/v8/upstream/build/scons/engine/SCons/Tool/RCS.py +0 -64
  267. data/ext/v8/upstream/build/scons/engine/SCons/Tool/SCCS.py +0 -64
  268. data/ext/v8/upstream/build/scons/engine/SCons/Tool/Subversion.py +0 -71
  269. data/ext/v8/upstream/build/scons/engine/SCons/Tool/__init__.py +0 -675
  270. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixc++.py +0 -82
  271. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixcc.py +0 -74
  272. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixf77.py +0 -80
  273. data/ext/v8/upstream/build/scons/engine/SCons/Tool/aixlink.py +0 -76
  274. data/ext/v8/upstream/build/scons/engine/SCons/Tool/applelink.py +0 -71
  275. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ar.py +0 -63
  276. data/ext/v8/upstream/build/scons/engine/SCons/Tool/as.py +0 -78
  277. data/ext/v8/upstream/build/scons/engine/SCons/Tool/bcc32.py +0 -82
  278. data/ext/v8/upstream/build/scons/engine/SCons/Tool/c++.py +0 -99
  279. data/ext/v8/upstream/build/scons/engine/SCons/Tool/cc.py +0 -114
  280. data/ext/v8/upstream/build/scons/engine/SCons/Tool/cvf.py +0 -58
  281. data/ext/v8/upstream/build/scons/engine/SCons/Tool/default.py +0 -50
  282. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dmd.py +0 -224
  283. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvi.py +0 -64
  284. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvipdf.py +0 -125
  285. data/ext/v8/upstream/build/scons/engine/SCons/Tool/dvips.py +0 -94
  286. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f77.py +0 -62
  287. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f90.py +0 -62
  288. data/ext/v8/upstream/build/scons/engine/SCons/Tool/f95.py +0 -63
  289. data/ext/v8/upstream/build/scons/engine/SCons/Tool/filesystem.py +0 -98
  290. data/ext/v8/upstream/build/scons/engine/SCons/Tool/fortran.py +0 -63
  291. data/ext/v8/upstream/build/scons/engine/SCons/Tool/g++.py +0 -90
  292. data/ext/v8/upstream/build/scons/engine/SCons/Tool/g77.py +0 -73
  293. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gas.py +0 -53
  294. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gcc.py +0 -80
  295. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gfortran.py +0 -64
  296. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gnulink.py +0 -63
  297. data/ext/v8/upstream/build/scons/engine/SCons/Tool/gs.py +0 -81
  298. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hpc++.py +0 -85
  299. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hpcc.py +0 -53
  300. data/ext/v8/upstream/build/scons/engine/SCons/Tool/hplink.py +0 -77
  301. data/ext/v8/upstream/build/scons/engine/SCons/Tool/icc.py +0 -59
  302. data/ext/v8/upstream/build/scons/engine/SCons/Tool/icl.py +0 -52
  303. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ifl.py +0 -72
  304. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ifort.py +0 -90
  305. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ilink.py +0 -59
  306. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ilink32.py +0 -60
  307. data/ext/v8/upstream/build/scons/engine/SCons/Tool/install.py +0 -229
  308. data/ext/v8/upstream/build/scons/engine/SCons/Tool/intelc.py +0 -490
  309. data/ext/v8/upstream/build/scons/engine/SCons/Tool/ipkg.py +0 -71
  310. data/ext/v8/upstream/build/scons/engine/SCons/Tool/jar.py +0 -110
  311. data/ext/v8/upstream/build/scons/engine/SCons/Tool/javac.py +0 -234
  312. data/ext/v8/upstream/build/scons/engine/SCons/Tool/javah.py +0 -138
  313. data/ext/v8/upstream/build/scons/engine/SCons/Tool/latex.py +0 -79
  314. data/ext/v8/upstream/build/scons/engine/SCons/Tool/lex.py +0 -99
  315. data/ext/v8/upstream/build/scons/engine/SCons/Tool/link.py +0 -121
  316. data/ext/v8/upstream/build/scons/engine/SCons/Tool/linkloc.py +0 -112
  317. data/ext/v8/upstream/build/scons/engine/SCons/Tool/m4.py +0 -63
  318. data/ext/v8/upstream/build/scons/engine/SCons/Tool/masm.py +0 -77
  319. data/ext/v8/upstream/build/scons/engine/SCons/Tool/midl.py +0 -90
  320. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mingw.py +0 -159
  321. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mslib.py +0 -64
  322. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mslink.py +0 -266
  323. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mssdk.py +0 -50
  324. data/ext/v8/upstream/build/scons/engine/SCons/Tool/msvc.py +0 -269
  325. data/ext/v8/upstream/build/scons/engine/SCons/Tool/msvs.py +0 -1439
  326. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mwcc.py +0 -208
  327. data/ext/v8/upstream/build/scons/engine/SCons/Tool/mwld.py +0 -107
  328. data/ext/v8/upstream/build/scons/engine/SCons/Tool/nasm.py +0 -72
  329. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/__init__.py +0 -314
  330. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/ipk.py +0 -185
  331. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/msi.py +0 -526
  332. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/rpm.py +0 -367
  333. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_tarbz2.py +0 -43
  334. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_targz.py +0 -43
  335. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/src_zip.py +0 -43
  336. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/tarbz2.py +0 -44
  337. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/targz.py +0 -44
  338. data/ext/v8/upstream/build/scons/engine/SCons/Tool/packaging/zip.py +0 -44
  339. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdf.py +0 -78
  340. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdflatex.py +0 -83
  341. data/ext/v8/upstream/build/scons/engine/SCons/Tool/pdftex.py +0 -108
  342. data/ext/v8/upstream/build/scons/engine/SCons/Tool/qt.py +0 -336
  343. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rmic.py +0 -121
  344. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rpcgen.py +0 -70
  345. data/ext/v8/upstream/build/scons/engine/SCons/Tool/rpm.py +0 -132
  346. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgiar.py +0 -68
  347. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgic++.py +0 -58
  348. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgicc.py +0 -53
  349. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sgilink.py +0 -63
  350. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunar.py +0 -67
  351. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunc++.py +0 -142
  352. data/ext/v8/upstream/build/scons/engine/SCons/Tool/suncc.py +0 -58
  353. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf77.py +0 -63
  354. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf90.py +0 -64
  355. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunf95.py +0 -64
  356. data/ext/v8/upstream/build/scons/engine/SCons/Tool/sunlink.py +0 -77
  357. data/ext/v8/upstream/build/scons/engine/SCons/Tool/swig.py +0 -186
  358. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tar.py +0 -73
  359. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tex.py +0 -805
  360. data/ext/v8/upstream/build/scons/engine/SCons/Tool/textfile.py +0 -175
  361. data/ext/v8/upstream/build/scons/engine/SCons/Tool/tlib.py +0 -53
  362. data/ext/v8/upstream/build/scons/engine/SCons/Tool/wix.py +0 -100
  363. data/ext/v8/upstream/build/scons/engine/SCons/Tool/yacc.py +0 -131
  364. data/ext/v8/upstream/build/scons/engine/SCons/Tool/zip.py +0 -100
  365. data/ext/v8/upstream/build/scons/engine/SCons/Util.py +0 -1645
  366. data/ext/v8/upstream/build/scons/engine/SCons/Variables/BoolVariable.py +0 -91
  367. data/ext/v8/upstream/build/scons/engine/SCons/Variables/EnumVariable.py +0 -107
  368. data/ext/v8/upstream/build/scons/engine/SCons/Variables/ListVariable.py +0 -139
  369. data/ext/v8/upstream/build/scons/engine/SCons/Variables/PackageVariable.py +0 -109
  370. data/ext/v8/upstream/build/scons/engine/SCons/Variables/PathVariable.py +0 -147
  371. data/ext/v8/upstream/build/scons/engine/SCons/Variables/__init__.py +0 -317
  372. data/ext/v8/upstream/build/scons/engine/SCons/Warnings.py +0 -228
  373. data/ext/v8/upstream/build/scons/engine/SCons/__init__.py +0 -49
  374. data/ext/v8/upstream/build/scons/engine/SCons/compat/__init__.py +0 -302
  375. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_UserString.py +0 -98
  376. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_hashlib.py +0 -91
  377. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_itertools.py +0 -124
  378. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_optparse.py +0 -1725
  379. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_sets.py +0 -583
  380. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_sets15.py +0 -176
  381. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_shlex.py +0 -325
  382. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_subprocess.py +0 -1296
  383. data/ext/v8/upstream/build/scons/engine/SCons/compat/_scons_textwrap.py +0 -382
  384. data/ext/v8/upstream/build/scons/engine/SCons/compat/builtins.py +0 -187
  385. data/ext/v8/upstream/build/scons/engine/SCons/cpp.py +0 -598
  386. data/ext/v8/upstream/build/scons/engine/SCons/dblite.py +0 -248
  387. data/ext/v8/upstream/build/scons/engine/SCons/exitfuncs.py +0 -77
  388. data/ext/v8/upstream/build/scons/install/bin/scons +0 -184
  389. data/ext/v8/upstream/build/scons/install/bin/scons-1.2.0.d20100117 +0 -184
  390. data/ext/v8/upstream/build/scons/install/bin/scons-time +0 -1529
  391. data/ext/v8/upstream/build/scons/install/bin/scons-time-1.2.0.d20100117 +0 -1529
  392. data/ext/v8/upstream/build/scons/install/bin/sconsign +0 -508
  393. data/ext/v8/upstream/build/scons/install/bin/sconsign-1.2.0.d20100117 +0 -508
  394. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Action.py +0 -1256
  395. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Action.pyc +0 -0
  396. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Builder.py +0 -868
  397. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Builder.pyc +0 -0
  398. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/CacheDir.py +0 -217
  399. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/CacheDir.pyc +0 -0
  400. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Conftest.py +0 -794
  401. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Conftest.pyc +0 -0
  402. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Debug.py +0 -237
  403. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Debug.pyc +0 -0
  404. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Defaults.py +0 -485
  405. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Defaults.pyc +0 -0
  406. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Environment.py +0 -2327
  407. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Environment.pyc +0 -0
  408. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Errors.py +0 -207
  409. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Errors.pyc +0 -0
  410. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Executor.py +0 -636
  411. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Executor.pyc +0 -0
  412. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Job.py +0 -435
  413. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Job.pyc +0 -0
  414. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Memoize.py +0 -292
  415. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Memoize.pyc +0 -0
  416. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Alias.py +0 -153
  417. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Alias.pyc +0 -0
  418. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/FS.py +0 -3220
  419. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyc +0 -0
  420. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Python.py +0 -128
  421. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/Python.pyc +0 -0
  422. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/__init__.py +0 -1341
  423. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Node/__init__.pyc +0 -0
  424. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/BoolOption.py +0 -50
  425. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/BoolOption.pyc +0 -0
  426. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/EnumOption.py +0 -50
  427. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/EnumOption.pyc +0 -0
  428. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/ListOption.py +0 -50
  429. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/ListOption.pyc +0 -0
  430. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PackageOption.py +0 -50
  431. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PackageOption.pyc +0 -0
  432. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PathOption.py +0 -76
  433. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/PathOption.pyc +0 -0
  434. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/__init__.py +0 -74
  435. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Options/__init__.pyc +0 -0
  436. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/PathList.py +0 -232
  437. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/PathList.pyc +0 -0
  438. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/__init__.py +0 -236
  439. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/__init__.pyc +0 -0
  440. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/aix.py +0 -70
  441. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/aix.pyc +0 -0
  442. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/cygwin.py +0 -55
  443. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/cygwin.pyc +0 -0
  444. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/darwin.py +0 -46
  445. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/darwin.pyc +0 -0
  446. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/hpux.py +0 -46
  447. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/hpux.pyc +0 -0
  448. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/irix.py +0 -44
  449. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/irix.pyc +0 -0
  450. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/os2.py +0 -58
  451. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/os2.pyc +0 -0
  452. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/posix.py +0 -264
  453. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/posix.pyc +0 -0
  454. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/sunos.py +0 -50
  455. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/sunos.pyc +0 -0
  456. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/win32.py +0 -386
  457. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Platform/win32.pyc +0 -0
  458. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConf.py +0 -1038
  459. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConf.pyc +0 -0
  460. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConsign.py +0 -381
  461. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/SConsign.pyc +0 -0
  462. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/C.py +0 -132
  463. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/C.pyc +0 -0
  464. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/D.py +0 -74
  465. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/D.pyc +0 -0
  466. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Dir.py +0 -111
  467. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Dir.pyc +0 -0
  468. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Fortran.py +0 -320
  469. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Fortran.pyc +0 -0
  470. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/IDL.py +0 -48
  471. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/IDL.pyc +0 -0
  472. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/LaTeX.py +0 -378
  473. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/LaTeX.pyc +0 -0
  474. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Prog.py +0 -103
  475. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/Prog.pyc +0 -0
  476. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/RC.py +0 -55
  477. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/RC.pyc +0 -0
  478. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/__init__.py +0 -415
  479. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Scanner/__init__.pyc +0 -0
  480. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Interactive.py +0 -386
  481. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Interactive.pyc +0 -0
  482. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Main.py +0 -1360
  483. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/Main.pyc +0 -0
  484. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConsOptions.py +0 -944
  485. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConsOptions.pyc +0 -0
  486. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConscript.py +0 -642
  487. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/SConscript.pyc +0 -0
  488. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/__init__.py +0 -414
  489. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Script/__init__.pyc +0 -0
  490. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Sig.py +0 -63
  491. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Sig.pyc +0 -0
  492. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Subst.py +0 -911
  493. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Subst.pyc +0 -0
  494. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Taskmaster.py +0 -1030
  495. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Taskmaster.pyc +0 -0
  496. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/386asm.py +0 -61
  497. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/386asm.pyc +0 -0
  498. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/BitKeeper.py +0 -65
  499. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/BitKeeper.pyc +0 -0
  500. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/CVS.py +0 -73
  501. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/CVS.pyc +0 -0
  502. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/FortranCommon.py +0 -247
  503. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/FortranCommon.pyc +0 -0
  504. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/JavaCommon.py +0 -324
  505. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/JavaCommon.pyc +0 -0
  506. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/__init__.py +0 -56
  507. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/__init__.pyc +0 -0
  508. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/arch.py +0 -61
  509. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/arch.pyc +0 -0
  510. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/common.py +0 -210
  511. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/common.pyc +0 -0
  512. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/netframework.py +0 -84
  513. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/netframework.pyc +0 -0
  514. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/sdk.py +0 -321
  515. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/sdk.pyc +0 -0
  516. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vc.py +0 -367
  517. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vc.pyc +0 -0
  518. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vs.py +0 -497
  519. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/MSCommon/vs.pyc +0 -0
  520. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Perforce.py +0 -104
  521. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Perforce.pyc +0 -0
  522. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/PharLapCommon.py +0 -138
  523. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/PharLapCommon.pyc +0 -0
  524. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/RCS.py +0 -64
  525. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/RCS.pyc +0 -0
  526. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/SCCS.py +0 -64
  527. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/SCCS.pyc +0 -0
  528. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Subversion.py +0 -71
  529. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/Subversion.pyc +0 -0
  530. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/__init__.py +0 -675
  531. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/__init__.pyc +0 -0
  532. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixc++.py +0 -82
  533. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixc++.pyc +0 -0
  534. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixcc.py +0 -74
  535. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixcc.pyc +0 -0
  536. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixf77.py +0 -80
  537. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixf77.pyc +0 -0
  538. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixlink.py +0 -76
  539. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/aixlink.pyc +0 -0
  540. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/applelink.py +0 -71
  541. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/applelink.pyc +0 -0
  542. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ar.py +0 -63
  543. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ar.pyc +0 -0
  544. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/as.py +0 -78
  545. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/as.pyc +0 -0
  546. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/bcc32.py +0 -82
  547. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/bcc32.pyc +0 -0
  548. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/c++.py +0 -99
  549. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/c++.pyc +0 -0
  550. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cc.py +0 -114
  551. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cc.pyc +0 -0
  552. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cvf.py +0 -58
  553. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/cvf.pyc +0 -0
  554. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/default.py +0 -50
  555. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/default.pyc +0 -0
  556. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dmd.py +0 -224
  557. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dmd.pyc +0 -0
  558. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvi.py +0 -64
  559. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvi.pyc +0 -0
  560. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvipdf.py +0 -125
  561. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvipdf.pyc +0 -0
  562. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvips.py +0 -94
  563. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/dvips.pyc +0 -0
  564. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f77.py +0 -62
  565. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f77.pyc +0 -0
  566. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f90.py +0 -62
  567. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f90.pyc +0 -0
  568. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f95.py +0 -63
  569. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/f95.pyc +0 -0
  570. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/filesystem.py +0 -98
  571. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/filesystem.pyc +0 -0
  572. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/fortran.py +0 -63
  573. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/fortran.pyc +0 -0
  574. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g++.py +0 -90
  575. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g++.pyc +0 -0
  576. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g77.py +0 -73
  577. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/g77.pyc +0 -0
  578. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gas.py +0 -53
  579. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gas.pyc +0 -0
  580. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gcc.py +0 -80
  581. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gcc.pyc +0 -0
  582. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gfortran.py +0 -64
  583. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gfortran.pyc +0 -0
  584. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gnulink.py +0 -63
  585. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gnulink.pyc +0 -0
  586. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gs.py +0 -81
  587. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/gs.pyc +0 -0
  588. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpc++.py +0 -85
  589. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpc++.pyc +0 -0
  590. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpcc.py +0 -53
  591. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hpcc.pyc +0 -0
  592. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hplink.py +0 -77
  593. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/hplink.pyc +0 -0
  594. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icc.py +0 -59
  595. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icc.pyc +0 -0
  596. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icl.py +0 -52
  597. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/icl.pyc +0 -0
  598. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifl.py +0 -72
  599. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifl.pyc +0 -0
  600. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifort.py +0 -90
  601. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ifort.pyc +0 -0
  602. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink.py +0 -59
  603. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink.pyc +0 -0
  604. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink32.py +0 -60
  605. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ilink32.pyc +0 -0
  606. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/install.py +0 -229
  607. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/install.pyc +0 -0
  608. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/intelc.py +0 -490
  609. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/intelc.pyc +0 -0
  610. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ipkg.py +0 -71
  611. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/ipkg.pyc +0 -0
  612. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/jar.py +0 -110
  613. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/jar.pyc +0 -0
  614. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javac.py +0 -234
  615. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javac.pyc +0 -0
  616. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javah.py +0 -138
  617. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/javah.pyc +0 -0
  618. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/latex.py +0 -79
  619. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/latex.pyc +0 -0
  620. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/lex.py +0 -99
  621. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/lex.pyc +0 -0
  622. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/link.py +0 -121
  623. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/link.pyc +0 -0
  624. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/linkloc.py +0 -112
  625. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/linkloc.pyc +0 -0
  626. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/m4.py +0 -63
  627. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/m4.pyc +0 -0
  628. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/masm.py +0 -77
  629. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/masm.pyc +0 -0
  630. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/midl.py +0 -90
  631. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/midl.pyc +0 -0
  632. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mingw.py +0 -159
  633. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mingw.pyc +0 -0
  634. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslib.py +0 -64
  635. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslib.pyc +0 -0
  636. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslink.py +0 -266
  637. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mslink.pyc +0 -0
  638. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mssdk.py +0 -50
  639. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mssdk.pyc +0 -0
  640. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvc.py +0 -269
  641. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvc.pyc +0 -0
  642. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvs.py +0 -1439
  643. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/msvs.pyc +0 -0
  644. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwcc.py +0 -208
  645. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwcc.pyc +0 -0
  646. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwld.py +0 -107
  647. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/mwld.pyc +0 -0
  648. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/nasm.py +0 -72
  649. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/nasm.pyc +0 -0
  650. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/__init__.py +0 -314
  651. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/__init__.pyc +0 -0
  652. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/ipk.py +0 -185
  653. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/ipk.pyc +0 -0
  654. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/msi.py +0 -526
  655. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/msi.pyc +0 -0
  656. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/rpm.py +0 -367
  657. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/rpm.pyc +0 -0
  658. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_tarbz2.py +0 -43
  659. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_tarbz2.pyc +0 -0
  660. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_targz.py +0 -43
  661. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_targz.pyc +0 -0
  662. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_zip.py +0 -43
  663. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/src_zip.pyc +0 -0
  664. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/tarbz2.py +0 -44
  665. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/tarbz2.pyc +0 -0
  666. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/targz.py +0 -44
  667. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/targz.pyc +0 -0
  668. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/zip.py +0 -44
  669. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/packaging/zip.pyc +0 -0
  670. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdf.py +0 -78
  671. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdf.pyc +0 -0
  672. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdflatex.py +0 -83
  673. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdflatex.pyc +0 -0
  674. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdftex.py +0 -108
  675. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/pdftex.pyc +0 -0
  676. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/qt.py +0 -336
  677. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/qt.pyc +0 -0
  678. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rmic.py +0 -121
  679. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rmic.pyc +0 -0
  680. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpcgen.py +0 -70
  681. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpcgen.pyc +0 -0
  682. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpm.py +0 -132
  683. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/rpm.pyc +0 -0
  684. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgiar.py +0 -68
  685. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgiar.pyc +0 -0
  686. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgic++.py +0 -58
  687. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgic++.pyc +0 -0
  688. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgicc.py +0 -53
  689. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgicc.pyc +0 -0
  690. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgilink.py +0 -63
  691. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sgilink.pyc +0 -0
  692. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunar.py +0 -67
  693. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunar.pyc +0 -0
  694. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunc++.py +0 -142
  695. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunc++.pyc +0 -0
  696. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/suncc.py +0 -58
  697. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/suncc.pyc +0 -0
  698. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf77.py +0 -63
  699. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf77.pyc +0 -0
  700. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf90.py +0 -64
  701. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf90.pyc +0 -0
  702. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf95.py +0 -64
  703. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunf95.pyc +0 -0
  704. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunlink.py +0 -77
  705. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/sunlink.pyc +0 -0
  706. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/swig.py +0 -186
  707. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/swig.pyc +0 -0
  708. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tar.py +0 -73
  709. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tar.pyc +0 -0
  710. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tex.py +0 -805
  711. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tex.pyc +0 -0
  712. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/textfile.py +0 -175
  713. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/textfile.pyc +0 -0
  714. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tlib.py +0 -53
  715. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/tlib.pyc +0 -0
  716. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/wix.py +0 -100
  717. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/wix.pyc +0 -0
  718. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/yacc.py +0 -131
  719. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/yacc.pyc +0 -0
  720. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/zip.py +0 -100
  721. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Tool/zip.pyc +0 -0
  722. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Util.py +0 -1645
  723. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Util.pyc +0 -0
  724. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/BoolVariable.py +0 -91
  725. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/BoolVariable.pyc +0 -0
  726. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/EnumVariable.py +0 -107
  727. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/EnumVariable.pyc +0 -0
  728. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/ListVariable.py +0 -139
  729. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/ListVariable.pyc +0 -0
  730. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PackageVariable.py +0 -109
  731. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PackageVariable.pyc +0 -0
  732. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PathVariable.py +0 -147
  733. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/PathVariable.pyc +0 -0
  734. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/__init__.py +0 -317
  735. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Variables/__init__.pyc +0 -0
  736. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Warnings.py +0 -228
  737. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/Warnings.pyc +0 -0
  738. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/__init__.py +0 -49
  739. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/__init__.pyc +0 -0
  740. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/__init__.py +0 -302
  741. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/__init__.pyc +0 -0
  742. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_UserString.py +0 -98
  743. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_UserString.pyc +0 -0
  744. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_hashlib.py +0 -91
  745. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_hashlib.pyc +0 -0
  746. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_itertools.py +0 -124
  747. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_itertools.pyc +0 -0
  748. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_optparse.py +0 -1725
  749. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_optparse.pyc +0 -0
  750. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets.py +0 -583
  751. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets.pyc +0 -0
  752. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets15.py +0 -176
  753. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_sets15.pyc +0 -0
  754. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_shlex.py +0 -325
  755. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_shlex.pyc +0 -0
  756. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_subprocess.py +0 -1296
  757. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_subprocess.pyc +0 -0
  758. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_textwrap.py +0 -382
  759. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/_scons_textwrap.pyc +0 -0
  760. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/builtins.py +0 -187
  761. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/compat/builtins.pyc +0 -0
  762. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/cpp.py +0 -598
  763. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/cpp.pyc +0 -0
  764. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/dblite.py +0 -248
  765. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/dblite.pyc +0 -0
  766. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/exitfuncs.py +0 -77
  767. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/SCons/exitfuncs.pyc +0 -0
  768. data/ext/v8/upstream/build/scons/install/lib/scons-1.2.0.d20100117/scons-1.2.0.d20100117.egg-info +0 -13
  769. data/ext/v8/upstream/build/scons/install/man/man1/scons-time.1 +0 -1017
  770. data/ext/v8/upstream/build/scons/install/man/man1/scons.1 +0 -15179
  771. data/ext/v8/upstream/build/scons/install/man/man1/sconsign.1 +0 -208
  772. data/ext/v8/upstream/build/scons/os_spawnv_fix.diff +0 -83
  773. data/ext/v8/upstream/build/scons/scons-time.1 +0 -1017
  774. data/ext/v8/upstream/build/scons/scons.1 +0 -15179
  775. data/ext/v8/upstream/build/scons/sconsign.1 +0 -208
  776. data/ext/v8/upstream/build/scons/script/scons +0 -184
  777. data/ext/v8/upstream/build/scons/script/scons-time +0 -1529
  778. data/ext/v8/upstream/build/scons/script/scons.bat +0 -31
  779. data/ext/v8/upstream/build/scons/script/sconsign +0 -508
  780. data/ext/v8/upstream/build/scons/setup.cfg +0 -6
  781. data/ext/v8/upstream/build/scons/setup.py +0 -427
  782. data/ext/v8/upstream/build/v8/.gitignore +0 -26
  783. data/ext/v8/upstream/build/v8/AUTHORS +0 -31
  784. data/ext/v8/upstream/build/v8/ChangeLog +0 -1916
  785. data/ext/v8/upstream/build/v8/LICENSE +0 -55
  786. data/ext/v8/upstream/build/v8/SConstruct +0 -1158
  787. data/ext/v8/upstream/build/v8/SConstruct.orig +0 -1154
  788. data/ext/v8/upstream/build/v8/include/v8-debug.h +0 -381
  789. data/ext/v8/upstream/build/v8/include/v8-profiler.h +0 -353
  790. data/ext/v8/upstream/build/v8/src/SConscript +0 -330
  791. data/ext/v8/upstream/build/v8/src/accessors.cc +0 -661
  792. data/ext/v8/upstream/build/v8/src/accessors.h +0 -114
  793. data/ext/v8/upstream/build/v8/src/allocation.cc +0 -198
  794. data/ext/v8/upstream/build/v8/src/allocation.h +0 -169
  795. data/ext/v8/upstream/build/v8/src/api.cc +0 -4795
  796. data/ext/v8/upstream/build/v8/src/api.h +0 -485
  797. data/ext/v8/upstream/build/v8/src/apinatives.js +0 -110
  798. data/ext/v8/upstream/build/v8/src/apiutils.h +0 -69
  799. data/ext/v8/upstream/build/v8/src/arguments.h +0 -96
  800. data/ext/v8/upstream/build/v8/src/arm/assembler-arm-inl.h +0 -305
  801. data/ext/v8/upstream/build/v8/src/arm/assembler-arm.cc +0 -2580
  802. data/ext/v8/upstream/build/v8/src/arm/assembler-arm.h +0 -1275
  803. data/ext/v8/upstream/build/v8/src/arm/builtins-arm.cc +0 -1320
  804. data/ext/v8/upstream/build/v8/src/arm/codegen-arm-inl.h +0 -48
  805. data/ext/v8/upstream/build/v8/src/arm/codegen-arm.cc +0 -11398
  806. data/ext/v8/upstream/build/v8/src/arm/codegen-arm.h +0 -1102
  807. data/ext/v8/upstream/build/v8/src/arm/constants-arm.cc +0 -154
  808. data/ext/v8/upstream/build/v8/src/arm/constants-arm.h +0 -388
  809. data/ext/v8/upstream/build/v8/src/arm/cpu-arm.cc +0 -142
  810. data/ext/v8/upstream/build/v8/src/arm/debug-arm.cc +0 -309
  811. data/ext/v8/upstream/build/v8/src/arm/disasm-arm.cc +0 -1459
  812. data/ext/v8/upstream/build/v8/src/arm/fast-codegen-arm.cc +0 -241
  813. data/ext/v8/upstream/build/v8/src/arm/frames-arm.cc +0 -123
  814. data/ext/v8/upstream/build/v8/src/arm/frames-arm.h +0 -162
  815. data/ext/v8/upstream/build/v8/src/arm/full-codegen-arm.cc +0 -3178
  816. data/ext/v8/upstream/build/v8/src/arm/ic-arm.cc +0 -2258
  817. data/ext/v8/upstream/build/v8/src/arm/jump-target-arm.cc +0 -164
  818. data/ext/v8/upstream/build/v8/src/arm/macro-assembler-arm.cc +0 -1892
  819. data/ext/v8/upstream/build/v8/src/arm/macro-assembler-arm.h +0 -727
  820. data/ext/v8/upstream/build/v8/src/arm/regexp-macro-assembler-arm.cc +0 -1261
  821. data/ext/v8/upstream/build/v8/src/arm/regexp-macro-assembler-arm.h +0 -266
  822. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm-inl.h +0 -100
  823. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm.cc +0 -63
  824. data/ext/v8/upstream/build/v8/src/arm/register-allocator-arm.h +0 -44
  825. data/ext/v8/upstream/build/v8/src/arm/simulator-arm.cc +0 -2822
  826. data/ext/v8/upstream/build/v8/src/arm/simulator-arm.h +0 -361
  827. data/ext/v8/upstream/build/v8/src/arm/stub-cache-arm.cc +0 -2387
  828. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm-inl.h +0 -59
  829. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm.cc +0 -834
  830. data/ext/v8/upstream/build/v8/src/arm/virtual-frame-arm.h +0 -519
  831. data/ext/v8/upstream/build/v8/src/array.js +0 -1127
  832. data/ext/v8/upstream/build/v8/src/assembler.cc +0 -801
  833. data/ext/v8/upstream/build/v8/src/assembler.h +0 -573
  834. data/ext/v8/upstream/build/v8/src/ast-inl.h +0 -81
  835. data/ext/v8/upstream/build/v8/src/ast.cc +0 -1152
  836. data/ext/v8/upstream/build/v8/src/ast.h +0 -2106
  837. data/ext/v8/upstream/build/v8/src/bootstrapper.cc +0 -1819
  838. data/ext/v8/upstream/build/v8/src/bootstrapper.h +0 -118
  839. data/ext/v8/upstream/build/v8/src/builtins.cc +0 -1529
  840. data/ext/v8/upstream/build/v8/src/builtins.h +0 -263
  841. data/ext/v8/upstream/build/v8/src/bytecodes-irregexp.h +0 -104
  842. data/ext/v8/upstream/build/v8/src/cached-powers.h +0 -119
  843. data/ext/v8/upstream/build/v8/src/char-predicates-inl.h +0 -86
  844. data/ext/v8/upstream/build/v8/src/char-predicates.h +0 -65
  845. data/ext/v8/upstream/build/v8/src/checks.cc +0 -100
  846. data/ext/v8/upstream/build/v8/src/checks.h +0 -310
  847. data/ext/v8/upstream/build/v8/src/circular-queue-inl.h +0 -53
  848. data/ext/v8/upstream/build/v8/src/circular-queue.cc +0 -121
  849. data/ext/v8/upstream/build/v8/src/circular-queue.h +0 -103
  850. data/ext/v8/upstream/build/v8/src/code-stubs.cc +0 -177
  851. data/ext/v8/upstream/build/v8/src/code-stubs.h +0 -177
  852. data/ext/v8/upstream/build/v8/src/code.h +0 -68
  853. data/ext/v8/upstream/build/v8/src/codegen-inl.h +0 -60
  854. data/ext/v8/upstream/build/v8/src/codegen.cc +0 -516
  855. data/ext/v8/upstream/build/v8/src/codegen.h +0 -897
  856. data/ext/v8/upstream/build/v8/src/compilation-cache.cc +0 -562
  857. data/ext/v8/upstream/build/v8/src/compilation-cache.h +0 -102
  858. data/ext/v8/upstream/build/v8/src/compiler.cc +0 -654
  859. data/ext/v8/upstream/build/v8/src/compiler.h +0 -299
  860. data/ext/v8/upstream/build/v8/src/contexts.cc +0 -256
  861. data/ext/v8/upstream/build/v8/src/contexts.h +0 -342
  862. data/ext/v8/upstream/build/v8/src/conversions-inl.h +0 -110
  863. data/ext/v8/upstream/build/v8/src/conversions.cc +0 -1119
  864. data/ext/v8/upstream/build/v8/src/conversions.h +0 -123
  865. data/ext/v8/upstream/build/v8/src/counters.cc +0 -78
  866. data/ext/v8/upstream/build/v8/src/counters.h +0 -239
  867. data/ext/v8/upstream/build/v8/src/cpu-profiler-inl.h +0 -100
  868. data/ext/v8/upstream/build/v8/src/cpu-profiler.cc +0 -538
  869. data/ext/v8/upstream/build/v8/src/cpu-profiler.h +0 -285
  870. data/ext/v8/upstream/build/v8/src/cpu.h +0 -65
  871. data/ext/v8/upstream/build/v8/src/d8-debug.cc +0 -356
  872. data/ext/v8/upstream/build/v8/src/d8-debug.h +0 -155
  873. data/ext/v8/upstream/build/v8/src/d8-posix.cc +0 -693
  874. data/ext/v8/upstream/build/v8/src/d8-readline.cc +0 -128
  875. data/ext/v8/upstream/build/v8/src/d8-windows.cc +0 -42
  876. data/ext/v8/upstream/build/v8/src/d8.cc +0 -783
  877. data/ext/v8/upstream/build/v8/src/d8.h +0 -227
  878. data/ext/v8/upstream/build/v8/src/d8.js +0 -1683
  879. data/ext/v8/upstream/build/v8/src/data-flow.cc +0 -758
  880. data/ext/v8/upstream/build/v8/src/data-flow.h +0 -278
  881. data/ext/v8/upstream/build/v8/src/date.js +0 -1059
  882. data/ext/v8/upstream/build/v8/src/dateparser-inl.h +0 -123
  883. data/ext/v8/upstream/build/v8/src/dateparser.cc +0 -178
  884. data/ext/v8/upstream/build/v8/src/dateparser.h +0 -244
  885. data/ext/v8/upstream/build/v8/src/debug-agent.cc +0 -427
  886. data/ext/v8/upstream/build/v8/src/debug-agent.h +0 -129
  887. data/ext/v8/upstream/build/v8/src/debug-debugger.js +0 -2227
  888. data/ext/v8/upstream/build/v8/src/debug.cc +0 -3005
  889. data/ext/v8/upstream/build/v8/src/debug.h +0 -993
  890. data/ext/v8/upstream/build/v8/src/disasm.h +0 -77
  891. data/ext/v8/upstream/build/v8/src/disassembler.cc +0 -312
  892. data/ext/v8/upstream/build/v8/src/disassembler.h +0 -56
  893. data/ext/v8/upstream/build/v8/src/diy-fp.cc +0 -58
  894. data/ext/v8/upstream/build/v8/src/diy-fp.h +0 -117
  895. data/ext/v8/upstream/build/v8/src/double.h +0 -169
  896. data/ext/v8/upstream/build/v8/src/dtoa-config.c +0 -92
  897. data/ext/v8/upstream/build/v8/src/dtoa.cc +0 -77
  898. data/ext/v8/upstream/build/v8/src/dtoa.h +0 -81
  899. data/ext/v8/upstream/build/v8/src/execution.cc +0 -809
  900. data/ext/v8/upstream/build/v8/src/execution.h +0 -336
  901. data/ext/v8/upstream/build/v8/src/factory.cc +0 -1003
  902. data/ext/v8/upstream/build/v8/src/factory.h +0 -410
  903. data/ext/v8/upstream/build/v8/src/fast-codegen.cc +0 -746
  904. data/ext/v8/upstream/build/v8/src/fast-codegen.h +0 -161
  905. data/ext/v8/upstream/build/v8/src/fast-dtoa.cc +0 -505
  906. data/ext/v8/upstream/build/v8/src/fast-dtoa.h +0 -58
  907. data/ext/v8/upstream/build/v8/src/fixed-dtoa.cc +0 -405
  908. data/ext/v8/upstream/build/v8/src/fixed-dtoa.h +0 -55
  909. data/ext/v8/upstream/build/v8/src/flag-definitions.h +0 -455
  910. data/ext/v8/upstream/build/v8/src/flags.cc +0 -551
  911. data/ext/v8/upstream/build/v8/src/flags.h +0 -81
  912. data/ext/v8/upstream/build/v8/src/flow-graph.cc +0 -763
  913. data/ext/v8/upstream/build/v8/src/flow-graph.h +0 -180
  914. data/ext/v8/upstream/build/v8/src/frame-element.cc +0 -42
  915. data/ext/v8/upstream/build/v8/src/frame-element.h +0 -273
  916. data/ext/v8/upstream/build/v8/src/frames-inl.h +0 -217
  917. data/ext/v8/upstream/build/v8/src/frames.cc +0 -826
  918. data/ext/v8/upstream/build/v8/src/frames.h +0 -682
  919. data/ext/v8/upstream/build/v8/src/full-codegen.cc +0 -1443
  920. data/ext/v8/upstream/build/v8/src/full-codegen.h +0 -548
  921. data/ext/v8/upstream/build/v8/src/func-name-inferrer.cc +0 -76
  922. data/ext/v8/upstream/build/v8/src/func-name-inferrer.h +0 -135
  923. data/ext/v8/upstream/build/v8/src/global-handles.cc +0 -520
  924. data/ext/v8/upstream/build/v8/src/global-handles.h +0 -180
  925. data/ext/v8/upstream/build/v8/src/globals.h +0 -669
  926. data/ext/v8/upstream/build/v8/src/handles-inl.h +0 -76
  927. data/ext/v8/upstream/build/v8/src/handles.cc +0 -825
  928. data/ext/v8/upstream/build/v8/src/handles.h +0 -393
  929. data/ext/v8/upstream/build/v8/src/hashmap.cc +0 -226
  930. data/ext/v8/upstream/build/v8/src/hashmap.h +0 -120
  931. data/ext/v8/upstream/build/v8/src/heap-inl.h +0 -493
  932. data/ext/v8/upstream/build/v8/src/heap-profiler.cc +0 -779
  933. data/ext/v8/upstream/build/v8/src/heap-profiler.h +0 -323
  934. data/ext/v8/upstream/build/v8/src/heap.cc +0 -4994
  935. data/ext/v8/upstream/build/v8/src/heap.h +0 -1984
  936. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32-inl.h +0 -360
  937. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32.cc +0 -2600
  938. data/ext/v8/upstream/build/v8/src/ia32/assembler-ia32.h +0 -969
  939. data/ext/v8/upstream/build/v8/src/ia32/builtins-ia32.cc +0 -1261
  940. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32-inl.h +0 -46
  941. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32.cc +0 -13968
  942. data/ext/v8/upstream/build/v8/src/ia32/codegen-ia32.h +0 -1097
  943. data/ext/v8/upstream/build/v8/src/ia32/cpu-ia32.cc +0 -83
  944. data/ext/v8/upstream/build/v8/src/ia32/debug-ia32.cc +0 -309
  945. data/ext/v8/upstream/build/v8/src/ia32/disasm-ia32.cc +0 -1471
  946. data/ext/v8/upstream/build/v8/src/ia32/fast-codegen-ia32.cc +0 -954
  947. data/ext/v8/upstream/build/v8/src/ia32/fast-codegen-ia32.h +0 -155
  948. data/ext/v8/upstream/build/v8/src/ia32/frames-ia32.cc +0 -115
  949. data/ext/v8/upstream/build/v8/src/ia32/frames-ia32.h +0 -135
  950. data/ext/v8/upstream/build/v8/src/ia32/full-codegen-ia32.cc +0 -3281
  951. data/ext/v8/upstream/build/v8/src/ia32/ic-ia32.cc +0 -1966
  952. data/ext/v8/upstream/build/v8/src/ia32/jump-target-ia32.cc +0 -437
  953. data/ext/v8/upstream/build/v8/src/ia32/macro-assembler-ia32.cc +0 -1610
  954. data/ext/v8/upstream/build/v8/src/ia32/macro-assembler-ia32.h +0 -610
  955. data/ext/v8/upstream/build/v8/src/ia32/regexp-macro-assembler-ia32.cc +0 -1247
  956. data/ext/v8/upstream/build/v8/src/ia32/regexp-macro-assembler-ia32.h +0 -214
  957. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32-inl.h +0 -82
  958. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32.cc +0 -157
  959. data/ext/v8/upstream/build/v8/src/ia32/register-allocator-ia32.h +0 -43
  960. data/ext/v8/upstream/build/v8/src/ia32/simulator-ia32.cc +0 -30
  961. data/ext/v8/upstream/build/v8/src/ia32/simulator-ia32.h +0 -62
  962. data/ext/v8/upstream/build/v8/src/ia32/stub-cache-ia32.cc +0 -2750
  963. data/ext/v8/upstream/build/v8/src/ia32/virtual-frame-ia32.cc +0 -1334
  964. data/ext/v8/upstream/build/v8/src/ia32/virtual-frame-ia32.h +0 -627
  965. data/ext/v8/upstream/build/v8/src/ic-inl.h +0 -120
  966. data/ext/v8/upstream/build/v8/src/ic.cc +0 -1827
  967. data/ext/v8/upstream/build/v8/src/ic.h +0 -515
  968. data/ext/v8/upstream/build/v8/src/interpreter-irregexp.cc +0 -646
  969. data/ext/v8/upstream/build/v8/src/interpreter-irregexp.h +0 -48
  970. data/ext/v8/upstream/build/v8/src/json.js +0 -268
  971. data/ext/v8/upstream/build/v8/src/jsregexp.cc +0 -5283
  972. data/ext/v8/upstream/build/v8/src/jsregexp.h +0 -1463
  973. data/ext/v8/upstream/build/v8/src/jump-target-heavy-inl.h +0 -51
  974. data/ext/v8/upstream/build/v8/src/jump-target-heavy.cc +0 -429
  975. data/ext/v8/upstream/build/v8/src/jump-target-heavy.h +0 -244
  976. data/ext/v8/upstream/build/v8/src/jump-target-inl.h +0 -48
  977. data/ext/v8/upstream/build/v8/src/jump-target-light-inl.h +0 -56
  978. data/ext/v8/upstream/build/v8/src/jump-target-light.cc +0 -110
  979. data/ext/v8/upstream/build/v8/src/jump-target-light.h +0 -192
  980. data/ext/v8/upstream/build/v8/src/jump-target.cc +0 -91
  981. data/ext/v8/upstream/build/v8/src/jump-target.h +0 -90
  982. data/ext/v8/upstream/build/v8/src/list-inl.h +0 -166
  983. data/ext/v8/upstream/build/v8/src/list.h +0 -159
  984. data/ext/v8/upstream/build/v8/src/liveedit-debugger.js +0 -1057
  985. data/ext/v8/upstream/build/v8/src/liveedit.cc +0 -1480
  986. data/ext/v8/upstream/build/v8/src/liveedit.h +0 -170
  987. data/ext/v8/upstream/build/v8/src/log-inl.h +0 -59
  988. data/ext/v8/upstream/build/v8/src/log-utils.cc +0 -497
  989. data/ext/v8/upstream/build/v8/src/log-utils.h +0 -289
  990. data/ext/v8/upstream/build/v8/src/log.cc +0 -1561
  991. data/ext/v8/upstream/build/v8/src/log.h +0 -384
  992. data/ext/v8/upstream/build/v8/src/macro-assembler.h +0 -86
  993. data/ext/v8/upstream/build/v8/src/macros.py +0 -177
  994. data/ext/v8/upstream/build/v8/src/mark-compact.cc +0 -2330
  995. data/ext/v8/upstream/build/v8/src/mark-compact.h +0 -451
  996. data/ext/v8/upstream/build/v8/src/math.js +0 -264
  997. data/ext/v8/upstream/build/v8/src/memory.h +0 -74
  998. data/ext/v8/upstream/build/v8/src/messages.cc +0 -183
  999. data/ext/v8/upstream/build/v8/src/messages.h +0 -113
  1000. data/ext/v8/upstream/build/v8/src/messages.js +0 -982
  1001. data/ext/v8/upstream/build/v8/src/mips/assembler-mips-inl.h +0 -215
  1002. data/ext/v8/upstream/build/v8/src/mips/assembler-mips.cc +0 -1219
  1003. data/ext/v8/upstream/build/v8/src/mips/assembler-mips.h +0 -668
  1004. data/ext/v8/upstream/build/v8/src/mips/builtins-mips.cc +0 -205
  1005. data/ext/v8/upstream/build/v8/src/mips/codegen-mips-inl.h +0 -70
  1006. data/ext/v8/upstream/build/v8/src/mips/codegen-mips.cc +0 -1437
  1007. data/ext/v8/upstream/build/v8/src/mips/codegen-mips.h +0 -434
  1008. data/ext/v8/upstream/build/v8/src/mips/constants-mips.cc +0 -328
  1009. data/ext/v8/upstream/build/v8/src/mips/constants-mips.h +0 -525
  1010. data/ext/v8/upstream/build/v8/src/mips/cpu-mips.cc +0 -73
  1011. data/ext/v8/upstream/build/v8/src/mips/debug-mips.cc +0 -131
  1012. data/ext/v8/upstream/build/v8/src/mips/disasm-mips.cc +0 -787
  1013. data/ext/v8/upstream/build/v8/src/mips/fast-codegen-mips.cc +0 -77
  1014. data/ext/v8/upstream/build/v8/src/mips/frames-mips.cc +0 -102
  1015. data/ext/v8/upstream/build/v8/src/mips/frames-mips.h +0 -164
  1016. data/ext/v8/upstream/build/v8/src/mips/full-codegen-mips.cc +0 -277
  1017. data/ext/v8/upstream/build/v8/src/mips/ic-mips.cc +0 -220
  1018. data/ext/v8/upstream/build/v8/src/mips/jump-target-mips.cc +0 -175
  1019. data/ext/v8/upstream/build/v8/src/mips/macro-assembler-mips.cc +0 -1326
  1020. data/ext/v8/upstream/build/v8/src/mips/macro-assembler-mips.h +0 -461
  1021. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips-inl.h +0 -137
  1022. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips.cc +0 -63
  1023. data/ext/v8/upstream/build/v8/src/mips/register-allocator-mips.h +0 -46
  1024. data/ext/v8/upstream/build/v8/src/mips/simulator-mips.cc +0 -1651
  1025. data/ext/v8/upstream/build/v8/src/mips/simulator-mips.h +0 -311
  1026. data/ext/v8/upstream/build/v8/src/mips/stub-cache-mips.cc +0 -403
  1027. data/ext/v8/upstream/build/v8/src/mips/virtual-frame-mips.cc +0 -319
  1028. data/ext/v8/upstream/build/v8/src/mips/virtual-frame-mips.h +0 -548
  1029. data/ext/v8/upstream/build/v8/src/mirror-debugger.js +0 -2380
  1030. data/ext/v8/upstream/build/v8/src/mksnapshot.cc +0 -256
  1031. data/ext/v8/upstream/build/v8/src/natives.h +0 -63
  1032. data/ext/v8/upstream/build/v8/src/objects-debug.cc +0 -1366
  1033. data/ext/v8/upstream/build/v8/src/objects-inl.h +0 -3333
  1034. data/ext/v8/upstream/build/v8/src/objects.cc +0 -8820
  1035. data/ext/v8/upstream/build/v8/src/objects.h +0 -5373
  1036. data/ext/v8/upstream/build/v8/src/oprofile-agent.cc +0 -108
  1037. data/ext/v8/upstream/build/v8/src/oprofile-agent.h +0 -77
  1038. data/ext/v8/upstream/build/v8/src/parser.cc +0 -5207
  1039. data/ext/v8/upstream/build/v8/src/parser.h +0 -197
  1040. data/ext/v8/upstream/build/v8/src/platform-freebsd.cc +0 -667
  1041. data/ext/v8/upstream/build/v8/src/platform-linux.cc +0 -862
  1042. data/ext/v8/upstream/build/v8/src/platform-macos.cc +0 -665
  1043. data/ext/v8/upstream/build/v8/src/platform-nullos.cc +0 -454
  1044. data/ext/v8/upstream/build/v8/src/platform-openbsd.cc +0 -622
  1045. data/ext/v8/upstream/build/v8/src/platform-posix.cc +0 -362
  1046. data/ext/v8/upstream/build/v8/src/platform-solaris.cc +0 -653
  1047. data/ext/v8/upstream/build/v8/src/platform-win32.cc +0 -1911
  1048. data/ext/v8/upstream/build/v8/src/platform.h +0 -577
  1049. data/ext/v8/upstream/build/v8/src/powers-ten.h +0 -2461
  1050. data/ext/v8/upstream/build/v8/src/prettyprinter.cc +0 -1531
  1051. data/ext/v8/upstream/build/v8/src/prettyprinter.h +0 -221
  1052. data/ext/v8/upstream/build/v8/src/profile-generator-inl.h +0 -148
  1053. data/ext/v8/upstream/build/v8/src/profile-generator.cc +0 -1830
  1054. data/ext/v8/upstream/build/v8/src/profile-generator.h +0 -853
  1055. data/ext/v8/upstream/build/v8/src/property.cc +0 -96
  1056. data/ext/v8/upstream/build/v8/src/property.h +0 -315
  1057. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp-inl.h +0 -78
  1058. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp.cc +0 -464
  1059. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-irregexp.h +0 -141
  1060. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-tracer.cc +0 -356
  1061. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler-tracer.h +0 -103
  1062. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler.cc +0 -261
  1063. data/ext/v8/upstream/build/v8/src/regexp-macro-assembler.h +0 -228
  1064. data/ext/v8/upstream/build/v8/src/regexp-stack.cc +0 -103
  1065. data/ext/v8/upstream/build/v8/src/regexp-stack.h +0 -123
  1066. data/ext/v8/upstream/build/v8/src/regexp.js +0 -549
  1067. data/ext/v8/upstream/build/v8/src/register-allocator-inl.h +0 -141
  1068. data/ext/v8/upstream/build/v8/src/register-allocator.cc +0 -104
  1069. data/ext/v8/upstream/build/v8/src/register-allocator.h +0 -320
  1070. data/ext/v8/upstream/build/v8/src/rewriter.cc +0 -1038
  1071. data/ext/v8/upstream/build/v8/src/rewriter.h +0 -54
  1072. data/ext/v8/upstream/build/v8/src/runtime.cc +0 -10599
  1073. data/ext/v8/upstream/build/v8/src/runtime.h +0 -459
  1074. data/ext/v8/upstream/build/v8/src/runtime.js +0 -629
  1075. data/ext/v8/upstream/build/v8/src/scanner.cc +0 -1346
  1076. data/ext/v8/upstream/build/v8/src/scanner.h +0 -503
  1077. data/ext/v8/upstream/build/v8/src/scopeinfo.cc +0 -637
  1078. data/ext/v8/upstream/build/v8/src/scopeinfo.h +0 -233
  1079. data/ext/v8/upstream/build/v8/src/scopes.cc +0 -962
  1080. data/ext/v8/upstream/build/v8/src/scopes.h +0 -400
  1081. data/ext/v8/upstream/build/v8/src/serialize.cc +0 -1461
  1082. data/ext/v8/upstream/build/v8/src/serialize.h +0 -581
  1083. data/ext/v8/upstream/build/v8/src/shell.h +0 -55
  1084. data/ext/v8/upstream/build/v8/src/simulator.h +0 -43
  1085. data/ext/v8/upstream/build/v8/src/smart-pointer.h +0 -109
  1086. data/ext/v8/upstream/build/v8/src/snapshot-common.cc +0 -82
  1087. data/ext/v8/upstream/build/v8/src/snapshot-empty.cc +0 -50
  1088. data/ext/v8/upstream/build/v8/src/snapshot.h +0 -71
  1089. data/ext/v8/upstream/build/v8/src/spaces-inl.h +0 -483
  1090. data/ext/v8/upstream/build/v8/src/spaces.cc +0 -2901
  1091. data/ext/v8/upstream/build/v8/src/spaces.h +0 -2197
  1092. data/ext/v8/upstream/build/v8/src/splay-tree-inl.h +0 -310
  1093. data/ext/v8/upstream/build/v8/src/splay-tree.h +0 -203
  1094. data/ext/v8/upstream/build/v8/src/string-stream.cc +0 -584
  1095. data/ext/v8/upstream/build/v8/src/string-stream.h +0 -189
  1096. data/ext/v8/upstream/build/v8/src/string.js +0 -1006
  1097. data/ext/v8/upstream/build/v8/src/stub-cache.cc +0 -1379
  1098. data/ext/v8/upstream/build/v8/src/stub-cache.h +0 -756
  1099. data/ext/v8/upstream/build/v8/src/third_party/dtoa/COPYING +0 -15
  1100. data/ext/v8/upstream/build/v8/src/third_party/dtoa/dtoa.c +0 -3334
  1101. data/ext/v8/upstream/build/v8/src/third_party/valgrind/valgrind.h +0 -3925
  1102. data/ext/v8/upstream/build/v8/src/token.cc +0 -56
  1103. data/ext/v8/upstream/build/v8/src/token.h +0 -270
  1104. data/ext/v8/upstream/build/v8/src/top.cc +0 -1067
  1105. data/ext/v8/upstream/build/v8/src/top.h +0 -463
  1106. data/ext/v8/upstream/build/v8/src/type-info.cc +0 -53
  1107. data/ext/v8/upstream/build/v8/src/type-info.h +0 -244
  1108. data/ext/v8/upstream/build/v8/src/unbound-queue-inl.h +0 -95
  1109. data/ext/v8/upstream/build/v8/src/unbound-queue.h +0 -67
  1110. data/ext/v8/upstream/build/v8/src/unicode-inl.h +0 -238
  1111. data/ext/v8/upstream/build/v8/src/unicode.cc +0 -749
  1112. data/ext/v8/upstream/build/v8/src/unicode.h +0 -279
  1113. data/ext/v8/upstream/build/v8/src/uri.js +0 -415
  1114. data/ext/v8/upstream/build/v8/src/utils.cc +0 -285
  1115. data/ext/v8/upstream/build/v8/src/utils.h +0 -745
  1116. data/ext/v8/upstream/build/v8/src/v8-counters.cc +0 -55
  1117. data/ext/v8/upstream/build/v8/src/v8-counters.h +0 -250
  1118. data/ext/v8/upstream/build/v8/src/v8.cc +0 -228
  1119. data/ext/v8/upstream/build/v8/src/v8.h +0 -121
  1120. data/ext/v8/upstream/build/v8/src/v8dll-main.cc +0 -39
  1121. data/ext/v8/upstream/build/v8/src/v8natives.js +0 -1188
  1122. data/ext/v8/upstream/build/v8/src/v8threads.cc +0 -461
  1123. data/ext/v8/upstream/build/v8/src/v8threads.h +0 -159
  1124. data/ext/v8/upstream/build/v8/src/variables.cc +0 -119
  1125. data/ext/v8/upstream/build/v8/src/variables.h +0 -205
  1126. data/ext/v8/upstream/build/v8/src/version.cc +0 -88
  1127. data/ext/v8/upstream/build/v8/src/version.h +0 -64
  1128. data/ext/v8/upstream/build/v8/src/virtual-frame-heavy-inl.h +0 -192
  1129. data/ext/v8/upstream/build/v8/src/virtual-frame-heavy.cc +0 -312
  1130. data/ext/v8/upstream/build/v8/src/virtual-frame-inl.h +0 -39
  1131. data/ext/v8/upstream/build/v8/src/virtual-frame-light-inl.h +0 -170
  1132. data/ext/v8/upstream/build/v8/src/virtual-frame-light.cc +0 -52
  1133. data/ext/v8/upstream/build/v8/src/virtual-frame.cc +0 -49
  1134. data/ext/v8/upstream/build/v8/src/virtual-frame.h +0 -46
  1135. data/ext/v8/upstream/build/v8/src/vm-state-inl.h +0 -137
  1136. data/ext/v8/upstream/build/v8/src/vm-state.cc +0 -39
  1137. data/ext/v8/upstream/build/v8/src/vm-state.h +0 -77
  1138. data/ext/v8/upstream/build/v8/src/x64/assembler-x64-inl.h +0 -400
  1139. data/ext/v8/upstream/build/v8/src/x64/assembler-x64.cc +0 -2963
  1140. data/ext/v8/upstream/build/v8/src/x64/assembler-x64.h +0 -1438
  1141. data/ext/v8/upstream/build/v8/src/x64/builtins-x64.cc +0 -1296
  1142. data/ext/v8/upstream/build/v8/src/x64/codegen-x64-inl.h +0 -46
  1143. data/ext/v8/upstream/build/v8/src/x64/codegen-x64.cc +0 -12491
  1144. data/ext/v8/upstream/build/v8/src/x64/codegen-x64.h +0 -1090
  1145. data/ext/v8/upstream/build/v8/src/x64/cpu-x64.cc +0 -83
  1146. data/ext/v8/upstream/build/v8/src/x64/debug-x64.cc +0 -267
  1147. data/ext/v8/upstream/build/v8/src/x64/disasm-x64.cc +0 -1696
  1148. data/ext/v8/upstream/build/v8/src/x64/fast-codegen-x64.cc +0 -250
  1149. data/ext/v8/upstream/build/v8/src/x64/frames-x64.cc +0 -113
  1150. data/ext/v8/upstream/build/v8/src/x64/frames-x64.h +0 -125
  1151. data/ext/v8/upstream/build/v8/src/x64/full-codegen-x64.cc +0 -3270
  1152. data/ext/v8/upstream/build/v8/src/x64/ic-x64.cc +0 -1907
  1153. data/ext/v8/upstream/build/v8/src/x64/jump-target-x64.cc +0 -437
  1154. data/ext/v8/upstream/build/v8/src/x64/macro-assembler-x64.cc +0 -2793
  1155. data/ext/v8/upstream/build/v8/src/x64/macro-assembler-x64.h +0 -916
  1156. data/ext/v8/upstream/build/v8/src/x64/regexp-macro-assembler-x64.cc +0 -1374
  1157. data/ext/v8/upstream/build/v8/src/x64/regexp-macro-assembler-x64.h +0 -277
  1158. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64-inl.h +0 -87
  1159. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64.cc +0 -91
  1160. data/ext/v8/upstream/build/v8/src/x64/register-allocator-x64.h +0 -43
  1161. data/ext/v8/upstream/build/v8/src/x64/simulator-x64.cc +0 -27
  1162. data/ext/v8/upstream/build/v8/src/x64/simulator-x64.h +0 -63
  1163. data/ext/v8/upstream/build/v8/src/x64/stub-cache-x64.cc +0 -2560
  1164. data/ext/v8/upstream/build/v8/src/x64/virtual-frame-x64.cc +0 -1264
  1165. data/ext/v8/upstream/build/v8/src/x64/virtual-frame-x64.h +0 -590
  1166. data/ext/v8/upstream/build/v8/src/zone-inl.h +0 -82
  1167. data/ext/v8/upstream/build/v8/src/zone.cc +0 -194
  1168. data/ext/v8/upstream/build/v8/src/zone.h +0 -221
  1169. data/ext/v8/upstream/build/v8/tools/codemap.js +0 -270
  1170. data/ext/v8/upstream/build/v8/tools/consarray.js +0 -93
  1171. data/ext/v8/upstream/build/v8/tools/csvparser.js +0 -83
  1172. data/ext/v8/upstream/build/v8/tools/gc-nvp-trace-processor.py +0 -317
  1173. data/ext/v8/upstream/build/v8/tools/generate-ten-powers.scm +0 -286
  1174. data/ext/v8/upstream/build/v8/tools/gyp/v8.gyp +0 -749
  1175. data/ext/v8/upstream/build/v8/tools/js2c.py +0 -380
  1176. data/ext/v8/upstream/build/v8/tools/jsmin.py +0 -280
  1177. data/ext/v8/upstream/build/v8/tools/linux-tick-processor +0 -33
  1178. data/ext/v8/upstream/build/v8/tools/linux-tick-processor.py +0 -78
  1179. data/ext/v8/upstream/build/v8/tools/logreader.js +0 -338
  1180. data/ext/v8/upstream/build/v8/tools/mac-nm +0 -18
  1181. data/ext/v8/upstream/build/v8/tools/mac-tick-processor +0 -6
  1182. data/ext/v8/upstream/build/v8/tools/oprofile/annotate +0 -7
  1183. data/ext/v8/upstream/build/v8/tools/oprofile/common +0 -19
  1184. data/ext/v8/upstream/build/v8/tools/oprofile/dump +0 -7
  1185. data/ext/v8/upstream/build/v8/tools/oprofile/report +0 -7
  1186. data/ext/v8/upstream/build/v8/tools/oprofile/reset +0 -7
  1187. data/ext/v8/upstream/build/v8/tools/oprofile/run +0 -14
  1188. data/ext/v8/upstream/build/v8/tools/oprofile/shutdown +0 -7
  1189. data/ext/v8/upstream/build/v8/tools/oprofile/start +0 -7
  1190. data/ext/v8/upstream/build/v8/tools/presubmit.py +0 -299
  1191. data/ext/v8/upstream/build/v8/tools/process-heap-prof.py +0 -120
  1192. data/ext/v8/upstream/build/v8/tools/profile.js +0 -691
  1193. data/ext/v8/upstream/build/v8/tools/profile_view.js +0 -224
  1194. data/ext/v8/upstream/build/v8/tools/run-valgrind.py +0 -77
  1195. data/ext/v8/upstream/build/v8/tools/splaytree.js +0 -322
  1196. data/ext/v8/upstream/build/v8/tools/splaytree.py +0 -226
  1197. data/ext/v8/upstream/build/v8/tools/stats-viewer.py +0 -468
  1198. data/ext/v8/upstream/build/v8/tools/tickprocessor-driver.js +0 -59
  1199. data/ext/v8/upstream/build/v8/tools/tickprocessor.js +0 -862
  1200. data/ext/v8/upstream/build/v8/tools/tickprocessor.py +0 -571
  1201. data/ext/v8/upstream/build/v8/tools/utils.py +0 -88
  1202. data/ext/v8/upstream/build/v8/tools/visual_studio/README.txt +0 -71
  1203. data/ext/v8/upstream/build/v8/tools/visual_studio/arm.vsprops +0 -14
  1204. data/ext/v8/upstream/build/v8/tools/visual_studio/common.vsprops +0 -34
  1205. data/ext/v8/upstream/build/v8/tools/visual_studio/d8.vcproj +0 -193
  1206. data/ext/v8/upstream/build/v8/tools/visual_studio/d8_arm.vcproj +0 -193
  1207. data/ext/v8/upstream/build/v8/tools/visual_studio/d8_x64.vcproj +0 -209
  1208. data/ext/v8/upstream/build/v8/tools/visual_studio/d8js2c.cmd +0 -6
  1209. data/ext/v8/upstream/build/v8/tools/visual_studio/debug.vsprops +0 -17
  1210. data/ext/v8/upstream/build/v8/tools/visual_studio/ia32.vsprops +0 -17
  1211. data/ext/v8/upstream/build/v8/tools/visual_studio/js2c.cmd +0 -6
  1212. data/ext/v8/upstream/build/v8/tools/visual_studio/release.vsprops +0 -24
  1213. data/ext/v8/upstream/build/v8/tools/visual_studio/v8.sln +0 -101
  1214. data/ext/v8/upstream/build/v8/tools/visual_studio/v8.vcproj +0 -227
  1215. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_arm.sln +0 -74
  1216. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_arm.vcproj +0 -227
  1217. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base.vcproj +0 -1143
  1218. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base_arm.vcproj +0 -1115
  1219. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_base_x64.vcproj +0 -1096
  1220. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest.vcproj +0 -265
  1221. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest_arm.vcproj +0 -249
  1222. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_cctest_x64.vcproj +0 -257
  1223. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_mksnapshot.vcproj +0 -145
  1224. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_mksnapshot_x64.vcproj +0 -145
  1225. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample.vcproj +0 -145
  1226. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample_arm.vcproj +0 -145
  1227. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_process_sample_x64.vcproj +0 -161
  1228. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample.vcproj +0 -145
  1229. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample_arm.vcproj +0 -145
  1230. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_shell_sample_x64.vcproj +0 -161
  1231. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot.vcproj +0 -142
  1232. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_cc.vcproj +0 -92
  1233. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_cc_x64.vcproj +0 -92
  1234. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_snapshot_x64.vcproj +0 -142
  1235. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_x64.sln +0 -101
  1236. data/ext/v8/upstream/build/v8/tools/visual_studio/v8_x64.vcproj +0 -227
  1237. data/ext/v8/upstream/build/v8/tools/visual_studio/x64.vsprops +0 -17
  1238. data/ext/v8/upstream/build/v8/tools/windows-tick-processor.bat +0 -29
  1239. data/ext/v8/upstream/build/v8/tools/windows-tick-processor.py +0 -137
@@ -1,2901 +0,0 @@
1
- // Copyright 2006-2008 the V8 project authors. All rights reserved.
2
- // Redistribution and use in source and binary forms, with or without
3
- // modification, are permitted provided that the following conditions are
4
- // met:
5
- //
6
- // * Redistributions of source code must retain the above copyright
7
- // notice, this list of conditions and the following disclaimer.
8
- // * Redistributions in binary form must reproduce the above
9
- // copyright notice, this list of conditions and the following
10
- // disclaimer in the documentation and/or other materials provided
11
- // with the distribution.
12
- // * Neither the name of Google Inc. nor the names of its
13
- // contributors may be used to endorse or promote products derived
14
- // from this software without specific prior written permission.
15
- //
16
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
- // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
- // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
- // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
- // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
- // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
- // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
- // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
- #include "v8.h"
29
-
30
- #include "macro-assembler.h"
31
- #include "mark-compact.h"
32
- #include "platform.h"
33
-
34
- namespace v8 {
35
- namespace internal {
36
-
37
- // For contiguous spaces, top should be in the space (or at the end) and limit
38
- // should be the end of the space.
39
- #define ASSERT_SEMISPACE_ALLOCATION_INFO(info, space) \
40
- ASSERT((space).low() <= (info).top \
41
- && (info).top <= (space).high() \
42
- && (info).limit == (space).high())
43
-
44
- intptr_t Page::watermark_invalidated_mark_ = Page::WATERMARK_INVALIDATED;
45
-
46
- // ----------------------------------------------------------------------------
47
- // HeapObjectIterator
48
-
49
- HeapObjectIterator::HeapObjectIterator(PagedSpace* space) {
50
- Initialize(space->bottom(), space->top(), NULL);
51
- }
52
-
53
-
54
- HeapObjectIterator::HeapObjectIterator(PagedSpace* space,
55
- HeapObjectCallback size_func) {
56
- Initialize(space->bottom(), space->top(), size_func);
57
- }
58
-
59
-
60
- HeapObjectIterator::HeapObjectIterator(PagedSpace* space, Address start) {
61
- Initialize(start, space->top(), NULL);
62
- }
63
-
64
-
65
- HeapObjectIterator::HeapObjectIterator(PagedSpace* space, Address start,
66
- HeapObjectCallback size_func) {
67
- Initialize(start, space->top(), size_func);
68
- }
69
-
70
-
71
- void HeapObjectIterator::Initialize(Address cur, Address end,
72
- HeapObjectCallback size_f) {
73
- cur_addr_ = cur;
74
- end_addr_ = end;
75
- end_page_ = Page::FromAllocationTop(end);
76
- size_func_ = size_f;
77
- Page* p = Page::FromAllocationTop(cur_addr_);
78
- cur_limit_ = (p == end_page_) ? end_addr_ : p->AllocationTop();
79
-
80
- #ifdef DEBUG
81
- Verify();
82
- #endif
83
- }
84
-
85
-
86
- HeapObject* HeapObjectIterator::FromNextPage() {
87
- if (cur_addr_ == end_addr_) return NULL;
88
-
89
- Page* cur_page = Page::FromAllocationTop(cur_addr_);
90
- cur_page = cur_page->next_page();
91
- ASSERT(cur_page->is_valid());
92
-
93
- cur_addr_ = cur_page->ObjectAreaStart();
94
- cur_limit_ = (cur_page == end_page_) ? end_addr_ : cur_page->AllocationTop();
95
-
96
- if (cur_addr_ == end_addr_) return NULL;
97
- ASSERT(cur_addr_ < cur_limit_);
98
- #ifdef DEBUG
99
- Verify();
100
- #endif
101
- return FromCurrentPage();
102
- }
103
-
104
-
105
- #ifdef DEBUG
106
- void HeapObjectIterator::Verify() {
107
- Page* p = Page::FromAllocationTop(cur_addr_);
108
- ASSERT(p == Page::FromAllocationTop(cur_limit_));
109
- ASSERT(p->Offset(cur_addr_) <= p->Offset(cur_limit_));
110
- }
111
- #endif
112
-
113
-
114
- // -----------------------------------------------------------------------------
115
- // PageIterator
116
-
117
- PageIterator::PageIterator(PagedSpace* space, Mode mode) : space_(space) {
118
- prev_page_ = NULL;
119
- switch (mode) {
120
- case PAGES_IN_USE:
121
- stop_page_ = space->AllocationTopPage();
122
- break;
123
- case PAGES_USED_BY_MC:
124
- stop_page_ = space->MCRelocationTopPage();
125
- break;
126
- case ALL_PAGES:
127
- #ifdef DEBUG
128
- // Verify that the cached last page in the space is actually the
129
- // last page.
130
- for (Page* p = space->first_page_; p->is_valid(); p = p->next_page()) {
131
- if (!p->next_page()->is_valid()) {
132
- ASSERT(space->last_page_ == p);
133
- }
134
- }
135
- #endif
136
- stop_page_ = space->last_page_;
137
- break;
138
- }
139
- }
140
-
141
-
142
- // -----------------------------------------------------------------------------
143
- // CodeRange
144
-
145
- List<CodeRange::FreeBlock> CodeRange::free_list_(0);
146
- List<CodeRange::FreeBlock> CodeRange::allocation_list_(0);
147
- int CodeRange::current_allocation_block_index_ = 0;
148
- VirtualMemory* CodeRange::code_range_ = NULL;
149
-
150
-
151
- bool CodeRange::Setup(const size_t requested) {
152
- ASSERT(code_range_ == NULL);
153
-
154
- code_range_ = new VirtualMemory(requested);
155
- CHECK(code_range_ != NULL);
156
- if (!code_range_->IsReserved()) {
157
- delete code_range_;
158
- code_range_ = NULL;
159
- return false;
160
- }
161
-
162
- // We are sure that we have mapped a block of requested addresses.
163
- ASSERT(code_range_->size() == requested);
164
- LOG(NewEvent("CodeRange", code_range_->address(), requested));
165
- allocation_list_.Add(FreeBlock(code_range_->address(), code_range_->size()));
166
- current_allocation_block_index_ = 0;
167
- return true;
168
- }
169
-
170
-
171
- int CodeRange::CompareFreeBlockAddress(const FreeBlock* left,
172
- const FreeBlock* right) {
173
- // The entire point of CodeRange is that the difference between two
174
- // addresses in the range can be represented as a signed 32-bit int,
175
- // so the cast is semantically correct.
176
- return static_cast<int>(left->start - right->start);
177
- }
178
-
179
-
180
- void CodeRange::GetNextAllocationBlock(size_t requested) {
181
- for (current_allocation_block_index_++;
182
- current_allocation_block_index_ < allocation_list_.length();
183
- current_allocation_block_index_++) {
184
- if (requested <= allocation_list_[current_allocation_block_index_].size) {
185
- return; // Found a large enough allocation block.
186
- }
187
- }
188
-
189
- // Sort and merge the free blocks on the free list and the allocation list.
190
- free_list_.AddAll(allocation_list_);
191
- allocation_list_.Clear();
192
- free_list_.Sort(&CompareFreeBlockAddress);
193
- for (int i = 0; i < free_list_.length();) {
194
- FreeBlock merged = free_list_[i];
195
- i++;
196
- // Add adjacent free blocks to the current merged block.
197
- while (i < free_list_.length() &&
198
- free_list_[i].start == merged.start + merged.size) {
199
- merged.size += free_list_[i].size;
200
- i++;
201
- }
202
- if (merged.size > 0) {
203
- allocation_list_.Add(merged);
204
- }
205
- }
206
- free_list_.Clear();
207
-
208
- for (current_allocation_block_index_ = 0;
209
- current_allocation_block_index_ < allocation_list_.length();
210
- current_allocation_block_index_++) {
211
- if (requested <= allocation_list_[current_allocation_block_index_].size) {
212
- return; // Found a large enough allocation block.
213
- }
214
- }
215
-
216
- // Code range is full or too fragmented.
217
- V8::FatalProcessOutOfMemory("CodeRange::GetNextAllocationBlock");
218
- }
219
-
220
-
221
-
222
- void* CodeRange::AllocateRawMemory(const size_t requested, size_t* allocated) {
223
- ASSERT(current_allocation_block_index_ < allocation_list_.length());
224
- if (requested > allocation_list_[current_allocation_block_index_].size) {
225
- // Find an allocation block large enough. This function call may
226
- // call V8::FatalProcessOutOfMemory if it cannot find a large enough block.
227
- GetNextAllocationBlock(requested);
228
- }
229
- // Commit the requested memory at the start of the current allocation block.
230
- *allocated = RoundUp(requested, Page::kPageSize);
231
- FreeBlock current = allocation_list_[current_allocation_block_index_];
232
- if (*allocated >= current.size - Page::kPageSize) {
233
- // Don't leave a small free block, useless for a large object or chunk.
234
- *allocated = current.size;
235
- }
236
- ASSERT(*allocated <= current.size);
237
- if (!code_range_->Commit(current.start, *allocated, true)) {
238
- *allocated = 0;
239
- return NULL;
240
- }
241
- allocation_list_[current_allocation_block_index_].start += *allocated;
242
- allocation_list_[current_allocation_block_index_].size -= *allocated;
243
- if (*allocated == current.size) {
244
- GetNextAllocationBlock(0); // This block is used up, get the next one.
245
- }
246
- return current.start;
247
- }
248
-
249
-
250
- void CodeRange::FreeRawMemory(void* address, size_t length) {
251
- free_list_.Add(FreeBlock(address, length));
252
- code_range_->Uncommit(address, length);
253
- }
254
-
255
-
256
- void CodeRange::TearDown() {
257
- delete code_range_; // Frees all memory in the virtual memory range.
258
- code_range_ = NULL;
259
- free_list_.Free();
260
- allocation_list_.Free();
261
- }
262
-
263
-
264
- // -----------------------------------------------------------------------------
265
- // MemoryAllocator
266
- //
267
- int MemoryAllocator::capacity_ = 0;
268
- int MemoryAllocator::size_ = 0;
269
-
270
- VirtualMemory* MemoryAllocator::initial_chunk_ = NULL;
271
-
272
- // 270 is an estimate based on the static default heap size of a pair of 256K
273
- // semispaces and a 64M old generation.
274
- const int kEstimatedNumberOfChunks = 270;
275
- List<MemoryAllocator::ChunkInfo> MemoryAllocator::chunks_(
276
- kEstimatedNumberOfChunks);
277
- List<int> MemoryAllocator::free_chunk_ids_(kEstimatedNumberOfChunks);
278
- int MemoryAllocator::max_nof_chunks_ = 0;
279
- int MemoryAllocator::top_ = 0;
280
-
281
-
282
- void MemoryAllocator::Push(int free_chunk_id) {
283
- ASSERT(max_nof_chunks_ > 0);
284
- ASSERT(top_ < max_nof_chunks_);
285
- free_chunk_ids_[top_++] = free_chunk_id;
286
- }
287
-
288
-
289
- int MemoryAllocator::Pop() {
290
- ASSERT(top_ > 0);
291
- return free_chunk_ids_[--top_];
292
- }
293
-
294
-
295
- bool MemoryAllocator::Setup(int capacity) {
296
- capacity_ = RoundUp(capacity, Page::kPageSize);
297
-
298
- // Over-estimate the size of chunks_ array. It assumes the expansion of old
299
- // space is always in the unit of a chunk (kChunkSize) except the last
300
- // expansion.
301
- //
302
- // Due to alignment, allocated space might be one page less than required
303
- // number (kPagesPerChunk) of pages for old spaces.
304
- //
305
- // Reserve two chunk ids for semispaces, one for map space, one for old
306
- // space, and one for code space.
307
- max_nof_chunks_ = (capacity_ / (kChunkSize - Page::kPageSize)) + 5;
308
- if (max_nof_chunks_ > kMaxNofChunks) return false;
309
-
310
- size_ = 0;
311
- ChunkInfo info; // uninitialized element.
312
- for (int i = max_nof_chunks_ - 1; i >= 0; i--) {
313
- chunks_.Add(info);
314
- free_chunk_ids_.Add(i);
315
- }
316
- top_ = max_nof_chunks_;
317
- return true;
318
- }
319
-
320
-
321
- void MemoryAllocator::TearDown() {
322
- for (int i = 0; i < max_nof_chunks_; i++) {
323
- if (chunks_[i].address() != NULL) DeleteChunk(i);
324
- }
325
- chunks_.Clear();
326
- free_chunk_ids_.Clear();
327
-
328
- if (initial_chunk_ != NULL) {
329
- LOG(DeleteEvent("InitialChunk", initial_chunk_->address()));
330
- delete initial_chunk_;
331
- initial_chunk_ = NULL;
332
- }
333
-
334
- ASSERT(top_ == max_nof_chunks_); // all chunks are free
335
- top_ = 0;
336
- capacity_ = 0;
337
- size_ = 0;
338
- max_nof_chunks_ = 0;
339
- }
340
-
341
-
342
- void* MemoryAllocator::AllocateRawMemory(const size_t requested,
343
- size_t* allocated,
344
- Executability executable) {
345
- if (size_ + static_cast<size_t>(requested) > static_cast<size_t>(capacity_)) {
346
- return NULL;
347
- }
348
- void* mem;
349
- if (executable == EXECUTABLE && CodeRange::exists()) {
350
- mem = CodeRange::AllocateRawMemory(requested, allocated);
351
- } else {
352
- mem = OS::Allocate(requested, allocated, (executable == EXECUTABLE));
353
- }
354
- int alloced = static_cast<int>(*allocated);
355
- size_ += alloced;
356
- #ifdef DEBUG
357
- ZapBlock(reinterpret_cast<Address>(mem), alloced);
358
- #endif
359
- Counters::memory_allocated.Increment(alloced);
360
- return mem;
361
- }
362
-
363
-
364
- void MemoryAllocator::FreeRawMemory(void* mem, size_t length) {
365
- #ifdef DEBUG
366
- ZapBlock(reinterpret_cast<Address>(mem), length);
367
- #endif
368
- if (CodeRange::contains(static_cast<Address>(mem))) {
369
- CodeRange::FreeRawMemory(mem, length);
370
- } else {
371
- OS::Free(mem, length);
372
- }
373
- Counters::memory_allocated.Decrement(static_cast<int>(length));
374
- size_ -= static_cast<int>(length);
375
- ASSERT(size_ >= 0);
376
- }
377
-
378
-
379
- void* MemoryAllocator::ReserveInitialChunk(const size_t requested) {
380
- ASSERT(initial_chunk_ == NULL);
381
-
382
- initial_chunk_ = new VirtualMemory(requested);
383
- CHECK(initial_chunk_ != NULL);
384
- if (!initial_chunk_->IsReserved()) {
385
- delete initial_chunk_;
386
- initial_chunk_ = NULL;
387
- return NULL;
388
- }
389
-
390
- // We are sure that we have mapped a block of requested addresses.
391
- ASSERT(initial_chunk_->size() == requested);
392
- LOG(NewEvent("InitialChunk", initial_chunk_->address(), requested));
393
- size_ += static_cast<int>(requested);
394
- return initial_chunk_->address();
395
- }
396
-
397
-
398
- static int PagesInChunk(Address start, size_t size) {
399
- // The first page starts on the first page-aligned address from start onward
400
- // and the last page ends on the last page-aligned address before
401
- // start+size. Page::kPageSize is a power of two so we can divide by
402
- // shifting.
403
- return static_cast<int>((RoundDown(start + size, Page::kPageSize)
404
- - RoundUp(start, Page::kPageSize)) >> kPageSizeBits);
405
- }
406
-
407
-
408
- Page* MemoryAllocator::AllocatePages(int requested_pages, int* allocated_pages,
409
- PagedSpace* owner) {
410
- if (requested_pages <= 0) return Page::FromAddress(NULL);
411
- size_t chunk_size = requested_pages * Page::kPageSize;
412
-
413
- // There is not enough space to guarantee the desired number pages can be
414
- // allocated.
415
- if (size_ + static_cast<int>(chunk_size) > capacity_) {
416
- // Request as many pages as we can.
417
- chunk_size = capacity_ - size_;
418
- requested_pages = static_cast<int>(chunk_size >> kPageSizeBits);
419
-
420
- if (requested_pages <= 0) return Page::FromAddress(NULL);
421
- }
422
- void* chunk = AllocateRawMemory(chunk_size, &chunk_size, owner->executable());
423
- if (chunk == NULL) return Page::FromAddress(NULL);
424
- LOG(NewEvent("PagedChunk", chunk, chunk_size));
425
-
426
- *allocated_pages = PagesInChunk(static_cast<Address>(chunk), chunk_size);
427
- if (*allocated_pages == 0) {
428
- FreeRawMemory(chunk, chunk_size);
429
- LOG(DeleteEvent("PagedChunk", chunk));
430
- return Page::FromAddress(NULL);
431
- }
432
-
433
- int chunk_id = Pop();
434
- chunks_[chunk_id].init(static_cast<Address>(chunk), chunk_size, owner);
435
-
436
- return InitializePagesInChunk(chunk_id, *allocated_pages, owner);
437
- }
438
-
439
-
440
- Page* MemoryAllocator::CommitPages(Address start, size_t size,
441
- PagedSpace* owner, int* num_pages) {
442
- ASSERT(start != NULL);
443
- *num_pages = PagesInChunk(start, size);
444
- ASSERT(*num_pages > 0);
445
- ASSERT(initial_chunk_ != NULL);
446
- ASSERT(InInitialChunk(start));
447
- ASSERT(InInitialChunk(start + size - 1));
448
- if (!initial_chunk_->Commit(start, size, owner->executable() == EXECUTABLE)) {
449
- return Page::FromAddress(NULL);
450
- }
451
- #ifdef DEBUG
452
- ZapBlock(start, size);
453
- #endif
454
- Counters::memory_allocated.Increment(static_cast<int>(size));
455
-
456
- // So long as we correctly overestimated the number of chunks we should not
457
- // run out of chunk ids.
458
- CHECK(!OutOfChunkIds());
459
- int chunk_id = Pop();
460
- chunks_[chunk_id].init(start, size, owner);
461
- return InitializePagesInChunk(chunk_id, *num_pages, owner);
462
- }
463
-
464
-
465
- bool MemoryAllocator::CommitBlock(Address start,
466
- size_t size,
467
- Executability executable) {
468
- ASSERT(start != NULL);
469
- ASSERT(size > 0);
470
- ASSERT(initial_chunk_ != NULL);
471
- ASSERT(InInitialChunk(start));
472
- ASSERT(InInitialChunk(start + size - 1));
473
-
474
- if (!initial_chunk_->Commit(start, size, executable)) return false;
475
- #ifdef DEBUG
476
- ZapBlock(start, size);
477
- #endif
478
- Counters::memory_allocated.Increment(static_cast<int>(size));
479
- return true;
480
- }
481
-
482
-
483
- bool MemoryAllocator::UncommitBlock(Address start, size_t size) {
484
- ASSERT(start != NULL);
485
- ASSERT(size > 0);
486
- ASSERT(initial_chunk_ != NULL);
487
- ASSERT(InInitialChunk(start));
488
- ASSERT(InInitialChunk(start + size - 1));
489
-
490
- if (!initial_chunk_->Uncommit(start, size)) return false;
491
- Counters::memory_allocated.Decrement(static_cast<int>(size));
492
- return true;
493
- }
494
-
495
-
496
- void MemoryAllocator::ZapBlock(Address start, size_t size) {
497
- for (size_t s = 0; s + kPointerSize <= size; s += kPointerSize) {
498
- Memory::Address_at(start + s) = kZapValue;
499
- }
500
- }
501
-
502
-
503
- Page* MemoryAllocator::InitializePagesInChunk(int chunk_id, int pages_in_chunk,
504
- PagedSpace* owner) {
505
- ASSERT(IsValidChunk(chunk_id));
506
- ASSERT(pages_in_chunk > 0);
507
-
508
- Address chunk_start = chunks_[chunk_id].address();
509
-
510
- Address low = RoundUp(chunk_start, Page::kPageSize);
511
-
512
- #ifdef DEBUG
513
- size_t chunk_size = chunks_[chunk_id].size();
514
- Address high = RoundDown(chunk_start + chunk_size, Page::kPageSize);
515
- ASSERT(pages_in_chunk <=
516
- ((OffsetFrom(high) - OffsetFrom(low)) / Page::kPageSize));
517
- #endif
518
-
519
- Address page_addr = low;
520
- for (int i = 0; i < pages_in_chunk; i++) {
521
- Page* p = Page::FromAddress(page_addr);
522
- p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
523
- p->InvalidateWatermark(true);
524
- p->SetIsLargeObjectPage(false);
525
- p->SetAllocationWatermark(p->ObjectAreaStart());
526
- p->SetCachedAllocationWatermark(p->ObjectAreaStart());
527
- page_addr += Page::kPageSize;
528
- }
529
-
530
- // Set the next page of the last page to 0.
531
- Page* last_page = Page::FromAddress(page_addr - Page::kPageSize);
532
- last_page->opaque_header = OffsetFrom(0) | chunk_id;
533
-
534
- return Page::FromAddress(low);
535
- }
536
-
537
-
538
- Page* MemoryAllocator::FreePages(Page* p) {
539
- if (!p->is_valid()) return p;
540
-
541
- // Find the first page in the same chunk as 'p'
542
- Page* first_page = FindFirstPageInSameChunk(p);
543
- Page* page_to_return = Page::FromAddress(NULL);
544
-
545
- if (p != first_page) {
546
- // Find the last page in the same chunk as 'prev'.
547
- Page* last_page = FindLastPageInSameChunk(p);
548
- first_page = GetNextPage(last_page); // first page in next chunk
549
-
550
- // set the next_page of last_page to NULL
551
- SetNextPage(last_page, Page::FromAddress(NULL));
552
- page_to_return = p; // return 'p' when exiting
553
- }
554
-
555
- while (first_page->is_valid()) {
556
- int chunk_id = GetChunkId(first_page);
557
- ASSERT(IsValidChunk(chunk_id));
558
-
559
- // Find the first page of the next chunk before deleting this chunk.
560
- first_page = GetNextPage(FindLastPageInSameChunk(first_page));
561
-
562
- // Free the current chunk.
563
- DeleteChunk(chunk_id);
564
- }
565
-
566
- return page_to_return;
567
- }
568
-
569
-
570
- void MemoryAllocator::FreeAllPages(PagedSpace* space) {
571
- for (int i = 0, length = chunks_.length(); i < length; i++) {
572
- if (chunks_[i].owner() == space) {
573
- DeleteChunk(i);
574
- }
575
- }
576
- }
577
-
578
-
579
- void MemoryAllocator::DeleteChunk(int chunk_id) {
580
- ASSERT(IsValidChunk(chunk_id));
581
-
582
- ChunkInfo& c = chunks_[chunk_id];
583
-
584
- // We cannot free a chunk contained in the initial chunk because it was not
585
- // allocated with AllocateRawMemory. Instead we uncommit the virtual
586
- // memory.
587
- if (InInitialChunk(c.address())) {
588
- // TODO(1240712): VirtualMemory::Uncommit has a return value which
589
- // is ignored here.
590
- initial_chunk_->Uncommit(c.address(), c.size());
591
- Counters::memory_allocated.Decrement(static_cast<int>(c.size()));
592
- } else {
593
- LOG(DeleteEvent("PagedChunk", c.address()));
594
- FreeRawMemory(c.address(), c.size());
595
- }
596
- c.init(NULL, 0, NULL);
597
- Push(chunk_id);
598
- }
599
-
600
-
601
- Page* MemoryAllocator::FindFirstPageInSameChunk(Page* p) {
602
- int chunk_id = GetChunkId(p);
603
- ASSERT(IsValidChunk(chunk_id));
604
-
605
- Address low = RoundUp(chunks_[chunk_id].address(), Page::kPageSize);
606
- return Page::FromAddress(low);
607
- }
608
-
609
-
610
- Page* MemoryAllocator::FindLastPageInSameChunk(Page* p) {
611
- int chunk_id = GetChunkId(p);
612
- ASSERT(IsValidChunk(chunk_id));
613
-
614
- Address chunk_start = chunks_[chunk_id].address();
615
- size_t chunk_size = chunks_[chunk_id].size();
616
-
617
- Address high = RoundDown(chunk_start + chunk_size, Page::kPageSize);
618
- ASSERT(chunk_start <= p->address() && p->address() < high);
619
-
620
- return Page::FromAddress(high - Page::kPageSize);
621
- }
622
-
623
-
624
- #ifdef DEBUG
625
- void MemoryAllocator::ReportStatistics() {
626
- float pct = static_cast<float>(capacity_ - size_) / capacity_;
627
- PrintF(" capacity: %d, used: %d, available: %%%d\n\n",
628
- capacity_, size_, static_cast<int>(pct*100));
629
- }
630
- #endif
631
-
632
-
633
- void MemoryAllocator::RelinkPageListInChunkOrder(PagedSpace* space,
634
- Page** first_page,
635
- Page** last_page,
636
- Page** last_page_in_use) {
637
- Page* first = NULL;
638
- Page* last = NULL;
639
-
640
- for (int i = 0, length = chunks_.length(); i < length; i++) {
641
- ChunkInfo& chunk = chunks_[i];
642
-
643
- if (chunk.owner() == space) {
644
- if (first == NULL) {
645
- Address low = RoundUp(chunk.address(), Page::kPageSize);
646
- first = Page::FromAddress(low);
647
- }
648
- last = RelinkPagesInChunk(i,
649
- chunk.address(),
650
- chunk.size(),
651
- last,
652
- last_page_in_use);
653
- }
654
- }
655
-
656
- if (first_page != NULL) {
657
- *first_page = first;
658
- }
659
-
660
- if (last_page != NULL) {
661
- *last_page = last;
662
- }
663
- }
664
-
665
-
666
- Page* MemoryAllocator::RelinkPagesInChunk(int chunk_id,
667
- Address chunk_start,
668
- size_t chunk_size,
669
- Page* prev,
670
- Page** last_page_in_use) {
671
- Address page_addr = RoundUp(chunk_start, Page::kPageSize);
672
- int pages_in_chunk = PagesInChunk(chunk_start, chunk_size);
673
-
674
- if (prev->is_valid()) {
675
- SetNextPage(prev, Page::FromAddress(page_addr));
676
- }
677
-
678
- for (int i = 0; i < pages_in_chunk; i++) {
679
- Page* p = Page::FromAddress(page_addr);
680
- p->opaque_header = OffsetFrom(page_addr + Page::kPageSize) | chunk_id;
681
- page_addr += Page::kPageSize;
682
-
683
- p->InvalidateWatermark(true);
684
- if (p->WasInUseBeforeMC()) {
685
- *last_page_in_use = p;
686
- }
687
- }
688
-
689
- // Set the next page of the last page to 0.
690
- Page* last_page = Page::FromAddress(page_addr - Page::kPageSize);
691
- last_page->opaque_header = OffsetFrom(0) | chunk_id;
692
-
693
- if (last_page->WasInUseBeforeMC()) {
694
- *last_page_in_use = last_page;
695
- }
696
-
697
- return last_page;
698
- }
699
-
700
-
701
-
702
- // -----------------------------------------------------------------------------
703
- // PagedSpace implementation
704
-
705
- PagedSpace::PagedSpace(int max_capacity,
706
- AllocationSpace id,
707
- Executability executable)
708
- : Space(id, executable) {
709
- max_capacity_ = (RoundDown(max_capacity, Page::kPageSize) / Page::kPageSize)
710
- * Page::kObjectAreaSize;
711
- accounting_stats_.Clear();
712
-
713
- allocation_info_.top = NULL;
714
- allocation_info_.limit = NULL;
715
-
716
- mc_forwarding_info_.top = NULL;
717
- mc_forwarding_info_.limit = NULL;
718
- }
719
-
720
-
721
- bool PagedSpace::Setup(Address start, size_t size) {
722
- if (HasBeenSetup()) return false;
723
-
724
- int num_pages = 0;
725
- // Try to use the virtual memory range passed to us. If it is too small to
726
- // contain at least one page, ignore it and allocate instead.
727
- int pages_in_chunk = PagesInChunk(start, size);
728
- if (pages_in_chunk > 0) {
729
- first_page_ = MemoryAllocator::CommitPages(RoundUp(start, Page::kPageSize),
730
- Page::kPageSize * pages_in_chunk,
731
- this, &num_pages);
732
- } else {
733
- int requested_pages = Min(MemoryAllocator::kPagesPerChunk,
734
- max_capacity_ / Page::kObjectAreaSize);
735
- first_page_ =
736
- MemoryAllocator::AllocatePages(requested_pages, &num_pages, this);
737
- if (!first_page_->is_valid()) return false;
738
- }
739
-
740
- // We are sure that the first page is valid and that we have at least one
741
- // page.
742
- ASSERT(first_page_->is_valid());
743
- ASSERT(num_pages > 0);
744
- accounting_stats_.ExpandSpace(num_pages * Page::kObjectAreaSize);
745
- ASSERT(Capacity() <= max_capacity_);
746
-
747
- // Sequentially clear region marks in the newly allocated
748
- // pages and cache the current last page in the space.
749
- for (Page* p = first_page_; p->is_valid(); p = p->next_page()) {
750
- p->SetRegionMarks(Page::kAllRegionsCleanMarks);
751
- last_page_ = p;
752
- }
753
-
754
- // Use first_page_ for allocation.
755
- SetAllocationInfo(&allocation_info_, first_page_);
756
-
757
- page_list_is_chunk_ordered_ = true;
758
-
759
- return true;
760
- }
761
-
762
-
763
- bool PagedSpace::HasBeenSetup() {
764
- return (Capacity() > 0);
765
- }
766
-
767
-
768
- void PagedSpace::TearDown() {
769
- MemoryAllocator::FreeAllPages(this);
770
- first_page_ = NULL;
771
- accounting_stats_.Clear();
772
- }
773
-
774
-
775
- #ifdef ENABLE_HEAP_PROTECTION
776
-
777
- void PagedSpace::Protect() {
778
- Page* page = first_page_;
779
- while (page->is_valid()) {
780
- MemoryAllocator::ProtectChunkFromPage(page);
781
- page = MemoryAllocator::FindLastPageInSameChunk(page)->next_page();
782
- }
783
- }
784
-
785
-
786
- void PagedSpace::Unprotect() {
787
- Page* page = first_page_;
788
- while (page->is_valid()) {
789
- MemoryAllocator::UnprotectChunkFromPage(page);
790
- page = MemoryAllocator::FindLastPageInSameChunk(page)->next_page();
791
- }
792
- }
793
-
794
- #endif
795
-
796
-
797
- void PagedSpace::MarkAllPagesClean() {
798
- PageIterator it(this, PageIterator::ALL_PAGES);
799
- while (it.has_next()) {
800
- it.next()->SetRegionMarks(Page::kAllRegionsCleanMarks);
801
- }
802
- }
803
-
804
-
805
- Object* PagedSpace::FindObject(Address addr) {
806
- // Note: this function can only be called before or after mark-compact GC
807
- // because it accesses map pointers.
808
- ASSERT(!MarkCompactCollector::in_use());
809
-
810
- if (!Contains(addr)) return Failure::Exception();
811
-
812
- Page* p = Page::FromAddress(addr);
813
- ASSERT(IsUsed(p));
814
- Address cur = p->ObjectAreaStart();
815
- Address end = p->AllocationTop();
816
- while (cur < end) {
817
- HeapObject* obj = HeapObject::FromAddress(cur);
818
- Address next = cur + obj->Size();
819
- if ((cur <= addr) && (addr < next)) return obj;
820
- cur = next;
821
- }
822
-
823
- UNREACHABLE();
824
- return Failure::Exception();
825
- }
826
-
827
-
828
- bool PagedSpace::IsUsed(Page* page) {
829
- PageIterator it(this, PageIterator::PAGES_IN_USE);
830
- while (it.has_next()) {
831
- if (page == it.next()) return true;
832
- }
833
- return false;
834
- }
835
-
836
-
837
- void PagedSpace::SetAllocationInfo(AllocationInfo* alloc_info, Page* p) {
838
- alloc_info->top = p->ObjectAreaStart();
839
- alloc_info->limit = p->ObjectAreaEnd();
840
- ASSERT(alloc_info->VerifyPagedAllocation());
841
- }
842
-
843
-
844
- void PagedSpace::MCResetRelocationInfo() {
845
- // Set page indexes.
846
- int i = 0;
847
- PageIterator it(this, PageIterator::ALL_PAGES);
848
- while (it.has_next()) {
849
- Page* p = it.next();
850
- p->mc_page_index = i++;
851
- }
852
-
853
- // Set mc_forwarding_info_ to the first page in the space.
854
- SetAllocationInfo(&mc_forwarding_info_, first_page_);
855
- // All the bytes in the space are 'available'. We will rediscover
856
- // allocated and wasted bytes during GC.
857
- accounting_stats_.Reset();
858
- }
859
-
860
-
861
- int PagedSpace::MCSpaceOffsetForAddress(Address addr) {
862
- #ifdef DEBUG
863
- // The Contains function considers the address at the beginning of a
864
- // page in the page, MCSpaceOffsetForAddress considers it is in the
865
- // previous page.
866
- if (Page::IsAlignedToPageSize(addr)) {
867
- ASSERT(Contains(addr - kPointerSize));
868
- } else {
869
- ASSERT(Contains(addr));
870
- }
871
- #endif
872
-
873
- // If addr is at the end of a page, it belongs to previous page
874
- Page* p = Page::IsAlignedToPageSize(addr)
875
- ? Page::FromAllocationTop(addr)
876
- : Page::FromAddress(addr);
877
- int index = p->mc_page_index;
878
- return (index * Page::kPageSize) + p->Offset(addr);
879
- }
880
-
881
-
882
- // Slow case for reallocating and promoting objects during a compacting
883
- // collection. This function is not space-specific.
884
- HeapObject* PagedSpace::SlowMCAllocateRaw(int size_in_bytes) {
885
- Page* current_page = TopPageOf(mc_forwarding_info_);
886
- if (!current_page->next_page()->is_valid()) {
887
- if (!Expand(current_page)) {
888
- return NULL;
889
- }
890
- }
891
-
892
- // There are surely more pages in the space now.
893
- ASSERT(current_page->next_page()->is_valid());
894
- // We do not add the top of page block for current page to the space's
895
- // free list---the block may contain live objects so we cannot write
896
- // bookkeeping information to it. Instead, we will recover top of page
897
- // blocks when we move objects to their new locations.
898
- //
899
- // We do however write the allocation pointer to the page. The encoding
900
- // of forwarding addresses is as an offset in terms of live bytes, so we
901
- // need quick access to the allocation top of each page to decode
902
- // forwarding addresses.
903
- current_page->SetAllocationWatermark(mc_forwarding_info_.top);
904
- current_page->next_page()->InvalidateWatermark(true);
905
- SetAllocationInfo(&mc_forwarding_info_, current_page->next_page());
906
- return AllocateLinearly(&mc_forwarding_info_, size_in_bytes);
907
- }
908
-
909
-
910
- bool PagedSpace::Expand(Page* last_page) {
911
- ASSERT(max_capacity_ % Page::kObjectAreaSize == 0);
912
- ASSERT(Capacity() % Page::kObjectAreaSize == 0);
913
-
914
- if (Capacity() == max_capacity_) return false;
915
-
916
- ASSERT(Capacity() < max_capacity_);
917
- // Last page must be valid and its next page is invalid.
918
- ASSERT(last_page->is_valid() && !last_page->next_page()->is_valid());
919
-
920
- int available_pages = (max_capacity_ - Capacity()) / Page::kObjectAreaSize;
921
- if (available_pages <= 0) return false;
922
-
923
- int desired_pages = Min(available_pages, MemoryAllocator::kPagesPerChunk);
924
- Page* p = MemoryAllocator::AllocatePages(desired_pages, &desired_pages, this);
925
- if (!p->is_valid()) return false;
926
-
927
- accounting_stats_.ExpandSpace(desired_pages * Page::kObjectAreaSize);
928
- ASSERT(Capacity() <= max_capacity_);
929
-
930
- MemoryAllocator::SetNextPage(last_page, p);
931
-
932
- // Sequentially clear region marks of new pages and and cache the
933
- // new last page in the space.
934
- while (p->is_valid()) {
935
- p->SetRegionMarks(Page::kAllRegionsCleanMarks);
936
- last_page_ = p;
937
- p = p->next_page();
938
- }
939
-
940
- return true;
941
- }
942
-
943
-
944
- #ifdef DEBUG
945
- int PagedSpace::CountTotalPages() {
946
- int count = 0;
947
- for (Page* p = first_page_; p->is_valid(); p = p->next_page()) {
948
- count++;
949
- }
950
- return count;
951
- }
952
- #endif
953
-
954
-
955
- void PagedSpace::Shrink() {
956
- if (!page_list_is_chunk_ordered_) {
957
- // We can't shrink space if pages is not chunk-ordered
958
- // (see comment for class MemoryAllocator for definition).
959
- return;
960
- }
961
-
962
- // Release half of free pages.
963
- Page* top_page = AllocationTopPage();
964
- ASSERT(top_page->is_valid());
965
-
966
- // Count the number of pages we would like to free.
967
- int pages_to_free = 0;
968
- for (Page* p = top_page->next_page(); p->is_valid(); p = p->next_page()) {
969
- pages_to_free++;
970
- }
971
-
972
- // Free pages after top_page.
973
- Page* p = MemoryAllocator::FreePages(top_page->next_page());
974
- MemoryAllocator::SetNextPage(top_page, p);
975
-
976
- // Find out how many pages we failed to free and update last_page_.
977
- // Please note pages can only be freed in whole chunks.
978
- last_page_ = top_page;
979
- for (Page* p = top_page->next_page(); p->is_valid(); p = p->next_page()) {
980
- pages_to_free--;
981
- last_page_ = p;
982
- }
983
-
984
- accounting_stats_.ShrinkSpace(pages_to_free * Page::kObjectAreaSize);
985
- ASSERT(Capacity() == CountTotalPages() * Page::kObjectAreaSize);
986
- }
987
-
988
-
989
- bool PagedSpace::EnsureCapacity(int capacity) {
990
- if (Capacity() >= capacity) return true;
991
-
992
- // Start from the allocation top and loop to the last page in the space.
993
- Page* last_page = AllocationTopPage();
994
- Page* next_page = last_page->next_page();
995
- while (next_page->is_valid()) {
996
- last_page = MemoryAllocator::FindLastPageInSameChunk(next_page);
997
- next_page = last_page->next_page();
998
- }
999
-
1000
- // Expand the space until it has the required capacity or expansion fails.
1001
- do {
1002
- if (!Expand(last_page)) return false;
1003
- ASSERT(last_page->next_page()->is_valid());
1004
- last_page =
1005
- MemoryAllocator::FindLastPageInSameChunk(last_page->next_page());
1006
- } while (Capacity() < capacity);
1007
-
1008
- return true;
1009
- }
1010
-
1011
-
1012
- #ifdef DEBUG
1013
- void PagedSpace::Print() { }
1014
- #endif
1015
-
1016
-
1017
- #ifdef DEBUG
1018
- // We do not assume that the PageIterator works, because it depends on the
1019
- // invariants we are checking during verification.
1020
- void PagedSpace::Verify(ObjectVisitor* visitor) {
1021
- // The allocation pointer should be valid, and it should be in a page in the
1022
- // space.
1023
- ASSERT(allocation_info_.VerifyPagedAllocation());
1024
- Page* top_page = Page::FromAllocationTop(allocation_info_.top);
1025
- ASSERT(MemoryAllocator::IsPageInSpace(top_page, this));
1026
-
1027
- // Loop over all the pages.
1028
- bool above_allocation_top = false;
1029
- Page* current_page = first_page_;
1030
- while (current_page->is_valid()) {
1031
- if (above_allocation_top) {
1032
- // We don't care what's above the allocation top.
1033
- } else {
1034
- Address top = current_page->AllocationTop();
1035
- if (current_page == top_page) {
1036
- ASSERT(top == allocation_info_.top);
1037
- // The next page will be above the allocation top.
1038
- above_allocation_top = true;
1039
- }
1040
-
1041
- // It should be packed with objects from the bottom to the top.
1042
- Address current = current_page->ObjectAreaStart();
1043
- while (current < top) {
1044
- HeapObject* object = HeapObject::FromAddress(current);
1045
-
1046
- // The first word should be a map, and we expect all map pointers to
1047
- // be in map space.
1048
- Map* map = object->map();
1049
- ASSERT(map->IsMap());
1050
- ASSERT(Heap::map_space()->Contains(map));
1051
-
1052
- // Perform space-specific object verification.
1053
- VerifyObject(object);
1054
-
1055
- // The object itself should look OK.
1056
- object->Verify();
1057
-
1058
- // All the interior pointers should be contained in the heap and
1059
- // have page regions covering intergenerational references should be
1060
- // marked dirty.
1061
- int size = object->Size();
1062
- object->IterateBody(map->instance_type(), size, visitor);
1063
-
1064
- current += size;
1065
- }
1066
-
1067
- // The allocation pointer should not be in the middle of an object.
1068
- ASSERT(current == top);
1069
- }
1070
-
1071
- current_page = current_page->next_page();
1072
- }
1073
- }
1074
- #endif
1075
-
1076
-
1077
- // -----------------------------------------------------------------------------
1078
- // NewSpace implementation
1079
-
1080
-
1081
- bool NewSpace::Setup(Address start, int size) {
1082
- // Setup new space based on the preallocated memory block defined by
1083
- // start and size. The provided space is divided into two semi-spaces.
1084
- // To support fast containment testing in the new space, the size of
1085
- // this chunk must be a power of two and it must be aligned to its size.
1086
- int initial_semispace_capacity = Heap::InitialSemiSpaceSize();
1087
- int maximum_semispace_capacity = Heap::MaxSemiSpaceSize();
1088
-
1089
- ASSERT(initial_semispace_capacity <= maximum_semispace_capacity);
1090
- ASSERT(IsPowerOf2(maximum_semispace_capacity));
1091
-
1092
- // Allocate and setup the histogram arrays if necessary.
1093
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1094
- allocated_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
1095
- promoted_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
1096
-
1097
- #define SET_NAME(name) allocated_histogram_[name].set_name(#name); \
1098
- promoted_histogram_[name].set_name(#name);
1099
- INSTANCE_TYPE_LIST(SET_NAME)
1100
- #undef SET_NAME
1101
- #endif
1102
-
1103
- ASSERT(size == 2 * Heap::ReservedSemiSpaceSize());
1104
- ASSERT(IsAddressAligned(start, size, 0));
1105
-
1106
- if (!to_space_.Setup(start,
1107
- initial_semispace_capacity,
1108
- maximum_semispace_capacity)) {
1109
- return false;
1110
- }
1111
- if (!from_space_.Setup(start + maximum_semispace_capacity,
1112
- initial_semispace_capacity,
1113
- maximum_semispace_capacity)) {
1114
- return false;
1115
- }
1116
-
1117
- start_ = start;
1118
- address_mask_ = ~(size - 1);
1119
- object_mask_ = address_mask_ | kHeapObjectTagMask;
1120
- object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
1121
-
1122
- allocation_info_.top = to_space_.low();
1123
- allocation_info_.limit = to_space_.high();
1124
- mc_forwarding_info_.top = NULL;
1125
- mc_forwarding_info_.limit = NULL;
1126
-
1127
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1128
- return true;
1129
- }
1130
-
1131
-
1132
- void NewSpace::TearDown() {
1133
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1134
- if (allocated_histogram_) {
1135
- DeleteArray(allocated_histogram_);
1136
- allocated_histogram_ = NULL;
1137
- }
1138
- if (promoted_histogram_) {
1139
- DeleteArray(promoted_histogram_);
1140
- promoted_histogram_ = NULL;
1141
- }
1142
- #endif
1143
-
1144
- start_ = NULL;
1145
- allocation_info_.top = NULL;
1146
- allocation_info_.limit = NULL;
1147
- mc_forwarding_info_.top = NULL;
1148
- mc_forwarding_info_.limit = NULL;
1149
-
1150
- to_space_.TearDown();
1151
- from_space_.TearDown();
1152
- }
1153
-
1154
-
1155
- #ifdef ENABLE_HEAP_PROTECTION
1156
-
1157
- void NewSpace::Protect() {
1158
- MemoryAllocator::Protect(ToSpaceLow(), Capacity());
1159
- MemoryAllocator::Protect(FromSpaceLow(), Capacity());
1160
- }
1161
-
1162
-
1163
- void NewSpace::Unprotect() {
1164
- MemoryAllocator::Unprotect(ToSpaceLow(), Capacity(),
1165
- to_space_.executable());
1166
- MemoryAllocator::Unprotect(FromSpaceLow(), Capacity(),
1167
- from_space_.executable());
1168
- }
1169
-
1170
- #endif
1171
-
1172
-
1173
- void NewSpace::Flip() {
1174
- SemiSpace tmp = from_space_;
1175
- from_space_ = to_space_;
1176
- to_space_ = tmp;
1177
- }
1178
-
1179
-
1180
- void NewSpace::Grow() {
1181
- ASSERT(Capacity() < MaximumCapacity());
1182
- if (to_space_.Grow()) {
1183
- // Only grow from space if we managed to grow to space.
1184
- if (!from_space_.Grow()) {
1185
- // If we managed to grow to space but couldn't grow from space,
1186
- // attempt to shrink to space.
1187
- if (!to_space_.ShrinkTo(from_space_.Capacity())) {
1188
- // We are in an inconsistent state because we could not
1189
- // commit/uncommit memory from new space.
1190
- V8::FatalProcessOutOfMemory("Failed to grow new space.");
1191
- }
1192
- }
1193
- }
1194
- allocation_info_.limit = to_space_.high();
1195
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1196
- }
1197
-
1198
-
1199
- void NewSpace::Shrink() {
1200
- int new_capacity = Max(InitialCapacity(), 2 * Size());
1201
- int rounded_new_capacity =
1202
- RoundUp(new_capacity, static_cast<int>(OS::AllocateAlignment()));
1203
- if (rounded_new_capacity < Capacity() &&
1204
- to_space_.ShrinkTo(rounded_new_capacity)) {
1205
- // Only shrink from space if we managed to shrink to space.
1206
- if (!from_space_.ShrinkTo(rounded_new_capacity)) {
1207
- // If we managed to shrink to space but couldn't shrink from
1208
- // space, attempt to grow to space again.
1209
- if (!to_space_.GrowTo(from_space_.Capacity())) {
1210
- // We are in an inconsistent state because we could not
1211
- // commit/uncommit memory from new space.
1212
- V8::FatalProcessOutOfMemory("Failed to shrink new space.");
1213
- }
1214
- }
1215
- }
1216
- allocation_info_.limit = to_space_.high();
1217
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1218
- }
1219
-
1220
-
1221
- void NewSpace::ResetAllocationInfo() {
1222
- allocation_info_.top = to_space_.low();
1223
- allocation_info_.limit = to_space_.high();
1224
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1225
- }
1226
-
1227
-
1228
- void NewSpace::MCResetRelocationInfo() {
1229
- mc_forwarding_info_.top = from_space_.low();
1230
- mc_forwarding_info_.limit = from_space_.high();
1231
- ASSERT_SEMISPACE_ALLOCATION_INFO(mc_forwarding_info_, from_space_);
1232
- }
1233
-
1234
-
1235
- void NewSpace::MCCommitRelocationInfo() {
1236
- // Assumes that the spaces have been flipped so that mc_forwarding_info_ is
1237
- // valid allocation info for the to space.
1238
- allocation_info_.top = mc_forwarding_info_.top;
1239
- allocation_info_.limit = to_space_.high();
1240
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1241
- }
1242
-
1243
-
1244
- #ifdef DEBUG
1245
- // We do not use the SemispaceIterator because verification doesn't assume
1246
- // that it works (it depends on the invariants we are checking).
1247
- void NewSpace::Verify() {
1248
- // The allocation pointer should be in the space or at the very end.
1249
- ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
1250
-
1251
- // There should be objects packed in from the low address up to the
1252
- // allocation pointer.
1253
- Address current = to_space_.low();
1254
- while (current < top()) {
1255
- HeapObject* object = HeapObject::FromAddress(current);
1256
-
1257
- // The first word should be a map, and we expect all map pointers to
1258
- // be in map space.
1259
- Map* map = object->map();
1260
- ASSERT(map->IsMap());
1261
- ASSERT(Heap::map_space()->Contains(map));
1262
-
1263
- // The object should not be code or a map.
1264
- ASSERT(!object->IsMap());
1265
- ASSERT(!object->IsCode());
1266
-
1267
- // The object itself should look OK.
1268
- object->Verify();
1269
-
1270
- // All the interior pointers should be contained in the heap.
1271
- VerifyPointersVisitor visitor;
1272
- int size = object->Size();
1273
- object->IterateBody(map->instance_type(), size, &visitor);
1274
-
1275
- current += size;
1276
- }
1277
-
1278
- // The allocation pointer should not be in the middle of an object.
1279
- ASSERT(current == top());
1280
- }
1281
- #endif
1282
-
1283
-
1284
- bool SemiSpace::Commit() {
1285
- ASSERT(!is_committed());
1286
- if (!MemoryAllocator::CommitBlock(start_, capacity_, executable())) {
1287
- return false;
1288
- }
1289
- committed_ = true;
1290
- return true;
1291
- }
1292
-
1293
-
1294
- bool SemiSpace::Uncommit() {
1295
- ASSERT(is_committed());
1296
- if (!MemoryAllocator::UncommitBlock(start_, capacity_)) {
1297
- return false;
1298
- }
1299
- committed_ = false;
1300
- return true;
1301
- }
1302
-
1303
-
1304
- // -----------------------------------------------------------------------------
1305
- // SemiSpace implementation
1306
-
1307
- bool SemiSpace::Setup(Address start,
1308
- int initial_capacity,
1309
- int maximum_capacity) {
1310
- // Creates a space in the young generation. The constructor does not
1311
- // allocate memory from the OS. A SemiSpace is given a contiguous chunk of
1312
- // memory of size 'capacity' when set up, and does not grow or shrink
1313
- // otherwise. In the mark-compact collector, the memory region of the from
1314
- // space is used as the marking stack. It requires contiguous memory
1315
- // addresses.
1316
- initial_capacity_ = initial_capacity;
1317
- capacity_ = initial_capacity;
1318
- maximum_capacity_ = maximum_capacity;
1319
- committed_ = false;
1320
-
1321
- start_ = start;
1322
- address_mask_ = ~(maximum_capacity - 1);
1323
- object_mask_ = address_mask_ | kHeapObjectTagMask;
1324
- object_expected_ = reinterpret_cast<uintptr_t>(start) | kHeapObjectTag;
1325
- age_mark_ = start_;
1326
-
1327
- return Commit();
1328
- }
1329
-
1330
-
1331
- void SemiSpace::TearDown() {
1332
- start_ = NULL;
1333
- capacity_ = 0;
1334
- }
1335
-
1336
-
1337
- bool SemiSpace::Grow() {
1338
- // Double the semispace size but only up to maximum capacity.
1339
- int maximum_extra = maximum_capacity_ - capacity_;
1340
- int extra = Min(RoundUp(capacity_, static_cast<int>(OS::AllocateAlignment())),
1341
- maximum_extra);
1342
- if (!MemoryAllocator::CommitBlock(high(), extra, executable())) {
1343
- return false;
1344
- }
1345
- capacity_ += extra;
1346
- return true;
1347
- }
1348
-
1349
-
1350
- bool SemiSpace::GrowTo(int new_capacity) {
1351
- ASSERT(new_capacity <= maximum_capacity_);
1352
- ASSERT(new_capacity > capacity_);
1353
- size_t delta = new_capacity - capacity_;
1354
- ASSERT(IsAligned(delta, OS::AllocateAlignment()));
1355
- if (!MemoryAllocator::CommitBlock(high(), delta, executable())) {
1356
- return false;
1357
- }
1358
- capacity_ = new_capacity;
1359
- return true;
1360
- }
1361
-
1362
-
1363
- bool SemiSpace::ShrinkTo(int new_capacity) {
1364
- ASSERT(new_capacity >= initial_capacity_);
1365
- ASSERT(new_capacity < capacity_);
1366
- size_t delta = capacity_ - new_capacity;
1367
- ASSERT(IsAligned(delta, OS::AllocateAlignment()));
1368
- if (!MemoryAllocator::UncommitBlock(high() - delta, delta)) {
1369
- return false;
1370
- }
1371
- capacity_ = new_capacity;
1372
- return true;
1373
- }
1374
-
1375
-
1376
- #ifdef DEBUG
1377
- void SemiSpace::Print() { }
1378
-
1379
-
1380
- void SemiSpace::Verify() { }
1381
- #endif
1382
-
1383
-
1384
- // -----------------------------------------------------------------------------
1385
- // SemiSpaceIterator implementation.
1386
- SemiSpaceIterator::SemiSpaceIterator(NewSpace* space) {
1387
- Initialize(space, space->bottom(), space->top(), NULL);
1388
- }
1389
-
1390
-
1391
- SemiSpaceIterator::SemiSpaceIterator(NewSpace* space,
1392
- HeapObjectCallback size_func) {
1393
- Initialize(space, space->bottom(), space->top(), size_func);
1394
- }
1395
-
1396
-
1397
- SemiSpaceIterator::SemiSpaceIterator(NewSpace* space, Address start) {
1398
- Initialize(space, start, space->top(), NULL);
1399
- }
1400
-
1401
-
1402
- void SemiSpaceIterator::Initialize(NewSpace* space, Address start,
1403
- Address end,
1404
- HeapObjectCallback size_func) {
1405
- ASSERT(space->ToSpaceContains(start));
1406
- ASSERT(space->ToSpaceLow() <= end
1407
- && end <= space->ToSpaceHigh());
1408
- space_ = &space->to_space_;
1409
- current_ = start;
1410
- limit_ = end;
1411
- size_func_ = size_func;
1412
- }
1413
-
1414
-
1415
- #ifdef DEBUG
1416
- // A static array of histogram info for each type.
1417
- static HistogramInfo heap_histograms[LAST_TYPE+1];
1418
- static JSObject::SpillInformation js_spill_information;
1419
-
1420
- // heap_histograms is shared, always clear it before using it.
1421
- static void ClearHistograms() {
1422
- // We reset the name each time, though it hasn't changed.
1423
- #define DEF_TYPE_NAME(name) heap_histograms[name].set_name(#name);
1424
- INSTANCE_TYPE_LIST(DEF_TYPE_NAME)
1425
- #undef DEF_TYPE_NAME
1426
-
1427
- #define CLEAR_HISTOGRAM(name) heap_histograms[name].clear();
1428
- INSTANCE_TYPE_LIST(CLEAR_HISTOGRAM)
1429
- #undef CLEAR_HISTOGRAM
1430
-
1431
- js_spill_information.Clear();
1432
- }
1433
-
1434
-
1435
- static int code_kind_statistics[Code::NUMBER_OF_KINDS];
1436
-
1437
-
1438
- static void ClearCodeKindStatistics() {
1439
- for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
1440
- code_kind_statistics[i] = 0;
1441
- }
1442
- }
1443
-
1444
-
1445
- static void ReportCodeKindStatistics() {
1446
- const char* table[Code::NUMBER_OF_KINDS] = { NULL };
1447
-
1448
- #define CASE(name) \
1449
- case Code::name: table[Code::name] = #name; \
1450
- break
1451
-
1452
- for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
1453
- switch (static_cast<Code::Kind>(i)) {
1454
- CASE(FUNCTION);
1455
- CASE(STUB);
1456
- CASE(BUILTIN);
1457
- CASE(LOAD_IC);
1458
- CASE(KEYED_LOAD_IC);
1459
- CASE(STORE_IC);
1460
- CASE(KEYED_STORE_IC);
1461
- CASE(CALL_IC);
1462
- CASE(KEYED_CALL_IC);
1463
- CASE(BINARY_OP_IC);
1464
- }
1465
- }
1466
-
1467
- #undef CASE
1468
-
1469
- PrintF("\n Code kind histograms: \n");
1470
- for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
1471
- if (code_kind_statistics[i] > 0) {
1472
- PrintF(" %-20s: %10d bytes\n", table[i], code_kind_statistics[i]);
1473
- }
1474
- }
1475
- PrintF("\n");
1476
- }
1477
-
1478
-
1479
- static int CollectHistogramInfo(HeapObject* obj) {
1480
- InstanceType type = obj->map()->instance_type();
1481
- ASSERT(0 <= type && type <= LAST_TYPE);
1482
- ASSERT(heap_histograms[type].name() != NULL);
1483
- heap_histograms[type].increment_number(1);
1484
- heap_histograms[type].increment_bytes(obj->Size());
1485
-
1486
- if (FLAG_collect_heap_spill_statistics && obj->IsJSObject()) {
1487
- JSObject::cast(obj)->IncrementSpillStatistics(&js_spill_information);
1488
- }
1489
-
1490
- return obj->Size();
1491
- }
1492
-
1493
-
1494
- static void ReportHistogram(bool print_spill) {
1495
- PrintF("\n Object Histogram:\n");
1496
- for (int i = 0; i <= LAST_TYPE; i++) {
1497
- if (heap_histograms[i].number() > 0) {
1498
- PrintF(" %-34s%10d (%10d bytes)\n",
1499
- heap_histograms[i].name(),
1500
- heap_histograms[i].number(),
1501
- heap_histograms[i].bytes());
1502
- }
1503
- }
1504
- PrintF("\n");
1505
-
1506
- // Summarize string types.
1507
- int string_number = 0;
1508
- int string_bytes = 0;
1509
- #define INCREMENT(type, size, name, camel_name) \
1510
- string_number += heap_histograms[type].number(); \
1511
- string_bytes += heap_histograms[type].bytes();
1512
- STRING_TYPE_LIST(INCREMENT)
1513
- #undef INCREMENT
1514
- if (string_number > 0) {
1515
- PrintF(" %-34s%10d (%10d bytes)\n\n", "STRING_TYPE", string_number,
1516
- string_bytes);
1517
- }
1518
-
1519
- if (FLAG_collect_heap_spill_statistics && print_spill) {
1520
- js_spill_information.Print();
1521
- }
1522
- }
1523
- #endif // DEBUG
1524
-
1525
-
1526
- // Support for statistics gathering for --heap-stats and --log-gc.
1527
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1528
- void NewSpace::ClearHistograms() {
1529
- for (int i = 0; i <= LAST_TYPE; i++) {
1530
- allocated_histogram_[i].clear();
1531
- promoted_histogram_[i].clear();
1532
- }
1533
- }
1534
-
1535
- // Because the copying collector does not touch garbage objects, we iterate
1536
- // the new space before a collection to get a histogram of allocated objects.
1537
- // This only happens (1) when compiled with DEBUG and the --heap-stats flag is
1538
- // set, or when compiled with ENABLE_LOGGING_AND_PROFILING and the --log-gc
1539
- // flag is set.
1540
- void NewSpace::CollectStatistics() {
1541
- ClearHistograms();
1542
- SemiSpaceIterator it(this);
1543
- for (HeapObject* obj = it.next(); obj != NULL; obj = it.next())
1544
- RecordAllocation(obj);
1545
- }
1546
-
1547
-
1548
- #ifdef ENABLE_LOGGING_AND_PROFILING
1549
- static void DoReportStatistics(HistogramInfo* info, const char* description) {
1550
- LOG(HeapSampleBeginEvent("NewSpace", description));
1551
- // Lump all the string types together.
1552
- int string_number = 0;
1553
- int string_bytes = 0;
1554
- #define INCREMENT(type, size, name, camel_name) \
1555
- string_number += info[type].number(); \
1556
- string_bytes += info[type].bytes();
1557
- STRING_TYPE_LIST(INCREMENT)
1558
- #undef INCREMENT
1559
- if (string_number > 0) {
1560
- LOG(HeapSampleItemEvent("STRING_TYPE", string_number, string_bytes));
1561
- }
1562
-
1563
- // Then do the other types.
1564
- for (int i = FIRST_NONSTRING_TYPE; i <= LAST_TYPE; ++i) {
1565
- if (info[i].number() > 0) {
1566
- LOG(HeapSampleItemEvent(info[i].name(), info[i].number(),
1567
- info[i].bytes()));
1568
- }
1569
- }
1570
- LOG(HeapSampleEndEvent("NewSpace", description));
1571
- }
1572
- #endif // ENABLE_LOGGING_AND_PROFILING
1573
-
1574
-
1575
- void NewSpace::ReportStatistics() {
1576
- #ifdef DEBUG
1577
- if (FLAG_heap_stats) {
1578
- float pct = static_cast<float>(Available()) / Capacity();
1579
- PrintF(" capacity: %d, available: %d, %%%d\n",
1580
- Capacity(), Available(), static_cast<int>(pct*100));
1581
- PrintF("\n Object Histogram:\n");
1582
- for (int i = 0; i <= LAST_TYPE; i++) {
1583
- if (allocated_histogram_[i].number() > 0) {
1584
- PrintF(" %-34s%10d (%10d bytes)\n",
1585
- allocated_histogram_[i].name(),
1586
- allocated_histogram_[i].number(),
1587
- allocated_histogram_[i].bytes());
1588
- }
1589
- }
1590
- PrintF("\n");
1591
- }
1592
- #endif // DEBUG
1593
-
1594
- #ifdef ENABLE_LOGGING_AND_PROFILING
1595
- if (FLAG_log_gc) {
1596
- DoReportStatistics(allocated_histogram_, "allocated");
1597
- DoReportStatistics(promoted_histogram_, "promoted");
1598
- }
1599
- #endif // ENABLE_LOGGING_AND_PROFILING
1600
- }
1601
-
1602
-
1603
- void NewSpace::RecordAllocation(HeapObject* obj) {
1604
- InstanceType type = obj->map()->instance_type();
1605
- ASSERT(0 <= type && type <= LAST_TYPE);
1606
- allocated_histogram_[type].increment_number(1);
1607
- allocated_histogram_[type].increment_bytes(obj->Size());
1608
- }
1609
-
1610
-
1611
- void NewSpace::RecordPromotion(HeapObject* obj) {
1612
- InstanceType type = obj->map()->instance_type();
1613
- ASSERT(0 <= type && type <= LAST_TYPE);
1614
- promoted_histogram_[type].increment_number(1);
1615
- promoted_histogram_[type].increment_bytes(obj->Size());
1616
- }
1617
- #endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1618
-
1619
-
1620
- // -----------------------------------------------------------------------------
1621
- // Free lists for old object spaces implementation
1622
-
1623
- void FreeListNode::set_size(int size_in_bytes) {
1624
- ASSERT(size_in_bytes > 0);
1625
- ASSERT(IsAligned(size_in_bytes, kPointerSize));
1626
-
1627
- // We write a map and possibly size information to the block. If the block
1628
- // is big enough to be a ByteArray with at least one extra word (the next
1629
- // pointer), we set its map to be the byte array map and its size to an
1630
- // appropriate array length for the desired size from HeapObject::Size().
1631
- // If the block is too small (eg, one or two words), to hold both a size
1632
- // field and a next pointer, we give it a filler map that gives it the
1633
- // correct size.
1634
- if (size_in_bytes > ByteArray::kHeaderSize) {
1635
- set_map(Heap::raw_unchecked_byte_array_map());
1636
- // Can't use ByteArray::cast because it fails during deserialization.
1637
- ByteArray* this_as_byte_array = reinterpret_cast<ByteArray*>(this);
1638
- this_as_byte_array->set_length(ByteArray::LengthFor(size_in_bytes));
1639
- } else if (size_in_bytes == kPointerSize) {
1640
- set_map(Heap::raw_unchecked_one_pointer_filler_map());
1641
- } else if (size_in_bytes == 2 * kPointerSize) {
1642
- set_map(Heap::raw_unchecked_two_pointer_filler_map());
1643
- } else {
1644
- UNREACHABLE();
1645
- }
1646
- // We would like to ASSERT(Size() == size_in_bytes) but this would fail during
1647
- // deserialization because the byte array map is not done yet.
1648
- }
1649
-
1650
-
1651
- Address FreeListNode::next() {
1652
- ASSERT(IsFreeListNode(this));
1653
- if (map() == Heap::raw_unchecked_byte_array_map()) {
1654
- ASSERT(Size() >= kNextOffset + kPointerSize);
1655
- return Memory::Address_at(address() + kNextOffset);
1656
- } else {
1657
- return Memory::Address_at(address() + kPointerSize);
1658
- }
1659
- }
1660
-
1661
-
1662
- void FreeListNode::set_next(Address next) {
1663
- ASSERT(IsFreeListNode(this));
1664
- if (map() == Heap::raw_unchecked_byte_array_map()) {
1665
- ASSERT(Size() >= kNextOffset + kPointerSize);
1666
- Memory::Address_at(address() + kNextOffset) = next;
1667
- } else {
1668
- Memory::Address_at(address() + kPointerSize) = next;
1669
- }
1670
- }
1671
-
1672
-
1673
- OldSpaceFreeList::OldSpaceFreeList(AllocationSpace owner) : owner_(owner) {
1674
- Reset();
1675
- }
1676
-
1677
-
1678
- void OldSpaceFreeList::Reset() {
1679
- available_ = 0;
1680
- for (int i = 0; i < kFreeListsLength; i++) {
1681
- free_[i].head_node_ = NULL;
1682
- }
1683
- needs_rebuild_ = false;
1684
- finger_ = kHead;
1685
- free_[kHead].next_size_ = kEnd;
1686
- }
1687
-
1688
-
1689
- void OldSpaceFreeList::RebuildSizeList() {
1690
- ASSERT(needs_rebuild_);
1691
- int cur = kHead;
1692
- for (int i = cur + 1; i < kFreeListsLength; i++) {
1693
- if (free_[i].head_node_ != NULL) {
1694
- free_[cur].next_size_ = i;
1695
- cur = i;
1696
- }
1697
- }
1698
- free_[cur].next_size_ = kEnd;
1699
- needs_rebuild_ = false;
1700
- }
1701
-
1702
-
1703
- int OldSpaceFreeList::Free(Address start, int size_in_bytes) {
1704
- #ifdef DEBUG
1705
- MemoryAllocator::ZapBlock(start, size_in_bytes);
1706
- #endif
1707
- FreeListNode* node = FreeListNode::FromAddress(start);
1708
- node->set_size(size_in_bytes);
1709
-
1710
- // We don't use the freelists in compacting mode. This makes it more like a
1711
- // GC that only has mark-sweep-compact and doesn't have a mark-sweep
1712
- // collector.
1713
- if (FLAG_always_compact) {
1714
- return size_in_bytes;
1715
- }
1716
-
1717
- // Early return to drop too-small blocks on the floor (one or two word
1718
- // blocks cannot hold a map pointer, a size field, and a pointer to the
1719
- // next block in the free list).
1720
- if (size_in_bytes < kMinBlockSize) {
1721
- return size_in_bytes;
1722
- }
1723
-
1724
- // Insert other blocks at the head of an exact free list.
1725
- int index = size_in_bytes >> kPointerSizeLog2;
1726
- node->set_next(free_[index].head_node_);
1727
- free_[index].head_node_ = node->address();
1728
- available_ += size_in_bytes;
1729
- needs_rebuild_ = true;
1730
- return 0;
1731
- }
1732
-
1733
-
1734
- Object* OldSpaceFreeList::Allocate(int size_in_bytes, int* wasted_bytes) {
1735
- ASSERT(0 < size_in_bytes);
1736
- ASSERT(size_in_bytes <= kMaxBlockSize);
1737
- ASSERT(IsAligned(size_in_bytes, kPointerSize));
1738
-
1739
- if (needs_rebuild_) RebuildSizeList();
1740
- int index = size_in_bytes >> kPointerSizeLog2;
1741
- // Check for a perfect fit.
1742
- if (free_[index].head_node_ != NULL) {
1743
- FreeListNode* node = FreeListNode::FromAddress(free_[index].head_node_);
1744
- // If this was the last block of its size, remove the size.
1745
- if ((free_[index].head_node_ = node->next()) == NULL) RemoveSize(index);
1746
- available_ -= size_in_bytes;
1747
- *wasted_bytes = 0;
1748
- ASSERT(!FLAG_always_compact); // We only use the freelists with mark-sweep.
1749
- return node;
1750
- }
1751
- // Search the size list for the best fit.
1752
- int prev = finger_ < index ? finger_ : kHead;
1753
- int cur = FindSize(index, &prev);
1754
- ASSERT(index < cur);
1755
- if (cur == kEnd) {
1756
- // No large enough size in list.
1757
- *wasted_bytes = 0;
1758
- return Failure::RetryAfterGC(size_in_bytes, owner_);
1759
- }
1760
- ASSERT(!FLAG_always_compact); // We only use the freelists with mark-sweep.
1761
- int rem = cur - index;
1762
- int rem_bytes = rem << kPointerSizeLog2;
1763
- FreeListNode* cur_node = FreeListNode::FromAddress(free_[cur].head_node_);
1764
- ASSERT(cur_node->Size() == (cur << kPointerSizeLog2));
1765
- FreeListNode* rem_node = FreeListNode::FromAddress(free_[cur].head_node_ +
1766
- size_in_bytes);
1767
- // Distinguish the cases prev < rem < cur and rem <= prev < cur
1768
- // to avoid many redundant tests and calls to Insert/RemoveSize.
1769
- if (prev < rem) {
1770
- // Simple case: insert rem between prev and cur.
1771
- finger_ = prev;
1772
- free_[prev].next_size_ = rem;
1773
- // If this was the last block of size cur, remove the size.
1774
- if ((free_[cur].head_node_ = cur_node->next()) == NULL) {
1775
- free_[rem].next_size_ = free_[cur].next_size_;
1776
- } else {
1777
- free_[rem].next_size_ = cur;
1778
- }
1779
- // Add the remainder block.
1780
- rem_node->set_size(rem_bytes);
1781
- rem_node->set_next(free_[rem].head_node_);
1782
- free_[rem].head_node_ = rem_node->address();
1783
- } else {
1784
- // If this was the last block of size cur, remove the size.
1785
- if ((free_[cur].head_node_ = cur_node->next()) == NULL) {
1786
- finger_ = prev;
1787
- free_[prev].next_size_ = free_[cur].next_size_;
1788
- }
1789
- if (rem_bytes < kMinBlockSize) {
1790
- // Too-small remainder is wasted.
1791
- rem_node->set_size(rem_bytes);
1792
- available_ -= size_in_bytes + rem_bytes;
1793
- *wasted_bytes = rem_bytes;
1794
- return cur_node;
1795
- }
1796
- // Add the remainder block and, if needed, insert its size.
1797
- rem_node->set_size(rem_bytes);
1798
- rem_node->set_next(free_[rem].head_node_);
1799
- free_[rem].head_node_ = rem_node->address();
1800
- if (rem_node->next() == NULL) InsertSize(rem);
1801
- }
1802
- available_ -= size_in_bytes;
1803
- *wasted_bytes = 0;
1804
- return cur_node;
1805
- }
1806
-
1807
-
1808
- #ifdef DEBUG
1809
- bool OldSpaceFreeList::Contains(FreeListNode* node) {
1810
- for (int i = 0; i < kFreeListsLength; i++) {
1811
- Address cur_addr = free_[i].head_node_;
1812
- while (cur_addr != NULL) {
1813
- FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
1814
- if (cur_node == node) return true;
1815
- cur_addr = cur_node->next();
1816
- }
1817
- }
1818
- return false;
1819
- }
1820
- #endif
1821
-
1822
-
1823
- FixedSizeFreeList::FixedSizeFreeList(AllocationSpace owner, int object_size)
1824
- : owner_(owner), object_size_(object_size) {
1825
- Reset();
1826
- }
1827
-
1828
-
1829
- void FixedSizeFreeList::Reset() {
1830
- available_ = 0;
1831
- head_ = tail_ = NULL;
1832
- }
1833
-
1834
-
1835
- void FixedSizeFreeList::Free(Address start) {
1836
- #ifdef DEBUG
1837
- MemoryAllocator::ZapBlock(start, object_size_);
1838
- #endif
1839
- // We only use the freelists with mark-sweep.
1840
- ASSERT(!MarkCompactCollector::IsCompacting());
1841
- FreeListNode* node = FreeListNode::FromAddress(start);
1842
- node->set_size(object_size_);
1843
- node->set_next(NULL);
1844
- if (head_ == NULL) {
1845
- tail_ = head_ = node->address();
1846
- } else {
1847
- FreeListNode::FromAddress(tail_)->set_next(node->address());
1848
- tail_ = node->address();
1849
- }
1850
- available_ += object_size_;
1851
- }
1852
-
1853
-
1854
- Object* FixedSizeFreeList::Allocate() {
1855
- if (head_ == NULL) {
1856
- return Failure::RetryAfterGC(object_size_, owner_);
1857
- }
1858
-
1859
- ASSERT(!FLAG_always_compact); // We only use the freelists with mark-sweep.
1860
- FreeListNode* node = FreeListNode::FromAddress(head_);
1861
- head_ = node->next();
1862
- available_ -= object_size_;
1863
- return node;
1864
- }
1865
-
1866
-
1867
- // -----------------------------------------------------------------------------
1868
- // OldSpace implementation
1869
-
1870
- void OldSpace::PrepareForMarkCompact(bool will_compact) {
1871
- // Call prepare of the super class.
1872
- PagedSpace::PrepareForMarkCompact(will_compact);
1873
-
1874
- if (will_compact) {
1875
- // Reset relocation info. During a compacting collection, everything in
1876
- // the space is considered 'available' and we will rediscover live data
1877
- // and waste during the collection.
1878
- MCResetRelocationInfo();
1879
- ASSERT(Available() == Capacity());
1880
- } else {
1881
- // During a non-compacting collection, everything below the linear
1882
- // allocation pointer is considered allocated (everything above is
1883
- // available) and we will rediscover available and wasted bytes during
1884
- // the collection.
1885
- accounting_stats_.AllocateBytes(free_list_.available());
1886
- accounting_stats_.FillWastedBytes(Waste());
1887
- }
1888
-
1889
- // Clear the free list before a full GC---it will be rebuilt afterward.
1890
- free_list_.Reset();
1891
- }
1892
-
1893
-
1894
- void OldSpace::MCCommitRelocationInfo() {
1895
- // Update fast allocation info.
1896
- allocation_info_.top = mc_forwarding_info_.top;
1897
- allocation_info_.limit = mc_forwarding_info_.limit;
1898
- ASSERT(allocation_info_.VerifyPagedAllocation());
1899
-
1900
- // The space is compacted and we haven't yet built free lists or
1901
- // wasted any space.
1902
- ASSERT(Waste() == 0);
1903
- ASSERT(AvailableFree() == 0);
1904
-
1905
- // Build the free list for the space.
1906
- int computed_size = 0;
1907
- PageIterator it(this, PageIterator::PAGES_USED_BY_MC);
1908
- while (it.has_next()) {
1909
- Page* p = it.next();
1910
- // Space below the relocation pointer is allocated.
1911
- computed_size +=
1912
- static_cast<int>(p->AllocationWatermark() - p->ObjectAreaStart());
1913
- if (it.has_next()) {
1914
- // Free the space at the top of the page.
1915
- int extra_size =
1916
- static_cast<int>(p->ObjectAreaEnd() - p->AllocationWatermark());
1917
- if (extra_size > 0) {
1918
- int wasted_bytes = free_list_.Free(p->AllocationWatermark(),
1919
- extra_size);
1920
- // The bytes we have just "freed" to add to the free list were
1921
- // already accounted as available.
1922
- accounting_stats_.WasteBytes(wasted_bytes);
1923
- }
1924
- }
1925
- }
1926
-
1927
- // Make sure the computed size - based on the used portion of the pages in
1928
- // use - matches the size obtained while computing forwarding addresses.
1929
- ASSERT(computed_size == Size());
1930
- }
1931
-
1932
-
1933
- bool NewSpace::ReserveSpace(int bytes) {
1934
- // We can't reliably unpack a partial snapshot that needs more new space
1935
- // space than the minimum NewSpace size.
1936
- ASSERT(bytes <= InitialCapacity());
1937
- Address limit = allocation_info_.limit;
1938
- Address top = allocation_info_.top;
1939
- return limit - top >= bytes;
1940
- }
1941
-
1942
-
1943
- void PagedSpace::FreePages(Page* prev, Page* last) {
1944
- if (last == AllocationTopPage()) {
1945
- // Pages are already at the end of used pages.
1946
- return;
1947
- }
1948
-
1949
- Page* first = NULL;
1950
-
1951
- // Remove pages from the list.
1952
- if (prev == NULL) {
1953
- first = first_page_;
1954
- first_page_ = last->next_page();
1955
- } else {
1956
- first = prev->next_page();
1957
- MemoryAllocator::SetNextPage(prev, last->next_page());
1958
- }
1959
-
1960
- // Attach it after the last page.
1961
- MemoryAllocator::SetNextPage(last_page_, first);
1962
- last_page_ = last;
1963
- MemoryAllocator::SetNextPage(last, NULL);
1964
-
1965
- // Clean them up.
1966
- do {
1967
- first->InvalidateWatermark(true);
1968
- first->SetAllocationWatermark(first->ObjectAreaStart());
1969
- first->SetCachedAllocationWatermark(first->ObjectAreaStart());
1970
- first->SetRegionMarks(Page::kAllRegionsCleanMarks);
1971
- first = first->next_page();
1972
- } while (first != NULL);
1973
-
1974
- // Order of pages in this space might no longer be consistent with
1975
- // order of pages in chunks.
1976
- page_list_is_chunk_ordered_ = false;
1977
- }
1978
-
1979
-
1980
- void PagedSpace::PrepareForMarkCompact(bool will_compact) {
1981
- if (will_compact) {
1982
- // MarkCompact collector relies on WAS_IN_USE_BEFORE_MC page flag
1983
- // to skip unused pages. Update flag value for all pages in space.
1984
- PageIterator all_pages_iterator(this, PageIterator::ALL_PAGES);
1985
- Page* last_in_use = AllocationTopPage();
1986
- bool in_use = true;
1987
-
1988
- while (all_pages_iterator.has_next()) {
1989
- Page* p = all_pages_iterator.next();
1990
- p->SetWasInUseBeforeMC(in_use);
1991
- if (p == last_in_use) {
1992
- // We passed a page containing allocation top. All consequent
1993
- // pages are not used.
1994
- in_use = false;
1995
- }
1996
- }
1997
-
1998
- if (!page_list_is_chunk_ordered_) {
1999
- Page* new_last_in_use = Page::FromAddress(NULL);
2000
- MemoryAllocator::RelinkPageListInChunkOrder(this,
2001
- &first_page_,
2002
- &last_page_,
2003
- &new_last_in_use);
2004
- ASSERT(new_last_in_use->is_valid());
2005
-
2006
- if (new_last_in_use != last_in_use) {
2007
- // Current allocation top points to a page which is now in the middle
2008
- // of page list. We should move allocation top forward to the new last
2009
- // used page so various object iterators will continue to work properly.
2010
- last_in_use->SetAllocationWatermark(last_in_use->AllocationTop());
2011
-
2012
- int size_in_bytes = static_cast<int>(PageAllocationLimit(last_in_use) -
2013
- last_in_use->AllocationTop());
2014
-
2015
- if (size_in_bytes > 0) {
2016
- // There is still some space left on this page. Create a fake
2017
- // object which will occupy all free space on this page.
2018
- // Otherwise iterators would not be able to scan this page
2019
- // correctly.
2020
-
2021
- Heap::CreateFillerObjectAt(last_in_use->AllocationTop(),
2022
- size_in_bytes);
2023
- }
2024
-
2025
- // New last in use page was in the middle of the list before
2026
- // sorting so it full.
2027
- SetTop(new_last_in_use->AllocationTop());
2028
-
2029
- ASSERT(AllocationTopPage() == new_last_in_use);
2030
- ASSERT(AllocationTopPage()->WasInUseBeforeMC());
2031
- }
2032
-
2033
- PageIterator pages_in_use_iterator(this, PageIterator::PAGES_IN_USE);
2034
- while (pages_in_use_iterator.has_next()) {
2035
- Page* p = pages_in_use_iterator.next();
2036
- if (!p->WasInUseBeforeMC()) {
2037
- // Empty page is in the middle of a sequence of used pages.
2038
- // Create a fake object which will occupy all free space on this page.
2039
- // Otherwise iterators would not be able to scan this page correctly.
2040
- int size_in_bytes = static_cast<int>(PageAllocationLimit(p) -
2041
- p->ObjectAreaStart());
2042
-
2043
- p->SetAllocationWatermark(p->ObjectAreaStart());
2044
- Heap::CreateFillerObjectAt(p->ObjectAreaStart(), size_in_bytes);
2045
- }
2046
- }
2047
-
2048
- page_list_is_chunk_ordered_ = true;
2049
- }
2050
- }
2051
- }
2052
-
2053
-
2054
- bool PagedSpace::ReserveSpace(int bytes) {
2055
- Address limit = allocation_info_.limit;
2056
- Address top = allocation_info_.top;
2057
- if (limit - top >= bytes) return true;
2058
-
2059
- // There wasn't enough space in the current page. Lets put the rest
2060
- // of the page on the free list and start a fresh page.
2061
- PutRestOfCurrentPageOnFreeList(TopPageOf(allocation_info_));
2062
-
2063
- Page* reserved_page = TopPageOf(allocation_info_);
2064
- int bytes_left_to_reserve = bytes;
2065
- while (bytes_left_to_reserve > 0) {
2066
- if (!reserved_page->next_page()->is_valid()) {
2067
- if (Heap::OldGenerationAllocationLimitReached()) return false;
2068
- Expand(reserved_page);
2069
- }
2070
- bytes_left_to_reserve -= Page::kPageSize;
2071
- reserved_page = reserved_page->next_page();
2072
- if (!reserved_page->is_valid()) return false;
2073
- }
2074
- ASSERT(TopPageOf(allocation_info_)->next_page()->is_valid());
2075
- TopPageOf(allocation_info_)->next_page()->InvalidateWatermark(true);
2076
- SetAllocationInfo(&allocation_info_,
2077
- TopPageOf(allocation_info_)->next_page());
2078
- return true;
2079
- }
2080
-
2081
-
2082
- // You have to call this last, since the implementation from PagedSpace
2083
- // doesn't know that memory was 'promised' to large object space.
2084
- bool LargeObjectSpace::ReserveSpace(int bytes) {
2085
- return Heap::OldGenerationSpaceAvailable() >= bytes;
2086
- }
2087
-
2088
-
2089
- // Slow case for normal allocation. Try in order: (1) allocate in the next
2090
- // page in the space, (2) allocate off the space's free list, (3) expand the
2091
- // space, (4) fail.
2092
- HeapObject* OldSpace::SlowAllocateRaw(int size_in_bytes) {
2093
- // Linear allocation in this space has failed. If there is another page
2094
- // in the space, move to that page and allocate there. This allocation
2095
- // should succeed (size_in_bytes should not be greater than a page's
2096
- // object area size).
2097
- Page* current_page = TopPageOf(allocation_info_);
2098
- if (current_page->next_page()->is_valid()) {
2099
- return AllocateInNextPage(current_page, size_in_bytes);
2100
- }
2101
-
2102
- // There is no next page in this space. Try free list allocation unless that
2103
- // is currently forbidden.
2104
- if (!Heap::linear_allocation()) {
2105
- int wasted_bytes;
2106
- Object* result = free_list_.Allocate(size_in_bytes, &wasted_bytes);
2107
- accounting_stats_.WasteBytes(wasted_bytes);
2108
- if (!result->IsFailure()) {
2109
- accounting_stats_.AllocateBytes(size_in_bytes);
2110
-
2111
- HeapObject* obj = HeapObject::cast(result);
2112
- Page* p = Page::FromAddress(obj->address());
2113
-
2114
- if (obj->address() >= p->AllocationWatermark()) {
2115
- // There should be no hole between the allocation watermark
2116
- // and allocated object address.
2117
- // Memory above the allocation watermark was not swept and
2118
- // might contain garbage pointers to new space.
2119
- ASSERT(obj->address() == p->AllocationWatermark());
2120
- p->SetAllocationWatermark(obj->address() + size_in_bytes);
2121
- }
2122
-
2123
- return obj;
2124
- }
2125
- }
2126
-
2127
- // Free list allocation failed and there is no next page. Fail if we have
2128
- // hit the old generation size limit that should cause a garbage
2129
- // collection.
2130
- if (!Heap::always_allocate() && Heap::OldGenerationAllocationLimitReached()) {
2131
- return NULL;
2132
- }
2133
-
2134
- // Try to expand the space and allocate in the new next page.
2135
- ASSERT(!current_page->next_page()->is_valid());
2136
- if (Expand(current_page)) {
2137
- return AllocateInNextPage(current_page, size_in_bytes);
2138
- }
2139
-
2140
- // Finally, fail.
2141
- return NULL;
2142
- }
2143
-
2144
-
2145
- void OldSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2146
- current_page->SetAllocationWatermark(allocation_info_.top);
2147
- int free_size =
2148
- static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
2149
- if (free_size > 0) {
2150
- int wasted_bytes = free_list_.Free(allocation_info_.top, free_size);
2151
- accounting_stats_.WasteBytes(wasted_bytes);
2152
- }
2153
- }
2154
-
2155
-
2156
- void FixedSpace::PutRestOfCurrentPageOnFreeList(Page* current_page) {
2157
- current_page->SetAllocationWatermark(allocation_info_.top);
2158
- int free_size =
2159
- static_cast<int>(current_page->ObjectAreaEnd() - allocation_info_.top);
2160
- // In the fixed space free list all the free list items have the right size.
2161
- // We use up the rest of the page while preserving this invariant.
2162
- while (free_size >= object_size_in_bytes_) {
2163
- free_list_.Free(allocation_info_.top);
2164
- allocation_info_.top += object_size_in_bytes_;
2165
- free_size -= object_size_in_bytes_;
2166
- accounting_stats_.WasteBytes(object_size_in_bytes_);
2167
- }
2168
- }
2169
-
2170
-
2171
- // Add the block at the top of the page to the space's free list, set the
2172
- // allocation info to the next page (assumed to be one), and allocate
2173
- // linearly there.
2174
- HeapObject* OldSpace::AllocateInNextPage(Page* current_page,
2175
- int size_in_bytes) {
2176
- ASSERT(current_page->next_page()->is_valid());
2177
- Page* next_page = current_page->next_page();
2178
- next_page->ClearGCFields();
2179
- PutRestOfCurrentPageOnFreeList(current_page);
2180
- SetAllocationInfo(&allocation_info_, next_page);
2181
- return AllocateLinearly(&allocation_info_, size_in_bytes);
2182
- }
2183
-
2184
-
2185
- #ifdef DEBUG
2186
- struct CommentStatistic {
2187
- const char* comment;
2188
- int size;
2189
- int count;
2190
- void Clear() {
2191
- comment = NULL;
2192
- size = 0;
2193
- count = 0;
2194
- }
2195
- };
2196
-
2197
-
2198
- // must be small, since an iteration is used for lookup
2199
- const int kMaxComments = 64;
2200
- static CommentStatistic comments_statistics[kMaxComments+1];
2201
-
2202
-
2203
- void PagedSpace::ReportCodeStatistics() {
2204
- ReportCodeKindStatistics();
2205
- PrintF("Code comment statistics (\" [ comment-txt : size/ "
2206
- "count (average)\"):\n");
2207
- for (int i = 0; i <= kMaxComments; i++) {
2208
- const CommentStatistic& cs = comments_statistics[i];
2209
- if (cs.size > 0) {
2210
- PrintF(" %-30s: %10d/%6d (%d)\n", cs.comment, cs.size, cs.count,
2211
- cs.size/cs.count);
2212
- }
2213
- }
2214
- PrintF("\n");
2215
- }
2216
-
2217
-
2218
- void PagedSpace::ResetCodeStatistics() {
2219
- ClearCodeKindStatistics();
2220
- for (int i = 0; i < kMaxComments; i++) comments_statistics[i].Clear();
2221
- comments_statistics[kMaxComments].comment = "Unknown";
2222
- comments_statistics[kMaxComments].size = 0;
2223
- comments_statistics[kMaxComments].count = 0;
2224
- }
2225
-
2226
-
2227
- // Adds comment to 'comment_statistics' table. Performance OK sa long as
2228
- // 'kMaxComments' is small
2229
- static void EnterComment(const char* comment, int delta) {
2230
- // Do not count empty comments
2231
- if (delta <= 0) return;
2232
- CommentStatistic* cs = &comments_statistics[kMaxComments];
2233
- // Search for a free or matching entry in 'comments_statistics': 'cs'
2234
- // points to result.
2235
- for (int i = 0; i < kMaxComments; i++) {
2236
- if (comments_statistics[i].comment == NULL) {
2237
- cs = &comments_statistics[i];
2238
- cs->comment = comment;
2239
- break;
2240
- } else if (strcmp(comments_statistics[i].comment, comment) == 0) {
2241
- cs = &comments_statistics[i];
2242
- break;
2243
- }
2244
- }
2245
- // Update entry for 'comment'
2246
- cs->size += delta;
2247
- cs->count += 1;
2248
- }
2249
-
2250
-
2251
- // Call for each nested comment start (start marked with '[ xxx', end marked
2252
- // with ']'. RelocIterator 'it' must point to a comment reloc info.
2253
- static void CollectCommentStatistics(RelocIterator* it) {
2254
- ASSERT(!it->done());
2255
- ASSERT(it->rinfo()->rmode() == RelocInfo::COMMENT);
2256
- const char* tmp = reinterpret_cast<const char*>(it->rinfo()->data());
2257
- if (tmp[0] != '[') {
2258
- // Not a nested comment; skip
2259
- return;
2260
- }
2261
-
2262
- // Search for end of nested comment or a new nested comment
2263
- const char* const comment_txt =
2264
- reinterpret_cast<const char*>(it->rinfo()->data());
2265
- const byte* prev_pc = it->rinfo()->pc();
2266
- int flat_delta = 0;
2267
- it->next();
2268
- while (true) {
2269
- // All nested comments must be terminated properly, and therefore exit
2270
- // from loop.
2271
- ASSERT(!it->done());
2272
- if (it->rinfo()->rmode() == RelocInfo::COMMENT) {
2273
- const char* const txt =
2274
- reinterpret_cast<const char*>(it->rinfo()->data());
2275
- flat_delta += static_cast<int>(it->rinfo()->pc() - prev_pc);
2276
- if (txt[0] == ']') break; // End of nested comment
2277
- // A new comment
2278
- CollectCommentStatistics(it);
2279
- // Skip code that was covered with previous comment
2280
- prev_pc = it->rinfo()->pc();
2281
- }
2282
- it->next();
2283
- }
2284
- EnterComment(comment_txt, flat_delta);
2285
- }
2286
-
2287
-
2288
- // Collects code size statistics:
2289
- // - by code kind
2290
- // - by code comment
2291
- void PagedSpace::CollectCodeStatistics() {
2292
- HeapObjectIterator obj_it(this);
2293
- for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) {
2294
- if (obj->IsCode()) {
2295
- Code* code = Code::cast(obj);
2296
- code_kind_statistics[code->kind()] += code->Size();
2297
- RelocIterator it(code);
2298
- int delta = 0;
2299
- const byte* prev_pc = code->instruction_start();
2300
- while (!it.done()) {
2301
- if (it.rinfo()->rmode() == RelocInfo::COMMENT) {
2302
- delta += static_cast<int>(it.rinfo()->pc() - prev_pc);
2303
- CollectCommentStatistics(&it);
2304
- prev_pc = it.rinfo()->pc();
2305
- }
2306
- it.next();
2307
- }
2308
-
2309
- ASSERT(code->instruction_start() <= prev_pc &&
2310
- prev_pc <= code->instruction_end());
2311
- delta += static_cast<int>(code->instruction_end() - prev_pc);
2312
- EnterComment("NoComment", delta);
2313
- }
2314
- }
2315
- }
2316
-
2317
-
2318
- void OldSpace::ReportStatistics() {
2319
- int pct = Available() * 100 / Capacity();
2320
- PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
2321
- Capacity(), Waste(), Available(), pct);
2322
-
2323
- ClearHistograms();
2324
- HeapObjectIterator obj_it(this);
2325
- for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2326
- CollectHistogramInfo(obj);
2327
- ReportHistogram(true);
2328
- }
2329
- #endif
2330
-
2331
- // -----------------------------------------------------------------------------
2332
- // FixedSpace implementation
2333
-
2334
- void FixedSpace::PrepareForMarkCompact(bool will_compact) {
2335
- // Call prepare of the super class.
2336
- PagedSpace::PrepareForMarkCompact(will_compact);
2337
-
2338
- if (will_compact) {
2339
- // Reset relocation info.
2340
- MCResetRelocationInfo();
2341
-
2342
- // During a compacting collection, everything in the space is considered
2343
- // 'available' (set by the call to MCResetRelocationInfo) and we will
2344
- // rediscover live and wasted bytes during the collection.
2345
- ASSERT(Available() == Capacity());
2346
- } else {
2347
- // During a non-compacting collection, everything below the linear
2348
- // allocation pointer except wasted top-of-page blocks is considered
2349
- // allocated and we will rediscover available bytes during the
2350
- // collection.
2351
- accounting_stats_.AllocateBytes(free_list_.available());
2352
- }
2353
-
2354
- // Clear the free list before a full GC---it will be rebuilt afterward.
2355
- free_list_.Reset();
2356
- }
2357
-
2358
-
2359
- void FixedSpace::MCCommitRelocationInfo() {
2360
- // Update fast allocation info.
2361
- allocation_info_.top = mc_forwarding_info_.top;
2362
- allocation_info_.limit = mc_forwarding_info_.limit;
2363
- ASSERT(allocation_info_.VerifyPagedAllocation());
2364
-
2365
- // The space is compacted and we haven't yet wasted any space.
2366
- ASSERT(Waste() == 0);
2367
-
2368
- // Update allocation_top of each page in use and compute waste.
2369
- int computed_size = 0;
2370
- PageIterator it(this, PageIterator::PAGES_USED_BY_MC);
2371
- while (it.has_next()) {
2372
- Page* page = it.next();
2373
- Address page_top = page->AllocationTop();
2374
- computed_size += static_cast<int>(page_top - page->ObjectAreaStart());
2375
- if (it.has_next()) {
2376
- accounting_stats_.WasteBytes(
2377
- static_cast<int>(page->ObjectAreaEnd() - page_top));
2378
- page->SetAllocationWatermark(page_top);
2379
- }
2380
- }
2381
-
2382
- // Make sure the computed size - based on the used portion of the
2383
- // pages in use - matches the size we adjust during allocation.
2384
- ASSERT(computed_size == Size());
2385
- }
2386
-
2387
-
2388
- // Slow case for normal allocation. Try in order: (1) allocate in the next
2389
- // page in the space, (2) allocate off the space's free list, (3) expand the
2390
- // space, (4) fail.
2391
- HeapObject* FixedSpace::SlowAllocateRaw(int size_in_bytes) {
2392
- ASSERT_EQ(object_size_in_bytes_, size_in_bytes);
2393
- // Linear allocation in this space has failed. If there is another page
2394
- // in the space, move to that page and allocate there. This allocation
2395
- // should succeed.
2396
- Page* current_page = TopPageOf(allocation_info_);
2397
- if (current_page->next_page()->is_valid()) {
2398
- return AllocateInNextPage(current_page, size_in_bytes);
2399
- }
2400
-
2401
- // There is no next page in this space. Try free list allocation unless
2402
- // that is currently forbidden. The fixed space free list implicitly assumes
2403
- // that all free blocks are of the fixed size.
2404
- if (!Heap::linear_allocation()) {
2405
- Object* result = free_list_.Allocate();
2406
- if (!result->IsFailure()) {
2407
- accounting_stats_.AllocateBytes(size_in_bytes);
2408
- HeapObject* obj = HeapObject::cast(result);
2409
- Page* p = Page::FromAddress(obj->address());
2410
-
2411
- if (obj->address() >= p->AllocationWatermark()) {
2412
- // There should be no hole between the allocation watermark
2413
- // and allocated object address.
2414
- // Memory above the allocation watermark was not swept and
2415
- // might contain garbage pointers to new space.
2416
- ASSERT(obj->address() == p->AllocationWatermark());
2417
- p->SetAllocationWatermark(obj->address() + size_in_bytes);
2418
- }
2419
-
2420
- return obj;
2421
- }
2422
- }
2423
-
2424
- // Free list allocation failed and there is no next page. Fail if we have
2425
- // hit the old generation size limit that should cause a garbage
2426
- // collection.
2427
- if (!Heap::always_allocate() && Heap::OldGenerationAllocationLimitReached()) {
2428
- return NULL;
2429
- }
2430
-
2431
- // Try to expand the space and allocate in the new next page.
2432
- ASSERT(!current_page->next_page()->is_valid());
2433
- if (Expand(current_page)) {
2434
- return AllocateInNextPage(current_page, size_in_bytes);
2435
- }
2436
-
2437
- // Finally, fail.
2438
- return NULL;
2439
- }
2440
-
2441
-
2442
- // Move to the next page (there is assumed to be one) and allocate there.
2443
- // The top of page block is always wasted, because it is too small to hold a
2444
- // map.
2445
- HeapObject* FixedSpace::AllocateInNextPage(Page* current_page,
2446
- int size_in_bytes) {
2447
- ASSERT(current_page->next_page()->is_valid());
2448
- ASSERT(allocation_info_.top == PageAllocationLimit(current_page));
2449
- ASSERT_EQ(object_size_in_bytes_, size_in_bytes);
2450
- Page* next_page = current_page->next_page();
2451
- next_page->ClearGCFields();
2452
- current_page->SetAllocationWatermark(allocation_info_.top);
2453
- accounting_stats_.WasteBytes(page_extra_);
2454
- SetAllocationInfo(&allocation_info_, next_page);
2455
- return AllocateLinearly(&allocation_info_, size_in_bytes);
2456
- }
2457
-
2458
-
2459
- #ifdef DEBUG
2460
- void FixedSpace::ReportStatistics() {
2461
- int pct = Available() * 100 / Capacity();
2462
- PrintF(" capacity: %d, waste: %d, available: %d, %%%d\n",
2463
- Capacity(), Waste(), Available(), pct);
2464
-
2465
- ClearHistograms();
2466
- HeapObjectIterator obj_it(this);
2467
- for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next())
2468
- CollectHistogramInfo(obj);
2469
- ReportHistogram(false);
2470
- }
2471
- #endif
2472
-
2473
-
2474
- // -----------------------------------------------------------------------------
2475
- // MapSpace implementation
2476
-
2477
- void MapSpace::PrepareForMarkCompact(bool will_compact) {
2478
- // Call prepare of the super class.
2479
- FixedSpace::PrepareForMarkCompact(will_compact);
2480
-
2481
- if (will_compact) {
2482
- // Initialize map index entry.
2483
- int page_count = 0;
2484
- PageIterator it(this, PageIterator::ALL_PAGES);
2485
- while (it.has_next()) {
2486
- ASSERT_MAP_PAGE_INDEX(page_count);
2487
-
2488
- Page* p = it.next();
2489
- ASSERT(p->mc_page_index == page_count);
2490
-
2491
- page_addresses_[page_count++] = p->address();
2492
- }
2493
- }
2494
- }
2495
-
2496
-
2497
- #ifdef DEBUG
2498
- void MapSpace::VerifyObject(HeapObject* object) {
2499
- // The object should be a map or a free-list node.
2500
- ASSERT(object->IsMap() || object->IsByteArray());
2501
- }
2502
- #endif
2503
-
2504
-
2505
- // -----------------------------------------------------------------------------
2506
- // GlobalPropertyCellSpace implementation
2507
-
2508
- #ifdef DEBUG
2509
- void CellSpace::VerifyObject(HeapObject* object) {
2510
- // The object should be a global object property cell or a free-list node.
2511
- ASSERT(object->IsJSGlobalPropertyCell() ||
2512
- object->map() == Heap::two_pointer_filler_map());
2513
- }
2514
- #endif
2515
-
2516
-
2517
- // -----------------------------------------------------------------------------
2518
- // LargeObjectIterator
2519
-
2520
- LargeObjectIterator::LargeObjectIterator(LargeObjectSpace* space) {
2521
- current_ = space->first_chunk_;
2522
- size_func_ = NULL;
2523
- }
2524
-
2525
-
2526
- LargeObjectIterator::LargeObjectIterator(LargeObjectSpace* space,
2527
- HeapObjectCallback size_func) {
2528
- current_ = space->first_chunk_;
2529
- size_func_ = size_func;
2530
- }
2531
-
2532
-
2533
- HeapObject* LargeObjectIterator::next() {
2534
- if (current_ == NULL) return NULL;
2535
-
2536
- HeapObject* object = current_->GetObject();
2537
- current_ = current_->next();
2538
- return object;
2539
- }
2540
-
2541
-
2542
- // -----------------------------------------------------------------------------
2543
- // LargeObjectChunk
2544
-
2545
- LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
2546
- size_t* chunk_size,
2547
- Executability executable) {
2548
- size_t requested = ChunkSizeFor(size_in_bytes);
2549
- void* mem = MemoryAllocator::AllocateRawMemory(requested,
2550
- chunk_size,
2551
- executable);
2552
- if (mem == NULL) return NULL;
2553
- LOG(NewEvent("LargeObjectChunk", mem, *chunk_size));
2554
- if (*chunk_size < requested) {
2555
- MemoryAllocator::FreeRawMemory(mem, *chunk_size);
2556
- LOG(DeleteEvent("LargeObjectChunk", mem));
2557
- return NULL;
2558
- }
2559
- return reinterpret_cast<LargeObjectChunk*>(mem);
2560
- }
2561
-
2562
-
2563
- int LargeObjectChunk::ChunkSizeFor(int size_in_bytes) {
2564
- int os_alignment = static_cast<int>(OS::AllocateAlignment());
2565
- if (os_alignment < Page::kPageSize)
2566
- size_in_bytes += (Page::kPageSize - os_alignment);
2567
- return size_in_bytes + Page::kObjectStartOffset;
2568
- }
2569
-
2570
- // -----------------------------------------------------------------------------
2571
- // LargeObjectSpace
2572
-
2573
- LargeObjectSpace::LargeObjectSpace(AllocationSpace id)
2574
- : Space(id, NOT_EXECUTABLE), // Managed on a per-allocation basis
2575
- first_chunk_(NULL),
2576
- size_(0),
2577
- page_count_(0) {}
2578
-
2579
-
2580
- bool LargeObjectSpace::Setup() {
2581
- first_chunk_ = NULL;
2582
- size_ = 0;
2583
- page_count_ = 0;
2584
- return true;
2585
- }
2586
-
2587
-
2588
- void LargeObjectSpace::TearDown() {
2589
- while (first_chunk_ != NULL) {
2590
- LargeObjectChunk* chunk = first_chunk_;
2591
- first_chunk_ = first_chunk_->next();
2592
- LOG(DeleteEvent("LargeObjectChunk", chunk->address()));
2593
- MemoryAllocator::FreeRawMemory(chunk->address(), chunk->size());
2594
- }
2595
-
2596
- size_ = 0;
2597
- page_count_ = 0;
2598
- }
2599
-
2600
-
2601
- #ifdef ENABLE_HEAP_PROTECTION
2602
-
2603
- void LargeObjectSpace::Protect() {
2604
- LargeObjectChunk* chunk = first_chunk_;
2605
- while (chunk != NULL) {
2606
- MemoryAllocator::Protect(chunk->address(), chunk->size());
2607
- chunk = chunk->next();
2608
- }
2609
- }
2610
-
2611
-
2612
- void LargeObjectSpace::Unprotect() {
2613
- LargeObjectChunk* chunk = first_chunk_;
2614
- while (chunk != NULL) {
2615
- bool is_code = chunk->GetObject()->IsCode();
2616
- MemoryAllocator::Unprotect(chunk->address(), chunk->size(),
2617
- is_code ? EXECUTABLE : NOT_EXECUTABLE);
2618
- chunk = chunk->next();
2619
- }
2620
- }
2621
-
2622
- #endif
2623
-
2624
-
2625
- Object* LargeObjectSpace::AllocateRawInternal(int requested_size,
2626
- int object_size,
2627
- Executability executable) {
2628
- ASSERT(0 < object_size && object_size <= requested_size);
2629
-
2630
- // Check if we want to force a GC before growing the old space further.
2631
- // If so, fail the allocation.
2632
- if (!Heap::always_allocate() && Heap::OldGenerationAllocationLimitReached()) {
2633
- return Failure::RetryAfterGC(requested_size, identity());
2634
- }
2635
-
2636
- size_t chunk_size;
2637
- LargeObjectChunk* chunk =
2638
- LargeObjectChunk::New(requested_size, &chunk_size, executable);
2639
- if (chunk == NULL) {
2640
- return Failure::RetryAfterGC(requested_size, identity());
2641
- }
2642
-
2643
- size_ += static_cast<int>(chunk_size);
2644
- page_count_++;
2645
- chunk->set_next(first_chunk_);
2646
- chunk->set_size(chunk_size);
2647
- first_chunk_ = chunk;
2648
-
2649
- // Initialize page header.
2650
- Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
2651
- Address object_address = page->ObjectAreaStart();
2652
- // Clear the low order bit of the second word in the page to flag it as a
2653
- // large object page. If the chunk_size happened to be written there, its
2654
- // low order bit should already be clear.
2655
- ASSERT((chunk_size & 0x1) == 0);
2656
- page->SetIsLargeObjectPage(true);
2657
- page->SetRegionMarks(Page::kAllRegionsCleanMarks);
2658
- return HeapObject::FromAddress(object_address);
2659
- }
2660
-
2661
-
2662
- Object* LargeObjectSpace::AllocateRawCode(int size_in_bytes) {
2663
- ASSERT(0 < size_in_bytes);
2664
- return AllocateRawInternal(size_in_bytes,
2665
- size_in_bytes,
2666
- EXECUTABLE);
2667
- }
2668
-
2669
-
2670
- Object* LargeObjectSpace::AllocateRawFixedArray(int size_in_bytes) {
2671
- ASSERT(0 < size_in_bytes);
2672
- return AllocateRawInternal(size_in_bytes,
2673
- size_in_bytes,
2674
- NOT_EXECUTABLE);
2675
- }
2676
-
2677
-
2678
- Object* LargeObjectSpace::AllocateRaw(int size_in_bytes) {
2679
- ASSERT(0 < size_in_bytes);
2680
- return AllocateRawInternal(size_in_bytes,
2681
- size_in_bytes,
2682
- NOT_EXECUTABLE);
2683
- }
2684
-
2685
-
2686
- // GC support
2687
- Object* LargeObjectSpace::FindObject(Address a) {
2688
- for (LargeObjectChunk* chunk = first_chunk_;
2689
- chunk != NULL;
2690
- chunk = chunk->next()) {
2691
- Address chunk_address = chunk->address();
2692
- if (chunk_address <= a && a < chunk_address + chunk->size()) {
2693
- return chunk->GetObject();
2694
- }
2695
- }
2696
- return Failure::Exception();
2697
- }
2698
-
2699
- void LargeObjectSpace::IterateDirtyRegions(ObjectSlotCallback copy_object) {
2700
- LargeObjectIterator it(this);
2701
- for (HeapObject* object = it.next(); object != NULL; object = it.next()) {
2702
- // We only have code, sequential strings, or fixed arrays in large
2703
- // object space, and only fixed arrays can possibly contain pointers to
2704
- // the young generation.
2705
- if (object->IsFixedArray()) {
2706
- Page* page = Page::FromAddress(object->address());
2707
- uint32_t marks = page->GetRegionMarks();
2708
- uint32_t newmarks = Page::kAllRegionsCleanMarks;
2709
-
2710
- if (marks != Page::kAllRegionsCleanMarks) {
2711
- // For a large page a single dirty mark corresponds to several
2712
- // regions (modulo 32). So we treat a large page as a sequence of
2713
- // normal pages of size Page::kPageSize having same dirty marks
2714
- // and subsequently iterate dirty regions on each of these pages.
2715
- Address start = object->address();
2716
- Address end = page->ObjectAreaEnd();
2717
- Address object_end = start + object->Size();
2718
-
2719
- // Iterate regions of the first normal page covering object.
2720
- uint32_t first_region_number = page->GetRegionNumberForAddress(start);
2721
- newmarks |=
2722
- Heap::IterateDirtyRegions(marks >> first_region_number,
2723
- start,
2724
- end,
2725
- &Heap::IteratePointersInDirtyRegion,
2726
- copy_object) << first_region_number;
2727
-
2728
- start = end;
2729
- end = start + Page::kPageSize;
2730
- while (end <= object_end) {
2731
- // Iterate next 32 regions.
2732
- newmarks |=
2733
- Heap::IterateDirtyRegions(marks,
2734
- start,
2735
- end,
2736
- &Heap::IteratePointersInDirtyRegion,
2737
- copy_object);
2738
- start = end;
2739
- end = start + Page::kPageSize;
2740
- }
2741
-
2742
- if (start != object_end) {
2743
- // Iterate the last piece of an object which is less than
2744
- // Page::kPageSize.
2745
- newmarks |=
2746
- Heap::IterateDirtyRegions(marks,
2747
- start,
2748
- object_end,
2749
- &Heap::IteratePointersInDirtyRegion,
2750
- copy_object);
2751
- }
2752
-
2753
- page->SetRegionMarks(newmarks);
2754
- }
2755
- }
2756
- }
2757
- }
2758
-
2759
-
2760
- void LargeObjectSpace::FreeUnmarkedObjects() {
2761
- LargeObjectChunk* previous = NULL;
2762
- LargeObjectChunk* current = first_chunk_;
2763
- while (current != NULL) {
2764
- HeapObject* object = current->GetObject();
2765
- if (object->IsMarked()) {
2766
- object->ClearMark();
2767
- MarkCompactCollector::tracer()->decrement_marked_count();
2768
- previous = current;
2769
- current = current->next();
2770
- } else {
2771
- Address chunk_address = current->address();
2772
- size_t chunk_size = current->size();
2773
-
2774
- // Cut the chunk out from the chunk list.
2775
- current = current->next();
2776
- if (previous == NULL) {
2777
- first_chunk_ = current;
2778
- } else {
2779
- previous->set_next(current);
2780
- }
2781
-
2782
- // Free the chunk.
2783
- MarkCompactCollector::ReportDeleteIfNeeded(object);
2784
- size_ -= static_cast<int>(chunk_size);
2785
- page_count_--;
2786
- MemoryAllocator::FreeRawMemory(chunk_address, chunk_size);
2787
- LOG(DeleteEvent("LargeObjectChunk", chunk_address));
2788
- }
2789
- }
2790
- }
2791
-
2792
-
2793
- bool LargeObjectSpace::Contains(HeapObject* object) {
2794
- Address address = object->address();
2795
- if (Heap::new_space()->Contains(address)) {
2796
- return false;
2797
- }
2798
- Page* page = Page::FromAddress(address);
2799
-
2800
- SLOW_ASSERT(!page->IsLargeObjectPage()
2801
- || !FindObject(address)->IsFailure());
2802
-
2803
- return page->IsLargeObjectPage();
2804
- }
2805
-
2806
-
2807
- #ifdef DEBUG
2808
- // We do not assume that the large object iterator works, because it depends
2809
- // on the invariants we are checking during verification.
2810
- void LargeObjectSpace::Verify() {
2811
- for (LargeObjectChunk* chunk = first_chunk_;
2812
- chunk != NULL;
2813
- chunk = chunk->next()) {
2814
- // Each chunk contains an object that starts at the large object page's
2815
- // object area start.
2816
- HeapObject* object = chunk->GetObject();
2817
- Page* page = Page::FromAddress(object->address());
2818
- ASSERT(object->address() == page->ObjectAreaStart());
2819
-
2820
- // The first word should be a map, and we expect all map pointers to be
2821
- // in map space.
2822
- Map* map = object->map();
2823
- ASSERT(map->IsMap());
2824
- ASSERT(Heap::map_space()->Contains(map));
2825
-
2826
- // We have only code, sequential strings, external strings
2827
- // (sequential strings that have been morphed into external
2828
- // strings), fixed arrays, and byte arrays in large object space.
2829
- ASSERT(object->IsCode() || object->IsSeqString() ||
2830
- object->IsExternalString() || object->IsFixedArray() ||
2831
- object->IsByteArray());
2832
-
2833
- // The object itself should look OK.
2834
- object->Verify();
2835
-
2836
- // Byte arrays and strings don't have interior pointers.
2837
- if (object->IsCode()) {
2838
- VerifyPointersVisitor code_visitor;
2839
- object->IterateBody(map->instance_type(),
2840
- object->Size(),
2841
- &code_visitor);
2842
- } else if (object->IsFixedArray()) {
2843
- // We loop over fixed arrays ourselves, rather then using the visitor,
2844
- // because the visitor doesn't support the start/offset iteration
2845
- // needed for IsRegionDirty.
2846
- FixedArray* array = FixedArray::cast(object);
2847
- for (int j = 0; j < array->length(); j++) {
2848
- Object* element = array->get(j);
2849
- if (element->IsHeapObject()) {
2850
- HeapObject* element_object = HeapObject::cast(element);
2851
- ASSERT(Heap::Contains(element_object));
2852
- ASSERT(element_object->map()->IsMap());
2853
- if (Heap::InNewSpace(element_object)) {
2854
- Address array_addr = object->address();
2855
- Address element_addr = array_addr + FixedArray::kHeaderSize +
2856
- j * kPointerSize;
2857
-
2858
- ASSERT(Page::FromAddress(array_addr)->IsRegionDirty(element_addr));
2859
- }
2860
- }
2861
- }
2862
- }
2863
- }
2864
- }
2865
-
2866
-
2867
- void LargeObjectSpace::Print() {
2868
- LargeObjectIterator it(this);
2869
- for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) {
2870
- obj->Print();
2871
- }
2872
- }
2873
-
2874
-
2875
- void LargeObjectSpace::ReportStatistics() {
2876
- PrintF(" size: %d\n", size_);
2877
- int num_objects = 0;
2878
- ClearHistograms();
2879
- LargeObjectIterator it(this);
2880
- for (HeapObject* obj = it.next(); obj != NULL; obj = it.next()) {
2881
- num_objects++;
2882
- CollectHistogramInfo(obj);
2883
- }
2884
-
2885
- PrintF(" number of objects %d\n", num_objects);
2886
- if (num_objects > 0) ReportHistogram(false);
2887
- }
2888
-
2889
-
2890
- void LargeObjectSpace::CollectCodeStatistics() {
2891
- LargeObjectIterator obj_it(this);
2892
- for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) {
2893
- if (obj->IsCode()) {
2894
- Code* code = Code::cast(obj);
2895
- code_kind_statistics[code->kind()] += code->Size();
2896
- }
2897
- }
2898
- }
2899
- #endif // DEBUG
2900
-
2901
- } } // namespace v8::internal