1. 19 Feb, 2019 1 commit
  2. 30 Jan, 2019 1 commit
  3. 28 Jan, 2019 1 commit
  4. 25 Jan, 2019 1 commit
  5. 23 Jan, 2019 1 commit
  6. 09 Jan, 2019 1 commit
    • Leszek Swirski's avatar
      [parser] Don't desugar destructuring declarations. · 5e725a2b
      Leszek Swirski authored
      Emit a single destructuring assignment for destructuring declarations,
      which can be desugared by the bytecode generator. This allows us to
      remove destructuring desugaring from the parser (specifically, the
      pattern rewriter) entirely.
      
      The pattern "rewriter" is now only responsible for walking the
      destructuring pattern to declare variables, mark them assigned, and
      potentially rewrite scopes for the edge case of parameters with a sloppy
      eval.
      
      Note that since the rewriter is no longer rewriting, we have to flip the
      VariableProxy copying logic for var re-lookup, so that we now pass the
      new VariableProxy to the variable declaration and leave the original
      unresolved (rather than passing the original through and rewriting to a
      new unresolved VariableProxy).
      
      This change does have some effect on breakpoint locations, due to some
      of the available information changing between the parser and bytecode
      generator, however the new locations appear to be more consistent
      between assignments and declarations.
      
      Change-Id: I3a58dd0a387d2bfb8e5e9e22dde0acc5f440cb82
      Reviewed-on: https://chromium-review.googlesource.com/c/1382462
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58670}
      5e725a2b
  7. 14 Dec, 2018 1 commit
  8. 13 Dec, 2018 1 commit
  9. 06 Dec, 2018 1 commit
    • tzik's avatar
      Replace %RunMicrotasks with %PerformMicrotaskCheckpoint · 07011cc4
      tzik authored
      This replaces Runtime_RunMicrotasks with Runtime_PerformMicrotaskCheckpoint.
      
      RunMicrotasks forcibly runs Microtasks even when the microtasks are suppressed,
      and may causes nested Microtasks in a problematic way. E.g. that confuses
      v8::MicrotasksScope::IsRunningMicrotasks() and GetEnteredOrMicrotaskContext().
      
      OTOH, PerformMicrotaskCheckpoint() doesn't run cause the failure as it
      respects the microtask suppressions.
      
      As all existing tests don't call RunMicrotasks() in the suppressed situation
      (like Promise.resolve().then(()=>{%RunMicrotasks();})), this change should
      not affect to these tests.
      
      Change-Id: Ib043a0cc8e482e022d375084d65ea98a6f54ef3d
      Reviewed-on: https://chromium-review.googlesource.com/c/1360095Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Taiju Tsuiki <tzik@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58068}
      07011cc4
  10. 16 Oct, 2018 1 commit
  11. 10 Oct, 2018 1 commit
    • Benedikt Meurer's avatar
      [async] Improve async function handling. · 0038e5f0
      Benedikt Meurer authored
      This change introduces new intrinsics used to desugar async functions
      in the Parser and the BytecodeGenerator, namely we introduce a new
      %_AsyncFunctionEnter intrinsic that constructs the generator object
      for the async function (and in the future will also create the outer
      promise for the async function). This generator object is internal
      and never escapes to user code, plus since async functions don't have
      a "prototype" property, we can just a single map here instead of tracking
      the prototype/initial_map on every async function. This saves one word
      per async function plus one initial_map per async function that was
      invoked at least once.
      
      We also introduce two new intrinsics %_AsyncFunctionReject, which
      rejects the outer promise with the caught exception, and another
      %_AsyncFunctionResolve, which resolves the outer promise with the
      right hand side of the `return` statement. These functions also perform
      the DevTools part of the job (aka popping from the promise stack and
      sending the debug event). This allows us to get rid of the implicit
      try-finally from async functions completely; because the finally
      block only called to the %AsyncFunctionPromiseRelease builtin, which
      was used to inform DevTools.
      
      In essence we now turn an async function like
      
      ```js
      async function f(x) { return await bar(x); }
      ```
      
      into something like this (in Parser and BytecodeGenerator respectively):
      
      ```
      function f(x) {
        .generator_object = %_AsyncFunctionEnter(.closure, this);
        .promise = %AsyncFunctionCreatePromise();
        try {
          .tmp = await bar(x);
          return %_AsyncFunctionResolve(.promise, .tmp);
        } catch (e) {
          return %_AsyncFunctionReject(.promise, e);
        }
      }
      ```
      
      Overall the bytecode for async functions gets significantly shorter
      already (and will get even shorter once we put the outer promise into
      the async function generator object). For example the bytecode for a
      simple async function
      
      ```js
      async function f(x) { return await x; }
      ```
      
      goes from 175 bytes to 110 bytes (a ~38% reduction in size), which
      is in particular due to the simplification around the try-finally
      removal.
      
      Overall this seems to improve the doxbee-async-es2017-native test by
      around 2-3%. On the test case mentioned in v8:8276 we go from
      1124ms to 441ms, which corresponds to a 60% reduction in total
      execution time!
      
      Tbr: marja@chromium.org
      Bug: v8:7253, v8:7522, v8:8276
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Change-Id: Id29dc92de7490b387ff697860c900cee44c9a7a4
      Reviewed-on: https://chromium-review.googlesource.com/c/1269041
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarSathya Gunasekaran <gsathya@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#56502}
      0038e5f0
  12. 01 Oct, 2018 1 commit
  13. 27 Sep, 2018 1 commit
    • Creddy's avatar
      Reland "[interpreter] Separate bytecodes for one-shot property loads and stores" · 0714bd9f
      Creddy authored
      This is a reland of eccf1867
      
      Original change's description:
      > [interpreter] Separate bytecodes for one-shot property loads and stores
      > 
      > Create LdaNamedPropertyNoFeedback and StaNamedPropertyNoFeedback
      > for one-shot property loads and stores. This CL replaces the runtime
      > calls with new bytecodes for named property load stores in one-shot code.
      > the runtime calls needed extra set of consecutive registers and
      > additional move instructions. This increased the size of
      > bytecode-array and possibly extended the life time of objects.
      > By replacing them with NoFeedback bytecodes we avoid these issues.
      > 
      > Bug: v8:8072
      > Change-Id: I20a38a5ce9940026171d870d354787fe0b7c5a6f
      > Reviewed-on: https://chromium-review.googlesource.com/1196725
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Georg Neis <neis@chromium.org>
      > Commit-Queue: Chandan Reddy <chandanreddy@google.com>
      > Cr-Commit-Position: refs/heads/master@{#56211}
      
      Bug: v8:8072
      Change-Id: Ie8e52b37daf35c7bc08bb910d7b15a9b783354e4
      Reviewed-on: https://chromium-review.googlesource.com/1245742
      Commit-Queue: Chandan Reddy <chandanreddy@google.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#56266}
      0714bd9f
  14. 26 Sep, 2018 1 commit
    • Maya Lekova's avatar
      Revert "[interpreter] Separate bytecodes for one-shot property loads and stores" · 3c3330f6
      Maya Lekova authored
      This reverts commit eccf1867.
      
      Reason for revert: Speculative revert because it seems to introduce a pretty stable flake on gc stress tests, see https://bugs.chromium.org/p/v8/issues/detail?id=8229
      
      Original change's description:
      > [interpreter] Separate bytecodes for one-shot property loads and stores
      > 
      > Create LdaNamedPropertyNoFeedback and StaNamedPropertyNoFeedback
      > for one-shot property loads and stores. This CL replaces the runtime
      > calls with new bytecodes for named property load stores in one-shot code.
      > the runtime calls needed extra set of consecutive registers and
      > additional move instructions. This increased the size of
      > bytecode-array and possibly extended the life time of objects.
      > By replacing them with NoFeedback bytecodes we avoid these issues.
      > 
      > Bug: v8:8072
      > Change-Id: I20a38a5ce9940026171d870d354787fe0b7c5a6f
      > Reviewed-on: https://chromium-review.googlesource.com/1196725
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Georg Neis <neis@chromium.org>
      > Commit-Queue: Chandan Reddy <chandanreddy@google.com>
      > Cr-Commit-Position: refs/heads/master@{#56211}
      
      TBR=rmcilroy@chromium.org,yangguo@chromium.org,jarin@chromium.org,neis@chromium.org,cbruni@chromium.org,chandanreddy@google.com
      
      Change-Id: I445db58e6d4c275b434fabad5fad775bf259033f
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:8072
      Reviewed-on: https://chromium-review.googlesource.com/1245421Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
      Commit-Queue: Maya Lekova <mslekova@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#56232}
      3c3330f6
  15. 25 Sep, 2018 1 commit
  16. 17 Sep, 2018 2 commits
  17. 14 Sep, 2018 2 commits
  18. 13 Sep, 2018 2 commits
  19. 04 Sep, 2018 2 commits
  20. 13 Aug, 2018 1 commit
  21. 18 Jul, 2018 1 commit
    • Leszek Swirski's avatar
      [liveedit] Fix patching functions with start position zero · e8c5a51c
      Leszek Swirski authored
      For a script '()=>42', the anonymous arrow function has both start and
      end position the same as the script function itself. This causes issues
      when sorting the SourcePositionEvents of the function, in two ways:
      
        * If the start positions are the same, we should order by *furthest*
          end position to ensure the stack is in the right order
        * If both start and end are the same, we need to order by function
          literal id to make sure that start order and end order are inversed.
      
      Also, MapLiterals assumes that start+end position uniquely identifies a
      function, which is false in this case, so we process the top-level
      script function separately in MapLiterals.
      
      Change-Id: I2b2185dc2825018b7ea44c7d0918238e9b1dd972
      Reviewed-on: https://chromium-review.googlesource.com/1141741
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54525}
      e8c5a51c
  22. 06 Jul, 2018 1 commit
  23. 05 Jul, 2018 1 commit
  24. 03 Jul, 2018 3 commits
    • Alexey Kozyatinskiy's avatar
      Reland "[debug] liveedit in native" · 5505c664
      Alexey Kozyatinskiy authored
      This is a reland of 3dfaf826
      
      Original change's description:
      > [debug] liveedit in native
      >
      > Liveedit step-by-step:
      > 1. calculate diff between old source and new source,
      > 2. map function literals from old source to new source,
      > 3. create new script for new_source,
      > 4. mark literals with changed code as changed, all others as unchanged,
      > 5. check that for changed literals there are no:
      >   - running generators in the heap,
      >   - non droppable frames (e.g. running generator) above them on stack.
      > 6. mark the bottom most frame with changed function as scheduled for
      >    restart if any.
      > 7. for unchanged functions:
      >   - deoptimize,
      >   - remove from cache,
      >   - update source positions,
      >   - move to new script,
      >   - reset feedback information and preparsed scope information if any,
      >   - replace any sfi in constant pool with changed one if any.
      > 8. for changed functions:
      >   - deoptimize
      >   - remove from cache,
      >   - reset feedback information,
      >   - update all links from js functions to old shared with new one.
      > 9. swap scripts.
      >
      > TBR=ulan@chromium.org
      >
      > Bug: v8:7862,v8:5713
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      > Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      > Reviewed-on: https://chromium-review.googlesource.com/1105493
      > Reviewed-by: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#54146}
      
      TBR=dgozman@chromium.org
      
      Bug: v8:7862, v8:5713
      Change-Id: I163ed2fd2ca3115ba0de74cb35a6fac9e40fdd94
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Reviewed-on: https://chromium-review.googlesource.com/1124879
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54187}
      5505c664
    • Yang Guo's avatar
      Revert "[debug] liveedit in native" · 22594d10
      Yang Guo authored
      This reverts commit 3dfaf826.
      
      Reason for revert: Failures - https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux%20gcc%204.8/20394
      
      Original change's description:
      > [debug] liveedit in native
      > 
      > Liveedit step-by-step:
      > 1. calculate diff between old source and new source,
      > 2. map function literals from old source to new source,
      > 3. create new script for new_source,
      > 4. mark literals with changed code as changed, all others as unchanged,
      > 5. check that for changed literals there are no:
      >   - running generators in the heap,
      >   - non droppable frames (e.g. running generator) above them on stack.
      > 6. mark the bottom most frame with changed function as scheduled for
      >    restart if any.
      > 7. for unchanged functions:
      >   - deoptimize,
      >   - remove from cache,
      >   - update source positions,
      >   - move to new script,
      >   - reset feedback information and preparsed scope information if any,
      >   - replace any sfi in constant pool with changed one if any.
      > 8. for changed functions:
      >   - deoptimize
      >   - remove from cache,
      >   - reset feedback information,
      >   - update all links from js functions to old shared with new one.
      > 9. swap scripts.
      > 
      > TBR=ulan@chromium.org
      > 
      > Bug: v8:7862,v8:5713
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      > Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      > Reviewed-on: https://chromium-review.googlesource.com/1105493
      > Reviewed-by: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#54146}
      
      TBR=dgozman@chromium.org,ulan@chromium.org,yangguo@chromium.org,kozyatinskiy@chromium.org
      
      Change-Id: I45df5b6f3abaf29e593c6ac11edefbd0177d0109
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7862, v8:5713
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Reviewed-on: https://chromium-review.googlesource.com/1124159Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Yang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54151}
      22594d10
    • Alexey Kozyatinskiy's avatar
      [debug] liveedit in native · 3dfaf826
      Alexey Kozyatinskiy authored
      Liveedit step-by-step:
      1. calculate diff between old source and new source,
      2. map function literals from old source to new source,
      3. create new script for new_source,
      4. mark literals with changed code as changed, all others as unchanged,
      5. check that for changed literals there are no:
        - running generators in the heap,
        - non droppable frames (e.g. running generator) above them on stack.
      6. mark the bottom most frame with changed function as scheduled for
         restart if any.
      7. for unchanged functions:
        - deoptimize,
        - remove from cache,
        - update source positions,
        - move to new script,
        - reset feedback information and preparsed scope information if any,
        - replace any sfi in constant pool with changed one if any.
      8. for changed functions:
        - deoptimize
        - remove from cache,
        - reset feedback information,
        - update all links from js functions to old shared with new one.
      9. swap scripts.
      
      TBR=ulan@chromium.org
      
      Bug: v8:7862,v8:5713
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
      Change-Id: I8f6f6156318cc82d6f36d7ebc1c9f7d5f3aa1461
      Reviewed-on: https://chromium-review.googlesource.com/1105493Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarDmitry Gozman <dgozman@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#54146}
      3dfaf826
  25. 21 Jun, 2018 1 commit
  26. 20 Jun, 2018 1 commit
  27. 18 Jun, 2018 3 commits
  28. 15 Jun, 2018 3 commits
  29. 14 Jun, 2018 2 commits