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
@@ -169,20 +169,6 @@ void OS::Free(void* address, const size_t size) {
169
169
  }
170
170
 
171
171
 
172
- #ifdef ENABLE_HEAP_PROTECTION
173
-
174
- void OS::Protect(void* address, size_t size) {
175
- UNIMPLEMENTED();
176
- }
177
-
178
-
179
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
180
- UNIMPLEMENTED();
181
- }
182
-
183
- #endif
184
-
185
-
186
172
  void OS::Sleep(int milliseconds) {
187
173
  usleep(1000 * milliseconds);
188
174
  }
@@ -248,7 +234,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
248
234
 
249
235
 
250
236
  void OS::LogSharedLibraryAddresses() {
251
- #ifdef ENABLE_LOGGING_AND_PROFILING
252
237
  unsigned int images_count = _dyld_image_count();
253
238
  for (unsigned int i = 0; i < images_count; ++i) {
254
239
  const mach_header* header = _dyld_get_image_header(i);
@@ -270,7 +255,6 @@ void OS::LogSharedLibraryAddresses() {
270
255
  LOG(Isolate::Current(),
271
256
  SharedLibraryEvent(_dyld_get_image_name(i), start, start + size));
272
257
  }
273
- #endif // ENABLE_LOGGING_AND_PROFILING
274
258
  }
275
259
 
276
260
 
@@ -398,17 +382,15 @@ class Thread::PlatformData : public Malloced {
398
382
  pthread_t thread_; // Thread handle for pthread.
399
383
  };
400
384
 
401
- Thread::Thread(Isolate* isolate, const Options& options)
385
+ Thread::Thread(const Options& options)
402
386
  : data_(new PlatformData),
403
- isolate_(isolate),
404
387
  stack_size_(options.stack_size) {
405
388
  set_name(options.name);
406
389
  }
407
390
 
408
391
 
409
- Thread::Thread(Isolate* isolate, const char* name)
392
+ Thread::Thread(const char* name)
410
393
  : data_(new PlatformData),
411
- isolate_(isolate),
412
394
  stack_size_(0) {
413
395
  set_name(name);
414
396
  }
@@ -444,7 +426,6 @@ static void* ThreadEntry(void* arg) {
444
426
  thread->data()->thread_ = pthread_self();
445
427
  SetThreadName(thread->name());
446
428
  ASSERT(thread->data()->thread_ != kNoThread);
447
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
448
429
  thread->Run();
449
430
  return NULL;
450
431
  }
@@ -647,8 +628,6 @@ Semaphore* OS::CreateSemaphore(int count) {
647
628
  }
648
629
 
649
630
 
650
- #ifdef ENABLE_LOGGING_AND_PROFILING
651
-
652
631
  class Sampler::PlatformData : public Malloced {
653
632
  public:
654
633
  PlatformData() : profiled_thread_(mach_thread_self()) {}
@@ -670,7 +649,7 @@ class Sampler::PlatformData : public Malloced {
670
649
  class SamplerThread : public Thread {
671
650
  public:
672
651
  explicit SamplerThread(int interval)
673
- : Thread(NULL, "SamplerThread"),
652
+ : Thread("SamplerThread"),
674
653
  interval_(interval) {}
675
654
 
676
655
  static void AddActiveSampler(Sampler* sampler) {
@@ -688,8 +667,7 @@ class SamplerThread : public Thread {
688
667
  ScopedLock lock(mutex_);
689
668
  SamplerRegistry::RemoveActiveSampler(sampler);
690
669
  if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
691
- RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
692
- instance_->Join();
670
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
693
671
  delete instance_;
694
672
  instance_ = NULL;
695
673
  }
@@ -825,6 +803,5 @@ void Sampler::Stop() {
825
803
  SetActive(false);
826
804
  }
827
805
 
828
- #endif // ENABLE_LOGGING_AND_PROFILING
829
806
 
830
807
  } } // namespace v8::internal
@@ -217,19 +217,10 @@ void OS::Free(void* buf, const size_t length) {
217
217
  }
218
218
 
219
219
 
220
- #ifdef ENABLE_HEAP_PROTECTION
221
-
222
- void OS::Protect(void* address, size_t size) {
223
- UNIMPLEMENTED();
224
- }
225
-
226
-
227
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
220
+ void OS::Guard(void* address, const size_t size) {
228
221
  UNIMPLEMENTED();
229
222
  }
230
223
 
231
- #endif
232
-
233
224
 
234
225
  void OS::Sleep(int milliseconds) {
235
226
  UNIMPLEMENTED();
@@ -314,18 +305,16 @@ class Thread::PlatformData : public Malloced {
314
305
  };
315
306
 
316
307
 
317
- Thread::Thread(Isolate* isolate, const Options& options)
308
+ Thread::Thread(const Options& options)
318
309
  : data_(new PlatformData()),
319
- isolate_(isolate),
320
310
  stack_size_(options.stack_size) {
321
311
  set_name(options.name);
322
312
  UNIMPLEMENTED();
323
313
  }
324
314
 
325
315
 
326
- Thread::Thread(Isolate* isolate, const char* name)
316
+ Thread::Thread(const char* name)
327
317
  : data_(new PlatformData()),
328
- isolate_(isolate),
329
318
  stack_size_(0) {
330
319
  set_name(name);
331
320
  UNIMPLEMENTED();
@@ -439,7 +428,6 @@ Semaphore* OS::CreateSemaphore(int count) {
439
428
  return new NullSemaphore(count);
440
429
  }
441
430
 
442
- #ifdef ENABLE_LOGGING_AND_PROFILING
443
431
 
444
432
  class ProfileSampler::PlatformData : public Malloced {
445
433
  public:
@@ -474,6 +462,5 @@ void ProfileSampler::Stop() {
474
462
  UNIMPLEMENTED();
475
463
  }
476
464
 
477
- #endif // ENABLE_LOGGING_AND_PROFILING
478
465
 
479
466
  } } // namespace v8::internal
@@ -1,4 +1,4 @@
1
- // Copyright 2006-2009 the V8 project authors. All rights reserved.
1
+ // Copyright 2006-2011 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -50,6 +50,7 @@
50
50
  #undef MAP_TYPE
51
51
 
52
52
  #include "v8.h"
53
+ #include "v8threads.h"
53
54
 
54
55
  #include "platform.h"
55
56
  #include "vm-state-inl.h"
@@ -73,6 +74,9 @@ double ceiling(double x) {
73
74
  }
74
75
 
75
76
 
77
+ static Mutex* limit_mutex = NULL;
78
+
79
+
76
80
  void OS::Setup() {
77
81
  // Seed the random number generator.
78
82
  // Convert the current time to a 64-bit integer first, before converting it
@@ -81,6 +85,7 @@ void OS::Setup() {
81
85
  // call this setup code within the same millisecond.
82
86
  uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
83
87
  srandom(static_cast<unsigned int>(seed));
88
+ limit_mutex = CreateMutex();
84
89
  }
85
90
 
86
91
 
@@ -129,6 +134,9 @@ static void* highest_ever_allocated = reinterpret_cast<void*>(0);
129
134
 
130
135
 
131
136
  static void UpdateAllocatedSpaceLimits(void* address, int size) {
137
+ ASSERT(limit_mutex != NULL);
138
+ ScopedLock lock(limit_mutex);
139
+
132
140
  lowest_ever_allocated = Min(lowest_ever_allocated, address);
133
141
  highest_ever_allocated =
134
142
  Max(highest_ever_allocated,
@@ -164,26 +172,13 @@ void* OS::Allocate(const size_t requested,
164
172
 
165
173
 
166
174
  void OS::Free(void* buf, const size_t length) {
175
+ // TODO(1240712): munmap has a return value which is ignored here.
167
176
  int result = munmap(buf, length);
168
177
  USE(result);
169
178
  ASSERT(result == 0);
170
179
  }
171
180
 
172
181
 
173
- #ifdef ENABLE_HEAP_PROTECTION
174
-
175
- void OS::Protect(void* address, size_t size) {
176
- UNIMPLEMENTED();
177
- }
178
-
179
-
180
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
181
- UNIMPLEMENTED();
182
- }
183
-
184
- #endif
185
-
186
-
187
182
  void OS::Sleep(int milliseconds) {
188
183
  unsigned int ms = static_cast<unsigned int>(milliseconds);
189
184
  usleep(1000 * ms);
@@ -255,15 +250,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
255
250
  }
256
251
 
257
252
 
258
- #ifdef ENABLE_LOGGING_AND_PROFILING
259
253
  static unsigned StringToLong(char* buffer) {
260
254
  return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
261
255
  }
262
- #endif
263
256
 
264
257
 
265
258
  void OS::LogSharedLibraryAddresses() {
266
- #ifdef ENABLE_LOGGING_AND_PROFILING
267
259
  static const int MAP_LENGTH = 1024;
268
260
  int fd = open("/proc/self/maps", O_RDONLY);
269
261
  if (fd < 0) return;
@@ -297,10 +289,9 @@ void OS::LogSharedLibraryAddresses() {
297
289
  // There may be no filename in this line. Skip to next.
298
290
  if (start_of_path == NULL) continue;
299
291
  buffer[bytes_read] = 0;
300
- LOG(SharedLibraryEvent(start_of_path, start, end));
292
+ LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
301
293
  }
302
294
  close(fd);
303
- #endif
304
295
  }
305
296
 
306
297
 
@@ -309,8 +300,30 @@ void OS::SignalCodeMovingGC() {
309
300
 
310
301
 
311
302
  int OS::StackWalk(Vector<OS::StackFrame> frames) {
312
- UNIMPLEMENTED();
313
- return 1;
303
+ int frames_size = frames.length();
304
+ ScopedVector<void*> addresses(frames_size);
305
+
306
+ int frames_count = backtrace(addresses.start(), frames_size);
307
+
308
+ char** symbols = backtrace_symbols(addresses.start(), frames_count);
309
+ if (symbols == NULL) {
310
+ return kStackWalkError;
311
+ }
312
+
313
+ for (int i = 0; i < frames_count; i++) {
314
+ frames[i].address = addresses[i];
315
+ // Format a text representation of the frame based on the information
316
+ // available.
317
+ SNPrintF(MutableCStrVector(frames[i].text, kStackWalkMaxTextLen),
318
+ "%s",
319
+ symbols[i]);
320
+ // Make sure line termination is in place.
321
+ frames[i].text[kStackWalkMaxTextLen - 1] = '\0';
322
+ }
323
+
324
+ free(symbols);
325
+
326
+ return frames_count;
314
327
  }
315
328
 
316
329
 
@@ -354,30 +367,26 @@ bool VirtualMemory::Commit(void* address, size_t size, bool executable) {
354
367
 
355
368
  bool VirtualMemory::Uncommit(void* address, size_t size) {
356
369
  return mmap(address, size, PROT_NONE,
357
- MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
370
+ MAP_PRIVATE | MAP_ANON | MAP_NORESERVE | MAP_FIXED,
358
371
  kMmapFd, kMmapFdOffset) != MAP_FAILED;
359
372
  }
360
373
 
361
374
 
362
375
  class Thread::PlatformData : public Malloced {
363
376
  public:
364
- PlatformData() : thread_(kNoThread) {}
365
-
366
377
  pthread_t thread_; // Thread handle for pthread.
367
378
  };
368
379
 
369
380
 
370
- Thread::Thread(Isolate* isolate, const Options& options)
371
- : data_(new PlatformData()),
372
- isolate_(isolate),
381
+ Thread::Thread(const Options& options)
382
+ : data_(new PlatformData),
373
383
  stack_size_(options.stack_size) {
374
384
  set_name(options.name);
375
385
  }
376
386
 
377
387
 
378
- Thread::Thread(Isolate* isolate, const char* name)
379
- : data_(new PlatfromData()),
380
- isolate_(isolate),
388
+ Thread::Thread(const char* name)
389
+ : data_(new PlatformData),
381
390
  stack_size_(0) {
382
391
  set_name(name);
383
392
  }
@@ -395,7 +404,6 @@ static void* ThreadEntry(void* arg) {
395
404
  // one) so we initialize it here too.
396
405
  thread->data()->thread_ = pthread_self();
397
406
  ASSERT(thread->data()->thread_ != kNoThread);
398
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
399
407
  thread->Run();
400
408
  return NULL;
401
409
  }
@@ -416,7 +424,7 @@ void Thread::Start() {
416
424
  attr_ptr = &attr;
417
425
  }
418
426
  pthread_create(&data_->thread_, attr_ptr, ThreadEntry, this);
419
- ASSERT(IsValid());
427
+ ASSERT(data_->thread_ != kNoThread);
420
428
  }
421
429
 
422
430
 
@@ -461,7 +469,6 @@ void Thread::YieldCPU() {
461
469
 
462
470
  class OpenBSDMutex : public Mutex {
463
471
  public:
464
-
465
472
  OpenBSDMutex() {
466
473
  pthread_mutexattr_t attrs;
467
474
  int result = pthread_mutexattr_init(&attrs);
@@ -484,6 +491,16 @@ class OpenBSDMutex : public Mutex {
484
491
  return result;
485
492
  }
486
493
 
494
+ virtual bool TryLock() {
495
+ int result = pthread_mutex_trylock(&mutex_);
496
+ // Return false if the lock is busy and locking failed.
497
+ if (result == EBUSY) {
498
+ return false;
499
+ }
500
+ ASSERT(result == 0); // Verify no other errors.
501
+ return true;
502
+ }
503
+
487
504
  private:
488
505
  pthread_mutex_t mutex_; // Pthread mutex for POSIX platforms.
489
506
  };
@@ -536,11 +553,16 @@ bool OpenBSDSemaphore::Wait(int timeout) {
536
553
 
537
554
  struct timespec ts;
538
555
  TIMEVAL_TO_TIMESPEC(&end_time, &ts);
556
+
557
+ int to = ts.tv_sec;
558
+
539
559
  while (true) {
540
560
  int result = sem_trywait(&sem_);
541
561
  if (result == 0) return true; // Successfully got semaphore.
542
- if (result == -1 && errno == ETIMEDOUT) return false; // Timeout.
562
+ if (!to) return false; // Timeout.
543
563
  CHECK(result == -1 && errno == EINTR); // Signal caused spurious wakeup.
564
+ usleep(ts.tv_nsec / 1000);
565
+ to--;
544
566
  }
545
567
  }
546
568
 
@@ -550,35 +572,202 @@ Semaphore* OS::CreateSemaphore(int count) {
550
572
  }
551
573
 
552
574
 
553
- #ifdef ENABLE_LOGGING_AND_PROFILING
575
+ static pthread_t GetThreadID() {
576
+ pthread_t thread_id = pthread_self();
577
+ return thread_id;
578
+ }
579
+
580
+
581
+ class Sampler::PlatformData : public Malloced {
582
+ public:
583
+ PlatformData() : vm_tid_(GetThreadID()) {}
584
+
585
+ pthread_t vm_tid() const { return vm_tid_; }
586
+
587
+ private:
588
+ pthread_t vm_tid_;
589
+ };
554
590
 
555
- static Sampler* active_sampler_ = NULL;
556
591
 
557
592
  static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
558
593
  USE(info);
559
594
  if (signal != SIGPROF) return;
560
- if (active_sampler_ == NULL) return;
561
-
562
- TickSample sample;
563
-
564
- // We always sample the VM state.
565
- sample.state = VMState::current_state();
595
+ Isolate* isolate = Isolate::UncheckedCurrent();
596
+ if (isolate == NULL || !isolate->IsInitialized() || !isolate->IsInUse()) {
597
+ // We require a fully initialized and entered isolate.
598
+ return;
599
+ }
600
+ if (v8::Locker::IsActive() &&
601
+ !isolate->thread_manager()->IsLockedByCurrentThread()) {
602
+ return;
603
+ }
566
604
 
567
- active_sampler_->Tick(&sample);
605
+ Sampler* sampler = isolate->logger()->sampler();
606
+ if (sampler == NULL || !sampler->IsActive()) return;
607
+
608
+ TickSample sample_obj;
609
+ TickSample* sample = CpuProfiler::TickSampleEvent(isolate);
610
+ if (sample == NULL) sample = &sample_obj;
611
+
612
+ // Extracting the sample from the context is extremely machine dependent.
613
+ ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
614
+ sample->state = isolate->current_vm_state();
615
+ #if V8_HOST_ARCH_IA32
616
+ sample->pc = reinterpret_cast<Address>(ucontext->sc_eip);
617
+ sample->sp = reinterpret_cast<Address>(ucontext->sc_esp);
618
+ sample->fp = reinterpret_cast<Address>(ucontext->sc_ebp);
619
+ #elif V8_HOST_ARCH_X64
620
+ sample->pc = reinterpret_cast<Address>(ucontext->sc_rip);
621
+ sample->sp = reinterpret_cast<Address>(ucontext->sc_rsp);
622
+ sample->fp = reinterpret_cast<Address>(ucontext->sc_rbp);
623
+ #elif V8_HOST_ARCH_ARM
624
+ sample->pc = reinterpret_cast<Address>(ucontext->sc_r15);
625
+ sample->sp = reinterpret_cast<Address>(ucontext->sc_r13);
626
+ sample->fp = reinterpret_cast<Address>(ucontext->sc_r11);
627
+ #endif
628
+ sampler->SampleStack(sample);
629
+ sampler->Tick(sample);
568
630
  }
569
631
 
570
632
 
571
- class Sampler::PlatformData : public Malloced {
633
+ class SignalSender : public Thread {
572
634
  public:
573
- PlatformData() {
574
- signal_handler_installed_ = false;
635
+ enum SleepInterval {
636
+ HALF_INTERVAL,
637
+ FULL_INTERVAL
638
+ };
639
+
640
+ explicit SignalSender(int interval)
641
+ : Thread("SignalSender"),
642
+ interval_(interval) {}
643
+
644
+ static void AddActiveSampler(Sampler* sampler) {
645
+ ScopedLock lock(mutex_);
646
+ SamplerRegistry::AddActiveSampler(sampler);
647
+ if (instance_ == NULL) {
648
+ // Install a signal handler.
649
+ struct sigaction sa;
650
+ sa.sa_sigaction = ProfilerSignalHandler;
651
+ sigemptyset(&sa.sa_mask);
652
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
653
+ signal_handler_installed_ =
654
+ (sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
655
+
656
+ // Start a thread that sends SIGPROF signal to VM threads.
657
+ instance_ = new SignalSender(sampler->interval());
658
+ instance_->Start();
659
+ } else {
660
+ ASSERT(instance_->interval_ == sampler->interval());
661
+ }
662
+ }
663
+
664
+ static void RemoveActiveSampler(Sampler* sampler) {
665
+ ScopedLock lock(mutex_);
666
+ SamplerRegistry::RemoveActiveSampler(sampler);
667
+ if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
668
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
669
+ delete instance_;
670
+ instance_ = NULL;
671
+
672
+ // Restore the old signal handler.
673
+ if (signal_handler_installed_) {
674
+ sigaction(SIGPROF, &old_signal_handler_, 0);
675
+ signal_handler_installed_ = false;
676
+ }
677
+ }
678
+ }
679
+
680
+ // Implement Thread::Run().
681
+ virtual void Run() {
682
+ SamplerRegistry::State state;
683
+ while ((state = SamplerRegistry::GetState()) !=
684
+ SamplerRegistry::HAS_NO_SAMPLERS) {
685
+ bool cpu_profiling_enabled =
686
+ (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
687
+ bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
688
+ // When CPU profiling is enabled both JavaScript and C++ code is
689
+ // profiled. We must not suspend.
690
+ if (!cpu_profiling_enabled) {
691
+ if (rate_limiter_.SuspendIfNecessary()) continue;
692
+ }
693
+ if (cpu_profiling_enabled && runtime_profiler_enabled) {
694
+ if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
695
+ return;
696
+ }
697
+ Sleep(HALF_INTERVAL);
698
+ if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
699
+ return;
700
+ }
701
+ Sleep(HALF_INTERVAL);
702
+ } else {
703
+ if (cpu_profiling_enabled) {
704
+ if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
705
+ this)) {
706
+ return;
707
+ }
708
+ }
709
+ if (runtime_profiler_enabled) {
710
+ if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
711
+ NULL)) {
712
+ return;
713
+ }
714
+ }
715
+ Sleep(FULL_INTERVAL);
716
+ }
717
+ }
718
+ }
719
+
720
+ static void DoCpuProfile(Sampler* sampler, void* raw_sender) {
721
+ if (!sampler->IsProfiling()) return;
722
+ SignalSender* sender = reinterpret_cast<SignalSender*>(raw_sender);
723
+ sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
724
+ }
725
+
726
+ static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
727
+ if (!sampler->isolate()->IsInitialized()) return;
728
+ sampler->isolate()->runtime_profiler()->NotifyTick();
729
+ }
730
+
731
+ void SendProfilingSignal(pthread_t tid) {
732
+ if (!signal_handler_installed_) return;
733
+ pthread_kill(tid, SIGPROF);
734
+ }
735
+
736
+ void Sleep(SleepInterval full_or_half) {
737
+ // Convert ms to us and subtract 100 us to compensate delays
738
+ // occuring during signal delivery.
739
+ useconds_t interval = interval_ * 1000 - 100;
740
+ if (full_or_half == HALF_INTERVAL) interval /= 2;
741
+ int result = usleep(interval);
742
+ #ifdef DEBUG
743
+ if (result != 0 && errno != EINTR) {
744
+ fprintf(stderr,
745
+ "SignalSender usleep error; interval = %u, errno = %d\n",
746
+ interval,
747
+ errno);
748
+ ASSERT(result == 0 || errno == EINTR);
749
+ }
750
+ #endif
751
+ USE(result);
575
752
  }
576
753
 
577
- bool signal_handler_installed_;
578
- struct sigaction old_signal_handler_;
579
- struct itimerval old_timer_value_;
754
+ const int interval_;
755
+ RuntimeProfilerRateLimiter rate_limiter_;
756
+
757
+ // Protects the process wide state below.
758
+ static Mutex* mutex_;
759
+ static SignalSender* instance_;
760
+ static bool signal_handler_installed_;
761
+ static struct sigaction old_signal_handler_;
762
+
763
+ DISALLOW_COPY_AND_ASSIGN(SignalSender);
580
764
  };
581
765
 
766
+ Mutex* SignalSender::mutex_ = OS::CreateMutex();
767
+ SignalSender* SignalSender::instance_ = NULL;
768
+ struct sigaction SignalSender::old_signal_handler_;
769
+ bool SignalSender::signal_handler_installed_ = false;
770
+
582
771
 
583
772
  Sampler::Sampler(Isolate* isolate, int interval)
584
773
  : isolate_(isolate),
@@ -586,55 +775,28 @@ Sampler::Sampler(Isolate* isolate, int interval)
586
775
  profiling_(false),
587
776
  active_(false),
588
777
  samples_taken_(0) {
589
- data_ = new PlatformData();
778
+ data_ = new PlatformData;
590
779
  }
591
780
 
592
781
 
593
782
  Sampler::~Sampler() {
783
+ ASSERT(!IsActive());
594
784
  delete data_;
595
785
  }
596
786
 
597
787
 
598
788
  void Sampler::Start() {
599
- // There can only be one active sampler at the time on POSIX
600
- // platforms.
601
- if (active_sampler_ != NULL) return;
602
-
603
- // Request profiling signals.
604
- struct sigaction sa;
605
- sa.sa_sigaction = ProfilerSignalHandler;
606
- sigemptyset(&sa.sa_mask);
607
- sa.sa_flags = SA_SIGINFO;
608
- if (sigaction(SIGPROF, &sa, &data_->old_signal_handler_) != 0) return;
609
- data_->signal_handler_installed_ = true;
610
-
611
- // Set the itimer to generate a tick for each interval.
612
- itimerval itimer;
613
- itimer.it_interval.tv_sec = interval_ / 1000;
614
- itimer.it_interval.tv_usec = (interval_ % 1000) * 1000;
615
- itimer.it_value.tv_sec = itimer.it_interval.tv_sec;
616
- itimer.it_value.tv_usec = itimer.it_interval.tv_usec;
617
- setitimer(ITIMER_PROF, &itimer, &data_->old_timer_value_);
618
-
619
- // Set this sampler as the active sampler.
620
- active_sampler_ = this;
621
- active_ = true;
789
+ ASSERT(!IsActive());
790
+ SetActive(true);
791
+ SignalSender::AddActiveSampler(this);
622
792
  }
623
793
 
624
794
 
625
795
  void Sampler::Stop() {
626
- // Restore old signal handler
627
- if (data_->signal_handler_installed_) {
628
- setitimer(ITIMER_PROF, &data_->old_timer_value_, NULL);
629
- sigaction(SIGPROF, &data_->old_signal_handler_, 0);
630
- data_->signal_handler_installed_ = false;
631
- }
632
-
633
- // This sampler is no longer the active sampler.
634
- active_sampler_ = NULL;
635
- active_ = false;
796
+ ASSERT(IsActive());
797
+ SignalSender::RemoveActiveSampler(this);
798
+ SetActive(false);
636
799
  }
637
800
 
638
- #endif // ENABLE_LOGGING_AND_PROFILING
639
801
 
640
802
  } } // namespace v8::internal