clang 22.0.0git
clang::FunctionType::ExtParameterInfo Class Reference

Interesting information about a specific parameter that can't simply be reflected in parameter's type. More...

#include "clang/AST/TypeBase.h"

Public Member Functions

 ExtParameterInfo ()=default
ParameterABI getABI () const
 Return the ABI treatment of this parameter.
ExtParameterInfo withABI (ParameterABI kind) const
bool isConsumed () const
 Is this parameter considered "consumed" by Objective-C ARC?
ExtParameterInfo withIsConsumed (bool consumed) const
bool hasPassObjectSize () const
ExtParameterInfo withHasPassObjectSize () const
bool isNoEscape () const
ExtParameterInfo withIsNoEscape (bool NoEscape) const
unsigned char getOpaqueValue () const

Static Public Member Functions

static ExtParameterInfo getFromOpaqueValue (unsigned char data)

Friends

bool operator== (ExtParameterInfo lhs, ExtParameterInfo rhs)
bool operator!= (ExtParameterInfo lhs, ExtParameterInfo rhs)

Detailed Description

Interesting information about a specific parameter that can't simply be reflected in parameter's type.

This is only used by FunctionProtoType but is in FunctionType to make this class available during the specification of the bases of FunctionProtoType.

It makes sense to model language features this way when there's some sort of parameter-specific override (such as an attribute) that affects how the function is called. For example, the ARC ns_consumed attribute changes whether a parameter is passed at +0 (the default) or +1 (ns_consumed). This must be reflected in the function type, but isn't really a change to the parameter type.

One serious disadvantage of modelling language features this way is that they generally do not work with language features that attempt to destructure types. For example, template argument deduction will not be able to match a parameter declared as T (*)(U) against an argument of type void (*)(attribute((ns_consumed)) id) because the substitution of T=void, U=id into the former will not produce the latter.

Definition at line 4486 of file TypeBase.h.

Constructor & Destructor Documentation

◆ ExtParameterInfo()

clang::FunctionType::ExtParameterInfo::ExtParameterInfo ( )
default

Member Function Documentation

◆ getABI()

◆ getFromOpaqueValue()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::getFromOpaqueValue ( unsigned char data)
inlinestatic

Definition at line 4536 of file TypeBase.h.

References ExtParameterInfo().

◆ getOpaqueValue()

unsigned char clang::FunctionType::ExtParameterInfo::getOpaqueValue ( ) const
inline

◆ hasPassObjectSize()

bool clang::FunctionType::ExtParameterInfo::hasPassObjectSize ( ) const
inline

Definition at line 4518 of file TypeBase.h.

◆ isConsumed()

bool clang::FunctionType::ExtParameterInfo::isConsumed ( ) const
inline

Is this parameter considered "consumed" by Objective-C ARC?

Consumed parameters must have retainable object type.

Definition at line 4508 of file TypeBase.h.

◆ isNoEscape()

◆ withABI()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withABI ( ParameterABI kind) const
inline

Definition at line 4500 of file TypeBase.h.

References ExtParameterInfo().

◆ withHasPassObjectSize()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withHasPassObjectSize ( ) const
inline

Definition at line 4519 of file TypeBase.h.

References clang::Copy, and ExtParameterInfo().

◆ withIsConsumed()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withIsConsumed ( bool consumed) const
inline

Definition at line 4509 of file TypeBase.h.

References ExtParameterInfo().

◆ withIsNoEscape()

ExtParameterInfo clang::FunctionType::ExtParameterInfo::withIsNoEscape ( bool NoEscape) const
inline

◆ operator!=

bool operator!= ( ExtParameterInfo lhs,
ExtParameterInfo rhs )
friend

Definition at line 4546 of file TypeBase.h.

References ExtParameterInfo().

◆ operator==

bool operator== ( ExtParameterInfo lhs,
ExtParameterInfo rhs )
friend

Definition at line 4542 of file TypeBase.h.

References ExtParameterInfo().


The documentation for this class was generated from the following file: