• Alexey Kozyatinskiy's avatar
    [inspector] improve return position of explicit return in non-async function · 08965860
    Alexey Kozyatinskiy authored
    Goal of this CL: explicit return from non-async function has position after
    return expression as return position (will unblock [1]).
    
    BytecodeArrayBuilder has SetStatementPosition and SetExpressionPosition methods.
    If one of these methods is called then next generated bytecode will get passed
    position. It's general treatment for most cases.
    Unfortunately it doesn't work for Returns:
    - debugger requires source positions exactly on kReturn bytecode in stepping
      implementation,
    - BytecodeGenerator::BuildReturn and BytecodeGenerator::BuildAsyncReturn
      generates more then one bytecode and general solution will put return position
      on first generated bytecode,
    - it's not easy to split BuildReturn function into two parts to allow something
      like following in BytecodeGenerator::VisitReturnStatement since generated
      bytecodes are actually controlled by execution_control().
    ..->BuildReturnPrologue();
    ..->SetReturnPosition(stmt);
    ..->Return();
    
    In this CL we pass ReturnStatement through ExecutionControl and use it for
    position when we emit return bytecode right here.
    
    So this CL only will improve return position for returns inside of non-async
    functions, I'll address async functions later.
    
    [1] https://chromium-review.googlesource.com/c/543161/
    
    Change-Id: Iede512c120b00c209990bf50c20e7d23dc0d65db
    Reviewed-on: https://chromium-review.googlesource.com/560738
    Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
    Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#46687}
    08965860
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...