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
@@ -30,7 +30,7 @@
30
30
  #ifndef V8_PLATFORM_TLS_H_
31
31
  #define V8_PLATFORM_TLS_H_
32
32
 
33
- #ifdef V8_FAST_TLS
33
+ #ifndef V8_NO_FAST_TLS
34
34
 
35
35
  // When fast TLS is requested we include the appropriate
36
36
  // implementation header.
@@ -138,16 +138,39 @@ int fopen_s(FILE** pFile, const char* filename, const char* mode) {
138
138
  }
139
139
 
140
140
 
141
+ #define _TRUNCATE 0
142
+ #define STRUNCATE 80
143
+
141
144
  int _vsnprintf_s(char* buffer, size_t sizeOfBuffer, size_t count,
142
145
  const char* format, va_list argptr) {
146
+ ASSERT(count == _TRUNCATE);
143
147
  return _vsnprintf(buffer, sizeOfBuffer, format, argptr);
144
148
  }
145
- #define _TRUNCATE 0
146
149
 
147
150
 
148
- int strncpy_s(char* strDest, size_t numberOfElements,
149
- const char* strSource, size_t count) {
150
- strncpy(strDest, strSource, count);
151
+ int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) {
152
+ CHECK(source != NULL);
153
+ CHECK(dest != NULL);
154
+ CHECK_GT(dest_size, 0);
155
+
156
+ if (count == _TRUNCATE) {
157
+ while (dest_size > 0 && *source != 0) {
158
+ *(dest++) = *(source++);
159
+ --dest_size;
160
+ }
161
+ if (dest_size == 0) {
162
+ *(dest - 1) = 0;
163
+ return STRUNCATE;
164
+ }
165
+ } else {
166
+ while (dest_size > 0 && count > 0 && *source != 0) {
167
+ *(dest++) = *(source++);
168
+ --dest_size;
169
+ --count;
170
+ }
171
+ }
172
+ CHECK_GT(dest_size, 0);
173
+ *dest = 0;
151
174
  return 0;
152
175
  }
153
176
 
@@ -169,6 +192,11 @@ int random() {
169
192
  namespace v8 {
170
193
  namespace internal {
171
194
 
195
+ intptr_t OS::MaxVirtualMemory() {
196
+ return 0;
197
+ }
198
+
199
+
172
200
  double ceiling(double x) {
173
201
  return ceil(x);
174
202
  }
@@ -407,13 +435,11 @@ void Time::TzSet() {
407
435
  }
408
436
 
409
437
  // Make standard and DST timezone names.
410
- OS::SNPrintF(Vector<char>(std_tz_name_, kTzNameSize),
411
- "%S",
412
- tzinfo_.StandardName);
438
+ WideCharToMultiByte(CP_UTF8, 0, tzinfo_.StandardName, -1,
439
+ std_tz_name_, kTzNameSize, NULL, NULL);
413
440
  std_tz_name_[kTzNameSize - 1] = '\0';
414
- OS::SNPrintF(Vector<char>(dst_tz_name_, kTzNameSize),
415
- "%S",
416
- tzinfo_.DaylightName);
441
+ WideCharToMultiByte(CP_UTF8, 0, tzinfo_.DaylightName, -1,
442
+ dst_tz_name_, kTzNameSize, NULL, NULL);
417
443
  dst_tz_name_[kTzNameSize - 1] = '\0';
418
444
 
419
445
  // If OS returned empty string or resource id (like "@tzres.dll,-211")
@@ -714,6 +740,24 @@ bool OS::Remove(const char* path) {
714
740
  }
715
741
 
716
742
 
743
+ FILE* OS::OpenTemporaryFile() {
744
+ // tmpfile_s tries to use the root dir, don't use it.
745
+ char tempPathBuffer[MAX_PATH];
746
+ DWORD path_result = 0;
747
+ path_result = GetTempPathA(MAX_PATH, tempPathBuffer);
748
+ if (path_result > MAX_PATH || path_result == 0) return NULL;
749
+ UINT name_result = 0;
750
+ char tempNameBuffer[MAX_PATH];
751
+ name_result = GetTempFileNameA(tempPathBuffer, "", 0, tempNameBuffer);
752
+ if (name_result == 0) return NULL;
753
+ FILE* result = FOpen(tempNameBuffer, "w+"); // Same mode as tmpfile uses.
754
+ if (result != NULL) {
755
+ Remove(tempNameBuffer); // Delete on close.
756
+ }
757
+ return result;
758
+ }
759
+
760
+
717
761
  // Open log file in binary mode to avoid /n -> /r/n conversion.
718
762
  const char* const OS::LogFileOpenMode = "wb";
719
763
 
@@ -913,24 +957,17 @@ void OS::Free(void* address, const size_t size) {
913
957
  }
914
958
 
915
959
 
916
- #ifdef ENABLE_HEAP_PROTECTION
917
-
918
- void OS::Protect(void* address, size_t size) {
919
- // TODO(1240712): VirtualProtect has a return value which is ignored here.
960
+ void OS::ProtectCode(void* address, const size_t size) {
920
961
  DWORD old_protect;
921
- VirtualProtect(address, size, PAGE_READONLY, &old_protect);
962
+ VirtualProtect(address, size, PAGE_EXECUTE_READ, &old_protect);
922
963
  }
923
964
 
924
965
 
925
- void OS::Unprotect(void* address, size_t size, bool is_executable) {
926
- // TODO(1240712): VirtualProtect has a return value which is ignored here.
927
- DWORD new_protect = is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE;
928
- DWORD old_protect;
929
- VirtualProtect(address, size, new_protect, &old_protect);
966
+ void OS::Guard(void* address, const size_t size) {
967
+ DWORD oldprotect;
968
+ VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect);
930
969
  }
931
970
 
932
- #endif
933
-
934
971
 
935
972
  void OS::Sleep(int milliseconds) {
936
973
  ::Sleep(milliseconds);
@@ -1475,10 +1512,6 @@ static const HANDLE kNoThread = INVALID_HANDLE_VALUE;
1475
1512
  // convention.
1476
1513
  static unsigned int __stdcall ThreadEntry(void* arg) {
1477
1514
  Thread* thread = reinterpret_cast<Thread*>(arg);
1478
- // This is also initialized by the last parameter to _beginthreadex() but we
1479
- // don't know which thread will run first (the original thread or the new
1480
- // one) so we initialize it here too.
1481
- Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
1482
1515
  thread->Run();
1483
1516
  return 0;
1484
1517
  }
@@ -1494,17 +1527,15 @@ class Thread::PlatformData : public Malloced {
1494
1527
  // Initialize a Win32 thread object. The thread has an invalid thread
1495
1528
  // handle until it is started.
1496
1529
 
1497
- Thread::Thread(Isolate* isolate, const Options& options)
1498
- : isolate_(isolate),
1499
- stack_size_(options.stack_size) {
1530
+ Thread::Thread(const Options& options)
1531
+ : stack_size_(options.stack_size) {
1500
1532
  data_ = new PlatformData(kNoThread);
1501
1533
  set_name(options.name);
1502
1534
  }
1503
1535
 
1504
1536
 
1505
- Thread::Thread(Isolate* isolate, const char* name)
1506
- : isolate_(isolate),
1507
- stack_size_(0) {
1537
+ Thread::Thread(const char* name)
1538
+ : stack_size_(0) {
1508
1539
  data_ = new PlatformData(kNoThread);
1509
1540
  set_name(name);
1510
1541
  }
@@ -1585,7 +1616,6 @@ void Thread::YieldCPU() {
1585
1616
 
1586
1617
  class Win32Mutex : public Mutex {
1587
1618
  public:
1588
-
1589
1619
  Win32Mutex() { InitializeCriticalSection(&cs_); }
1590
1620
 
1591
1621
  virtual ~Win32Mutex() { DeleteCriticalSection(&cs_); }
@@ -1839,8 +1869,6 @@ Socket* OS::CreateSocket() {
1839
1869
  }
1840
1870
 
1841
1871
 
1842
- #ifdef ENABLE_LOGGING_AND_PROFILING
1843
-
1844
1872
  // ----------------------------------------------------------------------------
1845
1873
  // Win32 profiler support.
1846
1874
 
@@ -1874,7 +1902,7 @@ class Sampler::PlatformData : public Malloced {
1874
1902
  class SamplerThread : public Thread {
1875
1903
  public:
1876
1904
  explicit SamplerThread(int interval)
1877
- : Thread(NULL, "SamplerThread"),
1905
+ : Thread("SamplerThread"),
1878
1906
  interval_(interval) {}
1879
1907
 
1880
1908
  static void AddActiveSampler(Sampler* sampler) {
@@ -1892,8 +1920,7 @@ class SamplerThread : public Thread {
1892
1920
  ScopedLock lock(mutex_);
1893
1921
  SamplerRegistry::RemoveActiveSampler(sampler);
1894
1922
  if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
1895
- RuntimeProfiler::WakeUpRuntimeProfilerThreadBeforeShutdown();
1896
- instance_->Join();
1923
+ RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
1897
1924
  delete instance_;
1898
1925
  instance_ = NULL;
1899
1926
  }
@@ -2016,6 +2043,5 @@ void Sampler::Stop() {
2016
2043
  SetActive(false);
2017
2044
  }
2018
2045
 
2019
- #endif // ENABLE_LOGGING_AND_PROFILING
2020
2046
 
2021
2047
  } } // namespace v8::internal
@@ -177,6 +177,9 @@ class OS {
177
177
  static FILE* FOpen(const char* path, const char* mode);
178
178
  static bool Remove(const char* path);
179
179
 
180
+ // Opens a temporary file, the file is auto removed on close.
181
+ static FILE* OpenTemporaryFile();
182
+
180
183
  // Log file open mode is platform-dependent due to line ends issues.
181
184
  static const char* const LogFileOpenMode;
182
185
 
@@ -203,15 +206,16 @@ class OS {
203
206
  size_t* allocated,
204
207
  bool is_executable);
205
208
  static void Free(void* address, const size_t size);
209
+
210
+ // Mark code segments non-writable.
211
+ static void ProtectCode(void* address, const size_t size);
212
+
213
+ // Assign memory as a guard page so that access will cause an exception.
214
+ static void Guard(void* address, const size_t size);
215
+
206
216
  // Get the Alignment guaranteed by Allocate().
207
217
  static size_t AllocateAlignment();
208
218
 
209
- #ifdef ENABLE_HEAP_PROTECTION
210
- // Protect/unprotect a block of memory by marking it read-only/writable.
211
- static void Protect(void* address, size_t size);
212
- static void Unprotect(void* address, size_t size, bool is_executable);
213
- #endif
214
-
215
219
  // Returns an indication of whether a pointer is in a space that
216
220
  // has been allocated by Allocate(). This method may conservatively
217
221
  // always return false, but giving more accurate information may
@@ -288,6 +292,10 @@ class OS {
288
292
  // positions indicated by the members of the CpuFeature enum from globals.h
289
293
  static uint64_t CpuFeaturesImpliedByPlatform();
290
294
 
295
+ // Maximum size of the virtual memory. 0 means there is no artificial
296
+ // limit.
297
+ static intptr_t MaxVirtualMemory();
298
+
291
299
  // Returns the double constant NAN
292
300
  static double nan_value();
293
301
 
@@ -384,9 +392,9 @@ class Thread {
384
392
  int stack_size;
385
393
  };
386
394
 
387
- // Create new thread (with a value for storing in the TLS isolate field).
388
- Thread(Isolate* isolate, const Options& options);
389
- Thread(Isolate* isolate, const char* name);
395
+ // Create new thread.
396
+ explicit Thread(const Options& options);
397
+ explicit Thread(const char* name);
390
398
  virtual ~Thread();
391
399
 
392
400
  // Start new thread by calling the Run() method in the new thread.
@@ -433,7 +441,6 @@ class Thread {
433
441
  // A hint to the scheduler to let another thread run.
434
442
  static void YieldCPU();
435
443
 
436
- Isolate* isolate() const { return isolate_; }
437
444
 
438
445
  // The thread name length is limited to 16 based on Linux's implementation of
439
446
  // prctl().
@@ -447,7 +454,6 @@ class Thread {
447
454
 
448
455
  PlatformData* data_;
449
456
 
450
- Isolate* isolate_;
451
457
  char name_[kMaxThreadNameLength];
452
458
  int stack_size_;
453
459
 
@@ -601,7 +607,6 @@ class TickSample {
601
607
  bool has_external_callback : 1;
602
608
  };
603
609
 
604
- #ifdef ENABLE_LOGGING_AND_PROFILING
605
610
  class Sampler {
606
611
  public:
607
612
  // Initialize sampler.
@@ -660,8 +665,6 @@ class Sampler {
660
665
  };
661
666
 
662
667
 
663
- #endif // ENABLE_LOGGING_AND_PROFILING
664
-
665
668
  } } // namespace v8::internal
666
669
 
667
670
  #endif // V8_PLATFORM_H_
@@ -1,4 +1,4 @@
1
- // Copyright 2010 the V8 project authors. All rights reserved.
1
+ // Copyright 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:
@@ -37,7 +37,7 @@ struct PreparseDataConstants {
37
37
  public:
38
38
  // Layout and constants of the preparse data exchange format.
39
39
  static const unsigned kMagicNumber = 0xBadDead;
40
- static const unsigned kCurrentVersion = 6;
40
+ static const unsigned kCurrentVersion = 7;
41
41
 
42
42
  static const int kMagicOffset = 0;
43
43
  static const int kVersionOffset = 1;
@@ -48,7 +48,8 @@ class ParserRecorder {
48
48
  virtual void LogFunction(int start,
49
49
  int end,
50
50
  int literals,
51
- int properties) = 0;
51
+ int properties,
52
+ int strict_mode) = 0;
52
53
 
53
54
  // Logs a symbol creation of a literal or identifier.
54
55
  virtual void LogAsciiSymbol(int start, Vector<const char> literal) { }
@@ -84,11 +85,16 @@ class FunctionLoggingParserRecorder : public ParserRecorder {
84
85
  FunctionLoggingParserRecorder();
85
86
  virtual ~FunctionLoggingParserRecorder() {}
86
87
 
87
- virtual void LogFunction(int start, int end, int literals, int properties) {
88
+ virtual void LogFunction(int start,
89
+ int end,
90
+ int literals,
91
+ int properties,
92
+ int strict_mode) {
88
93
  function_store_.Add(start);
89
94
  function_store_.Add(end);
90
95
  function_store_.Add(literals);
91
96
  function_store_.Add(properties);
97
+ function_store_.Add(strict_mode);
92
98
  }
93
99
 
94
100
  // Logs an error message and marks the log as containing an error.
@@ -28,6 +28,7 @@
28
28
  #include "../include/v8-preparser.h"
29
29
 
30
30
  #include "globals.h"
31
+ #include "flags.h"
31
32
  #include "checks.h"
32
33
  #include "allocation.h"
33
34
  #include "utils.h"
@@ -158,23 +159,6 @@ class InputStreamUTF16Buffer : public UC16CharacterStream {
158
159
  };
159
160
 
160
161
 
161
- class StandAloneJavaScriptScanner : public JavaScriptScanner {
162
- public:
163
- explicit StandAloneJavaScriptScanner(UnicodeCache* unicode_cache)
164
- : JavaScriptScanner(unicode_cache) { }
165
-
166
- void Initialize(UC16CharacterStream* source) {
167
- source_ = source;
168
- Init();
169
- // Skip initial whitespace allowing HTML comment ends just like
170
- // after a newline and scan first token.
171
- has_line_terminator_before_next_ = true;
172
- SkipWhiteSpace();
173
- Scan();
174
- }
175
- };
176
-
177
-
178
162
  // Functions declared by allocation.h and implemented in both api.cc (for v8)
179
163
  // or here (for a stand-alone preparser).
180
164
 
@@ -194,7 +178,7 @@ PreParserData Preparse(UnicodeInputStream* input, size_t max_stack) {
194
178
  internal::InputStreamUTF16Buffer buffer(input);
195
179
  uintptr_t stack_limit = reinterpret_cast<uintptr_t>(&buffer) - max_stack;
196
180
  internal::UnicodeCache unicode_cache;
197
- internal::StandAloneJavaScriptScanner scanner(&unicode_cache);
181
+ internal::JavaScriptScanner scanner(&unicode_cache);
198
182
  scanner.Initialize(&buffer);
199
183
  internal::CompleteParserRecorder recorder;
200
184
  preparser::PreParser::PreParseResult result =
@@ -38,6 +38,8 @@
38
38
  #include "preparse-data.h"
39
39
  #include "preparser.h"
40
40
 
41
+ #include "conversions-inl.h"
42
+
41
43
  namespace v8 {
42
44
  namespace preparser {
43
45
 
@@ -54,8 +56,6 @@ namespace preparser {
54
56
  // That means that contextual checks (like a label being declared where
55
57
  // it is used) are generally omitted.
56
58
 
57
- namespace i = ::v8::internal;
58
-
59
59
  void PreParser::ReportUnexpectedToken(i::Token::Value token) {
60
60
  // We don't report stack overflows here, to avoid increasing the
61
61
  // stack depth even further. Instead we report it after parsing is
@@ -77,9 +77,14 @@ void PreParser::ReportUnexpectedToken(i::Token::Value token) {
77
77
  return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
78
78
  "unexpected_token_string", NULL);
79
79
  case i::Token::IDENTIFIER:
80
- case i::Token::FUTURE_RESERVED_WORD:
81
80
  return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
82
81
  "unexpected_token_identifier", NULL);
82
+ case i::Token::FUTURE_RESERVED_WORD:
83
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
84
+ "unexpected_reserved", NULL);
85
+ case i::Token::FUTURE_STRICT_RESERVED_WORD:
86
+ return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
87
+ "unexpected_strict_reserved", NULL);
83
88
  default:
84
89
  const char* name = i::Token::String(token);
85
90
  ReportMessageAt(source_location.beg_pos, source_location.end_pos,
@@ -107,6 +112,16 @@ void PreParser::CheckOctalLiteral(int beg_pos, int end_pos, bool* ok) {
107
112
  #undef DUMMY
108
113
 
109
114
 
115
+ PreParser::Statement PreParser::ParseSourceElement(bool* ok) {
116
+ switch (peek()) {
117
+ case i::Token::LET:
118
+ return ParseVariableStatement(kSourceElement, ok);
119
+ default:
120
+ return ParseStatement(ok);
121
+ }
122
+ }
123
+
124
+
110
125
  PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
111
126
  bool* ok) {
112
127
  // SourceElements ::
@@ -114,7 +129,7 @@ PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
114
129
 
115
130
  bool allow_directive_prologue = true;
116
131
  while (peek() != end_token) {
117
- Statement statement = ParseStatement(CHECK_OK);
132
+ Statement statement = ParseSourceElement(CHECK_OK);
118
133
  if (allow_directive_prologue) {
119
134
  if (statement.IsUseStrictLiteral()) {
120
135
  set_strict_mode();
@@ -167,7 +182,7 @@ PreParser::Statement PreParser::ParseStatement(bool* ok) {
167
182
 
168
183
  case i::Token::CONST:
169
184
  case i::Token::VAR:
170
- return ParseVariableStatement(ok);
185
+ return ParseVariableStatement(kStatement, ok);
171
186
 
172
187
  case i::Token::SEMICOLON:
173
188
  Next();
@@ -209,9 +224,6 @@ PreParser::Statement PreParser::ParseStatement(bool* ok) {
209
224
  case i::Token::FUNCTION:
210
225
  return ParseFunctionDeclaration(ok);
211
226
 
212
- case i::Token::NATIVE:
213
- return ParseNativeDeclaration(ok);
214
-
215
227
  case i::Token::DEBUGGER:
216
228
  return ParseDebuggerStatement(ok);
217
229
 
@@ -236,7 +248,7 @@ PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
236
248
  // Strict mode violation, using either reserved word or eval/arguments
237
249
  // as name of strict function.
238
250
  const char* type = "strict_function_name";
239
- if (identifier.IsFutureReserved()) {
251
+ if (identifier.IsFutureStrictReserved()) {
240
252
  type = "strict_reserved_word";
241
253
  }
242
254
  ReportMessageAt(location.beg_pos, location.end_pos, type, NULL);
@@ -246,29 +258,6 @@ PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
246
258
  }
247
259
 
248
260
 
249
- // Language extension which is only enabled for source files loaded
250
- // through the API's extension mechanism. A native function
251
- // declaration is resolved by looking up the function through a
252
- // callback provided by the extension.
253
- PreParser::Statement PreParser::ParseNativeDeclaration(bool* ok) {
254
- Expect(i::Token::NATIVE, CHECK_OK);
255
- Expect(i::Token::FUNCTION, CHECK_OK);
256
- ParseIdentifier(CHECK_OK);
257
- Expect(i::Token::LPAREN, CHECK_OK);
258
- bool done = (peek() == i::Token::RPAREN);
259
- while (!done) {
260
- ParseIdentifier(CHECK_OK);
261
- done = (peek() == i::Token::RPAREN);
262
- if (!done) {
263
- Expect(i::Token::COMMA, CHECK_OK);
264
- }
265
- }
266
- Expect(i::Token::RPAREN, CHECK_OK);
267
- Expect(i::Token::SEMICOLON, CHECK_OK);
268
- return Statement::Default();
269
- }
270
-
271
-
272
261
  PreParser::Statement PreParser::ParseBlock(bool* ok) {
273
262
  // Block ::
274
263
  // '{' Statement* '}'
@@ -279,7 +268,7 @@ PreParser::Statement PreParser::ParseBlock(bool* ok) {
279
268
  Expect(i::Token::LBRACE, CHECK_OK);
280
269
  while (peek() != i::Token::RBRACE) {
281
270
  i::Scanner::Location start_location = scanner_->peek_location();
282
- Statement statement = ParseStatement(CHECK_OK);
271
+ Statement statement = ParseSourceElement(CHECK_OK);
283
272
  i::Scanner::Location end_location = scanner_->location();
284
273
  if (strict_mode() && statement.IsFunctionDeclaration()) {
285
274
  ReportMessageAt(start_location.beg_pos, end_location.end_pos,
@@ -293,11 +282,15 @@ PreParser::Statement PreParser::ParseBlock(bool* ok) {
293
282
  }
294
283
 
295
284
 
296
- PreParser::Statement PreParser::ParseVariableStatement(bool* ok) {
285
+ PreParser::Statement PreParser::ParseVariableStatement(
286
+ VariableDeclarationContext var_context,
287
+ bool* ok) {
297
288
  // VariableStatement ::
298
289
  // VariableDeclarations ';'
299
290
 
300
- Statement result = ParseVariableDeclarations(true, NULL, CHECK_OK);
291
+ Statement result = ParseVariableDeclarations(var_context,
292
+ NULL,
293
+ CHECK_OK);
301
294
  ExpectSemicolon(CHECK_OK);
302
295
  return result;
303
296
  }
@@ -308,9 +301,10 @@ PreParser::Statement PreParser::ParseVariableStatement(bool* ok) {
308
301
  // *var is untouched; in particular, it is the caller's responsibility
309
302
  // to initialize it properly. This mechanism is also used for the parsing
310
303
  // of 'for-in' loops.
311
- PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
312
- int* num_decl,
313
- bool* ok) {
304
+ PreParser::Statement PreParser::ParseVariableDeclarations(
305
+ VariableDeclarationContext var_context,
306
+ int* num_decl,
307
+ bool* ok) {
314
308
  // VariableDeclarations ::
315
309
  // ('var' | 'const') (Identifier ('=' AssignmentExpression)?)+[',']
316
310
 
@@ -325,13 +319,25 @@ PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
325
319
  return Statement::Default();
326
320
  }
327
321
  Consume(i::Token::CONST);
322
+ } else if (peek() == i::Token::LET) {
323
+ if (var_context != kSourceElement &&
324
+ var_context != kForStatement) {
325
+ i::Scanner::Location location = scanner_->peek_location();
326
+ ReportMessageAt(location.beg_pos, location.end_pos,
327
+ "unprotected_let", NULL);
328
+ *ok = false;
329
+ return Statement::Default();
330
+ }
331
+ Consume(i::Token::LET);
328
332
  } else {
329
333
  *ok = false;
330
334
  return Statement::Default();
331
335
  }
332
336
 
333
- // The scope of a variable/const declared anywhere inside a function
334
- // is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). .
337
+ // The scope of a var/const declared variable anywhere inside a function
338
+ // is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). The scope
339
+ // of a let declared variable is the scope of the immediately enclosing
340
+ // block.
335
341
  int nvars = 0; // the number of variables declared
336
342
  do {
337
343
  // Parse variable name.
@@ -347,7 +353,7 @@ PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
347
353
  nvars++;
348
354
  if (peek() == i::Token::ASSIGN) {
349
355
  Expect(i::Token::ASSIGN, CHECK_OK);
350
- ParseAssignmentExpression(accept_IN, CHECK_OK);
356
+ ParseAssignmentExpression(var_context != kForStatement, CHECK_OK);
351
357
  }
352
358
  } while (peek() == i::Token::COMMA);
353
359
 
@@ -362,8 +368,9 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) {
362
368
  // Identifier ':' Statement
363
369
 
364
370
  Expression expr = ParseExpression(true, CHECK_OK);
365
- if (peek() == i::Token::COLON && expr.IsRawIdentifier()) {
366
- if (!strict_mode() || !expr.AsIdentifier().IsFutureReserved()) {
371
+ if (expr.IsRawIdentifier()) {
372
+ if (peek() == i::Token::COLON &&
373
+ (!strict_mode() || !expr.AsIdentifier().IsFutureReserved())) {
367
374
  Consume(i::Token::COLON);
368
375
  i::Scanner::Location start_location = scanner_->peek_location();
369
376
  Statement statement = ParseStatement(CHECK_OK);
@@ -375,6 +382,9 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) {
375
382
  }
376
383
  return Statement::Default();
377
384
  }
385
+ // Preparsing is disabled for extensions (because the extension details
386
+ // aren't passed to lazily compiled functions), so we don't
387
+ // accept "native function" in the preparser.
378
388
  }
379
389
  // Parsed expression statement.
380
390
  ExpectSemicolon(CHECK_OK);
@@ -405,7 +415,7 @@ PreParser::Statement PreParser::ParseContinueStatement(bool* ok) {
405
415
 
406
416
  Expect(i::Token::CONTINUE, CHECK_OK);
407
417
  i::Token::Value tok = peek();
408
- if (!scanner_->has_line_terminator_before_next() &&
418
+ if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
409
419
  tok != i::Token::SEMICOLON &&
410
420
  tok != i::Token::RBRACE &&
411
421
  tok != i::Token::EOS) {
@@ -422,7 +432,7 @@ PreParser::Statement PreParser::ParseBreakStatement(bool* ok) {
422
432
 
423
433
  Expect(i::Token::BREAK, CHECK_OK);
424
434
  i::Token::Value tok = peek();
425
- if (!scanner_->has_line_terminator_before_next() &&
435
+ if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
426
436
  tok != i::Token::SEMICOLON &&
427
437
  tok != i::Token::RBRACE &&
428
438
  tok != i::Token::EOS) {
@@ -448,7 +458,7 @@ PreParser::Statement PreParser::ParseReturnStatement(bool* ok) {
448
458
  // This is not handled during preparsing.
449
459
 
450
460
  i::Token::Value tok = peek();
451
- if (!scanner_->has_line_terminator_before_next() &&
461
+ if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
452
462
  tok != i::Token::SEMICOLON &&
453
463
  tok != i::Token::RBRACE &&
454
464
  tok != i::Token::EOS) {
@@ -552,9 +562,10 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) {
552
562
  Expect(i::Token::FOR, CHECK_OK);
553
563
  Expect(i::Token::LPAREN, CHECK_OK);
554
564
  if (peek() != i::Token::SEMICOLON) {
555
- if (peek() == i::Token::VAR || peek() == i::Token::CONST) {
565
+ if (peek() == i::Token::VAR || peek() == i::Token::CONST ||
566
+ peek() == i::Token::LET) {
556
567
  int decl_count;
557
- ParseVariableDeclarations(false, &decl_count, CHECK_OK);
568
+ ParseVariableDeclarations(kForStatement, &decl_count, CHECK_OK);
558
569
  if (peek() == i::Token::IN && decl_count == 1) {
559
570
  Expect(i::Token::IN, CHECK_OK);
560
571
  ParseExpression(true, CHECK_OK);
@@ -599,7 +610,7 @@ PreParser::Statement PreParser::ParseThrowStatement(bool* ok) {
599
610
  // 'throw' [no line terminator] Expression ';'
600
611
 
601
612
  Expect(i::Token::THROW, CHECK_OK);
602
- if (scanner_->has_line_terminator_before_next()) {
613
+ if (scanner_->HasAnyLineTerminatorBeforeNext()) {
603
614
  i::JavaScriptScanner::Location pos = scanner_->location();
604
615
  ReportMessageAt(pos.beg_pos, pos.end_pos,
605
616
  "newline_after_throw", NULL);
@@ -822,7 +833,7 @@ PreParser::Expression PreParser::ParsePostfixExpression(bool* ok) {
822
833
 
823
834
  i::Scanner::Location before = scanner_->peek_location();
824
835
  Expression expression = ParseLeftHandSideExpression(CHECK_OK);
825
- if (!scanner_->has_line_terminator_before_next() &&
836
+ if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
826
837
  i::Token::IsCountOp(peek())) {
827
838
  if (strict_mode() && expression.IsIdentifier() &&
828
839
  expression.AsIdentifier().IsEvalOrArguments()) {
@@ -1001,7 +1012,16 @@ PreParser::Expression PreParser::ParsePrimaryExpression(bool* ok) {
1001
1012
  break;
1002
1013
  }
1003
1014
 
1004
- case i::Token::FUTURE_RESERVED_WORD:
1015
+ case i::Token::FUTURE_RESERVED_WORD: {
1016
+ Next();
1017
+ i::Scanner::Location location = scanner_->location();
1018
+ ReportMessageAt(location.beg_pos, location.end_pos,
1019
+ "reserved_word", NULL);
1020
+ *ok = false;
1021
+ return Expression::Default();
1022
+ }
1023
+
1024
+ case i::Token::FUTURE_STRICT_RESERVED_WORD:
1005
1025
  if (strict_mode()) {
1006
1026
  Next();
1007
1027
  i::Scanner::Location location = scanner_->location();
@@ -1100,15 +1120,17 @@ PreParser::Expression PreParser::ParseObjectLiteral(bool* ok) {
1100
1120
  i::Token::Value next = peek();
1101
1121
  switch (next) {
1102
1122
  case i::Token::IDENTIFIER:
1103
- case i::Token::FUTURE_RESERVED_WORD: {
1123
+ case i::Token::FUTURE_RESERVED_WORD:
1124
+ case i::Token::FUTURE_STRICT_RESERVED_WORD: {
1104
1125
  bool is_getter = false;
1105
1126
  bool is_setter = false;
1106
- ParseIdentifierOrGetOrSet(&is_getter, &is_setter, CHECK_OK);
1127
+ ParseIdentifierNameOrGetOrSet(&is_getter, &is_setter, CHECK_OK);
1107
1128
  if ((is_getter || is_setter) && peek() != i::Token::COLON) {
1108
1129
  i::Token::Value name = Next();
1109
1130
  bool is_keyword = i::Token::IsKeyword(name);
1110
1131
  if (name != i::Token::IDENTIFIER &&
1111
1132
  name != i::Token::FUTURE_RESERVED_WORD &&
1133
+ name != i::Token::FUTURE_STRICT_RESERVED_WORD &&
1112
1134
  name != i::Token::NUMBER &&
1113
1135
  name != i::Token::STRING &&
1114
1136
  !is_keyword) {
@@ -1256,7 +1278,8 @@ PreParser::Expression PreParser::ParseFunctionLiteral(bool* ok) {
1256
1278
  int end_pos = scanner_->location().end_pos;
1257
1279
  log_->LogFunction(function_block_pos, end_pos,
1258
1280
  function_scope.materialized_literal_count(),
1259
- function_scope.expected_properties());
1281
+ function_scope.expected_properties(),
1282
+ strict_mode() ? 1 : 0);
1260
1283
  } else {
1261
1284
  ParseSourceElements(i::Token::RBRACE, CHECK_OK);
1262
1285
  Expect(i::Token::RBRACE, CHECK_OK);
@@ -1295,7 +1318,7 @@ void PreParser::ExpectSemicolon(bool* ok) {
1295
1318
  Next();
1296
1319
  return;
1297
1320
  }
1298
- if (scanner_->has_line_terminator_before_next() ||
1321
+ if (scanner_->HasAnyLineTerminatorBeforeNext() ||
1299
1322
  tok == i::Token::RBRACE ||
1300
1323
  tok == i::Token::EOS) {
1301
1324
  return;
@@ -1333,6 +1356,9 @@ PreParser::Identifier PreParser::GetIdentifierSymbol() {
1333
1356
  LogSymbol();
1334
1357
  if (scanner_->current_token() == i::Token::FUTURE_RESERVED_WORD) {
1335
1358
  return Identifier::FutureReserved();
1359
+ } else if (scanner_->current_token() ==
1360
+ i::Token::FUTURE_STRICT_RESERVED_WORD) {
1361
+ return Identifier::FutureStrictReserved();
1336
1362
  }
1337
1363
  if (scanner_->is_literal_ascii()) {
1338
1364
  // Detect strict-mode poison words.
@@ -1350,11 +1376,22 @@ PreParser::Identifier PreParser::GetIdentifierSymbol() {
1350
1376
 
1351
1377
 
1352
1378
  PreParser::Identifier PreParser::ParseIdentifier(bool* ok) {
1353
- if (!Check(i::Token::FUTURE_RESERVED_WORD)) {
1354
- Expect(i::Token::IDENTIFIER, ok);
1355
- if (!*ok) return Identifier::Default();
1379
+ i::Token::Value next = Next();
1380
+ switch (next) {
1381
+ case i::Token::FUTURE_RESERVED_WORD: {
1382
+ i::Scanner::Location location = scanner_->location();
1383
+ ReportMessageAt(location.beg_pos, location.end_pos,
1384
+ "reserved_word", NULL);
1385
+ *ok = false;
1386
+ }
1387
+ // FALLTHROUGH
1388
+ case i::Token::FUTURE_STRICT_RESERVED_WORD:
1389
+ case i::Token::IDENTIFIER:
1390
+ return GetIdentifierSymbol();
1391
+ default:
1392
+ *ok = false;
1393
+ return Identifier::Default();
1356
1394
  }
1357
- return GetIdentifierSymbol();
1358
1395
  }
1359
1396
 
1360
1397
 
@@ -1394,6 +1431,8 @@ void PreParser::StrictModeIdentifierViolation(i::Scanner::Location location,
1394
1431
  bool* ok) {
1395
1432
  const char* type = eval_args_type;
1396
1433
  if (identifier.IsFutureReserved()) {
1434
+ type = "reserved_word";
1435
+ } else if (identifier.IsFutureStrictReserved()) {
1397
1436
  type = "strict_reserved_word";
1398
1437
  }
1399
1438
  if (strict_mode()) {
@@ -1416,7 +1455,8 @@ PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
1416
1455
  return Identifier::Default();
1417
1456
  }
1418
1457
  if (next == i::Token::IDENTIFIER ||
1419
- next == i::Token::FUTURE_RESERVED_WORD) {
1458
+ next == i::Token::FUTURE_RESERVED_WORD ||
1459
+ next == i::Token::FUTURE_STRICT_RESERVED_WORD) {
1420
1460
  return GetIdentifierSymbol();
1421
1461
  }
1422
1462
  *ok = false;
@@ -1428,10 +1468,10 @@ PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
1428
1468
 
1429
1469
  // This function reads an identifier and determines whether or not it
1430
1470
  // is 'get' or 'set'.
1431
- PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get,
1432
- bool* is_set,
1433
- bool* ok) {
1434
- Identifier result = ParseIdentifier(ok);
1471
+ PreParser::Identifier PreParser::ParseIdentifierNameOrGetOrSet(bool* is_get,
1472
+ bool* is_set,
1473
+ bool* ok) {
1474
+ Identifier result = ParseIdentifierName(ok);
1435
1475
  if (!*ok) return Identifier::Default();
1436
1476
  if (scanner_->is_literal_ascii() &&
1437
1477
  scanner_->literal_length() == 3) {
@@ -1445,6 +1485,7 @@ PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get,
1445
1485
  bool PreParser::peek_any_identifier() {
1446
1486
  i::Token::Value next = peek();
1447
1487
  return next == i::Token::IDENTIFIER ||
1448
- next == i::Token::FUTURE_RESERVED_WORD;
1488
+ next == i::Token::FUTURE_RESERVED_WORD ||
1489
+ next == i::Token::FUTURE_STRICT_RESERVED_WORD;
1449
1490
  }
1450
1491
  } } // v8::preparser