// only one default argument per declaration for now svoid tok_defaultArguments(LS tok) { int i; while ((i = jfind(tok, " default")) >= 0) { int iOpening = lastIndexOf(tok, i, "("); int iClosing = indexOf(tok, i, ")"); //S args = joinSubList(tok, iOpening+2, iClosing-1); int iName = iOpening-2; S name = assertIdentifier(get(tok, iName)); int iType = tok_leftScanType(tok, iName); int iStart = tok_leftScanTypeArgsOpt(tok, iType); iStart = leftScanModifiers(tok, iStart); print("Found method head: " + joinSubList(tok, iStart, iClosing+1)); int iEndOfExpr = tok_findEndOfExpression(tok, i+4)+1; // should point at comma or closing bracket S expr = joinSubList(tok, i+4, iEndOfExpr); clearTokens_reTok(tok, i+1, iEndOfExpr-1); LS _args1 = subList(tok, iOpening+1, i-2); LS _args2 = subList(tok, iEndOfExpr+1, iClosing+2); LS args1 = tok_parseArgsDeclList2(_args1); LS args2 = tok_parseArgsDeclList2(_args2); printVars(+expr, +_args1, +_args2, +args1, +args2); S rewrittenHead = joinSubList(tok, iStart, iOpening+1) + joinWithComma(concatLists(args1, args2)) + ")"; bool isVoid = eqGet(tok, iType, "void"); tokPrepend_reTok(tok, iStart, rewrittenHead + " { " + (isVoid ? "" : "return ") + name + "(" + joinWithComma(concatLists( map tok_lastIdentifier(args1), ll(expr), map tok_lastIdentifier(args2))) + "); }\n"); } }