Browse Source

Added error expression for invalid initializers.

newNRvisualizers
Mike Krüger 15 years ago
parent
commit
817a2da7d7
  1. 2
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  2. 6250
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs
  3. 16
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay
  4. 4
      ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs
  5. 18
      ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs
  6. 2
      ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs

2
ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

@ -1457,7 +1457,7 @@ namespace ICSharpCode.NRefactory.CSharp
return result; return result;
} }
public override object Visit (InvalidExpressionStatement statementExpression) public override object Visit (InvalidStatementExpression statementExpression)
{ {
var result = new ExpressionStatement (); var result = new ExpressionStatement ();
if (statementExpression.Expression == null) if (statementExpression.Expression == null)

6250
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs

File diff suppressed because it is too large Load Diff

16
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay

@ -4967,6 +4967,20 @@ opt_local_variable_initializer
current_variable.Initializer = (Expression) $2; current_variable.Initializer = (Expression) $2;
lbag.AppendTo (current_variable, GetLocation ($1)); lbag.AppendTo (current_variable, GetLocation ($1));
} }
| ASSIGN error
{
if (yyToken == Token.OPEN_BRACKET_EXPR) {
report.Error (650, lexer.Location,
"Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type");
current_variable.Initializer = ErrorExpression.Create (650, lexer.Location,
"Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type");
} else {
Error_SyntaxError (yyToken);
current_variable.Initializer = ErrorExpression.Create (0, lexer.Location,
"Syntax error");
}
lbag.AppendTo (current_variable, GetLocation ($1));
}
| error | error
{ {
if (yyToken == Token.OPEN_BRACKET_EXPR) { if (yyToken == Token.OPEN_BRACKET_EXPR) {
@ -5092,7 +5106,7 @@ statement_expression
ExpressionStatement s = $1 as ExpressionStatement; ExpressionStatement s = $1 as ExpressionStatement;
if (s == null) { if (s == null) {
Expression.Error_InvalidExpressionStatement (report, GetLocation ($1)); Expression.Error_InvalidExpressionStatement (report, GetLocation ($1));
$$ = new StatementExpression (new InvalidExpressionStatement ($1)); $$ = new InvalidStatementExpression ($1 as Expression);
} else { } else {
$$ = new StatementExpression (s); $$ = new StatementExpression (s);
} }

4
ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs

@ -6288,14 +6288,14 @@ namespace Mono.CSharp {
} }
} }
public class InvalidExpressionStatement : Statement public class InvalidStatementExpression : Statement
{ {
public Expression Expression { public Expression Expression {
get; get;
private set; private set;
} }
public InvalidExpressionStatement (Expression expr) public InvalidStatementExpression (Expression expr)
{ {
this.Expression = expr; this.Expression = expr;
} }

18
ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs

@ -9157,14 +9157,28 @@ namespace Mono.CSharp
} }
} }
class ErrorExpression : EmptyExpression public class ErrorExpression : EmptyExpression
{ {
public static readonly ErrorExpression Instance = new ErrorExpression (); public static readonly ErrorExpression Instance = new ErrorExpression ();
public readonly int ErrorCode;
public readonly string Error;
private ErrorExpression () private ErrorExpression ()
: base (InternalType.ErrorType) : base (InternalType.ErrorType)
{ {
} }
ErrorExpression (int errorCode, Location location, string error) : base (InternalType.ErrorType)
{
this.ErrorCode = errorCode;
this.loc = location;
this.Error = error;
}
public static ErrorExpression Create (int errorCode, Location location, string error)
{
return new ErrorExpression (errorCode, location, error);
}
public override Expression CreateExpressionTree (ResolveContext ec) public override Expression CreateExpressionTree (ResolveContext ec)
{ {

2
ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs

@ -338,7 +338,7 @@ namespace Mono.CSharp
return null; return null;
} }
public virtual object Visit (InvalidExpressionStatement invalidExpressionStatement) public virtual object Visit (InvalidStatementExpression invalidStatementExpression)
{ {
return null; return null;
} }

Loading…
Cancel
Save