On Tue, 2005-07-05 at 23:18 +0800, alert7 wrote:
> hi,all
>
>
> I don't know how to get the Nth argument stmt from CALL_EXPR stmt tree?
assuming TREE_CODE (call) == CALL_EXPR:
GetCallArgOperand(tree call, int i)
{
int j = 0;
tree arg;
for (arg = TREE_OPERAND (call, 1); arg; arg = TREE_CHAIN (arg), j++)
{
if (i == j)
return TREE_VALUE (arg);
}
}
>
> the GetCallArgOperands implement this function that i code ,but it
> isn't working :(
You are looking at the arguments the declaration takes, instead of the
arguments passed to the function.
Arguments passed to the function are stored in TREE_OPERAND (call, 1),
as tree.def says.
>
> thanks any advice or piece of example code .
>
> //////////////////////////////////////////////////////
>
> tree GetCallArgOperands(tree stmt ,int i){
> tree func, param, args;
> int j = 1;
>
>
> func = get_callee_fndecl (stmt);
>
> for (param = DECL_ARGUMENTS (func), args = TREE_OPERAND (stmt, 1);
> param && args;
> param = TREE_CHAIN (param), args = TREE_CHAIN (args))
> {
> tree arg = TREE_VALUE (args);
> if (param != arg)
> {
> // FIXME:
> }
> if (j==i)
> {
> fprintf(stderr,"args ----------\n");
> debug_tree(arg);
>
> return default_def (arg); //FIXME: to stmt tree ?
> }
>
> j++;
> }
> return NULL_TREE;
> }
> /////////////////////////////////////////////////
>
>
>
>
>
> bugs
> [EMAIL PROTECTED]
> 2005-07-05
>
>