diff --git a/src/main/java/it/unipr/EVMLiSA.java b/src/main/java/it/unipr/EVMLiSA.java index 69fee9c7b..6f2a07f5a 100644 --- a/src/main/java/it/unipr/EVMLiSA.java +++ b/src/main/java/it/unipr/EVMLiSA.java @@ -201,7 +201,7 @@ private void go(String[] args) throws Exception { System.exit(1); } - OUTPUT_DIR += addressSC + "/"; + OUTPUT_DIR += "/" + addressSC; Files.createDirectories(Paths.get(OUTPUT_DIR)); if (outputDir == null) diff --git a/src/main/java/it/unipr/analysis/Number.java b/src/main/java/it/unipr/analysis/Number.java index f6b31e151..5be65d007 100644 --- a/src/main/java/it/unipr/analysis/Number.java +++ b/src/main/java/it/unipr/analysis/Number.java @@ -69,31 +69,47 @@ else if (other.getType() == Type.LONG) } public Number add(Number other) { - BigInteger me = toBigInteger(this); + if(this.getType() == other.getType() && other.getType() == Type.INT) + return new Number(i + other.getInt()); + if(this.getType() == other.getType() && other.getType() == Type.LONG) + return new Number(l + other.getLong()); + BigInteger ot = toBigInteger(other); - return new Number(me.add(ot)); + return new Number(b.add(ot)); } public Number subtract(Number other) { - BigInteger me = toBigInteger(this); + if(this.getType() == other.getType() && other.getType() == Type.INT) + return new Number(i - other.getInt()); + if(this.getType() == other.getType() && other.getType() == Type.LONG) + return new Number(l - other.getLong()); + BigInteger ot = toBigInteger(other); - return new Number(me.subtract(ot)); + return new Number(b.subtract(ot)); } public Number multiply(Number other) { - BigInteger me = toBigInteger(this); + if(this.getType() == other.getType() && other.getType() == Type.INT) + return new Number(i * other.getInt()); + if(this.getType() == other.getType() && other.getType() == Type.LONG) + return new Number(l * other.getLong()); + BigInteger ot = toBigInteger(other); - return new Number(me.multiply(ot)); + return new Number(b.multiply(ot)); } public Number divide(Number other) { - BigInteger me = toBigInteger(this); + if(this.getType() == other.getType() && other.getType() == Type.INT) + return new Number(i / other.getInt()); + if(this.getType() == other.getType() && other.getType() == Type.LONG) + return new Number(l / other.getLong()); + BigInteger ot = toBigInteger(other); - return new Number(me.divide(ot)); + return new Number(b.divide(ot)); } public Number and(Number other) { @@ -158,6 +174,11 @@ public String toString() { @Override public int compareTo(Number other) { + if(this.getType() == other.getType() && other.getType() == Type.INT) + return i > other.getInt() ? (+1) : i < other.getInt() ? (-1) : 0; + if(this.getType() == other.getType() && other.getType() == Type.LONG) + return i > other.getLong() ? (+1) : i < other.getLong() ? (-1) : 0; + BigInteger me = toBigInteger(this); BigInteger ot = toBigInteger(other);