export function createVariableCallAST( name: string, method: string, args: (Expression | SpreadElement)[], ) { return callExpression( memberExpression(createVariableAST(name), identifier(method)), args, ); }
export function createGlobalCallAST( method: string, args: (Expression | SpreadElement)[], ) { const m = method.split('.').map(i => identifier(i)); let ret: Identifier | MemberExpression = m.shift()!; while (m.length > 0) { ret = memberExpression(ret, m.shift()); } return callExpression(ret, args); }
originalDeclarations.forEach(function(decl) { newDeclarations.push(decl); if (!decl.init) { decl.init = addLoc(ignoredIdentifier("undefined"), decl.loc); } if (decl.id.type === "ArrayPattern") { // declaration are inserted into pattern already } else if (decl.id.type === "ObjectPattern") { // declarations are inserted into object pattern already } else { newDeclarations.push( t.variableDeclarator( addLoc(getTrackingIdentifier(decl.id.name), decl.id.loc), skipPath( t.callExpression( t.identifier(FunctionNames.getLastOperationTrackingResult), [] ) ) ) ); } });
export function createVariableAST(name: string) { return callExpression( memberExpression(identifier('Variable'), identifier('find')), [identifier('gameModel'), stringLiteral(name)], ) as VariableAST; }
path.node.params.forEach((param, i) => { if (param.type === "ObjectPattern") { // do nothing for now, logic is in objectpattern visitor // for (var n = 0; n < param.properties.length; n++) { // const prop = param.properties[n]; // declarators.push( // t.variableDeclarator( // addLoc( // getTrackingIdentifier( // prop.value ? prop.value.name : prop.key.name // ), // prop.loc // ), // t.nullLiteral() // ) // ); // } } else if (param.type === "ArrayPattern") { param.elements.forEach(elem => { let varName; if (elem.type === "Identifier") { varName = elem.name; } else if (elem.type === "AssignmentPattern") { varName = elem.left.name; } else if (elem.type === "RestParameter") { varName = elem.argument.name; } else if (elem.type === "ObjectPattern") { // will be processed in ObjectPattern visitor } else { throw Error("aaa unknown array pattern elem type " + elem.type); } declarators.push( t.variableDeclarator( addLoc(getTrackingIdentifier(varName), param.loc), ignoredCallExpression(FunctionNames.getEmptyTrackingInfo, [ ignoredStringLiteral("arrayPatternInFunction"), getLocObjectASTNode(elem.loc) ]) ) ); }); } else if (param.type === "AssignmentPattern") { let varName = param.left.name; declarators.push( t.variableDeclarator( addLoc(getTrackingIdentifier(varName), param.loc), ignoredCallExpression(FunctionNames.getEmptyTrackingInfo, [ ignoredStringLiteral("arrayPatternInFunction"), getLocObjectASTNode(param.loc) ]) ) ); } else if (param.type === "RestElement") { let varName = param.argument.name; declarators.push( t.variableDeclarator( addLoc(getTrackingIdentifier(varName), param.loc), ignoredCallExpression(FunctionNames.getEmptyTrackingInfo, [ ignoredStringLiteral("restElement"), getLocObjectASTNode(param.loc) ]) ) ); } else { declarators.push( t.variableDeclarator( addLoc(getTrackingIdentifier(param.name), param.loc), t.callExpression( t.identifier(FunctionNames.getFunctionArgTrackingInfo), [t.numericLiteral(i)] ) ) ); } });