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 cd7ce1ac68fe34b998cd241d6f2d6783873866ea..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;
@@
-2547,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;
@@
-2562,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;
}
@@
-2587,9
+2609,6
@@
namespace Mono.CSharp
while (c == ' ' || c == '\t')
c = get_char ();
while (c == ' ' || c == '\t')
c = get_char ();
- if (c == '\n' || c == UnicodeLS || c == UnicodePS)
- advance_line ();
-
return number;
}
return number;
}