MCPcopy Create free account
hub / github.com/antlr/codebuff / setDefaultArguments

Method setDefaultArguments

output/java/1.4.15/Interpreter.java:1262–1297  ·  view source on GitHub ↗

Set any default argument values that were not set by the invoking template or by ST#add directly. Note that the default values may be templates. The evaluation context is the invokedST template itself so template default arguments can see other arguments.

(STWriter out, InstanceScope scope)

Source from the content-addressed store, hash-verified

1260 */
1261
1262 public void setDefaultArguments(STWriter out, InstanceScope scope) {
1263 final ST invokedST = scope.st;
1264 if ( invokedST.impl.formalArguments==null || invokedST.impl.numberOfArgsWithDefaultValues==0) {
1265 return;
1266 }
1267 for (FormalArgument arg : invokedST.impl.formalArguments.values()) {
1268 // if no value for attribute and default arg, inject default arg into self
1269 if ( invokedST.locals[arg.index]!= ST.EMPTY_ATTR || arg.defaultValueToken==null ) {
1270 continue;
1271 }
1272 //System.out.println("setting def arg "+arg.name+" to "+arg.defaultValueToken);
1273 if ( arg.defaultValueToken.getType()== GroupParser.ANONYMOUS_TEMPLATE ) {
1274 CompiledST code = arg.compiledDefaultValue;
1275 if ( code==null ) {
1276 code = new CompiledST();
1277 }
1278 ST defaultArgST = group.createStringTemplateInternally(code);
1279 defaultArgST.groupThatCreatedThisInstance = group;
1280 // If default arg is template with single expression
1281 // wrapped in parens, x={<(...)>}, then eval to string
1282 // rather than setting x to the template for later
1283 // eval.
1284 String defArgTemplate = arg.defaultValueToken.getText();
1285 if ( defArgTemplate.startsWith("{"+group.delimiterStartChar+"(") && defArgTemplate.endsWith(")"+group.delimiterStopChar+"}") ) {
1286 invokedST.rawSetAttribute(arg.name,
1287 toString(out, new InstanceScope(scope, invokedST), defaultArgST));
1288 }
1289 else {
1290 invokedST.rawSetAttribute(arg.name, defaultArgST);
1291 }
1292 }
1293 else {
1294 invokedST.rawSetAttribute(arg.name, arg.defaultValue);
1295 }
1296 }
1297 }
1298
1299 /**
1300 * If an instance of <i>x</i> is enclosed in a <i>y</i> which is in a

Callers 1

execMethod · 0.95

Calls 6

rawSetAttributeMethod · 0.95
toStringMethod · 0.95
valuesMethod · 0.65
getTextMethod · 0.65
getTypeMethod · 0.45

Tested by

no test coverage detected