public final int computationalType() { return value.computationalType(); }
public final int computationalType() { return value.computationalType(); }
public final int computationalType() { return value.computationalType(); }
/** * Sets or replaces the trace value on a given value, if it's a * reference value, returning the result. */ protected Value trace(Value value, int trace) { if (value.computationalType() != Value.TYPE_REFERENCE) { return value; } return trace(value, new InstructionOffsetValue(trace)); }
/** * Sets or replaces the trace value on a given value, if it's a * reference value, returning the result. */ protected Value trace(Value value, int trace) { if (value.computationalType() != Value.TYPE_REFERENCE) { return value; } return trace(value, new InstructionOffsetValue(trace)); }
/** * Sets or replaces the trace value on a given value, if it's a * reference value, returning the result. */ protected Value trace(Value value, int trace) { if (value.computationalType() != Value.TYPE_REFERENCE) { return value; } return trace(value, new InstructionOffsetValue(trace)); }
/** * Attaches the current trace value to given value, if it is a reference * value. */ public Value trace(Value value) { return value.computationalType() == Value.TYPE_REFERENCE ? trace(value.referenceValue()) : value; }
/** * Attaches the current trace value to given value, if it is a reference * value. */ public Value trace(Value value) { return value.computationalType() == Value.TYPE_REFERENCE ? trace(value.referenceValue()) : value; }
/** * Attaches the current trace value to given value, if it is a reference * value. */ public Value trace(Value value) { return value.computationalType() == Value.TYPE_REFERENCE ? trace(value.referenceValue()) : value; }
public void store(int index, Value value) { // Is this store operation an initialization of the variable? Value previousValue = super.load(index); if (previousValue == null || previousValue.computationalType() != value.computationalType()) { initializationIndex = index; } // Store the value itself in the variable. super.store(index, value); // Store the producer value in its producer variable. producerVariables.store(index, producerValue); // Account for the extra space required by Category 2 values. if (value.isCategory2()) { producerVariables.store(index+1, producerValue); } }
/** * Checks whether the value at the given stack entry index is always a null reference. */ private boolean isNullReference(int offset, int popStackEntryIndex) { TracedStack tracedStack = partialEvaluator.getStackBefore(offset); Value objectRef = tracedStack.getTop(popStackEntryIndex); return objectRef.computationalType() == Value.TYPE_REFERENCE && objectRef.isParticular() && objectRef.referenceValue().isNull() == Value.ALWAYS; }
/** * Checks whether the value at the given stack entry index is always a null reference. */ private boolean isNullReference(int offset, int popStackEntryIndex) { TracedStack tracedStack = partialEvaluator.getStackBefore(offset); Value objectRef = tracedStack.getTop(popStackEntryIndex); return objectRef.computationalType() == Value.TYPE_REFERENCE && objectRef.isParticular() && objectRef.referenceValue().isNull() == Value.ALWAYS; }
/** * Checks whether the value at the given stack entry index is always a null reference. */ private boolean isNullReference(int offset, int popStackEntryIndex) { TracedStack tracedStack = partialEvaluator.getStackBefore(offset); Value objectRef = tracedStack.getTop(popStackEntryIndex); return objectRef.computationalType() == Value.TYPE_REFERENCE && objectRef.isParticular() && objectRef.referenceValue().isNull() == Value.ALWAYS; }
/** * Marks the producing offsets of the specified stack entry at the given * instruction offset. */ private void markEscapingReferenceValues(int instructionOffset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(instructionOffset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markEscapingReferenceValues(referenceValue); } } }
/** * Marks the producing offsets of the specified stack entry at the given * instruction offset. */ private void markEscapingReferenceValues(int instructionOffset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(instructionOffset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markEscapingReferenceValues(referenceValue); } } }
/** * Marks the producing offsets of the specified stack entry at the given * instruction offset. */ private void markEscapingReferenceValues(int instructionOffset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(instructionOffset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markEscapingReferenceValues(referenceValue); } } }
/** * Marks the producing reference parameters of the specified stack entry at * the given instruction offset. */ private void markModifiedParameters(Method method, int offset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(offset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markModifiedParameters(method, referenceValue); } } }
/** * Marks the producing reference parameters (and the classes) of the * specified stack entry at the given instruction offset. */ private void markEscapingParameters(Method method, int consumerOffset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(consumerOffset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markEscapingParameters(method, referenceValue); } } }
/** * Marks the producing reference parameters of the specified stack entry at * the given instruction offset. */ private void markModifiedParameters(Method method, int offset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(offset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markModifiedParameters(method, referenceValue); } } }
/** * Marks the producing reference parameters of the specified stack entry at * the given instruction offset. */ private void markModifiedParameters(Method method, int offset, int stackEntryIndex) { TracedStack stackBefore = partialEvaluator.getStackBefore(offset); Value stackEntry = stackBefore.getTop(stackEntryIndex); if (stackEntry.computationalType() == Value.TYPE_REFERENCE) { ReferenceValue referenceValue = stackEntry.referenceValue(); // The null reference value may not have a trace value. if (referenceValue.isNull() != Value.ALWAYS) { markModifiedParameters(method, referenceValue); } } }