libv8 3.3.10.4 → 3.5.10.beta1

Sign up to get free protection for your applications and to get access to all the features.
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