libv8 3.3.10.4 → 3.5.10.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. data/lib/libv8/scons/CHANGES.txt +24 -231
  2. data/lib/libv8/scons/LICENSE.txt +1 -1
  3. data/lib/libv8/scons/MANIFEST +0 -1
  4. data/lib/libv8/scons/PKG-INFO +1 -1
  5. data/lib/libv8/scons/README.txt +9 -9
  6. data/lib/libv8/scons/RELEASE.txt +75 -77
  7. data/lib/libv8/scons/engine/SCons/Action.py +6 -22
  8. data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
  9. data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
  10. data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
  11. data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
  12. data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
  13. data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
  14. data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
  15. data/lib/libv8/scons/engine/SCons/Job.py +2 -2
  16. data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
  17. data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
  18. data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
  19. data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
  20. data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
  21. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
  22. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
  23. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
  24. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
  25. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
  26. data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
  27. data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
  28. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
  29. data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
  30. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
  31. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
  32. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
  33. data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
  34. data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
  35. data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
  36. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
  37. data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
  38. data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
  39. data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
  40. data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
  41. data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
  42. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
  43. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
  44. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
  45. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
  46. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
  47. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
  48. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
  49. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
  50. data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
  51. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
  52. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
  53. data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
  54. data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
  55. data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
  56. data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
  57. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
  58. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
  59. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
  60. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
  61. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
  62. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
  63. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
  64. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
  65. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
  66. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
  67. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
  68. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
  69. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
  70. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
  71. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
  72. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
  73. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
  74. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
  75. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
  76. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
  77. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
  78. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
  79. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
  80. data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
  81. data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
  82. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
  83. data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
  84. data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
  85. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
  86. data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
  87. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
  88. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
  89. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
  90. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
  91. data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
  92. data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
  93. data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
  94. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
  95. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
  96. data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
  97. data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
  98. data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
  99. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
  100. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
  101. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
  102. data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
  103. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
  104. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
  105. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
  106. data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
  107. data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
  108. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
  109. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
  110. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
  111. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
  112. data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
  113. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
  114. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
  115. data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
  116. data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
  117. data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
  118. data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
  119. data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
  120. data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
  121. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
  122. data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
  123. data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
  124. data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
  125. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
  126. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
  127. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
  128. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
  129. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
  130. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
  131. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
  132. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
  133. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
  134. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
  135. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
  136. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
  137. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
  138. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
  139. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
  140. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
  141. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
  142. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
  143. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
  144. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
  145. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
  146. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
  147. data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
  148. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
  149. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
  150. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
  151. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
  152. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
  153. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
  154. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
  155. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
  156. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
  157. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
  158. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
  159. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
  160. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
  161. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
  162. data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
  163. data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
  164. data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
  165. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
  166. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
  167. data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
  168. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
  169. data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
  170. data/lib/libv8/scons/engine/SCons/Util.py +3 -3
  171. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
  172. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
  173. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
  174. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
  175. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
  176. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
  177. data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
  178. data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
  179. data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
  180. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
  181. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
  182. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
  183. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
  184. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
  185. data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
  186. data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
  187. data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
  188. data/lib/libv8/scons/scons-time.1 +3 -3
  189. data/lib/libv8/scons/scons.1 +1164 -1170
  190. data/lib/libv8/scons/sconsign.1 +3 -3
  191. data/lib/libv8/scons/script/scons +22 -22
  192. data/lib/libv8/scons/script/scons-time +2 -2
  193. data/lib/libv8/scons/script/scons.bat +4 -7
  194. data/lib/libv8/scons/script/sconsign +20 -21
  195. data/lib/libv8/scons/setup.cfg +1 -0
  196. data/lib/libv8/scons/setup.py +40 -38
  197. data/lib/libv8/v8/.gitignore +1 -1
  198. data/lib/libv8/v8/AUTHORS +2 -0
  199. data/lib/libv8/v8/ChangeLog +387 -0
  200. data/lib/libv8/v8/Makefile +171 -0
  201. data/lib/libv8/v8/SConstruct +124 -51
  202. data/lib/libv8/v8/build/README.txt +31 -14
  203. data/lib/libv8/v8/build/all.gyp +11 -4
  204. data/lib/libv8/v8/build/armu.gypi +6 -2
  205. data/lib/libv8/v8/build/common.gypi +240 -94
  206. data/lib/libv8/v8/build/gyp_v8 +32 -4
  207. data/lib/libv8/v8/build/standalone.gypi +200 -0
  208. data/lib/libv8/v8/include/v8-debug.h +0 -0
  209. data/lib/libv8/v8/include/v8-profiler.h +8 -11
  210. data/lib/libv8/v8/include/v8.h +191 -108
  211. data/lib/libv8/v8/preparser/SConscript +2 -2
  212. data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
  213. data/lib/libv8/v8/preparser/preparser.gyp +42 -0
  214. data/lib/libv8/v8/src/SConscript +33 -8
  215. data/lib/libv8/v8/src/accessors.cc +77 -43
  216. data/lib/libv8/v8/src/api.cc +393 -191
  217. data/lib/libv8/v8/src/api.h +4 -8
  218. data/lib/libv8/v8/src/apinatives.js +15 -3
  219. data/lib/libv8/v8/src/arguments.h +8 -0
  220. data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
  221. data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
  222. data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
  223. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
  224. data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
  225. data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
  226. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
  227. data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
  228. data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
  229. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
  230. data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
  231. data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
  232. data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
  233. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
  234. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
  235. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
  236. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
  237. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
  238. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
  239. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
  240. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
  241. data/lib/libv8/v8/src/array.js +38 -18
  242. data/lib/libv8/v8/src/assembler.cc +12 -5
  243. data/lib/libv8/v8/src/assembler.h +15 -9
  244. data/lib/libv8/v8/src/ast-inl.h +34 -25
  245. data/lib/libv8/v8/src/ast.cc +141 -72
  246. data/lib/libv8/v8/src/ast.h +255 -181
  247. data/lib/libv8/v8/src/bignum.cc +3 -4
  248. data/lib/libv8/v8/src/bootstrapper.cc +55 -11
  249. data/lib/libv8/v8/src/bootstrapper.h +3 -2
  250. data/lib/libv8/v8/src/builtins.cc +8 -2
  251. data/lib/libv8/v8/src/builtins.h +4 -0
  252. data/lib/libv8/v8/src/cached-powers.cc +8 -4
  253. data/lib/libv8/v8/src/checks.h +3 -3
  254. data/lib/libv8/v8/src/code-stubs.cc +173 -28
  255. data/lib/libv8/v8/src/code-stubs.h +104 -148
  256. data/lib/libv8/v8/src/codegen.cc +8 -8
  257. data/lib/libv8/v8/src/compilation-cache.cc +2 -47
  258. data/lib/libv8/v8/src/compilation-cache.h +0 -10
  259. data/lib/libv8/v8/src/compiler.cc +27 -16
  260. data/lib/libv8/v8/src/compiler.h +13 -18
  261. data/lib/libv8/v8/src/contexts.cc +107 -72
  262. data/lib/libv8/v8/src/contexts.h +70 -34
  263. data/lib/libv8/v8/src/conversions-inl.h +572 -14
  264. data/lib/libv8/v8/src/conversions.cc +9 -707
  265. data/lib/libv8/v8/src/conversions.h +23 -12
  266. data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
  267. data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
  268. data/lib/libv8/v8/src/cpu-profiler.h +8 -17
  269. data/lib/libv8/v8/src/d8-debug.cc +5 -3
  270. data/lib/libv8/v8/src/d8-debug.h +6 -7
  271. data/lib/libv8/v8/src/d8-posix.cc +1 -10
  272. data/lib/libv8/v8/src/d8.cc +721 -219
  273. data/lib/libv8/v8/src/d8.gyp +37 -12
  274. data/lib/libv8/v8/src/d8.h +141 -19
  275. data/lib/libv8/v8/src/d8.js +17 -8
  276. data/lib/libv8/v8/src/date.js +16 -5
  277. data/lib/libv8/v8/src/dateparser-inl.h +242 -39
  278. data/lib/libv8/v8/src/dateparser.cc +38 -4
  279. data/lib/libv8/v8/src/dateparser.h +170 -28
  280. data/lib/libv8/v8/src/debug-agent.cc +5 -3
  281. data/lib/libv8/v8/src/debug-agent.h +11 -7
  282. data/lib/libv8/v8/src/debug-debugger.js +65 -34
  283. data/lib/libv8/v8/src/debug.cc +30 -60
  284. data/lib/libv8/v8/src/debug.h +5 -3
  285. data/lib/libv8/v8/src/deoptimizer.cc +227 -10
  286. data/lib/libv8/v8/src/deoptimizer.h +133 -9
  287. data/lib/libv8/v8/src/disassembler.cc +22 -14
  288. data/lib/libv8/v8/src/diy-fp.cc +4 -3
  289. data/lib/libv8/v8/src/diy-fp.h +3 -3
  290. data/lib/libv8/v8/src/elements.cc +634 -0
  291. data/lib/libv8/v8/src/elements.h +95 -0
  292. data/lib/libv8/v8/src/execution.cc +5 -21
  293. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
  294. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
  295. data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
  296. data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
  297. data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
  298. data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
  299. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
  300. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
  301. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
  302. data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
  303. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
  304. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
  305. data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
  306. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
  307. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
  308. data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
  309. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
  310. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
  311. data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
  312. data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
  313. data/lib/libv8/v8/src/factory.cc +89 -18
  314. data/lib/libv8/v8/src/factory.h +36 -8
  315. data/lib/libv8/v8/src/flag-definitions.h +11 -44
  316. data/lib/libv8/v8/src/frames-inl.h +8 -1
  317. data/lib/libv8/v8/src/frames.cc +39 -3
  318. data/lib/libv8/v8/src/frames.h +10 -3
  319. data/lib/libv8/v8/src/full-codegen.cc +311 -293
  320. data/lib/libv8/v8/src/full-codegen.h +183 -143
  321. data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
  322. data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
  323. data/lib/libv8/v8/src/gdb-jit.cc +658 -55
  324. data/lib/libv8/v8/src/gdb-jit.h +6 -2
  325. data/lib/libv8/v8/src/global-handles.cc +368 -312
  326. data/lib/libv8/v8/src/global-handles.h +29 -36
  327. data/lib/libv8/v8/src/globals.h +3 -1
  328. data/lib/libv8/v8/src/handles.cc +43 -69
  329. data/lib/libv8/v8/src/handles.h +21 -16
  330. data/lib/libv8/v8/src/heap-inl.h +11 -13
  331. data/lib/libv8/v8/src/heap-profiler.cc +0 -999
  332. data/lib/libv8/v8/src/heap-profiler.h +0 -303
  333. data/lib/libv8/v8/src/heap.cc +366 -141
  334. data/lib/libv8/v8/src/heap.h +87 -26
  335. data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
  336. data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
  337. data/lib/libv8/v8/src/hydrogen.cc +1146 -629
  338. data/lib/libv8/v8/src/hydrogen.h +100 -64
  339. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
  340. data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
  341. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
  342. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
  343. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
  344. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
  345. data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
  346. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
  347. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
  348. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
  349. data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
  350. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
  351. data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
  352. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
  353. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
  354. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
  355. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
  356. data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
  357. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
  358. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
  359. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
  360. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
  361. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
  362. data/lib/libv8/v8/src/ic.cc +198 -234
  363. data/lib/libv8/v8/src/ic.h +32 -30
  364. data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
  365. data/lib/libv8/v8/src/isolate.cc +112 -95
  366. data/lib/libv8/v8/src/isolate.h +55 -71
  367. data/lib/libv8/v8/src/json-parser.h +486 -48
  368. data/lib/libv8/v8/src/json.js +28 -23
  369. data/lib/libv8/v8/src/jsregexp.cc +163 -208
  370. data/lib/libv8/v8/src/jsregexp.h +0 -1
  371. data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
  372. data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
  373. data/lib/libv8/v8/src/lithium-allocator.h +8 -8
  374. data/lib/libv8/v8/src/lithium.cc +16 -11
  375. data/lib/libv8/v8/src/lithium.h +31 -34
  376. data/lib/libv8/v8/src/liveedit.cc +111 -15
  377. data/lib/libv8/v8/src/liveedit.h +3 -4
  378. data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
  379. data/lib/libv8/v8/src/liveobjectlist.h +2 -2
  380. data/lib/libv8/v8/src/log-inl.h +0 -4
  381. data/lib/libv8/v8/src/log-utils.cc +25 -143
  382. data/lib/libv8/v8/src/log-utils.h +13 -92
  383. data/lib/libv8/v8/src/log.cc +26 -249
  384. data/lib/libv8/v8/src/log.h +6 -17
  385. data/lib/libv8/v8/src/macros.py +9 -6
  386. data/lib/libv8/v8/src/mark-compact.cc +276 -56
  387. data/lib/libv8/v8/src/mark-compact.h +20 -0
  388. data/lib/libv8/v8/src/messages.js +93 -39
  389. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
  390. data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
  391. data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
  392. data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
  393. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
  394. data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
  395. data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
  396. data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
  397. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
  398. data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
  399. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
  400. data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
  401. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
  402. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
  403. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
  404. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
  405. data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
  406. data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
  407. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
  408. data/lib/libv8/v8/src/mirror-debugger.js +55 -8
  409. data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
  410. data/lib/libv8/v8/src/mksnapshot.cc +36 -4
  411. data/lib/libv8/v8/src/natives.h +5 -2
  412. data/lib/libv8/v8/src/objects-debug.cc +73 -6
  413. data/lib/libv8/v8/src/objects-inl.h +529 -164
  414. data/lib/libv8/v8/src/objects-printer.cc +67 -12
  415. data/lib/libv8/v8/src/objects-visiting.cc +13 -2
  416. data/lib/libv8/v8/src/objects-visiting.h +41 -1
  417. data/lib/libv8/v8/src/objects.cc +2200 -1177
  418. data/lib/libv8/v8/src/objects.h +912 -283
  419. data/lib/libv8/v8/src/parser.cc +566 -371
  420. data/lib/libv8/v8/src/parser.h +35 -33
  421. data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
  422. data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
  423. data/lib/libv8/v8/src/platform-linux.cc +60 -57
  424. data/lib/libv8/v8/src/platform-macos.cc +4 -27
  425. data/lib/libv8/v8/src/platform-nullos.cc +3 -16
  426. data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
  427. data/lib/libv8/v8/src/platform-posix.cc +43 -1
  428. data/lib/libv8/v8/src/platform-solaris.cc +151 -112
  429. data/lib/libv8/v8/src/platform-tls.h +1 -1
  430. data/lib/libv8/v8/src/platform-win32.cc +65 -39
  431. data/lib/libv8/v8/src/platform.h +17 -14
  432. data/lib/libv8/v8/src/preparse-data-format.h +2 -2
  433. data/lib/libv8/v8/src/preparse-data.h +8 -2
  434. data/lib/libv8/v8/src/preparser-api.cc +2 -18
  435. data/lib/libv8/v8/src/preparser.cc +106 -65
  436. data/lib/libv8/v8/src/preparser.h +26 -5
  437. data/lib/libv8/v8/src/prettyprinter.cc +25 -43
  438. data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
  439. data/lib/libv8/v8/src/profile-generator.cc +213 -34
  440. data/lib/libv8/v8/src/profile-generator.h +9 -9
  441. data/lib/libv8/v8/src/property.h +1 -0
  442. data/lib/libv8/v8/src/proxy.js +74 -4
  443. data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
  444. data/lib/libv8/v8/src/regexp.js +16 -11
  445. data/lib/libv8/v8/src/rewriter.cc +24 -133
  446. data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
  447. data/lib/libv8/v8/src/runtime-profiler.h +5 -31
  448. data/lib/libv8/v8/src/runtime.cc +1450 -681
  449. data/lib/libv8/v8/src/runtime.h +47 -31
  450. data/lib/libv8/v8/src/runtime.js +2 -1
  451. data/lib/libv8/v8/src/scanner-base.cc +358 -220
  452. data/lib/libv8/v8/src/scanner-base.h +30 -138
  453. data/lib/libv8/v8/src/scanner.cc +0 -18
  454. data/lib/libv8/v8/src/scanner.h +0 -15
  455. data/lib/libv8/v8/src/scopeinfo.cc +3 -1
  456. data/lib/libv8/v8/src/scopeinfo.h +1 -6
  457. data/lib/libv8/v8/src/scopes.cc +243 -253
  458. data/lib/libv8/v8/src/scopes.h +58 -109
  459. data/lib/libv8/v8/src/serialize.cc +12 -54
  460. data/lib/libv8/v8/src/serialize.h +47 -0
  461. data/lib/libv8/v8/src/small-pointer-list.h +25 -0
  462. data/lib/libv8/v8/src/spaces-inl.h +4 -50
  463. data/lib/libv8/v8/src/spaces.cc +64 -131
  464. data/lib/libv8/v8/src/spaces.h +19 -70
  465. data/lib/libv8/v8/src/string-stream.cc +3 -1
  466. data/lib/libv8/v8/src/string.js +10 -6
  467. data/lib/libv8/v8/src/strtod.cc +7 -3
  468. data/lib/libv8/v8/src/stub-cache.cc +59 -129
  469. data/lib/libv8/v8/src/stub-cache.h +42 -54
  470. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
  471. data/lib/libv8/v8/src/token.cc +4 -4
  472. data/lib/libv8/v8/src/token.h +6 -5
  473. data/lib/libv8/v8/src/type-info.cc +173 -129
  474. data/lib/libv8/v8/src/type-info.h +40 -22
  475. data/lib/libv8/v8/src/utils.cc +25 -304
  476. data/lib/libv8/v8/src/utils.h +118 -3
  477. data/lib/libv8/v8/src/v8-counters.h +3 -6
  478. data/lib/libv8/v8/src/v8.cc +34 -27
  479. data/lib/libv8/v8/src/v8.h +7 -7
  480. data/lib/libv8/v8/src/v8conversions.cc +129 -0
  481. data/lib/libv8/v8/src/v8conversions.h +60 -0
  482. data/lib/libv8/v8/src/v8globals.h +15 -6
  483. data/lib/libv8/v8/src/v8natives.js +300 -78
  484. data/lib/libv8/v8/src/v8threads.cc +14 -6
  485. data/lib/libv8/v8/src/v8threads.h +4 -1
  486. data/lib/libv8/v8/src/v8utils.cc +360 -0
  487. data/lib/libv8/v8/src/v8utils.h +17 -66
  488. data/lib/libv8/v8/src/variables.cc +7 -12
  489. data/lib/libv8/v8/src/variables.h +12 -10
  490. data/lib/libv8/v8/src/version.cc +2 -2
  491. data/lib/libv8/v8/src/vm-state-inl.h +0 -41
  492. data/lib/libv8/v8/src/vm-state.h +0 -11
  493. data/lib/libv8/v8/src/weakmap.js +103 -0
  494. data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
  495. data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
  496. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
  497. data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
  498. data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
  499. data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
  500. data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
  501. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
  502. data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
  503. data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
  504. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
  505. data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
  506. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
  507. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
  508. data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
  509. data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
  510. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
  511. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
  512. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
  513. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
  514. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
  515. data/lib/libv8/v8/src/zone.cc +31 -22
  516. data/lib/libv8/v8/src/zone.h +12 -6
  517. data/lib/libv8/v8/tools/codemap.js +8 -0
  518. data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
  519. data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
  520. data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
  521. data/lib/libv8/v8/tools/grokdump.py +44 -35
  522. data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
  523. data/lib/libv8/v8/tools/js2c.py +83 -52
  524. data/lib/libv8/v8/tools/linux-tick-processor +4 -6
  525. data/lib/libv8/v8/tools/ll_prof.py +3 -3
  526. data/lib/libv8/v8/tools/oom_dump/README +3 -1
  527. data/lib/libv8/v8/tools/presubmit.py +11 -4
  528. data/lib/libv8/v8/tools/profile.js +46 -2
  529. data/lib/libv8/v8/tools/splaytree.js +11 -0
  530. data/lib/libv8/v8/tools/stats-viewer.py +15 -11
  531. data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
  532. data/lib/libv8/v8/tools/test.py +28 -8
  533. data/lib/libv8/v8/tools/tickprocessor.js +0 -16
  534. data/lib/libv8/version.rb +1 -1
  535. data/libv8.gemspec +2 -2
  536. metadata +31 -19
  537. data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
  538. data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -78,7 +78,6 @@ class SlidingStateWindow;
78
78
  class Ticker;
79
79
 
80
80
  #undef LOG
81
- #ifdef ENABLE_LOGGING_AND_PROFILING
82
81
  #define LOG(isolate, Call) \
83
82
  do { \
84
83
  v8::internal::Logger* logger = \
@@ -86,9 +85,6 @@ class Ticker;
86
85
  if (logger->is_logging()) \
87
86
  logger->Call; \
88
87
  } while (false)
89
- #else
90
- #define LOG(isolate, Call) ((void) 0)
91
- #endif
92
88
 
93
89
  #define LOG_EVENTS_AND_TAGS_LIST(V) \
94
90
  V(CODE_CREATION_EVENT, "code-creation") \
@@ -161,7 +157,9 @@ class Logger {
161
157
  Sampler* sampler();
162
158
 
163
159
  // Frees resources acquired in Setup.
164
- void TearDown();
160
+ // When a temporary file is used for the log, returns its stream descriptor,
161
+ // leaving the file open.
162
+ FILE* TearDown();
165
163
 
166
164
  // Enable the computation of a sliding window of states.
167
165
  void EnableSlidingStateWindow();
@@ -272,7 +270,6 @@ class Logger {
272
270
  // Log an event reported from generated code
273
271
  void LogRuntime(Vector<const char> format, JSArray* args);
274
272
 
275
- #ifdef ENABLE_LOGGING_AND_PROFILING
276
273
  bool is_logging() {
277
274
  return logging_nesting_ > 0;
278
275
  }
@@ -280,13 +277,9 @@ class Logger {
280
277
  // Pause/Resume collection of profiling data.
281
278
  // When data collection is paused, CPU Tick events are discarded until
282
279
  // data collection is Resumed.
283
- void PauseProfiler(int flags, int tag);
284
- void ResumeProfiler(int flags, int tag);
285
- int GetActiveProfilerModules();
286
-
287
- // If logging is performed into a memory buffer, allows to
288
- // retrieve previously written messages. See v8.h.
289
- int GetLogLines(int from_pos, char* dest_buf, int max_size);
280
+ void PauseProfiler();
281
+ void ResumeProfiler();
282
+ bool IsProfilerPaused();
290
283
 
291
284
  // Logs all compiled functions found in the heap.
292
285
  void LogCompiledFunctions();
@@ -401,7 +394,6 @@ class Logger {
401
394
 
402
395
  int logging_nesting_;
403
396
  int cpu_profiler_nesting_;
404
- int heap_profiler_nesting_;
405
397
 
406
398
  Log* log_;
407
399
 
@@ -425,9 +417,6 @@ class Logger {
425
417
  Address prev_code_;
426
418
 
427
419
  friend class CpuProfiler;
428
- #else
429
- bool is_logging() { return false; }
430
- #endif
431
420
  };
432
421
 
433
422
 
@@ -38,12 +38,13 @@ const GETTER = 0;
38
38
  const SETTER = 1;
39
39
 
40
40
  # These definitions must match the index of the properties in objects.h.
41
- const kApiTagOffset = 0;
42
- const kApiPropertyListOffset = 1;
43
- const kApiSerialNumberOffset = 2;
44
- const kApiConstructorOffset = 2;
45
- const kApiPrototypeTemplateOffset = 5;
46
- const kApiParentTemplateOffset = 6;
41
+ const kApiTagOffset = 0;
42
+ const kApiPropertyListOffset = 1;
43
+ const kApiSerialNumberOffset = 2;
44
+ const kApiConstructorOffset = 2;
45
+ const kApiPrototypeTemplateOffset = 5;
46
+ const kApiParentTemplateOffset = 6;
47
+ const kApiFlagOffset = 14;
47
48
 
48
49
  const NO_HINT = 0;
49
50
  const NUMBER_HINT = 1;
@@ -64,6 +65,7 @@ const msPerMonth = 2592000000;
64
65
 
65
66
  # For apinatives.js
66
67
  const kUninitialized = -1;
68
+ const kReadOnlyPrototypeBit = 3; # For FunctionTemplateInfo, matches objects.h
67
69
 
68
70
  # Note: kDayZeroInJulianDay = ToJulianDay(1970, 0, 1).
69
71
  const kInvalidDate = 'Invalid Date';
@@ -128,6 +130,7 @@ macro TO_UINT32(arg) = (arg >>> 0);
128
130
  macro TO_STRING_INLINE(arg) = (IS_STRING(%IS_VAR(arg)) ? arg : NonStringToString(arg));
129
131
  macro TO_NUMBER_INLINE(arg) = (IS_NUMBER(%IS_VAR(arg)) ? arg : NonNumberToNumber(arg));
130
132
  macro TO_OBJECT_INLINE(arg) = (IS_SPEC_OBJECT(%IS_VAR(arg)) ? arg : ToObject(arg));
133
+ macro JSON_NUMBER_TO_STRING(arg) = ((%_IsSmi(%IS_VAR(arg)) || arg - arg == 0) ? %_NumberToString(arg) : "null");
131
134
 
132
135
  # Macros implemented in Python.
133
136
  python macro CHAR_CODE(str) = ord(str[1]);
@@ -64,13 +64,15 @@ MarkCompactCollector::MarkCompactCollector() : // NOLINT
64
64
  live_bytes_(0),
65
65
  #endif
66
66
  heap_(NULL),
67
- code_flusher_(NULL) { }
67
+ code_flusher_(NULL),
68
+ encountered_weak_maps_(NULL) { }
68
69
 
69
70
 
70
71
  void MarkCompactCollector::CollectGarbage() {
71
72
  // Make sure that Prepare() has been called. The individual steps below will
72
73
  // update the state as they proceed.
73
74
  ASSERT(state_ == PREPARE_GC);
75
+ ASSERT(encountered_weak_maps_ == Smi::FromInt(0));
74
76
 
75
77
  // Prepare has selected whether to compact the old generation or not.
76
78
  // Tell the tracer.
@@ -80,6 +82,8 @@ void MarkCompactCollector::CollectGarbage() {
80
82
 
81
83
  if (FLAG_collect_maps) ClearNonLiveTransitions();
82
84
 
85
+ ClearWeakMaps();
86
+
83
87
  SweepLargeObjectSpace();
84
88
 
85
89
  if (IsCompacting()) {
@@ -390,12 +394,18 @@ class StaticMarkingVisitor : public StaticVisitorBase {
390
394
  ConsString::BodyDescriptor,
391
395
  void>::Visit);
392
396
 
397
+ table_.Register(kVisitSlicedString,
398
+ &FixedBodyVisitor<StaticMarkingVisitor,
399
+ SlicedString::BodyDescriptor,
400
+ void>::Visit);
393
401
 
394
402
  table_.Register(kVisitFixedArray,
395
403
  &FlexibleBodyVisitor<StaticMarkingVisitor,
396
404
  FixedArray::BodyDescriptor,
397
405
  void>::Visit);
398
406
 
407
+ table_.Register(kVisitFixedDoubleArray, DataObjectVisitor::Visit);
408
+
399
409
  table_.Register(kVisitGlobalContext,
400
410
  &FixedBodyVisitor<StaticMarkingVisitor,
401
411
  Context::MarkCompactBodyDescriptor,
@@ -405,6 +415,8 @@ class StaticMarkingVisitor : public StaticVisitorBase {
405
415
  table_.Register(kVisitSeqAsciiString, &DataObjectVisitor::Visit);
406
416
  table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit);
407
417
 
418
+ table_.Register(kVisitJSWeakMap, &VisitJSWeakMap);
419
+
408
420
  table_.Register(kVisitOddball,
409
421
  &FixedBodyVisitor<StaticMarkingVisitor,
410
422
  Oddball::BodyDescriptor,
@@ -422,6 +434,9 @@ class StaticMarkingVisitor : public StaticVisitorBase {
422
434
  table_.Register(kVisitJSFunction,
423
435
  &VisitJSFunctionAndFlushCode);
424
436
 
437
+ table_.Register(kVisitJSRegExp,
438
+ &VisitRegExpAndFlushCode);
439
+
425
440
  table_.Register(kVisitPropertyCell,
426
441
  &FixedBodyVisitor<StaticMarkingVisitor,
427
442
  JSGlobalPropertyCell::BodyDescriptor,
@@ -551,6 +566,34 @@ class StaticMarkingVisitor : public StaticVisitorBase {
551
566
  StructBodyDescriptor,
552
567
  void> StructObjectVisitor;
553
568
 
569
+ static void VisitJSWeakMap(Map* map, HeapObject* object) {
570
+ MarkCompactCollector* collector = map->heap()->mark_compact_collector();
571
+ JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(object);
572
+
573
+ // Enqueue weak map in linked list of encountered weak maps.
574
+ ASSERT(weak_map->next() == Smi::FromInt(0));
575
+ weak_map->set_next(collector->encountered_weak_maps());
576
+ collector->set_encountered_weak_maps(weak_map);
577
+
578
+ // Skip visiting the backing hash table containing the mappings.
579
+ int object_size = JSWeakMap::BodyDescriptor::SizeOf(map, object);
580
+ BodyVisitorBase<StaticMarkingVisitor>::IteratePointers(
581
+ map->heap(),
582
+ object,
583
+ JSWeakMap::BodyDescriptor::kStartOffset,
584
+ JSWeakMap::kTableOffset);
585
+ BodyVisitorBase<StaticMarkingVisitor>::IteratePointers(
586
+ map->heap(),
587
+ object,
588
+ JSWeakMap::kTableOffset + kPointerSize,
589
+ object_size);
590
+
591
+ // Mark the backing hash table without pushing it on the marking stack.
592
+ ASSERT(!weak_map->unchecked_table()->IsMarked());
593
+ ASSERT(weak_map->unchecked_table()->map()->IsMarked());
594
+ collector->SetMark(weak_map->unchecked_table());
595
+ }
596
+
554
597
  static void VisitCode(Map* map, HeapObject* object) {
555
598
  reinterpret_cast<Code*>(object)->CodeIterateBody<StaticMarkingVisitor>(
556
599
  map->heap());
@@ -562,6 +605,8 @@ class StaticMarkingVisitor : public StaticVisitorBase {
562
605
  // flushed.
563
606
  static const int kCodeAgeThreshold = 5;
564
607
 
608
+ static const int kRegExpCodeThreshold = 5;
609
+
565
610
  inline static bool HasSourceCode(Heap* heap, SharedFunctionInfo* info) {
566
611
  Object* undefined = heap->raw_unchecked_undefined_value();
567
612
  return (info->script() != undefined) &&
@@ -670,8 +715,9 @@ class StaticMarkingVisitor : public StaticVisitorBase {
670
715
 
671
716
  Map* map = SafeMap(ctx);
672
717
  Heap* heap = map->heap();
673
- if (!(map == heap->raw_unchecked_context_map() ||
718
+ if (!(map == heap->raw_unchecked_function_context_map() ||
674
719
  map == heap->raw_unchecked_catch_context_map() ||
720
+ map == heap->raw_unchecked_with_context_map() ||
675
721
  map == heap->raw_unchecked_global_context_map())) {
676
722
  return false;
677
723
  }
@@ -697,6 +743,68 @@ class StaticMarkingVisitor : public StaticVisitorBase {
697
743
  }
698
744
 
699
745
 
746
+ static void UpdateRegExpCodeAgeAndFlush(Heap* heap,
747
+ JSRegExp* re,
748
+ bool is_ascii) {
749
+ // Make sure that the fixed array is in fact initialized on the RegExp.
750
+ // We could potentially trigger a GC when initializing the RegExp.
751
+ if (SafeMap(re->data())->instance_type() != FIXED_ARRAY_TYPE) return;
752
+
753
+ // Make sure this is a RegExp that actually contains code.
754
+ if (re->TypeTagUnchecked() != JSRegExp::IRREGEXP) return;
755
+
756
+ Object* code = re->DataAtUnchecked(JSRegExp::code_index(is_ascii));
757
+ if (!code->IsSmi() && SafeMap(code)->instance_type() == CODE_TYPE) {
758
+ // Save a copy that can be reinstated if we need the code again.
759
+ re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
760
+ code,
761
+ heap);
762
+ // Set a number in the 0-255 range to guarantee no smi overflow.
763
+ re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
764
+ Smi::FromInt(heap->sweep_generation() & 0xff),
765
+ heap);
766
+ } else if (code->IsSmi()) {
767
+ int value = Smi::cast(code)->value();
768
+ // The regexp has not been compiled yet or there was a compilation error.
769
+ if (value == JSRegExp::kUninitializedValue ||
770
+ value == JSRegExp::kCompilationErrorValue) {
771
+ return;
772
+ }
773
+
774
+ // Check if we should flush now.
775
+ if (value == ((heap->sweep_generation() - kRegExpCodeThreshold) & 0xff)) {
776
+ re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
777
+ Smi::FromInt(JSRegExp::kUninitializedValue),
778
+ heap);
779
+ re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
780
+ Smi::FromInt(JSRegExp::kUninitializedValue),
781
+ heap);
782
+ }
783
+ }
784
+ }
785
+
786
+
787
+ // Works by setting the current sweep_generation (as a smi) in the
788
+ // code object place in the data array of the RegExp and keeps a copy
789
+ // around that can be reinstated if we reuse the RegExp before flushing.
790
+ // If we did not use the code for kRegExpCodeThreshold mark sweep GCs
791
+ // we flush the code.
792
+ static void VisitRegExpAndFlushCode(Map* map, HeapObject* object) {
793
+ Heap* heap = map->heap();
794
+ MarkCompactCollector* collector = heap->mark_compact_collector();
795
+ if (!collector->is_code_flushing_enabled()) {
796
+ VisitJSRegExpFields(map, object);
797
+ return;
798
+ }
799
+ JSRegExp* re = reinterpret_cast<JSRegExp*>(object);
800
+ // Flush code or set age on both ascii and two byte code.
801
+ UpdateRegExpCodeAgeAndFlush(heap, re, true);
802
+ UpdateRegExpCodeAgeAndFlush(heap, re, false);
803
+ // Visit the fields of the RegExp, including the updated FixedArray.
804
+ VisitJSRegExpFields(map, object);
805
+ }
806
+
807
+
700
808
  static void VisitSharedFunctionInfoAndFlushCode(Map* map,
701
809
  HeapObject* object) {
702
810
  MarkCompactCollector* collector = map->heap()->mark_compact_collector();
@@ -827,6 +935,15 @@ class StaticMarkingVisitor : public StaticVisitorBase {
827
935
  // Don't visit the next function list field as it is a weak reference.
828
936
  }
829
937
 
938
+ static inline void VisitJSRegExpFields(Map* map,
939
+ HeapObject* object) {
940
+ int last_property_offset =
941
+ JSRegExp::kSize + kPointerSize * map->inobject_properties();
942
+ VisitPointers(map->heap(),
943
+ SLOT_ADDR(object, JSRegExp::kPropertiesOffset),
944
+ SLOT_ADDR(object, last_property_offset));
945
+ }
946
+
830
947
 
831
948
  static void VisitSharedFunctionInfoFields(Heap* heap,
832
949
  HeapObject* object,
@@ -866,18 +983,6 @@ class MarkingVisitor : public ObjectVisitor {
866
983
  StaticMarkingVisitor::VisitPointers(heap_, start, end);
867
984
  }
868
985
 
869
- void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) {
870
- StaticMarkingVisitor::VisitCodeTarget(heap, rinfo);
871
- }
872
-
873
- void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo) {
874
- StaticMarkingVisitor::VisitGlobalPropertyCell(heap, rinfo);
875
- }
876
-
877
- void VisitDebugTarget(Heap* heap, RelocInfo* rinfo) {
878
- StaticMarkingVisitor::VisitDebugTarget(heap, rinfo);
879
- }
880
-
881
986
  private:
882
987
  Heap* heap_;
883
988
  };
@@ -1030,6 +1135,7 @@ class SymbolTableCleaner : public ObjectVisitor {
1030
1135
  int PointersRemoved() {
1031
1136
  return pointers_removed_;
1032
1137
  }
1138
+
1033
1139
  private:
1034
1140
  Heap* heap_;
1035
1141
  int pointers_removed_;
@@ -1060,9 +1166,12 @@ void MarkCompactCollector::MarkUnmarkedObject(HeapObject* object) {
1060
1166
  map->ClearCodeCache(heap());
1061
1167
  }
1062
1168
  SetMark(map);
1063
- if (FLAG_collect_maps &&
1064
- map->instance_type() >= FIRST_JS_OBJECT_TYPE &&
1065
- map->instance_type() <= JS_FUNCTION_TYPE) {
1169
+
1170
+ // When map collection is enabled we have to mark through map's transitions
1171
+ // in a special way to make transition links weak.
1172
+ // Only maps for subclasses of JSReceiver can have transitions.
1173
+ STATIC_ASSERT(LAST_TYPE == LAST_JS_RECEIVER_TYPE);
1174
+ if (FLAG_collect_maps && map->instance_type() >= FIRST_JS_RECEIVER_TYPE) {
1066
1175
  MarkMapContents(map);
1067
1176
  } else {
1068
1177
  marking_stack_.Push(map);
@@ -1144,8 +1253,8 @@ void MarkCompactCollector::CreateBackPointers() {
1144
1253
  next_object != NULL; next_object = iterator.next()) {
1145
1254
  if (next_object->IsMap()) { // Could also be ByteArray on free list.
1146
1255
  Map* map = Map::cast(next_object);
1147
- if (map->instance_type() >= FIRST_JS_OBJECT_TYPE &&
1148
- map->instance_type() <= JS_FUNCTION_TYPE) {
1256
+ STATIC_ASSERT(LAST_TYPE == LAST_CALLABLE_SPEC_OBJECT_TYPE);
1257
+ if (map->instance_type() >= FIRST_JS_RECEIVER_TYPE) {
1149
1258
  map->CreateBackPointers();
1150
1259
  } else {
1151
1260
  ASSERT(map->instance_descriptors() == heap()->empty_descriptor_array());
@@ -1298,20 +1407,26 @@ void MarkCompactCollector::MarkImplicitRefGroups() {
1298
1407
  // marking stack have been marked, or are overflowed in the heap.
1299
1408
  void MarkCompactCollector::EmptyMarkingStack() {
1300
1409
  while (!marking_stack_.is_empty()) {
1301
- HeapObject* object = marking_stack_.Pop();
1302
- ASSERT(object->IsHeapObject());
1303
- ASSERT(heap()->Contains(object));
1304
- ASSERT(object->IsMarked());
1305
- ASSERT(!object->IsOverflowed());
1306
-
1307
- // Because the object is marked, we have to recover the original map
1308
- // pointer and use it to mark the object's body.
1309
- MapWord map_word = object->map_word();
1310
- map_word.ClearMark();
1311
- Map* map = map_word.ToMap();
1312
- MarkObject(map);
1410
+ while (!marking_stack_.is_empty()) {
1411
+ HeapObject* object = marking_stack_.Pop();
1412
+ ASSERT(object->IsHeapObject());
1413
+ ASSERT(heap()->Contains(object));
1414
+ ASSERT(object->IsMarked());
1415
+ ASSERT(!object->IsOverflowed());
1313
1416
 
1314
- StaticMarkingVisitor::IterateBody(map, object);
1417
+ // Because the object is marked, we have to recover the original map
1418
+ // pointer and use it to mark the object's body.
1419
+ MapWord map_word = object->map_word();
1420
+ map_word.ClearMark();
1421
+ Map* map = map_word.ToMap();
1422
+ MarkObject(map);
1423
+
1424
+ StaticMarkingVisitor::IterateBody(map, object);
1425
+ }
1426
+
1427
+ // Process encountered weak maps, mark objects only reachable by those
1428
+ // weak maps and repeat until fix-point is reached.
1429
+ ProcessWeakMaps();
1315
1430
  }
1316
1431
  }
1317
1432
 
@@ -1429,6 +1544,12 @@ void MarkCompactCollector::MarkLiveObjects() {
1429
1544
  // reachable from the weak roots.
1430
1545
  ProcessExternalMarking();
1431
1546
 
1547
+ // Object literal map caches reference symbols (cache keys) and maps
1548
+ // (cache values). At this point still useful maps have already been
1549
+ // marked. Mark the keys for the alive values before we process the
1550
+ // symbol table.
1551
+ ProcessMapCaches();
1552
+
1432
1553
  // Prune the symbol table removing all symbols only pointed to by the
1433
1554
  // symbol table. Cannot use symbol_table() here because the symbol
1434
1555
  // table is marked.
@@ -1457,6 +1578,57 @@ void MarkCompactCollector::MarkLiveObjects() {
1457
1578
  }
1458
1579
 
1459
1580
 
1581
+ void MarkCompactCollector::ProcessMapCaches() {
1582
+ Object* raw_context = heap()->global_contexts_list_;
1583
+ while (raw_context != heap()->undefined_value()) {
1584
+ Context* context = reinterpret_cast<Context*>(raw_context);
1585
+ if (context->IsMarked()) {
1586
+ HeapObject* raw_map_cache =
1587
+ HeapObject::cast(context->get(Context::MAP_CACHE_INDEX));
1588
+ // A map cache may be reachable from the stack. In this case
1589
+ // it's already transitively marked and it's too late to clean
1590
+ // up its parts.
1591
+ if (!raw_map_cache->IsMarked() &&
1592
+ raw_map_cache != heap()->undefined_value()) {
1593
+ MapCache* map_cache = reinterpret_cast<MapCache*>(raw_map_cache);
1594
+ int existing_elements = map_cache->NumberOfElements();
1595
+ int used_elements = 0;
1596
+ for (int i = MapCache::kElementsStartIndex;
1597
+ i < map_cache->length();
1598
+ i += MapCache::kEntrySize) {
1599
+ Object* raw_key = map_cache->get(i);
1600
+ if (raw_key == heap()->undefined_value() ||
1601
+ raw_key == heap()->null_value()) continue;
1602
+ STATIC_ASSERT(MapCache::kEntrySize == 2);
1603
+ Object* raw_map = map_cache->get(i + 1);
1604
+ if (raw_map->IsHeapObject() &&
1605
+ HeapObject::cast(raw_map)->IsMarked()) {
1606
+ ++used_elements;
1607
+ } else {
1608
+ // Delete useless entries with unmarked maps.
1609
+ ASSERT(raw_map->IsMap());
1610
+ map_cache->set_null_unchecked(heap(), i);
1611
+ map_cache->set_null_unchecked(heap(), i + 1);
1612
+ }
1613
+ }
1614
+ if (used_elements == 0) {
1615
+ context->set(Context::MAP_CACHE_INDEX, heap()->undefined_value());
1616
+ } else {
1617
+ // Note: we don't actually shrink the cache here to avoid
1618
+ // extra complexity during GC. We rely on subsequent cache
1619
+ // usages (EnsureCapacity) to do this.
1620
+ map_cache->ElementsRemoved(existing_elements - used_elements);
1621
+ MarkObject(map_cache);
1622
+ }
1623
+ }
1624
+ }
1625
+ // Move to next element in the list.
1626
+ raw_context = context->get(Context::NEXT_CONTEXT_LINK);
1627
+ }
1628
+ ProcessMarkingStack();
1629
+ }
1630
+
1631
+
1460
1632
  #ifdef DEBUG
1461
1633
  void MarkCompactCollector::UpdateLiveObjectCount(HeapObject* obj) {
1462
1634
  live_bytes_ += obj->Size();
@@ -1521,8 +1693,8 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
1521
1693
 
1522
1694
  ASSERT(SafeIsMap(map));
1523
1695
  // Only JSObject and subtypes have map transitions and back pointers.
1524
- if (map->instance_type() < FIRST_JS_OBJECT_TYPE) continue;
1525
- if (map->instance_type() > JS_FUNCTION_TYPE) continue;
1696
+ STATIC_ASSERT(LAST_TYPE == LAST_CALLABLE_SPEC_OBJECT_TYPE);
1697
+ if (map->instance_type() < FIRST_JS_RECEIVER_TYPE) continue;
1526
1698
 
1527
1699
  if (map->IsMarked() && map->attached_to_shared_function_info()) {
1528
1700
  // This map is used for inobject slack tracking and has been detached
@@ -1532,38 +1704,48 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
1532
1704
  }
1533
1705
 
1534
1706
  // Clear dead prototype transitions.
1535
- FixedArray* prototype_transitions = map->unchecked_prototype_transitions();
1536
- if (prototype_transitions->length() > 0) {
1537
- int finger = Smi::cast(prototype_transitions->get(0))->value();
1538
- int new_finger = 1;
1539
- for (int i = 1; i < finger; i += 2) {
1540
- Object* prototype = prototype_transitions->get(i);
1541
- Object* cached_map = prototype_transitions->get(i + 1);
1707
+ int number_of_transitions = map->NumberOfProtoTransitions();
1708
+ if (number_of_transitions > 0) {
1709
+ FixedArray* prototype_transitions =
1710
+ map->unchecked_prototype_transitions();
1711
+ int new_number_of_transitions = 0;
1712
+ const int header = Map::kProtoTransitionHeaderSize;
1713
+ const int proto_offset =
1714
+ header + Map::kProtoTransitionPrototypeOffset;
1715
+ const int map_offset = header + Map::kProtoTransitionMapOffset;
1716
+ const int step = Map::kProtoTransitionElementsPerEntry;
1717
+ for (int i = 0; i < number_of_transitions; i++) {
1718
+ Object* prototype = prototype_transitions->get(proto_offset + i * step);
1719
+ Object* cached_map = prototype_transitions->get(map_offset + i * step);
1542
1720
  if (HeapObject::cast(prototype)->IsMarked() &&
1543
1721
  HeapObject::cast(cached_map)->IsMarked()) {
1544
- if (new_finger != i) {
1545
- prototype_transitions->set_unchecked(heap_,
1546
- new_finger,
1547
- prototype,
1548
- UPDATE_WRITE_BARRIER);
1549
- prototype_transitions->set_unchecked(heap_,
1550
- new_finger + 1,
1551
- cached_map,
1552
- SKIP_WRITE_BARRIER);
1722
+ if (new_number_of_transitions != i) {
1723
+ prototype_transitions->set_unchecked(
1724
+ heap_,
1725
+ proto_offset + new_number_of_transitions * step,
1726
+ prototype,
1727
+ UPDATE_WRITE_BARRIER);
1728
+ prototype_transitions->set_unchecked(
1729
+ heap_,
1730
+ map_offset + new_number_of_transitions * step,
1731
+ cached_map,
1732
+ SKIP_WRITE_BARRIER);
1553
1733
  }
1554
- new_finger += 2;
1734
+ new_number_of_transitions++;
1555
1735
  }
1556
1736
  }
1557
1737
 
1558
1738
  // Fill slots that became free with undefined value.
1559
1739
  Object* undefined = heap()->raw_unchecked_undefined_value();
1560
- for (int i = new_finger; i < finger; i++) {
1740
+ for (int i = new_number_of_transitions * step;
1741
+ i < number_of_transitions * step;
1742
+ i++) {
1561
1743
  prototype_transitions->set_unchecked(heap_,
1562
- i,
1744
+ header + i,
1563
1745
  undefined,
1564
1746
  SKIP_WRITE_BARRIER);
1565
1747
  }
1566
- prototype_transitions->set_unchecked(0, Smi::FromInt(new_finger));
1748
+ map->SetNumberOfProtoTransitions(new_number_of_transitions);
1567
1749
  }
1568
1750
 
1569
1751
  // Follow the chain of back pointers to find the prototype.
@@ -1597,6 +1779,45 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
1597
1779
  }
1598
1780
  }
1599
1781
 
1782
+
1783
+ void MarkCompactCollector::ProcessWeakMaps() {
1784
+ Object* weak_map_obj = encountered_weak_maps();
1785
+ while (weak_map_obj != Smi::FromInt(0)) {
1786
+ ASSERT(HeapObject::cast(weak_map_obj)->IsMarked());
1787
+ JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(weak_map_obj);
1788
+ ObjectHashTable* table = weak_map->unchecked_table();
1789
+ for (int i = 0; i < table->Capacity(); i++) {
1790
+ if (HeapObject::cast(table->KeyAt(i))->IsMarked()) {
1791
+ Object* value = table->get(table->EntryToValueIndex(i));
1792
+ StaticMarkingVisitor::MarkObjectByPointer(heap(), &value);
1793
+ table->set_unchecked(heap(),
1794
+ table->EntryToValueIndex(i),
1795
+ value,
1796
+ UPDATE_WRITE_BARRIER);
1797
+ }
1798
+ }
1799
+ weak_map_obj = weak_map->next();
1800
+ }
1801
+ }
1802
+
1803
+
1804
+ void MarkCompactCollector::ClearWeakMaps() {
1805
+ Object* weak_map_obj = encountered_weak_maps();
1806
+ while (weak_map_obj != Smi::FromInt(0)) {
1807
+ ASSERT(HeapObject::cast(weak_map_obj)->IsMarked());
1808
+ JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(weak_map_obj);
1809
+ ObjectHashTable* table = weak_map->unchecked_table();
1810
+ for (int i = 0; i < table->Capacity(); i++) {
1811
+ if (!HeapObject::cast(table->KeyAt(i))->IsMarked()) {
1812
+ table->RemoveEntry(i, heap());
1813
+ }
1814
+ }
1815
+ weak_map_obj = weak_map->next();
1816
+ weak_map->set_next(Smi::FromInt(0));
1817
+ }
1818
+ set_encountered_weak_maps(Smi::FromInt(0));
1819
+ }
1820
+
1600
1821
  // -------------------------------------------------------------------------
1601
1822
  // Phase 2: Encode forwarding addresses.
1602
1823
  // When compacting, forwarding addresses for objects in old space and map
@@ -1925,6 +2146,7 @@ class PointersToNewGenUpdatingVisitor: public ObjectVisitor {
1925
2146
  VisitPointer(&target);
1926
2147
  rinfo->set_call_address(Code::cast(target)->instruction_start());
1927
2148
  }
2149
+
1928
2150
  private:
1929
2151
  Heap* heap_;
1930
2152
  };
@@ -3119,11 +3341,9 @@ void MarkCompactCollector::ReportDeleteIfNeeded(HeapObject* obj,
3119
3341
  GDBJITInterface::RemoveCode(reinterpret_cast<Code*>(obj));
3120
3342
  }
3121
3343
  #endif
3122
- #ifdef ENABLE_LOGGING_AND_PROFILING
3123
3344
  if (obj->IsCode()) {
3124
3345
  PROFILE(isolate, CodeDeleteEvent(obj->address()));
3125
3346
  }
3126
- #endif
3127
3347
  }
3128
3348
 
3129
3349