#include <SubroutineCall.h>
Public Member Functions | |
SubroutineCall (SubroutineRef *connective, Expr **positionalArgs, unsigned numPositional, KeywordSelector **keyedArgs, unsigned numKeys) | |
SubroutineCall (SubroutineDecl *connective, Expr **positionalArgs, unsigned numPositional, KeywordSelector **keyedArgs, unsigned numKeys) | |
virtual | ~SubroutineCall () |
bool | isaFunctionCall () const |
Returns true if this is a function call expression. | |
bool | isaProcedureCall () const |
Returns true if this is a procedure call statement. | |
bool | denotesOperator () const |
Returns true if this call is thru an operator. | |
virtual Location | getLocation () const =0 |
Returns the location of this subroutine call. | |
bool | isAmbiguous () const |
Returns true if this call is ambiguous. | |
bool | isUnambiguous () const |
Returns true if this call is unambiguous. | |
bool | isPrimitive () const |
bool | isAttributeCall () const |
Returns true if the connective of this call is an attribute. | |
virtual void | resolveConnective (SubroutineDecl *connective) |
unsigned | getNumArgs () const |
unsigned | getNumPositionalArgs () const |
Returns the number of positional arguments supplied to this call. | |
unsigned | getNumKeyedArgs () const |
Returns the number of keyed arguments supplied to this call. | |
bool | containsConnective (SubroutineType *srTy) const |
Returns true if this call contains a connective with the given type. | |
unsigned | numConnectives () const |
Returns the number of connectives associated with this call. | |
Ast * | asAst () |
Converts this SubroutineCall into a raw Ast node. | |
const Ast * | asAst () const |
Call Types. | |
bool | isLocalCall () const |
bool | isDirectCall () const |
bool | isAbstractCall () const |
bool | isForeignCall () const |
Positional Argument Iterators. | |
arg_iterator | begin_positional () |
arg_iterator | end_positional () |
const_arg_iterator | begin_positional () const |
const_arg_iterator | end_positional () const |
Static Public Member Functions | |
static bool | classof (const Ast *node) |
static bool | classof (const FunctionCallExpr *node) |
static bool | classof (const ProcedureCallStmt *node) |
Protected Member Functions | |
bool | isCompatible (SubroutineDecl *decl) const |
int | argExprIndex (Expr *expr) const |
int | keyExprIndex (Expr *expr) const |
Protected Attributes | |
SubroutineRef * | connective |
Expr ** | arguments |
KeywordSelector ** | keyedArgs |
unsigned | numPositional |
unsigned | numKeys |
| |
typedef SubroutineRef::iterator | connective_iterator |
typedef SubroutineRef::const_iterator | const_connective_iterator |
FunctionCallExpr * | asFunctionCall () |
Returns this as a FunctionCallExpr or null. | |
const FunctionCallExpr * | asFunctionCall () const |
ProcedureCallStmt * | asProcedureCall () |
Returns this as a ProcedureCallStmt or null. | |
const ProcedureCallStmt * | asProcedureCall () const |
const SubroutineDecl * | getConnective (unsigned i) const |
Returns the i'th connective associated with this call. | |
SubroutineDecl * | getConnective (unsigned i) |
SubroutineDecl * | getConnective () |
const SubroutineDecl * | getConnective () const |
connective_iterator | begin_connectives () |
connective_iterator | end_connectives () |
const_connective_iterator | begin_connectives () const |
const_connective_iterator | end_connectives () const |
Argument Iterators. | |
Iterators over the arguments of an unambiguous call. These iterators can be accessed only when this call is unambiguous, otherwise an assertion will be raised. An arg_iterator is used to traverse the full set of argument expressions in the order expected by the calls connective. In other words, any keyed argument expressions are presented in an order consistent with the underlying connective, not in the order as originally supplied to call. | |
typedef Expr ** | arg_iterator |
typedef const Expr *const * | const_arg_iterator |
arg_iterator | begin_arguments () |
arg_iterator | end_arguments () |
const_arg_iterator | begin_arguments () const |
const_arg_iterator | end_arguments () const |
KeywordSelector Iterators. | |
| |
typedef KeywordSelector ** | key_iterator |
Replaces the expression associated with the given iterator. | |
typedef KeywordSelector *const * | const_key_iterator |
Replaces the expression associated with the given iterator. | |
key_iterator | begin_keys () |
Replaces the expression associated with the given iterator. | |
key_iterator | end_keys () |
Replaces the expression associated with the given iterator. | |
const_key_iterator | begin_keys () const |
Replaces the expression associated with the given iterator. | |
const_key_iterator | end_keys () const |
Replaces the expression associated with the given iterator. | |
void | setArgument (arg_iterator I, Expr *expr) |
Replaces the expression associated with the given iterator. | |
void | setArgument (key_iterator I, Expr *expr) |
Replaces the expression associated with the given iterator. |
The SubroutineCall class is a mixin which provides functionality common to both FunctionCallExpr and ProcedureCallStmt. Both nodes share a great deal of functionality but with one being an expression and the other being a statement they cannot both inherit from a common base class in the AST hierarchy -- hense this class.
Definition at line 28 of file SubroutineCall.h.
typedef Expr** comma::SubroutineCall::arg_iterator |
Definition at line 222 of file SubroutineCall.h.
Iterators over the set of connectives associcated with this call expression.
Definition at line 196 of file SubroutineCall.h.
typedef const Expr* const* comma::SubroutineCall::const_arg_iterator |
Definition at line 234 of file SubroutineCall.h.
Iterators over the set of connectives associcated with this call expression.
Definition at line 200 of file SubroutineCall.h.
typedef KeywordSelector* const* comma::SubroutineCall::const_key_iterator |
Replaces the expression associated with the given iterator.
Definition at line 281 of file SubroutineCall.h.
Replaces the expression associated with the given iterator.
Definition at line 277 of file SubroutineCall.h.
SubroutineCall::SubroutineCall | ( | SubroutineRef * | connective, | |
Expr ** | positionalArgs, | |||
unsigned | numPositional, | |||
KeywordSelector ** | keyedArgs, | |||
unsigned | numKeys | |||
) |
The given SubroutineRef must be compatible with the concrete implementation of this class. If the implementation is a FunctionCallExpr, then the reference must be to a collection of FunctionDecl's.
If the reference contains more than one declaration, then this SubroutineCell is said to be ambiguous.
SubroutineCall's take ownership of the connective and all arguments.
Definition at line 21 of file SubroutineCall.cpp.
SubroutineCall::SubroutineCall | ( | SubroutineDecl * | connective, | |
Expr ** | positionalArgs, | |||
unsigned | numPositional, | |||
KeywordSelector ** | keyedArgs, | |||
unsigned | numKeys | |||
) |
Constructs a subroutine call over a single connective. This constructor always results in a fully resolved call node.
Definition at line 33 of file SubroutineCall.cpp.
SubroutineCall::~SubroutineCall | ( | ) | [virtual] |
Definition at line 90 of file SubroutineCall.cpp.
int SubroutineCall::argExprIndex | ( | Expr * | expr | ) | const [protected] |
Returns the index of the given expression in the argument expression array, or -1 if the expression does not exists.
Definition at line 172 of file SubroutineCall.cpp.
const Ast * SubroutineCall::asAst | ( | ) | const |
Definition at line 149 of file SubroutineCall.cpp.
Ast * SubroutineCall::asAst | ( | ) |
Converts this SubroutineCall into a raw Ast node.
Definition at line 137 of file SubroutineCall.cpp.
const FunctionCallExpr * SubroutineCall::asFunctionCall | ( | ) | const |
Iterators over the set of connectives associcated with this call expression.
Definition at line 122 of file SubroutineCall.cpp.
FunctionCallExpr * SubroutineCall::asFunctionCall | ( | ) |
Returns this as a FunctionCallExpr or null.
Definition at line 117 of file SubroutineCall.cpp.
const ProcedureCallStmt * SubroutineCall::asProcedureCall | ( | ) | const |
Iterators over the set of connectives associcated with this call expression.
Definition at line 132 of file SubroutineCall.cpp.
ProcedureCallStmt * SubroutineCall::asProcedureCall | ( | ) |
Returns this as a ProcedureCallStmt or null.
Definition at line 127 of file SubroutineCall.cpp.
const_arg_iterator comma::SubroutineCall::begin_arguments | ( | ) | const [inline] |
Definition at line 235 of file SubroutineCall.h.
arg_iterator comma::SubroutineCall::begin_arguments | ( | ) | [inline] |
Definition at line 223 of file SubroutineCall.h.
const_connective_iterator comma::SubroutineCall::begin_connectives | ( | ) | const [inline] |
Iterators over the set of connectives associcated with this call expression.
Definition at line 201 of file SubroutineCall.h.
connective_iterator comma::SubroutineCall::begin_connectives | ( | ) | [inline] |
Iterators over the set of connectives associcated with this call expression.
Definition at line 197 of file SubroutineCall.h.
const_key_iterator comma::SubroutineCall::begin_keys | ( | ) | const [inline] |
Replaces the expression associated with the given iterator.
Definition at line 282 of file SubroutineCall.h.
key_iterator comma::SubroutineCall::begin_keys | ( | ) | [inline] |
Replaces the expression associated with the given iterator.
Definition at line 278 of file SubroutineCall.h.
const_arg_iterator comma::SubroutineCall::begin_positional | ( | ) | const [inline] |
Definition at line 261 of file SubroutineCall.h.
arg_iterator comma::SubroutineCall::begin_positional | ( | ) | [inline] |
Definition at line 254 of file SubroutineCall.h.
static bool comma::SubroutineCall::classof | ( | const ProcedureCallStmt * | node | ) | [inline, static] |
Definition at line 307 of file SubroutineCall.h.
static bool comma::SubroutineCall::classof | ( | const FunctionCallExpr * | node | ) | [inline, static] |
Definition at line 306 of file SubroutineCall.h.
static bool comma::SubroutineCall::classof | ( | const Ast * | node | ) | [inline, static] |
Reimplemented in comma::FunctionCallExpr, and comma::ProcedureCallStmt.
Definition at line 301 of file SubroutineCall.h.
bool comma::SubroutineCall::containsConnective | ( | SubroutineType * | srTy | ) | const [inline] |
Returns true if this call contains a connective with the given type.
Definition at line 159 of file SubroutineCall.h.
bool SubroutineCall::denotesOperator | ( | ) | const |
Returns true if this call is thru an operator.
Definition at line 108 of file SubroutineCall.cpp.
const_arg_iterator comma::SubroutineCall::end_arguments | ( | ) | const [inline] |
Definition at line 240 of file SubroutineCall.h.
arg_iterator comma::SubroutineCall::end_arguments | ( | ) | [inline] |
Definition at line 228 of file SubroutineCall.h.
const_connective_iterator comma::SubroutineCall::end_connectives | ( | ) | const [inline] |
Iterators over the set of connectives associcated with this call expression.
Definition at line 204 of file SubroutineCall.h.
connective_iterator comma::SubroutineCall::end_connectives | ( | ) | [inline] |
Iterators over the set of connectives associcated with this call expression.
Definition at line 198 of file SubroutineCall.h.
const_key_iterator comma::SubroutineCall::end_keys | ( | ) | const [inline] |
Replaces the expression associated with the given iterator.
Definition at line 285 of file SubroutineCall.h.
key_iterator comma::SubroutineCall::end_keys | ( | ) | [inline] |
Replaces the expression associated with the given iterator.
Definition at line 279 of file SubroutineCall.h.
const_arg_iterator comma::SubroutineCall::end_positional | ( | ) | const [inline] |
Definition at line 264 of file SubroutineCall.h.
arg_iterator comma::SubroutineCall::end_positional | ( | ) | [inline] |
Definition at line 257 of file SubroutineCall.h.
const SubroutineDecl* comma::SubroutineCall::getConnective | ( | ) | const [inline] |
Iterators over the set of connectives associcated with this call expression.
Reimplemented in comma::FunctionCallExpr, and comma::ProcedureCallStmt.
Definition at line 186 of file SubroutineCall.h.
SubroutineDecl* comma::SubroutineCall::getConnective | ( | ) | [inline] |
When this call is unambiguous, returns the unique subroutine declaration associated with this call. If this call is ambiguous, an assertion will fire.
Reimplemented in comma::FunctionCallExpr, and comma::ProcedureCallStmt.
Definition at line 180 of file SubroutineCall.h.
SubroutineDecl* comma::SubroutineCall::getConnective | ( | unsigned | i | ) | [inline] |
Iterators over the set of connectives associcated with this call expression.
Reimplemented in comma::FunctionCallExpr.
Definition at line 171 of file SubroutineCall.h.
const SubroutineDecl* comma::SubroutineCall::getConnective | ( | unsigned | i | ) | const [inline] |
Returns the i'th
connective associated with this call.
Reimplemented in comma::FunctionCallExpr.
Definition at line 168 of file SubroutineCall.h.
virtual Location comma::SubroutineCall::getLocation | ( | ) | const [pure virtual] |
Returns the location of this subroutine call.
Implemented in comma::FunctionCallExpr, and comma::ProcedureCallStmt.
unsigned comma::SubroutineCall::getNumArgs | ( | ) | const [inline] |
Returns total the number of arguments supplied to this call. This is the sum of all positional and keyed arguments.
Definition at line 150 of file SubroutineCall.h.
unsigned comma::SubroutineCall::getNumKeyedArgs | ( | ) | const [inline] |
Returns the number of keyed arguments supplied to this call.
Definition at line 156 of file SubroutineCall.h.
unsigned comma::SubroutineCall::getNumPositionalArgs | ( | ) | const [inline] |
Returns the number of positional arguments supplied to this call.
Definition at line 153 of file SubroutineCall.h.
bool SubroutineCall::isAbstractCall | ( | ) | const |
Returns true if this is an abstract call.
A call is abstract if it references a subroutine declaration provided by an abstract domain.
Definition at line 239 of file SubroutineCall.cpp.
bool SubroutineCall::isaFunctionCall | ( | ) | const |
Returns true if this is a function call expression.
Definition at line 98 of file SubroutineCall.cpp.
bool comma::SubroutineCall::isAmbiguous | ( | ) | const [inline] |
Returns true if this call is ambiguous.
Definition at line 77 of file SubroutineCall.h.
bool SubroutineCall::isaProcedureCall | ( | ) | const |
Returns true if this is a procedure call statement.
Definition at line 103 of file SubroutineCall.cpp.
bool SubroutineCall::isAttributeCall | ( | ) | const |
Returns true if the connective of this call is an attribute.
Definition at line 212 of file SubroutineCall.cpp.
bool SubroutineCall::isCompatible | ( | SubroutineDecl * | decl | ) | const [protected] |
Returns true if the given declaration is compatible with this kind of call.
Definition at line 154 of file SubroutineCall.cpp.
bool SubroutineCall::isDirectCall | ( | ) | const |
Returns true if this is a direct call.
A direct call is one which references a subroutine declaration provided by a concrete (non-abstract) domain, and is not a local call.
Definition at line 217 of file SubroutineCall.cpp.
bool SubroutineCall::isForeignCall | ( | ) | const |
Returns true if this is a foreign call.
A foreign call is one which references a subroutine declaration which has an Import pragma attached to it.
Definition at line 249 of file SubroutineCall.cpp.
bool SubroutineCall::isLocalCall | ( | ) | const |
Returns true if this is a local call.
A local call is one which references a subroutine declaration which is internal to a capsule. A consequence of beeing local is that callee must be local to the capsule as well.
Definition at line 227 of file SubroutineCall.cpp.
bool comma::SubroutineCall::isPrimitive | ( | ) | const [inline] |
Returns true if this call is primitive.
This method returns true iff the call has been resolved (that is, isUnambiguous() returns true), and if the connective of this call denotes a primitive operation.
Definition at line 89 of file SubroutineCall.h.
bool comma::SubroutineCall::isUnambiguous | ( | ) | const [inline] |
Returns true if this call is unambiguous.
Definition at line 82 of file SubroutineCall.h.
int SubroutineCall::keyExprIndex | ( | Expr * | expr | ) | const [protected] |
Returns the index of the given expression in the keyed argument array, or -1 if the expression does not exists.
Definition at line 181 of file SubroutineCall.cpp.
unsigned comma::SubroutineCall::numConnectives | ( | ) | const [inline] |
Returns the number of connectives associated with this call.
Definition at line 164 of file SubroutineCall.h.
void SubroutineCall::resolveConnective | ( | SubroutineDecl * | connective | ) | [virtual] |
Resolved the connective for this call.
The supplied subroutine declaration must accept the exact number of arguments this call supplies and be compatible with the type of call. Furthermore, if this call was made with keyed arguments, the supplied declaration must accept the format of this call. In particular:
Provided that the supplied connective meets these constraints, this call becomes unambiguous, and the full set of arguments becomes available thru the arg_iterator interface.
Definition at line 162 of file SubroutineCall.cpp.
void SubroutineCall::setArgument | ( | key_iterator | I, | |
Expr * | expr | |||
) |
Replaces the expression associated with the given iterator.
Definition at line 200 of file SubroutineCall.cpp.
void SubroutineCall::setArgument | ( | arg_iterator | I, | |
Expr * | expr | |||
) |
Replaces the expression associated with the given iterator.
Definition at line 189 of file SubroutineCall.cpp.
Expr** comma::SubroutineCall::arguments [protected] |
Definition at line 311 of file SubroutineCall.h.
SubroutineRef* comma::SubroutineCall::connective [protected] |
Definition at line 310 of file SubroutineCall.h.
KeywordSelector** comma::SubroutineCall::keyedArgs [protected] |
Definition at line 312 of file SubroutineCall.h.
unsigned comma::SubroutineCall::numKeys [protected] |
Definition at line 314 of file SubroutineCall.h.
unsigned comma::SubroutineCall::numPositional [protected] |
Definition at line 313 of file SubroutineCall.h.