![JAR search and dependency download from the Maven repository](/logo.png)
org.evosuite.symbolic.vm.OperandStack Maven / Gradle / Ivy
The newest version!
/**
* Copyright (C) 2010-2018 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see .
*/
package org.evosuite.symbolic.vm;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import org.evosuite.symbolic.expr.bv.IntegerValue;
import org.evosuite.symbolic.expr.fp.RealValue;
import org.evosuite.symbolic.expr.ref.ReferenceExpression;
/**
*
* @author galeotti
*
*/
public final class OperandStack implements Iterable {
private final Deque stack = new LinkedList();
public OperandStack() {
}
public void pushRef(ReferenceExpression r) {
stack.push(new ReferenceOperand(r));
}
public void pushBv32(IntegerValue e) {
stack.push(new Bv32Operand(e));
}
public void pushBv64(IntegerValue e) {
stack.push(new Bv64Operand(e));
}
public void pushFp32(RealValue e) {
stack.push(new Fp32Operand(e));
}
public void pushFp64(RealValue e) {
stack.push(new Fp64Operand(e));
}
public ReferenceExpression popRef() {
Operand ret_val = this.popOperand();
ReferenceOperand ref = (ReferenceOperand) ret_val;
return ref.getReference();
}
public IntegerValue popBv32() {
Operand x = this.popOperand();
Bv32Operand e = (Bv32Operand) x;
return e.getIntegerExpression();
}
public IntegerValue popBv64() {
Operand x = this.popOperand();
Bv64Operand e = (Bv64Operand) x;
return e.getIntegerExpression();
}
public RealValue popFp32() {
Operand x = this.popOperand();
Fp32Operand e = (Fp32Operand) x;
return e.getRealExpression();
}
public RealValue popFp64() {
Operand x = this.popOperand();
Fp64Operand e = (Fp64Operand) x;
return e.getRealExpression();
}
public Operand popOperand() {
Operand ret_val = this.stack.pop();
return ret_val;
}
public void clearOperands() {
stack.clear();
}
public void pushOperand(Operand operand) {
if (operand == null) {
throw new IllegalArgumentException("Cannot push a null operand into OperandStack");
}
stack.push(operand);
}
public RealValue peekFp64() {
Operand operand = stack.peek();
Fp64Operand fp64 = (Fp64Operand) operand;
return fp64.getRealExpression();
}
public RealValue peekFp32() {
Operand operand = stack.peek();
Fp32Operand fp32 = (Fp32Operand) operand;
return fp32.getRealExpression();
}
public IntegerValue peekBv64() {
Operand operand = stack.peek();
Bv64Operand bv64 = (Bv64Operand) operand;
return bv64.getIntegerExpression();
}
public IntegerValue peekBv32() {
Operand operand = stack.peek();
Bv32Operand bv32 = (Bv32Operand) operand;
return bv32.getIntegerExpression();
}
public Operand peekOperand() {
return stack.peek();
}
public Iterator iterator() {
return stack.iterator();
}
public ReferenceExpression peekRef() {
Operand operand = this.peekOperand();
if (!(operand instanceof ReferenceOperand)) {
throw new ClassCastException(
"top of stack is not a reference but an operand of type " + operand.getClass().getCanonicalName());
}
ReferenceOperand refOp = (ReferenceOperand) operand;
ReferenceExpression ref = refOp.getReference();
return ref;
}
@Override
public String toString() {
if (this.stack.isEmpty()) {
return "<>";
}
StringBuffer buff = new StringBuffer();
for (Operand operand : this) {
buff.append(operand.toString() + "\n");
}
return buff.toString();
}
public int size() {
return stack.size();
}
public boolean isEmpty() {
return stack.isEmpty();
}
public void pushNullRef() {
ReferenceExpression nullExpression = ExpressionFactory.buildNewNullExpression();
this.stack.push(new ReferenceOperand(nullExpression));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy