source: trip-planner-front/node_modules/terser/lib/utils/first_in_statement.js@ ceaed42

Last change on this file since ceaed42 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 1.9 KB
Line 
1import {
2 AST_Binary,
3 AST_Conditional,
4 AST_Dot,
5 AST_Object,
6 AST_Sequence,
7 AST_Statement,
8 AST_Sub,
9 AST_UnaryPostfix,
10 AST_PrefixedTemplateString
11} from "../ast.js";
12
13// return true if the node at the top of the stack (that means the
14// innermost node in the current output) is lexically the first in
15// a statement.
16function first_in_statement(stack) {
17 let node = stack.parent(-1);
18 for (let i = 0, p; p = stack.parent(i); i++) {
19 if (p instanceof AST_Statement && p.body === node)
20 return true;
21 if ((p instanceof AST_Sequence && p.expressions[0] === node) ||
22 (p.TYPE === "Call" && p.expression === node) ||
23 (p instanceof AST_PrefixedTemplateString && p.prefix === node) ||
24 (p instanceof AST_Dot && p.expression === node) ||
25 (p instanceof AST_Sub && p.expression === node) ||
26 (p instanceof AST_Conditional && p.condition === node) ||
27 (p instanceof AST_Binary && p.left === node) ||
28 (p instanceof AST_UnaryPostfix && p.expression === node)
29 ) {
30 node = p;
31 } else {
32 return false;
33 }
34 }
35}
36
37// Returns whether the leftmost item in the expression is an object
38function left_is_object(node) {
39 if (node instanceof AST_Object) return true;
40 if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);
41 if (node.TYPE === "Call") return left_is_object(node.expression);
42 if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);
43 if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);
44 if (node instanceof AST_Conditional) return left_is_object(node.condition);
45 if (node instanceof AST_Binary) return left_is_object(node.left);
46 if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);
47 return false;
48}
49
50export { first_in_statement, left_is_object };
Note: See TracBrowser for help on using the repository browser.