move asm related tests from FilterOpTest to OptimizedAsmParser testcase
This commit is contained in:
42
src/main/java/jef/asm/OptimizedAsmParser.java
Normal file
42
src/main/java/jef/asm/OptimizedAsmParser.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package jef.asm;
|
||||
|
||||
import jef.expressions.Expression;
|
||||
import jef.expressions.modifier.ExpressionOptimizerBottomUp;
|
||||
import jef.expressions.modifier.IConst0Fixer;
|
||||
import jef.expressions.modifier.TableAliasInjector;
|
||||
import jef.expressions.modifier.TernaryRewriter;
|
||||
import jef.serializable.SerializableFunction;
|
||||
import jef.serializable.SerializablePredicate;
|
||||
import lombok.Getter;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.invoke.SerializedLambda;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@Getter
|
||||
public class OptimizedAsmParser extends AsmParser{
|
||||
|
||||
public OptimizedAsmParser(SerializablePredicate<?> predicate) {
|
||||
super(predicate);
|
||||
}
|
||||
|
||||
public OptimizedAsmParser(SerializableFunction<?, ?> function) {
|
||||
super(function);
|
||||
}
|
||||
|
||||
public Expression parse() throws AsmParseException {
|
||||
var expr = super.parse();
|
||||
|
||||
System.out.println(expr);
|
||||
expr = new TernaryRewriter().modify(expr);
|
||||
System.out.println(expr);
|
||||
expr = new IConst0Fixer().modify(expr);
|
||||
System.out.println(expr);
|
||||
expr = new ExpressionOptimizerBottomUp().modify(expr);
|
||||
|
||||
return expr;
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,6 @@ public class IntermediateFieldExpression extends ConstantExpression implements S
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
return "`" + name + "`";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package jef.operations;
|
||||
import jef.Queryable;
|
||||
import jef.asm.AsmParseException;
|
||||
import jef.asm.AsmParser;
|
||||
import jef.asm.OptimizedAsmParser;
|
||||
import jef.expressions.Expression;
|
||||
import jef.expressions.SelectExpression;
|
||||
import jef.expressions.WhereExpression;
|
||||
@@ -27,20 +28,14 @@ public class FilterOp<T extends Serializable> implements Queryable<T>, Operation
|
||||
public FilterOp(Queryable<T> queryable, SerializablePredicate<? super T> predicate) {
|
||||
this.queryable = queryable;
|
||||
this.predicate = predicate;
|
||||
var parser = new AsmParser(predicate);
|
||||
var parser = new OptimizedAsmParser(predicate);
|
||||
Expression expr;
|
||||
try {
|
||||
expr = parser.parse();
|
||||
} catch (AsmParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
System.out.println(expr);
|
||||
expr = new TernaryRewriter().modify(expr);
|
||||
System.out.println(expr);
|
||||
expr = new IConst0Fixer().modify(expr);
|
||||
System.out.println(expr);
|
||||
// expr = new ExpressionOptimizer().modify(expr);
|
||||
expr = new ExpressionOptimizerBottomUp().modify(expr);
|
||||
|
||||
expr = new TableAliasInjector(getTableAlias()).modify(expr);//TODO this does not work together with expression optimization
|
||||
this.predicateExpr = expr;
|
||||
//TODO optimize whole expression
|
||||
|
||||
Reference in New Issue
Block a user