projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[mcs] Better detection of null operator inside conditional expression. Fixes #57232
[mono.git]
/
mcs
/
mcs
/
cs-tokenizer.cs
diff --git
a/mcs/mcs/cs-tokenizer.cs
b/mcs/mcs/cs-tokenizer.cs
index 99759aac984fc441816824303b28c8c9a0879d25..1be3309b1bfdd611d404408e743e0414f81f2860 100644
(file)
--- a/
mcs/mcs/cs-tokenizer.cs
+++ b/
mcs/mcs/cs-tokenizer.cs
@@
-893,6
+893,16
@@
namespace Mono.CSharp
if (parsing_block == 0)
res = -1;
if (parsing_block == 0)
res = -1;
+ break;
+ case Token.THROW:
+ switch (current_token) {
+ case Token.ARROW:
+ case Token.OP_COALESCING:
+ case Token.INTERR:
+ res = Token.THROW_EXPR;
+ break;
+ }
+
break;
}
break;
}
@@
-1267,7
+1277,8
@@
namespace Mono.CSharp
else if (the_token == Token.INTERR_NULLABLE || the_token == Token.STAR)
goto again;
else if (the_token == Token.OP_GENERICS_LT) {
else if (the_token == Token.INTERR_NULLABLE || the_token == Token.STAR)
goto again;
else if (the_token == Token.OP_GENERICS_LT) {
- if (!parse_less_than (ref genericDimension))
+ int unused = 0;
+ if (!parse_less_than (ref unused))
return false;
goto again;
} else if (the_token == Token.OPEN_BRACKET) {
return false;
goto again;
} else if (the_token == Token.OPEN_BRACKET) {
@@
-1314,7
+1325,8
@@
namespace Mono.CSharp
}
if (d == '.') {
}
if (d == '.') {
- return Token.INTERR_OPERATOR;
+ d = reader.Peek ();
+ return d >= '0' && d <= '9' ? Token.INTERR : Token.INTERR_OPERATOR;
}
if (d != ' ') {
}
if (d != ' ') {
@@
-1344,6
+1356,7
@@
namespace Mono.CSharp
case Token.THIS:
case Token.NEW:
case Token.INTERPOLATED_STRING:
case Token.THIS:
case Token.NEW:
case Token.INTERPOLATED_STRING:
+ case Token.THROW:
next_token = Token.INTERR;
break;
next_token = Token.INTERR;
break;
@@
-2465,6
+2478,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;
@@
-2523,7
+2542,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;
@@
-2548,7
+2566,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;
@@
-2563,6
+2581,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;
}