Don't allocate intermediate MemberName for member access expressions
[mono.git] / mcs / mcs / cs-tokenizer.cs
index 39ecfd02d238805613dca0332785f118a747b8f2..2dccc46414da9f88d981f042d186a30fb6433351 100644 (file)
@@ -87,6 +87,11 @@ namespace Mono.CSharp
                        {
                                return Create (null, row, column);
                        }
+
+                       public static LocatedToken Create (string value, Location loc)
+                       {
+                               return Create (value, loc.Row, loc.Column);
+                       }
                        
                        public static LocatedToken Create (string value, int row, int column)
                        {
@@ -141,7 +146,7 @@ namespace Mono.CSharp
                        }
                }
 
-               enum PreprocessorDirective
+               public enum PreprocessorDirective
                {
                        Invalid = 0,
 
@@ -211,8 +216,6 @@ namespace Mono.CSharp
 
                public bool parsing_modifiers;
 
-               public bool async_block;
-
                //
                // The special characters to inject on streams to run the unit parser
                // in the special expression mode. Using private characters from
@@ -324,7 +327,7 @@ namespace Mono.CSharp
                        escaped_identifiers.Add (loc);
                }
 
-               public bool IsEscapedIdentifier (MemberName name)
+               public bool IsEscapedIdentifier (ATypeNameExpression name)
                {
                        return escaped_identifiers != null && escaped_identifiers.Contains (name.Location);
                }
@@ -427,10 +430,6 @@ namespace Mono.CSharp
                        else
                                tab_size = 8;
 
-                       //
-                       // FIXME: This could be `Location.Push' but we have to
-                       // find out why the MS compiler allows this
-                       //
                        Mono.CSharp.Location.Push (file, file);
                }
                
@@ -836,7 +835,7 @@ namespace Mono.CSharp
                                break;
 
                        case Token.AWAIT:
-                               if (!async_block)
+                               if (parsing_block == 0)
                                        res = -1;
 
                                break;
@@ -2855,7 +2854,7 @@ namespace Mono.CSharp
                        if (id_builder [0] >= '_' && !quoted) {
                                int keyword = GetKeyword (id_builder, pos);
                                if (keyword != -1) {
-                                       val = LocatedToken.Create (null, ref_line, column);
+                                       val = LocatedToken.Create (keyword == Token.AWAIT ? "await" : null, ref_line, column);
                                        return keyword;
                                }
                        }