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