Skip to content

Commit

Permalink
Changed equality to consider type
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed May 17, 2016
1 parent f6b92a7 commit 9b6f81f
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 97 deletions.
Expand Up @@ -85,7 +85,7 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
} }


@Override @Override
public void eq( Expression lhs, Expression rhs ) public void eq( Expression lhs, Expression rhs, TypeReference type )
{ {


} }
Expand Down
Expand Up @@ -58,14 +58,14 @@ public void accept( ExpressionVisitor visitor )
}; };
} }


public static Expression eq( final Expression lhs, final Expression rhs ) public static Expression eq( final Expression lhs, final Expression rhs, TypeReference type )
{ {
return new Expression() return new Expression()
{ {
@Override @Override
public void accept( ExpressionVisitor visitor ) public void accept( ExpressionVisitor visitor )
{ {
visitor.eq( lhs, rhs ); visitor.eq( lhs, rhs, type );
} }
}; };
} }
Expand Down
Expand Up @@ -133,7 +133,7 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
} }


@Override @Override
public void eq( Expression lhs, Expression rhs ) public void eq( Expression lhs, Expression rhs, TypeReference ignored )
{ {
result.append( "eq(" ); result.append( "eq(" );
lhs.accept( this ); lhs.accept( this );
Expand Down
Expand Up @@ -41,7 +41,7 @@ public interface ExpressionVisitor


void ternary( Expression test, Expression onTrue, Expression onFalse ); void ternary( Expression test, Expression onTrue, Expression onFalse );


void eq( Expression lhs, Expression rhs ); void eq( Expression lhs, Expression rhs, TypeReference type );


void or( Expression lhs, Expression rhs ); void or( Expression lhs, Expression rhs );


Expand Down
Expand Up @@ -224,17 +224,10 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
} }


@Override @Override
public void eq( Expression lhs, Expression rhs ) public void eq( Expression lhs, Expression rhs, TypeReference type )
{ {
TypeReference lhsType = findType( lhs );
TypeReference rhsType = findType( rhs );


if ( !lhsType.equals( rhsType ) ) switch ( type.simpleName() )
{
throw new IllegalStateException( "Cannot compare values of different types" );
}

switch ( lhsType.simpleName() )
{ {
case "int": case "int":
case "byte": case "byte":
Expand Down
Expand Up @@ -395,7 +395,7 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
} }


@Override @Override
public void eq( Expression lhs, Expression rhs ) public void eq( Expression lhs, Expression rhs, TypeReference ignored )
{ {
lhs.accept( this ); lhs.accept( this );
append( " == " ); append( " == " );
Expand Down

Large diffs are not rendered by default.

0 comments on commit 9b6f81f

Please sign in to comment.