Skip to content

Commit

Permalink
Removed explicit type argument from comparisons
Browse files Browse the repository at this point in the history
Now that expression contains a type there is no longer any reason
to send in explicit types to `equal`, `lt`, `lte`, `gt`, and `gte`
  • Loading branch information
pontusmelke authored and henriknyman committed Nov 10, 2016
1 parent bb3cc80 commit 9a26362
Show file tree
Hide file tree
Showing 11 changed files with 185 additions and 162 deletions.
20 changes: 10 additions & 10 deletions community/codegen/src/main/java/org/neo4j/codegen/Expression.java
Expand Up @@ -46,50 +46,50 @@ public void accept( ExpressionVisitor visitor )
}
};

public static Expression gt( final Expression lhs, final Expression rhs, TypeReference argType )
public static Expression gt( final Expression lhs, final Expression rhs )
{
return new Expression( BOOLEAN )
{
@Override
public void accept( ExpressionVisitor visitor )
{
visitor.gt( lhs, rhs, argType );
visitor.gt( lhs, rhs );
}
};
}

public static Expression gte( final Expression lhs, final Expression rhs, TypeReference argType )
public static Expression gte( final Expression lhs, final Expression rhs )
{
return new Expression( BOOLEAN )
{
@Override
public void accept( ExpressionVisitor visitor )
{
visitor.gte( lhs, rhs, argType );
visitor.gte( lhs, rhs );
}
};
}

public static Expression lt( final Expression lhs, final Expression rhs, TypeReference argType )
public static Expression lt( final Expression lhs, final Expression rhs)
{
return new Expression( BOOLEAN )
{
@Override
public void accept( ExpressionVisitor visitor )
{
visitor.lt( lhs, rhs, argType );
visitor.lt( lhs, rhs);
}
};
}

public static Expression lte( final Expression lhs, final Expression rhs, TypeReference argType )
public static Expression lte( final Expression lhs, final Expression rhs )
{
return new Expression( BOOLEAN )
{
@Override
public void accept( ExpressionVisitor visitor )
{
visitor.lte( lhs, rhs, argType );
visitor.lte( lhs, rhs );
}
};
}
Expand Down Expand Up @@ -118,14 +118,14 @@ public void accept( ExpressionVisitor visitor )
};
}

public static Expression equal( final Expression lhs, final Expression rhs, TypeReference argType )
public static Expression equal( final Expression lhs, final Expression rhs )
{
return new Expression( BOOLEAN )
{
@Override
public void accept( ExpressionVisitor visitor )
{
visitor.equal( lhs, rhs, argType );
visitor.equal( lhs, rhs );
}
};
}
Expand Down
Expand Up @@ -241,4 +241,9 @@ void templateAccept( CodeBlock method, ExpressionVisitor visitor )
}
};
}

public TypeReference type()
{
return type;
}
}
Expand Up @@ -63,7 +63,7 @@ public void invoke( MethodReference method, Expression[] arguments )
}

@Override
public void load( LocalVariable variable)
public void load( LocalVariable variable )
{
result.append( "load{type=" );
if ( variable.type() == null )
Expand Down Expand Up @@ -125,30 +125,30 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
{
result.append( "ternary{test=" );
test.accept( this );
result.append(", onTrue=");
result.append( ", onTrue=" );
onTrue.accept( this );
result.append(", onFalse=");
result.append( ", onFalse=" );
onFalse.accept( this );
result.append( "}" );
}

@Override
public void ternaryOnNull( Expression test, Expression onTrue, Expression onFalse )
{
ternary( Expression.equal( test, Expression.constant( null ), TypeReference.OBJECT ),
ternary( Expression.equal( test, Expression.constant( null ) ),
onTrue, onFalse );
}

@Override
public void ternaryOnNonNull( Expression test, Expression onTrue, Expression onFalse )
{
ternary( Expression.not(
Expression.equal( test, Expression.constant( null ), TypeReference.OBJECT )),
Expression.equal( test, Expression.constant( null ) ) ),
onTrue, onFalse );
}

@Override
public void equal( Expression lhs, Expression rhs, TypeReference ignored )
public void equal( Expression lhs, Expression rhs )
{
result.append( "equal(" );
lhs.accept( this );
Expand Down Expand Up @@ -180,19 +180,19 @@ public void and( Expression lhs, Expression rhs )
@Override
public void addInts( Expression lhs, Expression rhs )
{
add(lhs, rhs);
add( lhs, rhs );
}

@Override
public void addLongs( Expression lhs, Expression rhs )
{
add(lhs, rhs);
add( lhs, rhs );
}

@Override
public void addDoubles( Expression lhs, Expression rhs )
{
add(lhs, rhs);
add( lhs, rhs );
}

private void add( Expression lhs, Expression rhs )
Expand All @@ -205,7 +205,7 @@ private void add( Expression lhs, Expression rhs )
}

@Override
public void gt( Expression lhs, Expression rhs, TypeReference ignored )
public void gt( Expression lhs, Expression rhs )
{
result.append( "gt(" );
lhs.accept( this );
Expand All @@ -215,7 +215,7 @@ public void gt( Expression lhs, Expression rhs, TypeReference ignored )
}

@Override
public void gte( Expression lhs, Expression rhs, TypeReference ignored )
public void gte( Expression lhs, Expression rhs )
{
result.append( "gt(" );
lhs.accept( this );
Expand All @@ -225,7 +225,7 @@ public void gte( Expression lhs, Expression rhs, TypeReference ignored )
}

@Override
public void lt( Expression lhs, Expression rhs, TypeReference ignored )
public void lt( Expression lhs, Expression rhs )
{
result.append( "lt(" );
lhs.accept( this );
Expand All @@ -235,7 +235,7 @@ public void lt( Expression lhs, Expression rhs, TypeReference ignored )
}

@Override
public void lte( Expression lhs, Expression rhs, TypeReference ignored )
public void lte( Expression lhs, Expression rhs )
{
result.append( "gt(" );
lhs.accept( this );
Expand All @@ -247,19 +247,19 @@ public void lte( Expression lhs, Expression rhs, TypeReference ignored )
@Override
public void subtractInts( Expression lhs, Expression rhs )
{
sub( lhs, rhs);
sub( lhs, rhs );
}

@Override
public void subtractLongs( Expression lhs, Expression rhs )
{
sub( lhs, rhs);
sub( lhs, rhs );
}

@Override
public void subtractDoubles( Expression lhs, Expression rhs )
{
sub( lhs, rhs);
sub( lhs, rhs );
}

private void sub( Expression lhs, Expression rhs )
Expand All @@ -274,13 +274,13 @@ private void sub( Expression lhs, Expression rhs )
@Override
public void multiplyLongs( Expression lhs, Expression rhs )
{
mul( lhs, rhs);
mul( lhs, rhs );
}

@Override
public void multiplyDoubles( Expression lhs, Expression rhs )
{
mul( lhs, rhs);
mul( lhs, rhs );
}

private void mul( Expression lhs, Expression rhs )
Expand Down
Expand Up @@ -25,7 +25,7 @@ public interface ExpressionVisitor

void invoke( MethodReference method, Expression[] arguments );

void load( LocalVariable variable);
void load( LocalVariable variable );

void getField( Expression target, FieldReference field );

Expand All @@ -45,7 +45,7 @@ public interface ExpressionVisitor

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

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

void or( Expression lhs, Expression rhs );

Expand All @@ -57,13 +57,13 @@ public interface ExpressionVisitor

void addDoubles( Expression lhs, Expression rhs );

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

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

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

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

void subtractInts( Expression lhs, Expression rhs );

Expand Down
Expand Up @@ -184,7 +184,7 @@ public void getField( Expression target, FieldReference field )
target.accept( this );
methodVisitor
.visitFieldInsn( GETFIELD, byteCodeName( field.owner() ), field.name(), typeName( field.type() ) );
}
}

@Override
public void constant( Object value )
Expand Down Expand Up @@ -271,7 +271,7 @@ public void ternary( Expression test, Expression onTrue, Expression onFalse )
@Override
public void ternaryOnNull( Expression test, Expression onTrue, Expression onFalse )
{
ternaryExpression( IFNONNULL, test, onTrue, onFalse );
ternaryExpression( IFNONNULL, test, onTrue, onFalse );
}

@Override
Expand All @@ -281,9 +281,10 @@ public void ternaryOnNonNull( Expression test, Expression onTrue, Expression onF
}

@Override
public void equal( Expression lhs, Expression rhs, TypeReference type )
public void equal( Expression lhs, Expression rhs )
{
switch ( type.simpleName() )
assertSameType( lhs, rhs );
switch ( lhs.type().simpleName() )
{
case "int":
case "byte":
Expand Down Expand Up @@ -396,20 +397,22 @@ public void addDoubles( Expression lhs, Expression rhs )
}

@Override
public void gt( Expression lhs, Expression rhs, TypeReference type )
public void gt( Expression lhs, Expression rhs )
{
numberOperation( type,
assertSameType( lhs, rhs );
numberOperation( lhs.type(),
() -> compareIntOrReferenceType( lhs, rhs, IF_ICMPLE ),
() -> compareLongOrFloatType( lhs, rhs, LCMP, IFLE ),
() -> compareLongOrFloatType( lhs, rhs, FCMPL, IFLE ),
() -> compareLongOrFloatType( lhs, rhs, DCMPL, IFLE )
);
);
}

@Override
public void gte( Expression lhs, Expression rhs, TypeReference type )
public void gte( Expression lhs, Expression rhs )
{
numberOperation( type,
assertSameType( lhs, rhs );
numberOperation( lhs.type(),
() -> compareIntOrReferenceType( lhs, rhs, IF_ICMPLT ),
() -> compareLongOrFloatType( lhs, rhs, LCMP, IFLT ),
() -> compareLongOrFloatType( lhs, rhs, FCMPL, IFLT ),
Expand All @@ -418,9 +421,10 @@ public void gte( Expression lhs, Expression rhs, TypeReference type )
}

@Override
public void lt( Expression lhs, Expression rhs, TypeReference type )
public void lt( Expression lhs, Expression rhs )
{
numberOperation( type,
assertSameType( lhs, rhs );
numberOperation( lhs.type(),
() -> compareIntOrReferenceType( lhs, rhs, IF_ICMPGE ),
() -> compareLongOrFloatType( lhs, rhs, LCMP, IFGE ),
() -> compareLongOrFloatType( lhs, rhs, FCMPG, IFGE ),
Expand All @@ -429,9 +433,10 @@ public void lt( Expression lhs, Expression rhs, TypeReference type )
}

@Override
public void lte( Expression lhs, Expression rhs, TypeReference type )
public void lte( Expression lhs, Expression rhs)
{
numberOperation( type,
assertSameType( lhs, rhs );
numberOperation( lhs.type(),
() -> compareIntOrReferenceType( lhs, rhs, IF_ICMPGT ),
() -> compareLongOrFloatType( lhs, rhs, LCMP, IFGT ),
() -> compareLongOrFloatType( lhs, rhs, FCMPG, IFGT ),
Expand Down Expand Up @@ -640,7 +645,7 @@ private void arrayStore( TypeReference reference )
}
}

private void ternaryExpression(int op, Expression test, Expression onTrue, Expression onFalse)
private void ternaryExpression( int op, Expression test, Expression onTrue, Expression onFalse )
{
test.accept( this );
Label l0 = new Label();
Expand All @@ -653,7 +658,8 @@ private void ternaryExpression(int op, Expression test, Expression onTrue, Expre
methodVisitor.visitLabel( l1 );
}

private void numberOperation( TypeReference type, Runnable onInt, Runnable onLong, Runnable onFloat, Runnable onDouble )
private void numberOperation( TypeReference type, Runnable onInt, Runnable onLong, Runnable onFloat,
Runnable onDouble )
{

switch ( type.simpleName() )
Expand All @@ -679,4 +685,12 @@ private void numberOperation( TypeReference type, Runnable onInt, Runnable onLon
}
}

private void assertSameType( Expression lhs, Expression rhs )
{
if ( !lhs.type().equals( rhs.type() ) )
{
throw new IllegalArgumentException( "Can only compare values of the same type" );
}
}

}

0 comments on commit 9a26362

Please sign in to comment.