internal static Expression /*!*/ MakeRead(int kind, Parser /*!*/ parser, string name, SourceSpan location)
        {
            switch (kind)
            {
            case Identifier:
                return((Expression)parser.CurrentScope.ResolveVariable(name) ?? new MethodCall(null, name, null, null, location));

            case Instance:
                return(new InstanceVariable(name, location));

            case Global:
                return(new GlobalVariable(name, location));

            case Constant:
                return(new ConstantVariable(name, location));

            case Class:
                return(new ClassVariable(name, location));

            case Nil:
                return(Literal.Nil(location));

            case Self:
                return(new SelfReference(location));

            case True:
                return(Literal.True(location));

            case False:
                return(Literal.False(location));

            case File:
                return(new FileLiteral(location));

            case Line:
                return(Literal.Integer(parser.Tokenizer.TokenSpan.Start.Line, location));

            case Encoding:
                return(new EncodingExpression(location));
            }

            throw Assert.Unreachable;
        }