Use Identifiers instead of Strings
The high level summary of the changes:
- use `Identifier` instead of `name` in `Keyword` and `Parameter`.
- construct `Identifier` through a factory method in case future interning is desired.
These changes are in preparation for using `Identifier` instead of `name` for environment lookups.
Closes #5304.
PiperOrigin-RevId: 199869171
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index ec6d323..d2d0af1 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -422,7 +422,7 @@
// create an error expression
private Identifier makeErrorExpression(int start, int end) {
- return setLocation(new Identifier("$error$"), start, end);
+ return setLocation(Identifier.of("$error$"), start, end);
}
// Convenience wrapper method around ASTNode.setLocation
@@ -461,10 +461,9 @@
if (expr instanceof Identifier) {
// parse a named argument
if (token.kind == TokenKind.EQUALS) {
- String name = ((Identifier) expr).getName();
nextToken();
Expression val = parseNonTupleExpression();
- return setLocation(new Argument.Keyword(name, val), start, val);
+ return setLocation(new Argument.Keyword(((Identifier) expr), val), start, val);
}
}
@@ -480,28 +479,24 @@
if (token.kind == TokenKind.STAR_STAR) { // kwarg
nextToken();
Identifier ident = parseIdent();
- return setLocation(new Parameter.StarStar<Expression, Expression>(
- ident.getName()), start, ident);
+ return setLocation(new Parameter.StarStar<>(ident), start, ident);
} else if (token.kind == TokenKind.STAR) { // stararg
int end = token.right;
nextToken();
if (token.kind == TokenKind.IDENTIFIER) {
Identifier ident = parseIdent();
- return setLocation(new Parameter.Star<Expression, Expression>(ident.getName()),
- start, ident);
+ return setLocation(new Parameter.Star<>(ident), start, ident);
} else {
- return setLocation(new Parameter.Star<Expression, Expression>(null), start, end);
+ return setLocation(new Parameter.Star<>(null), start, end);
}
} else {
Identifier ident = parseIdent();
if (token.kind == TokenKind.EQUALS) { // there's a default value
nextToken();
Expression expr = parseNonTupleExpression();
- return setLocation(new Parameter.Optional<Expression, Expression>(
- ident.getName(), expr), start, expr);
+ return setLocation(new Parameter.Optional<>(ident, expr), start, expr);
} else {
- return setLocation(new Parameter.Mandatory<Expression, Expression>(
- ident.getName()), start, ident);
+ return setLocation(new Parameter.Mandatory<>(ident), start, ident);
}
}
}
@@ -896,7 +891,7 @@
expect(TokenKind.IDENTIFIER);
return makeErrorExpression(token.left, token.right);
}
- Identifier ident = new Identifier(((String) token.value));
+ Identifier ident = Identifier.of(((String) token.value));
setLocation(ident, token.left, token.right);
nextToken();
return ident;
@@ -1075,7 +1070,7 @@
}
String name = (String) token.value;
- Identifier identifier = new Identifier(name);
+ Identifier identifier = Identifier.of(name);
if (symbols.containsKey(identifier)) {
syntaxError(
String.format("Identifier '%s' is used more than once", identifier.getName()));