MCPcopy Create free account
hub / github.com/davidkingzyb/SCAST / parseMaybeAssign

Function parseMaybeAssign

lib/filbert.js:1956–1996  ·  view source on GitHub ↗
(noIn)

Source from the content-addressed store, hash-verified

1954 // identifier doesn't exist in this namespace yet.
1955
1956 function parseMaybeAssign(noIn) {
1957 var left = parseMaybeTuple(noIn);
1958 if (tokType.isAssign) {
1959 var tupleArgs = getTupleArgs(left);
1960 if (tupleArgs) {
1961 next();
1962 var right = parseMaybeTuple(noIn);
1963 var blockNode = startNodeFrom(left);
1964 blockNode.body = unpackTuple(tupleArgs, right);
1965 return finishNode(blockNode, "BlockStatement");
1966 }
1967
1968 if (scope.isClass()) {
1969 var thisExpr = nc.createNodeFrom(left, "ThisExpression");
1970 left = nc.createNodeFrom(left, "MemberExpression", { object: thisExpr, property: left });
1971 }
1972
1973 var node = startNodeFrom(left);
1974 node.operator = tokVal;
1975 node.left = left;
1976 next();
1977 node.right = parseMaybeTuple(noIn);
1978 checkLVal(left);
1979
1980 if (node.operator === '+=' || node.operator === '*=') {
1981 var right = nc.createNodeSpan(node.right, node.right, "CallExpression");
1982 right.callee = nc.createNodeOpsCallee(right, node.operator === '+=' ? "add" : "multiply");
1983 right.arguments = [left, node.right];
1984 node.right = right;
1985 node.operator = '=';
1986 }
1987
1988 if (left.type === "Identifier" && !scope.exists(left.name)) {
1989 if (!node.operator || node.operator.length > 1) unexpected();
1990 scope.addVar(left.name);
1991 return nc.createVarDeclFromId(node.left, node.left, node.right);
1992 }
1993 return finishNode(node, "AssignmentExpression");
1994 }
1995 return left;
1996 }
1997
1998 // Parse a tuple
1999

Callers 1

parseExpressionFunction · 0.85

Calls 8

parseMaybeTupleFunction · 0.85
getTupleArgsFunction · 0.85
startNodeFromFunction · 0.85
unpackTupleFunction · 0.85
finishNodeFunction · 0.85
checkLValFunction · 0.85
nextFunction · 0.70
unexpectedFunction · 0.70

Tested by

no test coverage detected