This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: help:how to get the Nth argument stmt from CALL_EXPR stmt tree
- From: Daniel Berlin <dberlin at dberlin dot org>
- To: alert7 <bugs at whitecell dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 05 Jul 2005 18:40:34 -0400
- Subject: Re: help:how to get the Nth argument stmt from CALL_EXPR stmt tree
- References: <20050705232306.E74312BAB7@mail.ddmdd.com>
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
>
>