-
Andreas Haas authored
In the existing code, whenever unreachable control instructions needed values from the stack which were not available, values of type kWasmVar were put on the stack. When these values were type-checked the first time, the expected type was assigned to them for later validation. This behavior has several draw-backs: * In an unobservable way, this implementation does not match the requirements of the spec. With the anyref proposal, this difference becomes observable. * Type checking functions were not read-only anymore, because if unreachable code was validated, the stack got manipulated in these functions. With the refactoring, I pulled out the handling of unreachable code out of the type checking functions. These checking functions can be validation-only functions. For type checking unreachable code, I start by popping values of the expected types off the stack. Thereby all available values on the stack get type-checked. Afterwards, I push all values again on the stack with the expected type if needed. This allows to continue the expected type checking for later instructions. R=clemensh@chromium.org Bug: v8:7581 Change-Id: Ib98e70a44bf9780626d4aa8a3e5fe8c2f230b787 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1645328Reviewed-by: Ben Titzer <titzer@chromium.org> Commit-Queue: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#62203}
0403003b