// CPPTypeFunctionEllipses.cpp: Implementation for fuction-with-argument modifier.
#include "CPPType.h"
#include "CPPTypeFunction.h"
///////////////////////////////////////////////////////////////////
// Constructor/destructor
///////////////////////////////////////////////////////////////////
CPPTypeFunctionEllipses::CPPTypeFunctionEllipses(
CPPTypeRefI baseType_,
bool addToBase
) :
CPPTypeModifier(FunctionEllipses, baseType_)
{
// Must modify a function type -- cannot have multiple ellipses
assert(
GetBaseType()->GetFlavor() == FunctionReturning ||
GetBaseType()->GetFlavor() == FunctionArg
);
assert(baseType_.get() != 0);
if (addToBase)
{
AddToBase();
}
}
//virtual
CPPTypeFunctionEllipses::~CPPTypeFunctionEllipses()
{
assertValid();
RemoveFromBase();
}
/////////////////////////////////////////////////////////////////
// FormatName: Format the name of the type, using the names of the
// modified types where needed to construct the full type name.
//
// Inputs:
// const JLStr& declName If non-empty, then this is used
// to format the declarator name
// in the proper position.
// const JLStr& suffixStr Any accumulated suffix string
// bool forSpecialization
// If true, then the name is formatted
// to be suitable in constructing a
// specialization scope.
// Return:
// JLStr The formatted type name
/////////////////////////////////////////////////////////////////
// virtual
JLStr
CPPTypeFunctionEllipses::FormatName(
const JLStr& declName,
const JLStr& suffixStr,
StrListRefI argList,
bool forSpecialization
) const
{
assertValid();
// Since no other function modifiers apply to this one, then
// prepend a "(...)" to the suffixes. Any modified function
// types will strip the () from the ... if necessary.
return GetBaseType()->FormatName(
declName,
"(...)" + suffixStr,
argList,
forSpecialization
);
}
/////////////////////////////////////////////////////////////////
// GetFunctionReturnType: Get the return type of the function type
//
// Inputs: none
// Outputs: none
// Return:
// CPPTypeRefI The return type of the function type
/////////////////////////////////////////////////////////////////
CPPTypeRefI
CPPTypeFunctionEllipses::GetFunctionReturnType() const
{
return GetBaseType()->GetFunctionReturnType();
}