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
@@ -153,7 +153,7 @@ function JSONSerialize(key, holder, replacer, stack, indent, gap) {
153
153
  if (IS_STRING(value)) {
154
154
  return %QuoteJSONString(value);
155
155
  } else if (IS_NUMBER(value)) {
156
- return NUMBER_IS_FINITE(value) ? $String(value) : "null";
156
+ return JSON_NUMBER_TO_STRING(value);
157
157
  } else if (IS_BOOLEAN(value)) {
158
158
  return value ? "true" : "false";
159
159
  } else if (IS_NULL(value)) {
@@ -164,7 +164,7 @@ function JSONSerialize(key, holder, replacer, stack, indent, gap) {
164
164
  return SerializeArray(value, replacer, stack, indent, gap);
165
165
  } else if (IS_NUMBER_WRAPPER(value)) {
166
166
  value = ToNumber(value);
167
- return NUMBER_IS_FINITE(value) ? ToString(value) : "null";
167
+ return JSON_NUMBER_TO_STRING(value);
168
168
  } else if (IS_STRING_WRAPPER(value)) {
169
169
  return %QuoteJSONString(ToString(value));
170
170
  } else if (IS_BOOLEAN_WRAPPER(value)) {
@@ -191,31 +191,37 @@ function BasicSerializeArray(value, stack, builder) {
191
191
  var val = value[0];
192
192
  if (IS_STRING(val)) {
193
193
  // First entry is a string. Remaining entries are likely to be strings too.
194
- builder.push(%QuoteJSONString(val));
195
- for (var i = 1; i < len; i++) {
196
- val = value[i];
197
- if (IS_STRING(val)) {
198
- builder.push(%QuoteJSONStringComma(val));
199
- } else {
200
- builder.push(",");
201
- var before = builder.length;
202
- BasicJSONSerialize(i, value[i], stack, builder);
203
- if (before == builder.length) builder[before - 1] = ",null";
194
+ var array_string = %QuoteJSONStringArray(value);
195
+ if (!IS_UNDEFINED(array_string)) {
196
+ // array_string also includes bracket characters so we are done.
197
+ builder[builder.length - 1] = array_string;
198
+ stack.pop();
199
+ return;
200
+ } else {
201
+ builder.push(%QuoteJSONString(val));
202
+ for (var i = 1; i < len; i++) {
203
+ val = value[i];
204
+ if (IS_STRING(val)) {
205
+ builder.push(%QuoteJSONStringComma(val));
206
+ } else {
207
+ builder.push(",");
208
+ var before = builder.length;
209
+ BasicJSONSerialize(i, val, stack, builder);
210
+ if (before == builder.length) builder[before - 1] = ",null";
211
+ }
204
212
  }
205
213
  }
206
214
  } else if (IS_NUMBER(val)) {
207
215
  // First entry is a number. Remaining entries are likely to be numbers too.
208
- builder.push(NUMBER_IS_FINITE(val) ? %_NumberToString(val) : "null");
216
+ builder.push(JSON_NUMBER_TO_STRING(val));
209
217
  for (var i = 1; i < len; i++) {
210
218
  builder.push(",");
211
219
  val = value[i];
212
220
  if (IS_NUMBER(val)) {
213
- builder.push(NUMBER_IS_FINITE(val)
214
- ? %_NumberToString(val)
215
- : "null");
221
+ builder.push(JSON_NUMBER_TO_STRING(val));
216
222
  } else {
217
223
  var before = builder.length;
218
- BasicJSONSerialize(i, value[i], stack, builder);
224
+ BasicJSONSerialize(i, val, stack, builder);
219
225
  if (before == builder.length) builder[before - 1] = ",null";
220
226
  }
221
227
  }
@@ -226,13 +232,12 @@ function BasicSerializeArray(value, stack, builder) {
226
232
  for (var i = 1; i < len; i++) {
227
233
  builder.push(",");
228
234
  before = builder.length;
229
- val = value[i];
230
- BasicJSONSerialize(i, val, stack, builder);
235
+ BasicJSONSerialize(i, value[i], stack, builder);
231
236
  if (before == builder.length) builder[before - 1] = ",null";
232
237
  }
233
238
  }
234
239
  stack.pop();
235
- builder.push("]");
240
+ builder.push("]");
236
241
  }
237
242
 
238
243
 
@@ -273,9 +278,9 @@ function BasicJSONSerialize(key, value, stack, builder) {
273
278
  }
274
279
  }
275
280
  if (IS_STRING(value)) {
276
- builder.push(%QuoteJSONString(value));
281
+ builder.push(value !== "" ? %QuoteJSONString(value) : '""');
277
282
  } else if (IS_NUMBER(value)) {
278
- builder.push(NUMBER_IS_FINITE(value) ? %_NumberToString(value) : "null");
283
+ builder.push(JSON_NUMBER_TO_STRING(value));
279
284
  } else if (IS_BOOLEAN(value)) {
280
285
  builder.push(value ? "true" : "false");
281
286
  } else if (IS_NULL(value)) {
@@ -285,7 +290,7 @@ function BasicJSONSerialize(key, value, stack, builder) {
285
290
  // Unwrap value if necessary
286
291
  if (IS_NUMBER_WRAPPER(value)) {
287
292
  value = ToNumber(value);
288
- builder.push(NUMBER_IS_FINITE(value) ? %_NumberToString(value) : "null");
293
+ builder.push(JSON_NUMBER_TO_STRING(value));
289
294
  } else if (IS_STRING_WRAPPER(value)) {
290
295
  builder.push(%QuoteJSONString(ToString(value)));
291
296
  } else if (IS_BOOLEAN_WRAPPER(value)) {
@@ -1,4 +1,4 @@
1
- // Copyright 2006-2009 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:
@@ -127,7 +127,7 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
127
127
  return re;
128
128
  }
129
129
  pattern = FlattenGetString(pattern);
130
- CompilationZoneScope zone_scope(isolate, DELETE_ON_EXIT);
130
+ ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
131
131
  PostponeInterruptsScope postpone(isolate);
132
132
  RegExpCompileData parse_result;
133
133
  FlatStringReader reader(isolate, pattern);
@@ -212,19 +212,7 @@ static void SetAtomLastCapture(FixedArray* array,
212
212
  RegExpImpl::SetCapture(array, 1, to);
213
213
  }
214
214
 
215
- /* template <typename SubjectChar>, typename PatternChar>
216
- static int ReStringMatch(Vector<const SubjectChar> sub_vector,
217
- Vector<const PatternChar> pat_vector,
218
- int start_index) {
219
215
 
220
- int pattern_length = pat_vector.length();
221
- if (pattern_length == 0) return start_index;
222
-
223
- int subject_length = sub_vector.length();
224
- if (start_index + pattern_length > subject_length) return -1;
225
- return SearchString(sub_vector, pat_vector, start_index);
226
- }
227
- */
228
216
  Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
229
217
  Handle<String> subject,
230
218
  int index,
@@ -236,38 +224,41 @@ Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
236
224
 
237
225
  if (!subject->IsFlat()) FlattenString(subject);
238
226
  AssertNoAllocation no_heap_allocation; // ensure vectors stay valid
239
- // Extract flattened substrings of cons strings before determining asciiness.
240
- String* seq_sub = *subject;
241
- if (seq_sub->IsConsString()) seq_sub = ConsString::cast(seq_sub)->first();
242
227
 
243
228
  String* needle = String::cast(re->DataAt(JSRegExp::kAtomPatternIndex));
244
229
  int needle_len = needle->length();
230
+ ASSERT(needle->IsFlat());
245
231
 
246
232
  if (needle_len != 0) {
247
- if (index + needle_len > subject->length())
248
- return isolate->factory()->null_value();
233
+ if (index + needle_len > subject->length()) {
234
+ return isolate->factory()->null_value();
235
+ }
249
236
 
237
+ String::FlatContent needle_content = needle->GetFlatContent();
238
+ String::FlatContent subject_content = subject->GetFlatContent();
239
+ ASSERT(needle_content.IsFlat());
240
+ ASSERT(subject_content.IsFlat());
250
241
  // dispatch on type of strings
251
- index = (needle->IsAsciiRepresentation()
252
- ? (seq_sub->IsAsciiRepresentation()
242
+ index = (needle_content.IsAscii()
243
+ ? (subject_content.IsAscii()
253
244
  ? SearchString(isolate,
254
- seq_sub->ToAsciiVector(),
255
- needle->ToAsciiVector(),
245
+ subject_content.ToAsciiVector(),
246
+ needle_content.ToAsciiVector(),
256
247
  index)
257
248
  : SearchString(isolate,
258
- seq_sub->ToUC16Vector(),
259
- needle->ToAsciiVector(),
249
+ subject_content.ToUC16Vector(),
250
+ needle_content.ToAsciiVector(),
260
251
  index))
261
- : (seq_sub->IsAsciiRepresentation()
252
+ : (subject_content.IsAscii()
262
253
  ? SearchString(isolate,
263
- seq_sub->ToAsciiVector(),
264
- needle->ToUC16Vector(),
254
+ subject_content.ToAsciiVector(),
255
+ needle_content.ToUC16Vector(),
265
256
  index)
266
257
  : SearchString(isolate,
267
- seq_sub->ToUC16Vector(),
268
- needle->ToUC16Vector(),
258
+ subject_content.ToUC16Vector(),
259
+ needle_content.ToUC16Vector(),
269
260
  index)));
270
- if (index == -1) return FACTORY->null_value();
261
+ if (index == -1) return isolate->factory()->null_value();
271
262
  }
272
263
  ASSERT(last_match_info->HasFastElements());
273
264
 
@@ -295,31 +286,67 @@ bool RegExpImpl::EnsureCompiledIrregexp(Handle<JSRegExp> re, bool is_ascii) {
295
286
  #else // V8_INTERPRETED_REGEXP (RegExp native code)
296
287
  if (compiled_code->IsCode()) return true;
297
288
  #endif
289
+ // We could potentially have marked this as flushable, but have kept
290
+ // a saved version if we did not flush it yet.
291
+ Object* saved_code = re->DataAt(JSRegExp::saved_code_index(is_ascii));
292
+ if (saved_code->IsCode()) {
293
+ // Reinstate the code in the original place.
294
+ re->SetDataAt(JSRegExp::code_index(is_ascii), saved_code);
295
+ ASSERT(compiled_code->IsSmi());
296
+ return true;
297
+ }
298
298
  return CompileIrregexp(re, is_ascii);
299
299
  }
300
300
 
301
301
 
302
+ static bool CreateRegExpErrorObjectAndThrow(Handle<JSRegExp> re,
303
+ bool is_ascii,
304
+ Handle<String> error_message,
305
+ Isolate* isolate) {
306
+ Factory* factory = isolate->factory();
307
+ Handle<FixedArray> elements = factory->NewFixedArray(2);
308
+ elements->set(0, re->Pattern());
309
+ elements->set(1, *error_message);
310
+ Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
311
+ Handle<Object> regexp_err =
312
+ factory->NewSyntaxError("malformed_regexp", array);
313
+ isolate->Throw(*regexp_err);
314
+ return false;
315
+ }
316
+
317
+
302
318
  bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, bool is_ascii) {
303
319
  // Compile the RegExp.
304
320
  Isolate* isolate = re->GetIsolate();
305
- CompilationZoneScope zone_scope(isolate, DELETE_ON_EXIT);
321
+ ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
306
322
  PostponeInterruptsScope postpone(isolate);
323
+ // If we had a compilation error the last time this is saved at the
324
+ // saved code index.
307
325
  Object* entry = re->DataAt(JSRegExp::code_index(is_ascii));
308
- if (entry->IsJSObject()) {
309
- // If it's a JSObject, a previous compilation failed and threw this object.
310
- // Re-throw the object without trying again.
311
- isolate->Throw(entry);
326
+ // When arriving here entry can only be a smi, either representing an
327
+ // uncompiled regexp, a previous compilation error, or code that has
328
+ // been flushed.
329
+ ASSERT(entry->IsSmi());
330
+ int entry_value = Smi::cast(entry)->value();
331
+ ASSERT(entry_value == JSRegExp::kUninitializedValue ||
332
+ entry_value == JSRegExp::kCompilationErrorValue ||
333
+ (entry_value < JSRegExp::kCodeAgeMask && entry_value >= 0));
334
+
335
+ if (entry_value == JSRegExp::kCompilationErrorValue) {
336
+ // A previous compilation failed and threw an error which we store in
337
+ // the saved code index (we store the error message, not the actual
338
+ // error). Recreate the error object and throw it.
339
+ Object* error_string = re->DataAt(JSRegExp::saved_code_index(is_ascii));
340
+ ASSERT(error_string->IsString());
341
+ Handle<String> error_message(String::cast(error_string));
342
+ CreateRegExpErrorObjectAndThrow(re, is_ascii, error_message, isolate);
312
343
  return false;
313
344
  }
314
- ASSERT(entry->IsTheHole());
315
345
 
316
346
  JSRegExp::Flags flags = re->GetFlags();
317
347
 
318
348
  Handle<String> pattern(re->Pattern());
319
- if (!pattern->IsFlat()) {
320
- FlattenString(pattern);
321
- }
322
-
349
+ if (!pattern->IsFlat()) FlattenString(pattern);
323
350
  RegExpCompileData compile_data;
324
351
  FlatStringReader reader(isolate, pattern);
325
352
  if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
@@ -340,17 +367,9 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, bool is_ascii) {
340
367
  is_ascii);
341
368
  if (result.error_message != NULL) {
342
369
  // Unable to compile regexp.
343
- Factory* factory = isolate->factory();
344
- Handle<FixedArray> elements = factory->NewFixedArray(2);
345
- elements->set(0, *pattern);
346
370
  Handle<String> error_message =
347
- factory->NewStringFromUtf8(CStrVector(result.error_message));
348
- elements->set(1, *error_message);
349
- Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
350
- Handle<Object> regexp_err =
351
- factory->NewSyntaxError("malformed_regexp", array);
352
- isolate->Throw(*regexp_err);
353
- re->SetDataAt(JSRegExp::code_index(is_ascii), *regexp_err);
371
+ isolate->factory()->NewStringFromUtf8(CStrVector(result.error_message));
372
+ CreateRegExpErrorObjectAndThrow(re, is_ascii, error_message, isolate);
354
373
  return false;
355
374
  }
356
375
 
@@ -411,22 +430,12 @@ void RegExpImpl::IrregexpInitialize(Handle<JSRegExp> re,
411
430
 
412
431
  int RegExpImpl::IrregexpPrepare(Handle<JSRegExp> regexp,
413
432
  Handle<String> subject) {
414
- if (!subject->IsFlat()) {
415
- FlattenString(subject);
416
- }
433
+ if (!subject->IsFlat()) FlattenString(subject);
434
+
417
435
  // Check the asciiness of the underlying storage.
418
- bool is_ascii;
419
- {
420
- AssertNoAllocation no_gc;
421
- String* sequential_string = *subject;
422
- if (subject->IsConsString()) {
423
- sequential_string = ConsString::cast(*subject)->first();
424
- }
425
- is_ascii = sequential_string->IsAsciiRepresentation();
426
- }
427
- if (!EnsureCompiledIrregexp(regexp, is_ascii)) {
428
- return -1;
429
- }
436
+ bool is_ascii = subject->IsAsciiRepresentationUnderneath();
437
+ if (!EnsureCompiledIrregexp(regexp, is_ascii)) return -1;
438
+
430
439
  #ifdef V8_INTERPRETED_REGEXP
431
440
  // Byte-code regexp needs space allocated for all its registers.
432
441
  return IrregexpNumberOfRegisters(FixedArray::cast(regexp->data()));
@@ -451,15 +460,12 @@ RegExpImpl::IrregexpResult RegExpImpl::IrregexpExecOnce(
451
460
  ASSERT(index <= subject->length());
452
461
  ASSERT(subject->IsFlat());
453
462
 
454
- // A flat ASCII string might have a two-byte first part.
455
- if (subject->IsConsString()) {
456
- subject = Handle<String>(ConsString::cast(*subject)->first(), isolate);
457
- }
463
+ bool is_ascii = subject->IsAsciiRepresentationUnderneath();
458
464
 
459
465
  #ifndef V8_INTERPRETED_REGEXP
460
466
  ASSERT(output.length() >= (IrregexpNumberOfCaptures(*irregexp) + 1) * 2);
461
467
  do {
462
- bool is_ascii = subject->IsAsciiRepresentation();
468
+ EnsureCompiledIrregexp(regexp, is_ascii);
463
469
  Handle<Code> code(IrregexpNativeCode(*irregexp, is_ascii), isolate);
464
470
  NativeRegExpMacroAssembler::Result res =
465
471
  NativeRegExpMacroAssembler::Match(code,
@@ -486,13 +492,13 @@ RegExpImpl::IrregexpResult RegExpImpl::IrregexpExecOnce(
486
492
  // being internal and external, and even between being ASCII and UC16,
487
493
  // but the characters are always the same).
488
494
  IrregexpPrepare(regexp, subject);
495
+ is_ascii = subject->IsAsciiRepresentationUnderneath();
489
496
  } while (true);
490
497
  UNREACHABLE();
491
498
  return RE_EXCEPTION;
492
499
  #else // V8_INTERPRETED_REGEXP
493
500
 
494
501
  ASSERT(output.length() >= IrregexpNumberOfRegisters(*irregexp));
495
- bool is_ascii = subject->IsAsciiRepresentation();
496
502
  // We must have done EnsureCompiledIrregexp, so we can get the number of
497
503
  // registers.
498
504
  int* register_vector = output.start();
@@ -810,7 +816,13 @@ class RegExpCompiler {
810
816
  inline bool ignore_case() { return ignore_case_; }
811
817
  inline bool ascii() { return ascii_; }
812
818
 
819
+ int current_expansion_factor() { return current_expansion_factor_; }
820
+ void set_current_expansion_factor(int value) {
821
+ current_expansion_factor_ = value;
822
+ }
823
+
813
824
  static const int kNoRegister = -1;
825
+
814
826
  private:
815
827
  EndNode* accept_;
816
828
  int next_register_;
@@ -820,6 +832,7 @@ class RegExpCompiler {
820
832
  bool ignore_case_;
821
833
  bool ascii_;
822
834
  bool reg_exp_too_big_;
835
+ int current_expansion_factor_;
823
836
  };
824
837
 
825
838
 
@@ -847,7 +860,8 @@ RegExpCompiler::RegExpCompiler(int capture_count, bool ignore_case, bool ascii)
847
860
  recursion_depth_(0),
848
861
  ignore_case_(ignore_case),
849
862
  ascii_(ascii),
850
- reg_exp_too_big_(false) {
863
+ reg_exp_too_big_(false),
864
+ current_expansion_factor_(1) {
851
865
  accept_ = new EndNode(EndNode::ACCEPT);
852
866
  ASSERT(next_register_ - 1 <= RegExpMacroAssembler::kMaxRegister);
853
867
  }
@@ -1918,13 +1932,10 @@ void TextNode::GetQuickCheckDetails(QuickCheckDetails* details,
1918
1932
  ASSERT(characters_filled_in < details->characters());
1919
1933
  int characters = details->characters();
1920
1934
  int char_mask;
1921
- int char_shift;
1922
1935
  if (compiler->ascii()) {
1923
1936
  char_mask = String::kMaxAsciiCharCode;
1924
- char_shift = 8;
1925
1937
  } else {
1926
1938
  char_mask = String::kMaxUC16CharCode;
1927
- char_shift = 16;
1928
1939
  }
1929
1940
  for (int k = 0; k < elms_->length(); k++) {
1930
1941
  TextElement elm = elms_->at(k);
@@ -2767,6 +2778,7 @@ class AlternativeGenerationList {
2767
2778
  AlternativeGeneration* at(int i) {
2768
2779
  return alt_gens_[i];
2769
2780
  }
2781
+
2770
2782
  private:
2771
2783
  static const int kAFew = 10;
2772
2784
  ZoneList<AlternativeGeneration*> alt_gens_;
@@ -3326,6 +3338,7 @@ class TableEntryHeaderPrinter {
3326
3338
  }
3327
3339
  stream()->Add("}}");
3328
3340
  }
3341
+
3329
3342
  private:
3330
3343
  bool first_;
3331
3344
  StringStream* stream() { return stream_; }
@@ -3727,6 +3740,44 @@ RegExpNode* RegExpQuantifier::ToNode(RegExpCompiler* compiler,
3727
3740
  }
3728
3741
 
3729
3742
 
3743
+ // Scoped object to keep track of how much we unroll quantifier loops in the
3744
+ // regexp graph generator.
3745
+ class RegExpExpansionLimiter {
3746
+ public:
3747
+ static const int kMaxExpansionFactor = 6;
3748
+ RegExpExpansionLimiter(RegExpCompiler* compiler, int factor)
3749
+ : compiler_(compiler),
3750
+ saved_expansion_factor_(compiler->current_expansion_factor()),
3751
+ ok_to_expand_(saved_expansion_factor_ <= kMaxExpansionFactor) {
3752
+ ASSERT(factor > 0);
3753
+ if (ok_to_expand_) {
3754
+ if (factor > kMaxExpansionFactor) {
3755
+ // Avoid integer overflow of the current expansion factor.
3756
+ ok_to_expand_ = false;
3757
+ compiler->set_current_expansion_factor(kMaxExpansionFactor + 1);
3758
+ } else {
3759
+ int new_factor = saved_expansion_factor_ * factor;
3760
+ ok_to_expand_ = (new_factor <= kMaxExpansionFactor);
3761
+ compiler->set_current_expansion_factor(new_factor);
3762
+ }
3763
+ }
3764
+ }
3765
+
3766
+ ~RegExpExpansionLimiter() {
3767
+ compiler_->set_current_expansion_factor(saved_expansion_factor_);
3768
+ }
3769
+
3770
+ bool ok_to_expand() { return ok_to_expand_; }
3771
+
3772
+ private:
3773
+ RegExpCompiler* compiler_;
3774
+ int saved_expansion_factor_;
3775
+ bool ok_to_expand_;
3776
+
3777
+ DISALLOW_IMPLICIT_CONSTRUCTORS(RegExpExpansionLimiter);
3778
+ };
3779
+
3780
+
3730
3781
  RegExpNode* RegExpQuantifier::ToNode(int min,
3731
3782
  int max,
3732
3783
  bool is_greedy,
@@ -3766,38 +3817,46 @@ RegExpNode* RegExpQuantifier::ToNode(int min,
3766
3817
  } else if (FLAG_regexp_optimization && !needs_capture_clearing) {
3767
3818
  // Only unroll if there are no captures and the body can't be
3768
3819
  // empty.
3769
- if (min > 0 && min <= kMaxUnrolledMinMatches) {
3770
- int new_max = (max == kInfinity) ? max : max - min;
3771
- // Recurse once to get the loop or optional matches after the fixed ones.
3772
- RegExpNode* answer = ToNode(
3773
- 0, new_max, is_greedy, body, compiler, on_success, true);
3774
- // Unroll the forced matches from 0 to min. This can cause chains of
3775
- // TextNodes (which the parser does not generate). These should be
3776
- // combined if it turns out they hinder good code generation.
3777
- for (int i = 0; i < min; i++) {
3778
- answer = body->ToNode(compiler, answer);
3820
+ {
3821
+ RegExpExpansionLimiter limiter(
3822
+ compiler, min + ((max != min) ? 1 : 0));
3823
+ if (min > 0 && min <= kMaxUnrolledMinMatches && limiter.ok_to_expand()) {
3824
+ int new_max = (max == kInfinity) ? max : max - min;
3825
+ // Recurse once to get the loop or optional matches after the fixed
3826
+ // ones.
3827
+ RegExpNode* answer = ToNode(
3828
+ 0, new_max, is_greedy, body, compiler, on_success, true);
3829
+ // Unroll the forced matches from 0 to min. This can cause chains of
3830
+ // TextNodes (which the parser does not generate). These should be
3831
+ // combined if it turns out they hinder good code generation.
3832
+ for (int i = 0; i < min; i++) {
3833
+ answer = body->ToNode(compiler, answer);
3834
+ }
3835
+ return answer;
3779
3836
  }
3780
- return answer;
3781
3837
  }
3782
- if (max <= kMaxUnrolledMaxMatches) {
3783
- ASSERT(min == 0);
3784
- // Unroll the optional matches up to max.
3785
- RegExpNode* answer = on_success;
3786
- for (int i = 0; i < max; i++) {
3787
- ChoiceNode* alternation = new ChoiceNode(2);
3788
- if (is_greedy) {
3789
- alternation->AddAlternative(GuardedAlternative(body->ToNode(compiler,
3790
- answer)));
3791
- alternation->AddAlternative(GuardedAlternative(on_success));
3792
- } else {
3793
- alternation->AddAlternative(GuardedAlternative(on_success));
3794
- alternation->AddAlternative(GuardedAlternative(body->ToNode(compiler,
3795
- answer)));
3838
+ if (max <= kMaxUnrolledMaxMatches && min == 0) {
3839
+ ASSERT(max > 0); // Due to the 'if' above.
3840
+ RegExpExpansionLimiter limiter(compiler, max);
3841
+ if (limiter.ok_to_expand()) {
3842
+ // Unroll the optional matches up to max.
3843
+ RegExpNode* answer = on_success;
3844
+ for (int i = 0; i < max; i++) {
3845
+ ChoiceNode* alternation = new ChoiceNode(2);
3846
+ if (is_greedy) {
3847
+ alternation->AddAlternative(
3848
+ GuardedAlternative(body->ToNode(compiler, answer)));
3849
+ alternation->AddAlternative(GuardedAlternative(on_success));
3850
+ } else {
3851
+ alternation->AddAlternative(GuardedAlternative(on_success));
3852
+ alternation->AddAlternative(
3853
+ GuardedAlternative(body->ToNode(compiler, answer)));
3854
+ }
3855
+ answer = alternation;
3856
+ if (not_at_start) alternation->set_not_at_start();
3796
3857
  }
3797
- answer = alternation;
3798
- if (not_at_start) alternation->set_not_at_start();
3858
+ return answer;
3799
3859
  }
3800
- return answer;
3801
3860
  }
3802
3861
  }
3803
3862
  bool has_min = min > 0;
@@ -4123,12 +4182,6 @@ void CharacterRange::Split(ZoneList<CharacterRange>* base,
4123
4182
  }
4124
4183
 
4125
4184
 
4126
- static void AddUncanonicals(Isolate* isolate,
4127
- ZoneList<CharacterRange>* ranges,
4128
- int bottom,
4129
- int top);
4130
-
4131
-
4132
4185
  void CharacterRange::AddCaseEquivalents(ZoneList<CharacterRange>* ranges,
4133
4186
  bool is_ascii) {
4134
4187
  Isolate* isolate = Isolate::Current();
@@ -4289,101 +4342,6 @@ SetRelation CharacterRange::WordCharacterRelation(
4289
4342
  }
4290
4343
 
4291
4344
 
4292
- static void AddUncanonicals(Isolate* isolate,
4293
- ZoneList<CharacterRange>* ranges,
4294
- int bottom,
4295
- int top) {
4296
- unibrow::uchar chars[unibrow::Ecma262UnCanonicalize::kMaxWidth];
4297
- // Zones with no case mappings. There is a DEBUG-mode loop to assert that
4298
- // this table is correct.
4299
- // 0x0600 - 0x0fff
4300
- // 0x1100 - 0x1cff
4301
- // 0x2000 - 0x20ff
4302
- // 0x2200 - 0x23ff
4303
- // 0x2500 - 0x2bff
4304
- // 0x2e00 - 0xa5ff
4305
- // 0xa800 - 0xfaff
4306
- // 0xfc00 - 0xfeff
4307
- const int boundary_count = 18;
4308
- int boundaries[] = {
4309
- 0x600, 0x1000, 0x1100, 0x1d00, 0x2000, 0x2100, 0x2200, 0x2400, 0x2500,
4310
- 0x2c00, 0x2e00, 0xa600, 0xa800, 0xfb00, 0xfc00, 0xff00};
4311
-
4312
- // Special ASCII rule from spec can save us some work here.
4313
- if (bottom == 0x80 && top == 0xffff) return;
4314
-
4315
- if (top <= boundaries[0]) {
4316
- CharacterRange range(bottom, top);
4317
- range.AddCaseEquivalents(ranges, false);
4318
- return;
4319
- }
4320
-
4321
- // Split up very large ranges. This helps remove ranges where there are no
4322
- // case mappings.
4323
- for (int i = 0; i < boundary_count; i++) {
4324
- if (bottom < boundaries[i] && top >= boundaries[i]) {
4325
- AddUncanonicals(isolate, ranges, bottom, boundaries[i] - 1);
4326
- AddUncanonicals(isolate, ranges, boundaries[i], top);
4327
- return;
4328
- }
4329
- }
4330
-
4331
- // If we are completely in a zone with no case mappings then we are done.
4332
- for (int i = 0; i < boundary_count; i += 2) {
4333
- if (bottom >= boundaries[i] && top < boundaries[i + 1]) {
4334
- #ifdef DEBUG
4335
- for (int j = bottom; j <= top; j++) {
4336
- unsigned current_char = j;
4337
- int length = isolate->jsregexp_uncanonicalize()->get(current_char,
4338
- '\0', chars);
4339
- for (int k = 0; k < length; k++) {
4340
- ASSERT(chars[k] == current_char);
4341
- }
4342
- }
4343
- #endif
4344
- return;
4345
- }
4346
- }
4347
-
4348
- // Step through the range finding equivalent characters.
4349
- ZoneList<unibrow::uchar> *characters = new ZoneList<unibrow::uchar>(100);
4350
- for (int i = bottom; i <= top; i++) {
4351
- int length = isolate->jsregexp_uncanonicalize()->get(i, '\0', chars);
4352
- for (int j = 0; j < length; j++) {
4353
- uc32 chr = chars[j];
4354
- if (chr != i && (chr < bottom || chr > top)) {
4355
- characters->Add(chr);
4356
- }
4357
- }
4358
- }
4359
-
4360
- // Step through the equivalent characters finding simple ranges and
4361
- // adding ranges to the character class.
4362
- if (characters->length() > 0) {
4363
- int new_from = characters->at(0);
4364
- int new_to = new_from;
4365
- for (int i = 1; i < characters->length(); i++) {
4366
- int chr = characters->at(i);
4367
- if (chr == new_to + 1) {
4368
- new_to++;
4369
- } else {
4370
- if (new_to == new_from) {
4371
- ranges->Add(CharacterRange::Singleton(new_from));
4372
- } else {
4373
- ranges->Add(CharacterRange(new_from, new_to));
4374
- }
4375
- new_from = new_to = chr;
4376
- }
4377
- }
4378
- if (new_to == new_from) {
4379
- ranges->Add(CharacterRange::Singleton(new_from));
4380
- } else {
4381
- ranges->Add(CharacterRange(new_from, new_to));
4382
- }
4383
- }
4384
- }
4385
-
4386
-
4387
4345
  ZoneList<CharacterRange>* CharacterSet::ranges() {
4388
4346
  if (ranges_ == NULL) {
4389
4347
  ranges_ = new ZoneList<CharacterRange>(2);
@@ -4901,7 +4859,6 @@ void TextNode::CalculateOffsets() {
4901
4859
  cp_offset += elm.data.u_atom->data().length();
4902
4860
  } else {
4903
4861
  cp_offset++;
4904
- Vector<const uc16> quarks = elm.data.u_atom->data();
4905
4862
  }
4906
4863
  }
4907
4864
  }
@@ -5340,8 +5297,6 @@ RegExpEngine::CompilationResult RegExpEngine::Compile(RegExpCompileData* data,
5340
5297
  return CompilationResult(error_message);
5341
5298
  }
5342
5299
 
5343
- NodeInfo info = *node->info();
5344
-
5345
5300
  // Create the correct assembler for the architecture.
5346
5301
  #ifndef V8_INTERPRETED_REGEXP
5347
5302
  // Native regexp implementation.