@@ -89,6 +89,7 @@ class ScriptParser final : ScriptLexer {
8989 void readVersionScriptCommand ();
9090 void readNoCrossRefs (bool to);
9191
92+ StringRef readName ();
9293 SymbolAssignment *readSymbolAssignment (StringRef name);
9394 ByteCommand *readByteCommand (StringRef tok);
9495 std::array<uint8_t , 4 > readFill ();
@@ -1089,7 +1090,7 @@ std::array<uint8_t, 4> ScriptParser::readFill() {
10891090
10901091SymbolAssignment *ScriptParser::readProvideHidden (bool provide, bool hidden) {
10911092 expect (" (" );
1092- StringRef name = next (), eq = peek ();
1093+ StringRef name = readName (), eq = peek ();
10931094 if (eq != " =" ) {
10941095 setError (" = expected, but got " + next ());
10951096 while (till (" )" ))
@@ -1130,10 +1131,10 @@ SymbolAssignment *ScriptParser::readAssignment(StringRef tok) {
11301131 SaveAndRestore saved (inExpr, true );
11311132 if (op.starts_with (" =" )) {
11321133 // Support = followed by an expression without whitespace.
1133- cmd = readSymbolAssignment (tok);
1134+ cmd = readSymbolAssignment (unquote ( tok) );
11341135 } else if ((op.size () == 2 && op[1 ] == ' =' && strchr (" +-*/&^|" , op[0 ])) ||
11351136 op == " <<=" || op == " >>=" ) {
1136- cmd = readSymbolAssignment (tok);
1137+ cmd = readSymbolAssignment (unquote ( tok) );
11371138 } else if (tok == " PROVIDE" ) {
11381139 cmd = readProvideHidden (true , false );
11391140 } else if (tok == " HIDDEN" ) {
@@ -1152,8 +1153,9 @@ SymbolAssignment *ScriptParser::readAssignment(StringRef tok) {
11521153 return cmd;
11531154}
11541155
1156+ StringRef ScriptParser::readName () { return unquote (next ()); }
1157+
11551158SymbolAssignment *ScriptParser::readSymbolAssignment (StringRef name) {
1156- name = unquote (name);
11571159 StringRef op = next ();
11581160 assert (op == " =" || op == " *=" || op == " /=" || op == " +=" || op == " -=" ||
11591161 op == " &=" || op == " ^=" || op == " |=" || op == " <<=" || op == " >>=" );
0 commit comments