1. 26 Oct, 2017 1 commit
    • Igor Sheludko's avatar
      [cleanup] Prepare V8-internal AccessorInfo objects for sharing. · b4fdce5a
      Igor Sheludko authored
      Rename |property_attributes| to |initial_property_attributes| and ensure
      that it is used as a storage of values only for AccessorInfos installed in
      API Templates (i.e. ObjectTemplate and FunctionTemplate).
      When an AccessorInfo is installed directly into an existing JS object
      (via JSObject::SetAccessor) or into a DescriptorArray (when certain V8
      objects' shapes are configured) it is not necessary to thread attributes
      being set through the AccessorInfo instance.
      
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: Ibe61026f08c42549756f694129a286635ffe5769
      Reviewed-on: https://chromium-review.googlesource.com/730425
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#48978}
      b4fdce5a
  2. 25 Oct, 2017 1 commit
    • Jakob Kummerow's avatar
      [bigint] Fix abstract equality with junk strings · 98df94cd
      Jakob Kummerow authored
      Abstract equality comparison of a BigInt and a String converts the
      latter to BigInt. This conversion can fail; since we do not want to
      pass a context to the comparison function, we must signal such failure
      without throwing an exception.
      This CL uses the existing ShouldThrow enum to configure behavior of
      String-to-BigInt conversion, moving it out of Object into globals.h.
      
      Bug: v8:6791, v8:6979
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: Ibb98675079b8392cf03bbcbbbd5556108500a32d
      Reviewed-on: https://chromium-review.googlesource.com/734172
      Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#48946}
      98df94cd
  3. 13 Oct, 2017 1 commit
  4. 20 Sep, 2017 1 commit
  5. 01 Aug, 2017 1 commit
    • Benedikt Meurer's avatar
      [builtins] Speed-up Object.prototype.toString. · 31800120
      Benedikt Meurer authored
      The @@toStringTag lookup in Object.prototype.toString causes quite a
      lot of overhead and oftentimes dominates the builtin performance. These
      lookups are almost always negative, especially for primitive values,
      and Object.prototype.toString is often used to implement predicates
      (like in Node core or in AngularJS), so having a way to skip the
      negative lookup yields big performance gains.
      
      This CL introduces a "MayHaveInterestingSymbols" bit on every map,
      which says whether instances with this map may have an interesting
      symbol. Currently only @@toStringTag is considered an interesting
      symbol, but we can extend that in the future.
      
      In the Object.prototype.toString we can use the interesting symbols
      bit to do a quick check on the prototype chain to see if there are
      any maps that might have the @@toStringTag, and if not, we can just
      immediately return the result, which is very fast because it's derived
      from the instance type. This also avoids the ToObject conversions for
      primitive values, which is important, since this causes unnecessary
      GC traffic and in for example AngularJS, strings are also often probed
      via the Object.prototype.toString based predicates.
      
      This boosts Speedometer/AngularJS by over 3% and Speedometer overall
      by up to 1%. On the microbenchmark from the similar SpiderMonkey bug
      (https://bugzilla.mozilla.org/show_bug.cgi?id=1369042), we go from
      roughly 450ms to 70ms, which corresponds to a 6.5x improvement.
      
      ```
      function f() {
          var res = "";
          var a = [1, 2, 3];
          var toString = Object.prototype.toString;
          var t = new Date;
          for (var i = 0; i < 5000000; i++)
      	res = toString.call(a);
          print(new Date - t);
          return res;
      }
      f();
      ```
      
      The design document at https://goo.gl/e8CruQ has some additional
      data points.
      
      TBR=ulan@chromium.org
      
      Bug: v8:6654
      Change-Id: I31932cf41ecddad079d294e2c322a852af0ed244
      Reviewed-on: https://chromium-review.googlesource.com/593620
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47034}
      31800120
  6. 24 Jul, 2017 2 commits
  7. 13 Jul, 2017 1 commit
  8. 10 Jul, 2017 1 commit
  9. 30 Jun, 2017 1 commit
    • Mathias Bynens's avatar
      [elements] Rename FAST elements kinds · 26c00f4a
      Mathias Bynens authored
      The `FAST_` prefix doesn’t make much sense — they’re all just different cases
      with their own optimizations. Packedness being implicit (e.g. `FAST_ELEMENTS`
      vs. `FAST_HOLEY_ELEMENTS`) is not ideal, either.
      
      This patch renames the FAST elements kinds as follows:
      
      - e.g. FAST_ELEMENTS => PACKED_ELEMENTS
      - e.g. FAST_HOLEY_ELEMENTS => HOLEY_ELEMENTS
      
      The following exceptions are left intact, for lack of a better name:
      
      - FAST_SLOPPY_ARGUMENTS_ELEMENTS
      - SLOW_SLOPPY_ARGUMENTS_ELEMENTS
      - FAST_STRING_WRAPPER_ELEMENTS
      - SLOW_STRING_WRAPPER_ELEMENTS
      
      This makes it easier to reason about elements kinds, and less confusing to
      explain how they’re used.
      
      R=jkummerow@chromium.org, cbruni@chromium.org
      BUG=v8:6548
      
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: Ie7c6bee85583c3d84b730f7aebbd70c1efa38af9
      Reviewed-on: https://chromium-review.googlesource.com/556032Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Commit-Queue: Mathias Bynens <mathias@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46361}
      26c00f4a
  10. 22 Jun, 2017 2 commits
  11. 21 Jun, 2017 1 commit
  12. 12 Jun, 2017 1 commit
  13. 08 Jun, 2017 1 commit
  14. 06 Jun, 2017 1 commit
    • Igor Sheludko's avatar
      [parser] Introduce SharedFunctionInfo::has_shared_name(). · 9a2c18f5
      Igor Sheludko authored
      Properly propagate the fact that the function has a statically known name from
      parser to SharedFunctionInfo objects. The empty string that has been set as
      name before this CL does not help to distinguish cases like:
        var o1 = { ''(){} };
        var o1 = { [foo()](){} };
      or
        var o2 = { get ''(){} };
        var o2 = { get [foo()](){} };
      
      This is a preliminary step for using different layouts for closure objects with
      and without computed names.
      
      TBR=bmeurer@chromium.org, marja@chromium.org
      
      Bug: v8:6459
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: I10afa6f4bda7881c3714711a75f720f83c1d875d
      Reviewed-on: https://chromium-review.googlesource.com/522073
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#45744}
      9a2c18f5
  15. 02 May, 2017 1 commit
  16. 17 Mar, 2017 1 commit
    • titzer's avatar
      [rename] Rename internal field to embedder field. · 72e53936
      titzer authored
      This CL renames all occurrences of "internal field" to "embedder field"
      to prevent confusion. As it turns out, these fields are not internal to
      V8, but are actually embedder provided fields that should not be mucked
      with by the internal implementation of V8.
      
      Note that WASM does use these fields, and it should not.
      
      BUG=v8:6058
      
      Review-Url: https://codereview.chromium.org/2741683004
      Cr-Commit-Position: refs/heads/master@{#43900}
      72e53936
  17. 15 Mar, 2017 1 commit
  18. 28 Feb, 2017 1 commit
  19. 24 Feb, 2017 1 commit
  20. 13 Jan, 2017 1 commit
  21. 29 Nov, 2016 2 commits
    • bmeurer's avatar
      [turbofan] Add appropriate types to express Callable. · 777e142c
      bmeurer authored
      This introduces three new types OtherCallable, CallableProxy (and OtherProxy),
      and BoundFunction to make it possible to express Callable in the Type system.
      It also forces all undetectable receivers to be Callable, which matches the
      use case for undetectable, namely document.all (guarded by proper checks and
      tests).
      
      It also uses these new types to properly optimize instanceof (indirectly via
      OrdinaryHasInstance) based on the type of the constructor and the object. So
      we are able to constant-fold certain instanceof expressions based on types
      and completely avoid the builtin call.
      
      R=jarin@chromium.org
      BUG=v8:5267
      
      Review-Url: https://codereview.chromium.org/2535753004
      Cr-Commit-Position: refs/heads/master@{#41345}
      777e142c
    • cbruni's avatar
      [api] Support sharing prototypes between FunctionTemplates · 85321456
      cbruni authored
      FunctionTemplateInfo::SetPrototypeProviderTemplate adds support for sharing
      prototypes between several function templates. This is used to properly set up
      Image.prototype and HTMLImageElement.protoype which should be equal according
      to the spec.
      
      BUG=chromium:2969
      
      Review-Url: https://codereview.chromium.org/2531653002
      Cr-Commit-Position: refs/heads/master@{#41343}
      85321456
  22. 04 Nov, 2016 2 commits
  23. 02 Nov, 2016 2 commits
  24. 01 Nov, 2016 1 commit
  25. 31 Oct, 2016 1 commit
  26. 11 Oct, 2016 1 commit
  27. 23 Sep, 2016 1 commit
  28. 26 Aug, 2016 1 commit
  29. 05 Aug, 2016 2 commits
  30. 04 Aug, 2016 1 commit
  31. 03 Aug, 2016 1 commit
  32. 01 Aug, 2016 1 commit
  33. 28 Jul, 2016 1 commit
  34. 19 Jul, 2016 1 commit