/* -----------------------------------------------------------------------------
 * Swig_cargs()
 *
 * Emit all of the local variables for a list of parameters.  Returns the
 * number of parameters.
 * Default values for the local variables are only emitted if the compact default
 * argument behaviour is required.
 * ----------------------------------------------------------------------------- */
int Swig_cargs(Wrapper *w, ParmList *p) {
  int i = 0;
  int compactdefargs = ParmList_is_compactdefargs(p);

  while (p != 0) {
    String *lname = Swig_cparm_name(p, i);
    SwigType *pt = Getattr(p, k_type);
    if ((SwigType_type(pt) != T_VOID)) {
      String *local = 0;
      String *type = Getattr(p, k_type);
      /* default values only emitted if in compact default args mode */
      String *pvalue = (compactdefargs) ? Getattr(p, k_value) : 0;
      SwigType *altty = SwigType_alttype(type, 0);
      int tycode = SwigType_type(type);
      if (tycode == T_REFERENCE) {
	if (pvalue) {
	  SwigType *tvalue;
	  String *defname, *defvalue, *rvalue, *qvalue;
	  rvalue = SwigType_typedef_resolve_all(pvalue);
	  qvalue = SwigType_typedef_qualified(rvalue);
	  defname = NewStringf("%s_defvalue", lname);
	  tvalue = Copy(type);
	  SwigType_del_reference(tvalue);
	  tycode = SwigType_type(tvalue);
	  if (tycode != T_USER) {
	    /* plain primitive type, we copy the the def value */
	    String *lstr = SwigType_lstr(tvalue, defname);
	    defvalue = NewStringf("%s = %s", lstr, qvalue);
	    Delete(lstr);
	  } else {
	    /* user type, we copy the reference value */
	    String *str = SwigType_str(type, defname);
	    defvalue = NewStringf("%s = %s", str, qvalue);
	    Delete(str);
	  }
	  Wrapper_add_localv(w, defname, defvalue, NIL);
	  Delete(tvalue);
	  Delete(rvalue);
	  Delete(qvalue);
	  Delete(defname);
	  Delete(defvalue);
	}
      } else if (!pvalue && ((tycode == T_POINTER) || (tycode == T_STRING))) {
	pvalue = (String *) "0";
      }
      if (!altty) {
	local = Swig_clocal(pt, lname, pvalue);
      } else {
	local = Swig_clocal(altty, lname, pvalue);
	Delete(altty);
      }
      Wrapper_add_localv(w, lname, local, NIL);
      Delete(local);
      i++;
    }
    Delete(lname);
    p = nextSibling(p);
  }
  return (i);
}
Beispiel #2
0
int Swig_cargs(Wrapper *w, ParmList *p) {
  int   i;
  SwigType *pt;
  String  *pvalue;
  String  *pname;
  String  *local;
  String  *lname;
  SwigType *altty;
  String  *type;
  int      tycode;

  i = 0;
  while (p != 0) {
    lname  = Swig_cparm_name(p,i);
    pt     = Getattr(p,"type");
    if ((SwigType_type(pt) != T_VOID)) {
      pname  = Getattr(p,"name");
      pvalue = Getattr(p,"value");
      altty = Getattr(p,"alttype");
      type  = Getattr(p,"type");
      tycode = SwigType_type(type);
      if (tycode == T_REFERENCE) {
	if (pvalue) {
	  String *defname, *defvalue;
	  defname = NewStringf("%s_defvalue", lname);
	  defvalue = NewStringf("%s = %s", SwigType_str(type,defname), pvalue);
	  Wrapper_add_localv(w,defname, defvalue, NIL);
	  Delete(defname);
	  Delete(defvalue);
	}
      }  else if (!pvalue && (tycode == T_POINTER)) {
	pvalue = (String *) "0";
      }
      if (!altty) {
	local  = Swig_clocal(pt,lname,pvalue);
      } else {
	local = Swig_clocal(altty,lname, pvalue);
      }
      Wrapper_add_localv(w,lname,local,NIL);
      i++;
    }
    p = nextSibling(p);
  }
  return(i);
}
Beispiel #3
0
/* -----------------------------------------------------------------------------
 * Swig_cargs()
 *
 * Emit all of the local variables for a list of parameters.  Returns the
 * number of parameters.
 * Default values for the local variables are only emitted if the compact default
 * argument behaviour is required.
 * ----------------------------------------------------------------------------- */
int Swig_cargs(Wrapper *w, ParmList *p) {
    int i = 0;
    int compactdefargs = ParmList_is_compactdefargs(p);

    while (p != 0) {
        String *lname = Swig_cparm_name(p, i);
        SwigType *pt = Getattr(p, "type");
        if ((SwigType_type(pt) != T_VOID)) {
            String *local = 0;
            String *type = Getattr(p, "type");
            /* default values only emitted if in compact default args mode */
            String *pvalue = (compactdefargs) ? Getattr(p, "value") : 0;

            /* When using compactdefaultargs, the code generated initialises a variable via a constructor call that accepts the
             * default value as a parameter. The default constructor is not called and therefore SwigValueWrapper is not needed. */
            SwigType *altty = pvalue ? 0 : SwigType_alttype(type, 0);

            int tycode = SwigType_type(type);
            if (tycode == T_REFERENCE) {
                if (pvalue) {
                    SwigType *tvalue;
                    String *defname, *defvalue, *rvalue, *qvalue;
                    rvalue = SwigType_typedef_resolve_all(pvalue);
                    qvalue = SwigType_typedef_qualified(rvalue);
                    defname = NewStringf("%s_defvalue", lname);
                    tvalue = Copy(type);
                    SwigType_del_reference(tvalue);
                    tycode = SwigType_type(tvalue);
                    if (tycode != T_USER) {
                        /* plain primitive type, we copy the the def value */
                        String *lstr = SwigType_lstr(tvalue, defname);
                        defvalue = NewStringf("%s = %s", lstr, qvalue);
                        Delete(lstr);
                    } else {
                        /* user type, we copy the reference value */
                        String *str = SwigType_str(type, defname);
                        defvalue = NewStringf("%s = %s", str, qvalue);
                        Delete(str);
                    }
                    Wrapper_add_localv(w, defname, defvalue, NIL);
                    Delete(tvalue);
                    Delete(rvalue);
                    Delete(qvalue);
                    Delete(defname);
                    Delete(defvalue);
                }
            } else if (!pvalue && ((tycode == T_POINTER) || (tycode == T_STRING))) {
                pvalue = (String *) "0";
            }
            if (!altty) {
                local = Swig_clocal(pt, lname, pvalue);
            } else {
                local = Swig_clocal(altty, lname, pvalue);
                Delete(altty);
            }
            Wrapper_add_localv(w, lname, local, NIL);
            Delete(local);
            i++;
        }
        Delete(lname);
        p = nextSibling(p);
    }
    return (i);
}