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
@@ -72,22 +72,14 @@ class FunctionEntry BASE_EMBEDDED {
72
72
  FunctionEntry() : backing_(Vector<unsigned>::empty()) { }
73
73
 
74
74
  int start_pos() { return backing_[kStartPosOffset]; }
75
- void set_start_pos(int value) { backing_[kStartPosOffset] = value; }
76
-
77
75
  int end_pos() { return backing_[kEndPosOffset]; }
78
- void set_end_pos(int value) { backing_[kEndPosOffset] = value; }
79
-
80
76
  int literal_count() { return backing_[kLiteralCountOffset]; }
81
- void set_literal_count(int value) { backing_[kLiteralCountOffset] = value; }
82
-
83
77
  int property_count() { return backing_[kPropertyCountOffset]; }
84
- void set_property_count(int value) {
85
- backing_[kPropertyCountOffset] = value;
86
- }
78
+ bool strict_mode() { return backing_[kStrictModeOffset] != 0; }
87
79
 
88
80
  bool is_valid() { return backing_.length() > 0; }
89
81
 
90
- static const int kSize = 4;
82
+ static const int kSize = 5;
91
83
 
92
84
  private:
93
85
  Vector<unsigned> backing_;
@@ -95,6 +87,7 @@ class FunctionEntry BASE_EMBEDDED {
95
87
  static const int kEndPosOffset = 1;
96
88
  static const int kLiteralCountOffset = 2;
97
89
  static const int kPropertyCountOffset = 3;
90
+ static const int kStrictModeOffset = 4;
98
91
  };
99
92
 
100
93
 
@@ -171,12 +164,14 @@ class ParserApi {
171
164
 
172
165
  // Generic preparser generating full preparse data.
173
166
  static ScriptDataImpl* PreParse(UC16CharacterStream* source,
174
- v8::Extension* extension);
167
+ v8::Extension* extension,
168
+ bool harmony_block_scoping);
175
169
 
176
170
  // Preparser that only does preprocessing that makes sense if only used
177
171
  // immediately after.
178
172
  static ScriptDataImpl* PartialPreParse(UC16CharacterStream* source,
179
- v8::Extension* extension);
173
+ v8::Extension* extension,
174
+ bool harmony_block_scoping);
180
175
  };
181
176
 
182
177
  // ----------------------------------------------------------------------------
@@ -442,8 +437,9 @@ class Parser {
442
437
  void ReportMessageAt(Scanner::Location loc,
443
438
  const char* message,
444
439
  Vector<Handle<String> > args);
440
+ void SetHarmonyBlockScoping(bool block_scoping);
445
441
 
446
- protected:
442
+ private:
447
443
  // Limit on number of function parameters is chosen arbitrarily.
448
444
  // Code::Flags uses only the low 17 bits of num-parameters to
449
445
  // construct a hashable id, so if more than 2^17 are allowed, this
@@ -458,6 +454,12 @@ class Parser {
458
454
  PARSE_EAGERLY
459
455
  };
460
456
 
457
+ enum VariableDeclarationContext {
458
+ kSourceElement,
459
+ kStatement,
460
+ kForStatement
461
+ };
462
+
461
463
  Isolate* isolate() { return isolate_; }
462
464
  Zone* zone() { return isolate_->zone(); }
463
465
 
@@ -473,7 +475,7 @@ class Parser {
473
475
  void ReportMessage(const char* message, Vector<const char*> args);
474
476
 
475
477
  bool inside_with() const { return with_nesting_level_ > 0; }
476
- V8JavaScriptScanner& scanner() { return scanner_; }
478
+ JavaScriptScanner& scanner() { return scanner_; }
477
479
  Mode mode() const { return mode_; }
478
480
  ScriptDataImpl* pre_data() const { return pre_data_; }
479
481
 
@@ -486,22 +488,23 @@ class Parser {
486
488
  // for failure at the call sites.
487
489
  void* ParseSourceElements(ZoneList<Statement*>* processor,
488
490
  int end_token, bool* ok);
491
+ Statement* ParseSourceElement(ZoneStringList* labels, bool* ok);
489
492
  Statement* ParseStatement(ZoneStringList* labels, bool* ok);
490
493
  Statement* ParseFunctionDeclaration(bool* ok);
491
494
  Statement* ParseNativeDeclaration(bool* ok);
492
495
  Block* ParseBlock(ZoneStringList* labels, bool* ok);
493
- Block* ParseVariableStatement(bool* ok);
494
- Block* ParseVariableDeclarations(bool accept_IN, Expression** var, bool* ok);
496
+ Block* ParseScopedBlock(ZoneStringList* labels, bool* ok);
497
+ Block* ParseVariableStatement(VariableDeclarationContext var_context,
498
+ bool* ok);
499
+ Block* ParseVariableDeclarations(VariableDeclarationContext var_context,
500
+ Handle<String>* out,
501
+ bool* ok);
495
502
  Statement* ParseExpressionOrLabelledStatement(ZoneStringList* labels,
496
503
  bool* ok);
497
504
  IfStatement* ParseIfStatement(ZoneStringList* labels, bool* ok);
498
505
  Statement* ParseContinueStatement(bool* ok);
499
506
  Statement* ParseBreakStatement(ZoneStringList* labels, bool* ok);
500
507
  Statement* ParseReturnStatement(bool* ok);
501
- Block* WithHelper(Expression* obj,
502
- ZoneStringList* labels,
503
- bool is_catch_block,
504
- bool* ok);
505
508
  Statement* ParseWithStatement(ZoneStringList* labels, bool* ok);
506
509
  CaseClause* ParseCaseClause(bool* default_seen_ptr, bool* ok);
507
510
  SwitchStatement* ParseSwitchStatement(ZoneStringList* labels, bool* ok);
@@ -560,17 +563,11 @@ class Parser {
560
563
  // in the object literal boilerplate.
561
564
  Handle<Object> GetBoilerplateValue(Expression* expression);
562
565
 
563
- enum FunctionLiteralType {
564
- EXPRESSION,
565
- DECLARATION,
566
- NESTED
567
- };
568
-
569
566
  ZoneList<Expression*>* ParseArguments(bool* ok);
570
567
  FunctionLiteral* ParseFunctionLiteral(Handle<String> var_name,
571
568
  bool name_is_reserved,
572
569
  int function_token_position,
573
- FunctionLiteralType type,
570
+ FunctionLiteral::Type type,
574
571
  bool* ok);
575
572
 
576
573
 
@@ -633,11 +630,12 @@ class Parser {
633
630
  Literal* GetLiteralNumber(double value);
634
631
 
635
632
  Handle<String> ParseIdentifier(bool* ok);
636
- Handle<String> ParseIdentifierOrReservedWord(bool* is_reserved, bool* ok);
633
+ Handle<String> ParseIdentifierOrStrictReservedWord(
634
+ bool* is_strict_reserved, bool* ok);
637
635
  Handle<String> ParseIdentifierName(bool* ok);
638
- Handle<String> ParseIdentifierOrGetOrSet(bool* is_get,
639
- bool* is_set,
640
- bool* ok);
636
+ Handle<String> ParseIdentifierNameOrGetOrSet(bool* is_get,
637
+ bool* is_set,
638
+ bool* ok);
641
639
 
642
640
  // Strict mode validation of LValue expressions
643
641
  void CheckStrictModeLValue(Expression* expression,
@@ -675,9 +673,12 @@ class Parser {
675
673
  Expression* NewCall(Expression* expression,
676
674
  ZoneList<Expression*>* arguments,
677
675
  int pos) {
678
- return new Call(expression, arguments, pos);
676
+ return new(zone()) Call(isolate(), expression, arguments, pos);
679
677
  }
680
678
 
679
+ inline Literal* NewLiteral(Handle<Object> handle) {
680
+ return new(zone()) Literal(isolate(), handle);
681
+ }
681
682
 
682
683
  // Create a number literal.
683
684
  Literal* NewNumberLiteral(double value);
@@ -705,7 +706,7 @@ class Parser {
705
706
  ZoneList<Handle<String> > symbol_cache_;
706
707
 
707
708
  Handle<Script> script_;
708
- V8JavaScriptScanner scanner_;
709
+ JavaScriptScanner scanner_;
709
710
 
710
711
  Scope* top_scope_;
711
712
  int with_nesting_level_;
@@ -725,6 +726,7 @@ class Parser {
725
726
  // Heuristically that means that the function will be called immediately,
726
727
  // so never lazily compile it.
727
728
  bool parenthesized_function_;
729
+ bool harmony_block_scoping_;
728
730
 
729
731
  friend class LexicalScope;
730
732
  };
@@ -166,22 +166,17 @@ void OS::Free(void* address, const size_t size) {
166
166
  }
167
167
 
168
168
 
169
- #ifdef ENABLE_HEAP_PROTECTION
170
-
171
- void OS::Protect(void* address, size_t size) {
172
- // TODO(1240712): mprotect has a return value which is ignored here.
173
- mprotect(address, size, PROT_READ);
169
+ void OS::ProtectCode(void* address, const size_t size) {
170
+ DWORD old_protect;
171
+ VirtualProtect(address, size, PAGE_EXECUTE_READ, &old_protect);
174
172
  }
175
173
 
176
174
 
177
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
178
- // TODO(1240712): mprotect has a return value which is ignored here.
179
- int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
180
- mprotect(address, size, prot);
175
+ void OS::Guard(void* address, const size_t size) {
176
+ DWORD oldprotect;
177
+ VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect);
181
178
  }
182
179
 
183
- #endif
184
-
185
180
 
186
181
  void OS::Sleep(int milliseconds) {
187
182
  unsigned int ms = static_cast<unsigned int>(milliseconds);
@@ -249,7 +244,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
249
244
 
250
245
 
251
246
  void OS::LogSharedLibraryAddresses() {
252
- #ifdef ENABLE_LOGGING_AND_PROFILING
253
247
  // This function assumes that the layout of the file is as follows:
254
248
  // hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
255
249
  // If we encounter an unexpected situation we abort scanning further entries.
@@ -306,7 +300,6 @@ void OS::LogSharedLibraryAddresses() {
306
300
  }
307
301
  free(lib_name);
308
302
  fclose(fp);
309
- #endif
310
303
  }
311
304
 
312
305
 
@@ -371,17 +364,15 @@ class Thread::PlatformData : public Malloced {
371
364
 
372
365
 
373
366
 
374
- Thread::Thread(Isolate* isolate, const Options& options)
367
+ Thread::Thread(const Options& options)
375
368
  : data_(new PlatformData),
376
- isolate_(isolate),
377
369
  stack_size_(options.stack_size) {
378
370
  set_name(options.name);
379
371
  }
380
372
 
381
373
 
382
- Thread::Thread(Isolate* isolate, const char* name)
374
+ Thread::Thread(const char* name)
383
375
  : data_(new PlatformData),
384
- isolate_(isolate),
385
376
  stack_size_(0) {
386
377
  set_name(name);
387
378
  }
@@ -399,7 +390,6 @@ static void* ThreadEntry(void* arg) {
399
390
  // one) so we initialize it here too.
400
391
  thread->data()->thread_ = pthread_self();
401
392
  ASSERT(thread->data()->thread_ != kNoThread);
402
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
403
393
  thread->Run();
404
394
  return NULL;
405
395
  }
@@ -594,8 +584,6 @@ Semaphore* OS::CreateSemaphore(int count) {
594
584
  }
595
585
 
596
586
 
597
- #ifdef ENABLE_LOGGING_AND_PROFILING
598
-
599
587
  // ----------------------------------------------------------------------------
600
588
  // Cygwin profiler support.
601
589
  //
@@ -631,7 +619,7 @@ class Sampler::PlatformData : public Malloced {
631
619
  class SamplerThread : public Thread {
632
620
  public:
633
621
  explicit SamplerThread(int interval)
634
- : Thread(NULL, "SamplerThread"),
622
+ : Thread("SamplerThread"),
635
623
  interval_(interval) {}
636
624
 
637
625
  static void AddActiveSampler(Sampler* sampler) {
@@ -649,8 +637,7 @@ class SamplerThread : public Thread {
649
637
  ScopedLock lock(mutex_);
650
638
  SamplerRegistry::RemoveActiveSampler(sampler);
651
639
  if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
652
- RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
653
- instance_->Join();
640
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
654
641
  delete instance_;
655
642
  instance_ = NULL;
656
643
  }
@@ -773,7 +760,5 @@ void Sampler::Stop() {
773
760
  SetActive(false);
774
761
  }
775
762
 
776
- #endif // ENABLE_LOGGING_AND_PROFILING
777
763
 
778
764
  } } // namespace v8::internal
779
-
@@ -181,20 +181,6 @@ void OS::Free(void* buf, const size_t length) {
181
181
  }
182
182
 
183
183
 
184
- #ifdef ENABLE_HEAP_PROTECTION
185
-
186
- void OS::Protect(void* address, size_t size) {
187
- UNIMPLEMENTED();
188
- }
189
-
190
-
191
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
192
- UNIMPLEMENTED();
193
- }
194
-
195
- #endif
196
-
197
-
198
184
  void OS::Sleep(int milliseconds) {
199
185
  unsigned int ms = static_cast<unsigned int>(milliseconds);
200
186
  usleep(1000 * ms);
@@ -266,15 +252,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
266
252
  }
267
253
 
268
254
 
269
- #ifdef ENABLE_LOGGING_AND_PROFILING
270
255
  static unsigned StringToLong(char* buffer) {
271
256
  return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
272
257
  }
273
- #endif
274
258
 
275
259
 
276
260
  void OS::LogSharedLibraryAddresses() {
277
- #ifdef ENABLE_LOGGING_AND_PROFILING
278
261
  static const int MAP_LENGTH = 1024;
279
262
  int fd = open("/proc/self/maps", O_RDONLY);
280
263
  if (fd < 0) return;
@@ -311,7 +294,6 @@ void OS::LogSharedLibraryAddresses() {
311
294
  LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
312
295
  }
313
296
  close(fd);
314
- #endif
315
297
  }
316
298
 
317
299
 
@@ -398,17 +380,15 @@ class Thread::PlatformData : public Malloced {
398
380
  };
399
381
 
400
382
 
401
- Thread::Thread(Isolate* isolate, const Options& options)
383
+ Thread::Thread(const Options& options)
402
384
  : data_(new PlatformData),
403
- isolate_(isolate),
404
385
  stack_size_(options.stack_size) {
405
386
  set_name(options.name);
406
387
  }
407
388
 
408
389
 
409
- Thread::Thread(Isolate* isolate, const char* name)
390
+ Thread::Thread(const char* name)
410
391
  : data_(new PlatformData),
411
- isolate_(isolate),
412
392
  stack_size_(0) {
413
393
  set_name(name);
414
394
  }
@@ -426,7 +406,6 @@ static void* ThreadEntry(void* arg) {
426
406
  // one) so we initialize it here too.
427
407
  thread->data()->thread_ = pthread_self();
428
408
  ASSERT(thread->data()->thread_ != kNoThread);
429
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
430
409
  thread->Run();
431
410
  return NULL;
432
411
  }
@@ -591,8 +570,6 @@ Semaphore* OS::CreateSemaphore(int count) {
591
570
  }
592
571
 
593
572
 
594
- #ifdef ENABLE_LOGGING_AND_PROFILING
595
-
596
573
  static pthread_t GetThreadID() {
597
574
  pthread_t thread_id = pthread_self();
598
575
  return thread_id;
@@ -660,7 +637,7 @@ class SignalSender : public Thread {
660
637
  };
661
638
 
662
639
  explicit SignalSender(int interval)
663
- : Thread(NULL, "SignalSender"),
640
+ : Thread("SignalSender"),
664
641
  interval_(interval) {}
665
642
 
666
643
  static void AddActiveSampler(Sampler* sampler) {
@@ -687,8 +664,7 @@ class SignalSender : public Thread {
687
664
  ScopedLock lock(mutex_);
688
665
  SamplerRegistry::RemoveActiveSampler(sampler);
689
666
  if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
690
- RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
691
- instance_->Join();
667
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
692
668
  delete instance_;
693
669
  instance_ = NULL;
694
670
 
@@ -821,6 +797,5 @@ void Sampler::Stop() {
821
797
  SetActive(false);
822
798
  }
823
799
 
824
- #endif // ENABLE_LOGGING_AND_PROFILING
825
800
 
826
801
  } } // namespace v8::internal
@@ -78,13 +78,33 @@ double ceiling(double x) {
78
78
  static Mutex* limit_mutex = NULL;
79
79
 
80
80
 
81
+ static void* GetRandomMmapAddr() {
82
+ Isolate* isolate = Isolate::UncheckedCurrent();
83
+ // Note that the current isolate isn't set up in a call path via
84
+ // CpuFeatures::Probe. We don't care about randomization in this case because
85
+ // the code page is immediately freed.
86
+ if (isolate != NULL) {
87
+ #ifdef V8_TARGET_ARCH_X64
88
+ uint64_t rnd1 = V8::RandomPrivate(isolate);
89
+ uint64_t rnd2 = V8::RandomPrivate(isolate);
90
+ uint64_t raw_addr = (rnd1 << 32) ^ rnd2;
91
+ raw_addr &= V8_UINT64_C(0x3ffffffff000);
92
+ #else
93
+ uint32_t raw_addr = V8::RandomPrivate(isolate);
94
+ // The range 0x20000000 - 0x60000000 is relatively unpopulated across a
95
+ // variety of ASLR modes (PAE kernel, NX compat mode, etc).
96
+ raw_addr &= 0x3ffff000;
97
+ raw_addr += 0x20000000;
98
+ #endif
99
+ return reinterpret_cast<void*>(raw_addr);
100
+ }
101
+ return NULL;
102
+ }
103
+
104
+
81
105
  void OS::Setup() {
82
- // Seed the random number generator.
83
- // Convert the current time to a 64-bit integer first, before converting it
84
- // to an unsigned. Going directly can cause an overflow and the seed to be
85
- // set to all ones. The seed will be identical for different instances that
86
- // call this setup code within the same millisecond.
87
- uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
106
+ // Seed the random number generator. We preserve microsecond resolution.
107
+ uint64_t seed = Ticks() ^ (getpid() << 16);
88
108
  srandom(static_cast<unsigned int>(seed));
89
109
  limit_mutex = CreateMutex();
90
110
 
@@ -367,10 +387,10 @@ size_t OS::AllocateAlignment() {
367
387
  void* OS::Allocate(const size_t requested,
368
388
  size_t* allocated,
369
389
  bool is_executable) {
370
- // TODO(805): Port randomization of allocated executable memory to Linux.
371
390
  const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE));
372
391
  int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
373
- void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
392
+ void* addr = GetRandomMmapAddr();
393
+ void* mbase = mmap(addr, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
374
394
  if (mbase == MAP_FAILED) {
375
395
  LOG(i::Isolate::Current(),
376
396
  StringEvent("OS::Allocate", "mmap failed"));
@@ -390,23 +410,6 @@ void OS::Free(void* address, const size_t size) {
390
410
  }
391
411
 
392
412
 
393
- #ifdef ENABLE_HEAP_PROTECTION
394
-
395
- void OS::Protect(void* address, size_t size) {
396
- // TODO(1240712): mprotect has a return value which is ignored here.
397
- mprotect(address, size, PROT_READ);
398
- }
399
-
400
-
401
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
402
- // TODO(1240712): mprotect has a return value which is ignored here.
403
- int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
404
- mprotect(address, size, prot);
405
- }
406
-
407
- #endif
408
-
409
-
410
413
  void OS::Sleep(int milliseconds) {
411
414
  unsigned int ms = static_cast<unsigned int>(milliseconds);
412
415
  usleep(1000 * ms);
@@ -483,7 +486,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
483
486
 
484
487
 
485
488
  void OS::LogSharedLibraryAddresses() {
486
- #ifdef ENABLE_LOGGING_AND_PROFILING
487
489
  // This function assumes that the layout of the file is as follows:
488
490
  // hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
489
491
  // If we encounter an unexpected situation we abort scanning further entries.
@@ -540,7 +542,6 @@ void OS::LogSharedLibraryAddresses() {
540
542
  }
541
543
  free(lib_name);
542
544
  fclose(fp);
543
- #endif
544
545
  }
545
546
 
546
547
 
@@ -548,7 +549,6 @@ static const char kGCFakeMmap[] = "/tmp/__v8_gc__";
548
549
 
549
550
 
550
551
  void OS::SignalCodeMovingGC() {
551
- #ifdef ENABLE_LOGGING_AND_PROFILING
552
552
  // Support for ll_prof.py.
553
553
  //
554
554
  // The Linux profiler built into the kernel logs all mmap's with
@@ -564,7 +564,6 @@ void OS::SignalCodeMovingGC() {
564
564
  ASSERT(addr != MAP_FAILED);
565
565
  munmap(addr, size);
566
566
  fclose(f);
567
- #endif
568
567
  }
569
568
 
570
569
 
@@ -607,7 +606,7 @@ static const int kMmapFdOffset = 0;
607
606
 
608
607
 
609
608
  VirtualMemory::VirtualMemory(size_t size) {
610
- address_ = mmap(NULL, size, PROT_NONE,
609
+ address_ = mmap(GetRandomMmapAddr(), size, PROT_NONE,
611
610
  MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE,
612
611
  kMmapFd, kMmapFdOffset);
613
612
  size_ = size;
@@ -653,17 +652,15 @@ class Thread::PlatformData : public Malloced {
653
652
  pthread_t thread_; // Thread handle for pthread.
654
653
  };
655
654
 
656
- Thread::Thread(Isolate* isolate, const Options& options)
655
+ Thread::Thread(const Options& options)
657
656
  : data_(new PlatformData()),
658
- isolate_(isolate),
659
657
  stack_size_(options.stack_size) {
660
658
  set_name(options.name);
661
659
  }
662
660
 
663
661
 
664
- Thread::Thread(Isolate* isolate, const char* name)
662
+ Thread::Thread(const char* name)
665
663
  : data_(new PlatformData()),
666
- isolate_(isolate),
667
664
  stack_size_(0) {
668
665
  set_name(name);
669
666
  }
@@ -679,12 +676,13 @@ static void* ThreadEntry(void* arg) {
679
676
  // This is also initialized by the first argument to pthread_create() but we
680
677
  // don't know which thread will run first (the original thread or the new
681
678
  // one) so we initialize it here too.
679
+ #ifdef PR_SET_NAME
682
680
  prctl(PR_SET_NAME,
683
681
  reinterpret_cast<unsigned long>(thread->name()), // NOLINT
684
682
  0, 0, 0);
683
+ #endif
685
684
  thread->data()->thread_ = pthread_self();
686
685
  ASSERT(thread->data()->thread_ != kNoThread);
687
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
688
686
  thread->Run();
689
687
  return NULL;
690
688
  }
@@ -750,7 +748,6 @@ void Thread::YieldCPU() {
750
748
 
751
749
  class LinuxMutex : public Mutex {
752
750
  public:
753
-
754
751
  LinuxMutex() {
755
752
  pthread_mutexattr_t attrs;
756
753
  int result = pthread_mutexattr_init(&attrs);
@@ -759,6 +756,7 @@ class LinuxMutex : public Mutex {
759
756
  ASSERT(result == 0);
760
757
  result = pthread_mutex_init(&mutex_, &attrs);
761
758
  ASSERT(result == 0);
759
+ USE(result);
762
760
  }
763
761
 
764
762
  virtual ~LinuxMutex() { pthread_mutex_destroy(&mutex_); }
@@ -863,8 +861,6 @@ Semaphore* OS::CreateSemaphore(int count) {
863
861
  }
864
862
 
865
863
 
866
- #ifdef ENABLE_LOGGING_AND_PROFILING
867
-
868
864
  #if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
869
865
  // Android runs a fairly new Linux kernel, so signal info is there,
870
866
  // but the C library doesn't have the structs defined.
@@ -975,23 +971,32 @@ class SignalSender : public Thread {
975
971
  };
976
972
 
977
973
  explicit SignalSender(int interval)
978
- : Thread(NULL, "SignalSender"),
974
+ : Thread("SignalSender"),
979
975
  vm_tgid_(getpid()),
980
976
  interval_(interval) {}
981
977
 
978
+ static void InstallSignalHandler() {
979
+ struct sigaction sa;
980
+ sa.sa_sigaction = ProfilerSignalHandler;
981
+ sigemptyset(&sa.sa_mask);
982
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
983
+ signal_handler_installed_ =
984
+ (sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
985
+ }
986
+
987
+ static void RestoreSignalHandler() {
988
+ if (signal_handler_installed_) {
989
+ sigaction(SIGPROF, &old_signal_handler_, 0);
990
+ signal_handler_installed_ = false;
991
+ }
992
+ }
993
+
982
994
  static void AddActiveSampler(Sampler* sampler) {
983
995
  ScopedLock lock(mutex_);
984
996
  SamplerRegistry::AddActiveSampler(sampler);
985
997
  if (instance_ == NULL) {
986
- // Install a signal handler.
987
- struct sigaction sa;
988
- sa.sa_sigaction = ProfilerSignalHandler;
989
- sigemptyset(&sa.sa_mask);
990
- sa.sa_flags = SA_RESTART | SA_SIGINFO;
991
- signal_handler_installed_ =
992
- (sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
993
-
994
- // Start a thread that sends SIGPROF signal to VM threads.
998
+ // Start a thread that will send SIGPROF signal to VM threads,
999
+ // when CPU profiling will be enabled.
995
1000
  instance_ = new SignalSender(sampler->interval());
996
1001
  instance_->Start();
997
1002
  } else {
@@ -1003,16 +1008,10 @@ class SignalSender : public Thread {
1003
1008
  ScopedLock lock(mutex_);
1004
1009
  SamplerRegistry::RemoveActiveSampler(sampler);
1005
1010
  if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
1006
- RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
1007
- instance_->Join();
1011
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
1008
1012
  delete instance_;
1009
1013
  instance_ = NULL;
1010
-
1011
- // Restore the old signal handler.
1012
- if (signal_handler_installed_) {
1013
- sigaction(SIGPROF, &old_signal_handler_, 0);
1014
- signal_handler_installed_ = false;
1015
- }
1014
+ RestoreSignalHandler();
1016
1015
  }
1017
1016
  }
1018
1017
 
@@ -1024,6 +1023,11 @@ class SignalSender : public Thread {
1024
1023
  bool cpu_profiling_enabled =
1025
1024
  (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
1026
1025
  bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
1026
+ if (cpu_profiling_enabled && !signal_handler_installed_) {
1027
+ InstallSignalHandler();
1028
+ } else if (!cpu_profiling_enabled && signal_handler_installed_) {
1029
+ RestoreSignalHandler();
1030
+ }
1027
1031
  // When CPU profiling is enabled both JavaScript and C++ code is
1028
1032
  // profiled. We must not suspend.
1029
1033
  if (!cpu_profiling_enabled) {
@@ -1144,6 +1148,5 @@ void Sampler::Stop() {
1144
1148
  SetActive(false);
1145
1149
  }
1146
1150
 
1147
- #endif // ENABLE_LOGGING_AND_PROFILING
1148
1151
 
1149
1152
  } } // namespace v8::internal