Files
react-native-devtools-frontend/node_modules/terser/lib/utils/first_in_statement.js
T
Simon Zünd cba2ac9e1c [deps] Update 'terser' to 5.19.1
The update contains a bug fix that improves the quality for DevTools
release source maps.

The update also seems to stop minifiying certain names in the overlay
bundle so we had to slightly bump the limit.

  * Old size: 69660
  * New size: 71295

DISABLE_THIRD_PARTY_CHECK=Bump overlay size limit
R=alexrudenko@chromium.org

Bug: 1459146
Change-Id: I3036787bbb3ba8d28669b9aaab9c29c5f5581e55
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4693881
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
2023-07-18 09:44:36 +00:00

54 lines
2.1 KiB
JavaScript

import {
AST_Binary,
AST_Conditional,
AST_Chain,
AST_Dot,
AST_Object,
AST_Sequence,
AST_Statement,
AST_Sub,
AST_UnaryPostfix,
AST_PrefixedTemplateString
} from "../ast.js";
// return true if the node at the top of the stack (that means the
// innermost node in the current output) is lexically the first in
// a statement.
function first_in_statement(stack) {
let node = stack.parent(-1);
for (let i = 0, p; p = stack.parent(i); i++) {
if (p instanceof AST_Statement && p.body === node)
return true;
if ((p instanceof AST_Sequence && p.expressions[0] === node) ||
(p.TYPE === "Call" && p.expression === node) ||
(p instanceof AST_PrefixedTemplateString && p.prefix === node) ||
(p instanceof AST_Dot && p.expression === node) ||
(p instanceof AST_Sub && p.expression === node) ||
(p instanceof AST_Chain && p.expression === node) ||
(p instanceof AST_Conditional && p.condition === node) ||
(p instanceof AST_Binary && p.left === node) ||
(p instanceof AST_UnaryPostfix && p.expression === node)
) {
node = p;
} else {
return false;
}
}
}
// Returns whether the leftmost item in the expression is an object
function left_is_object(node) {
if (node instanceof AST_Object) return true;
if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);
if (node.TYPE === "Call") return left_is_object(node.expression);
if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);
if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);
if (node instanceof AST_Chain) return left_is_object(node.expression);
if (node instanceof AST_Conditional) return left_is_object(node.condition);
if (node instanceof AST_Binary) return left_is_object(node.left);
if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);
return false;
}
export { first_in_statement, left_is_object };