view paper/sources/replace-args.c @ 10:3d9addf62d0b

organized repository.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Tue, 16 Feb 2010 14:35:36 +0900
parents
children
line wrap: on
line source

static tree
cbc_replace_arguments (location_t loc, tree call)
{
  tree args;
  tree fn;
  tree tmp_decl;
  int i=0;

  fn = CALL_EXPR_FN (call);
  if ( TREE_CODE (fn)==PARM_DECL || !TREE_CONSTANT (fn) )
    {
      tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(fn));
      pushdecl (tmp_decl);

      add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, fn));
      CALL_EXPR_FN (call) = tmp_decl;
    }

  args = CALL_EXPR_ARGS (call);
  for ( ;args; args = TREE_CHAIN (args), i++)
    {
      tree arg = TREE_VALUE (args);

      if ( TREE_CODE (arg)==PARM_DECL || !TREE_CONSTANT (arg) )
        {
          tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(arg));
          pushdecl (tmp_decl);

          add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, arg));
          CALL_EXPR_ARG (call, i) = tmp_decl;
        }
    }

  return call;
}