/**
  * Constructor. Creates an empty frame.
  *
  * @param pDeclaration Function for which the frame is created
  *     <p>TODO: [PARAMETERS] Create objects for function parameters
  */
 public CLangStackFrame(CFunctionDeclaration pDeclaration, MachineModel pMachineModel) {
   stack_function = pDeclaration;
   CType returnType = pDeclaration.getType().getReturnType().getCanonicalType();
   if (returnType instanceof CVoidType) {
     // use a plain int as return type for void functions
     returnValueObject = null;
   } else {
     int return_value_size = pMachineModel.getSizeof(returnType);
     returnValueObject = new SMGRegion(return_value_size, CLangStackFrame.RETVAL_LABEL);
   }
 }
  /**
   * Adds a SMG object pObj to a stack frame, representing variable pVariableName
   *
   * <p>Throws {@link IllegalArgumentException} when some object is already present with the name
   * {@link pVariableName}
   *
   * @param pVariableName A name of the variable
   * @param pObject An object to put into the stack frame
   */
  public void addStackVariable(String pVariableName, SMGRegion pObject) {
    if (stack_variables.containsKey(pVariableName)) {
      throw new IllegalArgumentException(
          "Stack frame for function '"
              + stack_function.toASTString()
              + "' already contains a variable '"
              + pVariableName
              + "'");
    }

    stack_variables.put(pVariableName, pObject);
  }
  /**
   * Getter for obtaining an object corresponding to a variable name
   *
   * <p>Throws {@link NoSuchElementException} when passed a name not present
   *
   * @param pName Variable name
   * @return SMG object corresponding to pName in the frame
   */
  public SMGRegion getVariable(String pName) {
    SMGRegion to_return = stack_variables.get(pName);

    if (to_return == null) {
      throw new NoSuchElementException(
          "No variable with name '"
              + pName
              + "' in stack frame for function '"
              + stack_function.toASTString()
              + "'");
    }

    return to_return;
  }