(noIn)
| 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 |
no test coverage detected