diff --git a/src/main/java/parser/Function.java b/src/main/java/parser/Function.java index 2ac2506..3ad3beb 100644 --- a/src/main/java/parser/Function.java +++ b/src/main/java/parser/Function.java @@ -8,6 +8,7 @@ import parser.methods.Method; import java.io.StringReader; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.InputMismatchException; import java.util.List; @@ -223,7 +224,7 @@ public double calc(double... x) { return Double.NaN; } - public static boolean assignObject(String input, Class mathExpClass) { + public static boolean assignObject(String input, Class clazz) { /** * Check if it is a function assignment operation...e.g: @@ -273,7 +274,15 @@ public static boolean assignObject(String input, Class mathExpClass) { success = true; } else { - MathExpression expr = mathExpClass == BigMathExpression.class ? new BigMathExpression(rhs) : new MathExpression(rhs); + MathExpression expr; + try { + expr = clazz.getConstructor(String.class).newInstance(rhs); + } catch (InstantiationException | + IllegalAccessException | + InvocationTargetException | + NoSuchMethodException e) { + throw new RuntimeException(e); // unreachable + } String val = expr.solve(); String referenceName = expr.getReturnObjectName(); //System.out.println("rhs: "+rhs+", mathExpClass: "+mathExpClass+", expr.class: "+expr.getClass()+", val: "+val+", type: "+expr.getReturnType()); diff --git a/src/main/java/util/MathExpressionManager.java b/src/main/java/util/MathExpressionManager.java index 8032711..e9544b3 100644 --- a/src/main/java/util/MathExpressionManager.java +++ b/src/main/java/util/MathExpressionManager.java @@ -247,10 +247,10 @@ public MathExpression createFunction( String expr ){ * it has to interpret and then evaluate it. * It then stores the expression. * @param expr The expression to evaluate. - * @param mathExpClazz The java.util.Class that the parent MathExpression belongs to.. may be MathExpression.class, BigMathExpression.class etc. + * @param clazz The java.util.Class that the parent MathExpression belongs to.. may be MathExpression.class, BigMathExpression.class etc. * @return the result. */ - public String solve( String expr , Class mathExpClazz) throws NullPointerException{ + public String solve(String expr, Class clazz) throws NullPointerException{ try { CustomScanner cs = new CustomScanner( STRING.purifier(expr), false, VariableManager.endOfLine); @@ -260,7 +260,7 @@ public String solve( String expr , Class mathExpClazz) throws NullPointerExcepti for(String code : scanned) { if(code.contains("=")){ - boolean success = Function.assignObject(code+";", mathExpClazz); + boolean success = Function.assignObject(code+";", clazz); if(!success) { throw new Exception("Bad Variable or Function assignment!"); }