2
|
1 static tree
|
|
2 cbc_replace_arguments (location_t loc, tree call)
|
|
3 {
|
|
4 tree args;
|
|
5 tree fn;
|
|
6 tree tmp_decl;
|
|
7 int i=0;
|
|
8
|
|
9 fn = CALL_EXPR_FN (call);
|
|
10 if ( TREE_CODE (fn)==PARM_DECL || !TREE_CONSTANT (fn) )
|
|
11 {
|
|
12 tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(fn));
|
|
13 pushdecl (tmp_decl);
|
|
14
|
|
15 add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, fn));
|
|
16 CALL_EXPR_FN (call) = tmp_decl;
|
|
17 }
|
|
18
|
|
19 args = CALL_EXPR_ARGS (call);
|
|
20 for ( ;args; args = TREE_CHAIN (args), i++)
|
|
21 {
|
|
22 tree arg = TREE_VALUE (args);
|
|
23
|
|
24 if ( TREE_CODE (arg)==PARM_DECL || !TREE_CONSTANT (arg) )
|
|
25 {
|
|
26 tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(arg));
|
|
27 pushdecl (tmp_decl);
|
|
28
|
|
29 add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, arg));
|
|
30 CALL_EXPR_ARG (call, i) = tmp_decl;
|
|
31 }
|
|
32 }
|
|
33
|
|
34 return call;
|
|
35 }
|