blob: ff5e9beeb9df1dd2c2967b3736713f0d9df547de [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation.ConstexprEvaluationContext;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ActivationRecord;
import org.eclipse.core.runtime.CoreException;
/**
* Assists in executing statements for constexpr evaluation
*/
public interface ICPPExecution {
/**
* Instantiates the execution with the provided template parameter map and pack offset.
* The context is used to replace templates with their specialization, where appropriate.
*
* @return a fully or partially instantiated execution, or the original execution
*/
ICPPExecution instantiate(InstantiationContext context, int maxDepth);
/**
* Computes the execution produced by substituting function parameters by their values.
*
* @param record maps function parameters and local variables to their values
* @param context the context for the current constexpr evaluation
* @return the computed execution
*/
ICPPExecution executeForFunctionCall(ActivationRecord record, ConstexprEvaluationContext context);
/**
* Marshals an ICPPExecution object for storage in the index.
*
* @param buffer The buffer that will hold the marshalled ICPPExecution object.
* @param includeValue Specifies whether nested IValue objects should be marshalled as well.
* */
void marshal(ITypeMarshalBuffer buffer, boolean includeValue) throws CoreException;
}