projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[mcs] Handle interpolated strings with escaped quotes. Fixes #45286
[mono.git]
/
mcs
/
mcs
/
cs-tokenizer.cs
diff --git
a/mcs/mcs/cs-tokenizer.cs
b/mcs/mcs/cs-tokenizer.cs
index 02f6f3df77494ae11eec7fda3dd1b388fd94fc9b..e6a95fe8163a3590acb9f23602cc10d4cdec63dd 100644
(file)
--- a/
mcs/mcs/cs-tokenizer.cs
+++ b/
mcs/mcs/cs-tokenizer.cs
@@
-1095,6
+1095,7
@@
namespace Mono.CSharp
case Token.DECIMAL:
case Token.BOOL:
case Token.STRING:
case Token.DECIMAL:
case Token.BOOL:
case Token.STRING:
+ case Token.SBYTE:
return Token.OPEN_PARENS_CAST;
}
}
return Token.OPEN_PARENS_CAST;
}
}
@@
-2464,6
+2465,12
@@
namespace Mono.CSharp
case '\"':
++str_quote;
break;
case '\"':
++str_quote;
break;
+ case '\\':
+ // Skip escaped " character
+ c = reader.Read ();
+ if (c == -1)
+ res = false;
+ break;
case -1:
res = false;
break;
case -1:
res = false;
break;
@@
-2522,7
+2529,6
@@
namespace Mono.CSharp
int TokenizePragmaWarningIdentifier (ref int c, ref bool identifier)
{
int TokenizePragmaWarningIdentifier (ref int c, ref bool identifier)
{
-
if ((c >= '0' && c <= '9') || is_identifier_start_character (c)) {
int number;
if ((c >= '0' && c <= '9') || is_identifier_start_character (c)) {
int number;
@@
-2547,7
+2553,7
@@
namespace Mono.CSharp
id_builder [pos] = (char)c;
if (c >= '0' && c <= '9') {
id_builder [pos] = (char)c;
if (c >= '0' && c <= '9') {
- if (pos ==
6
&& id_builder [0] == 'C' && id_builder [1] == 'S') {
+ if (pos ==
5
&& id_builder [0] == 'C' && id_builder [1] == 'S') {
// Recognize CSXXXX as C# XXXX warning
number = 0;
int pow = 1000;
// Recognize CSXXXX as C# XXXX warning
number = 0;
int pow = 1000;
@@
-2562,6
+2568,9
@@
namespace Mono.CSharp
pow /= 10;
}
}
pow /= 10;
}
}
+ } else if (c == '\n' || c == UnicodeLS || c == UnicodePS) {
+ advance_line ();
+ break;
} else if ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && c != '_') {
break;
}
} else if ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && c != '_') {
break;
}
@@
-4057,6
+4066,9
@@
namespace Mono.CSharp
--braces;
break;
case '\\':
--braces;
break;
case '\\':
+ if (parsing_string_interpolation_quoted != null && parsing_string_interpolation_quoted.Peek ())
+ break;
+
++col;
int surrogate;
ch = escape (ch, out surrogate);
++col;
int surrogate;
ch = escape (ch, out surrogate);
@@
-4101,8
+4113,6
@@
namespace Mono.CSharp
private void handle_one_line_xml_comment ()
{
int c;
private void handle_one_line_xml_comment ()
{
int c;
- while ((c = peek_char ()) == ' ')
- get_char (); // skip heading whitespaces.
while ((c = peek_char ()) != -1 && c != '\n' && c != '\r') {
xml_comment_buffer.Append ((char) get_char ());
}
while ((c = peek_char ()) != -1 && c != '\n' && c != '\r') {
xml_comment_buffer.Append ((char) get_char ());
}