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
> 
> 

Reply via email to