• Sathya Gunasekaran's avatar
    [parser] Provide better error when destructuring callable · c805d5e3
    Sathya Gunasekaran authored
    The patch changes CallPrinter's AST traversal to continue even after
    the first positive match for an AST node. This helps us check for the
    subsequent GetIterator AST node in case of destructuring.
    
    We can not differentiate between the function call failing and the
    GetIterator failing based on source position info. This would involve
    runtime checks costing performance.
    
    Instead of providing an incorrect error, we provide both the
    possiblities to user and allow them to disambiguate.
    
    Previously,
      d8> function f() { return 5; }
      undefined
      d8> var [a] = f();
      (d8):1: TypeError: f is not a function
      var [a] = f();
                ^
      TypeError: f is not a function
          at (d8):1:11
    
    
    Now,
      d8> function f() { return 5; }
      undefined
      d8> var [a] = f();
      (d8):1: TypeError: f is not a function or its return value is not iterable
      var [a] = f();
                ^
      TypeError: f is not a function or its return value is not iterable
          at (d8):1:11
    
    Bug: v8:6616, v8:6513
    Change-Id: I3d6427f10cae54951b0ad0e5ddcbe802bb7191c1
    Reviewed-on: https://chromium-review.googlesource.com/594894
    Commit-Queue: Sathya Gunasekaran <gsathya@chromium.org>
    Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#47025}
    c805d5e3
destructuring-function-non-iterable.out 204 Bytes