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

Method setDefaultArguments

output/java/1.4.14/Interpreter.java:1258–1293  ·  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

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