X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fcs-tokenizer.cs;h=189bdea6f55fb10a4a461ae39811604c18e8aefa;hb=9f3ef8e4bac11601a2cf2670cbab337e6276103b;hp=7475a3055fabcd00e8a69901c526ec90f8046212;hpb=3e8658be5c7f37fcecc77f2d9b9ff62abc0bc6b4;p=mono.git diff --git a/mcs/mcs/cs-tokenizer.cs b/mcs/mcs/cs-tokenizer.cs index 7475a3055fa..189bdea6f55 100644 --- a/mcs/mcs/cs-tokenizer.cs +++ b/mcs/mcs/cs-tokenizer.cs @@ -1251,6 +1251,7 @@ namespace Mono.CSharp case Token.OPEN_BRACKET: case Token.OP_GENERICS_GT: case Token.INTERR: + case Token.OP_COALESCING: next_token = Token.INTERR_NULLABLE; break; @@ -2421,6 +2422,11 @@ namespace Mono.CSharp } Report.Warning (1634, 1, Location, "Expected disable or restore"); + + // Eat any remaining characters on the line + while (c != '\n' && c != -1) + c = get_char (); + return; } @@ -2858,8 +2864,17 @@ namespace Mono.CSharp #endif while (true){ - c = get_char (); + // Cannot use get_char because of \r in quoted strings + if (putback_char != -1) { + c = putback_char; + putback_char = -1; + } else { + c = reader.Read (); + } + if (c == '"') { + ++col; + if (quoted && peek_char () == '"') { if (pos == value_builder.Length) Array.Resize (ref value_builder, pos * 2); @@ -2891,9 +2906,18 @@ namespace Mono.CSharp if (c == '\n') { if (!quoted) { Report.Error (1010, Location, "Newline in constant"); + + advance_line (); + + // Don't add \r to string literal + if (pos > 1 && value_builder [pos - 1] == '\r') + --pos; + val = new StringLiteral (context.BuiltinTypes, new string (value_builder, 0, pos), start_location); return Token.LITERAL; } + + advance_line (); } else if (c == '\\' && !quoted) { int surrogate; c = escape (c, out surrogate); @@ -2909,6 +2933,8 @@ namespace Mono.CSharp } else if (c == -1) { Report.Error (1039, Location, "Unterminated string literal"); return Token.EOF; + } else { + ++col; } if (pos == value_builder.Length)