This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: help:how to get the Nth argument stmt from CALL_EXPR stmt tree


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
> ããããããããbugs@whitecell.org
> ãããããããããã2005-07-05
> 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]