• 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
bytecode-generator.h 12.3 KB