Ejemplo n.º 1
0
int
Swig_MembersetToFunction(Node *n, String *classname, int flags) {
  String   *name;
  ParmList *parms;
  Parm     *p;
  SwigType *t;
  SwigType *ty;
  SwigType *type;
  String   *membername;
  String   *mangled;
  String   *self= 0;

  if (flags & CWRAP_SMART_POINTER) {
    self = NewString("(*this)->");
  }

  name = Getattr(n,"name");
  type = Getattr(n,"type");

  membername = Swig_name_member(classname, Swig_name_set(name));
  mangled = Swig_name_mangle(membername);

  t = NewString(classname);
  SwigType_add_pointer(t);
  parms = NewParm(t,"self");
  Delete(t);

  ty = Swig_wrapped_var_type(type);
  p = NewParm(ty,name);
  set_nextSibling(parms,p);

  /* If the type is a pointer or reference.  We mark it with a special wrap:disown attribute */
  if (SwigType_check_decl(type,"p.")) {
    Setattr(p,"wrap:disown","1");
  }
  Delete(p);

  if (flags & CWRAP_EXTEND) {
    String *code = Getattr(n,"code");
    if (code) {
      String *s = NewStringf("void %s(%s)", mangled, ParmList_str(parms));
      Printv(s,code,"\n",NIL);
      Setattr(n,"wrap:code",s);
      Delete(s);
    }
    Setattr(n,"wrap:action", NewStringf("%s;\n", Swig_cfunction_call(mangled,parms)));
  } else {
    Setattr(n,"wrap:action", NewStringf("%s;\n", Swig_cmemberset_call(name,type,self)));
  }
  Setattr(n,"type","void");
  Setattr(n,"parms", parms);
  Delete(parms);
  Delete(ty);
  Delete(membername);
  Delete(mangled);
  Delete(self);
  return SWIG_OK;
}
Ejemplo n.º 2
0
int Swig_VarsetToFunction(Node *n, int flags) {
    String *name, *nname;
    ParmList *parms;
    SwigType *type, *ty;

    int varcref = flags & CWRAP_NATURAL_VAR;

    name = Getattr(n, "name");
    type = Getattr(n, "type");
    nname = SwigType_namestr(name);
    ty = Swig_wrapped_var_type(type, varcref);
    parms = NewParm(ty, name);

    if (flags & CWRAP_EXTEND) {
        String *sname = Swig_name_set(name);
        String *mangled = Swig_name_mangle(sname);
        String *call = Swig_cfunction_call(mangled, parms);
        String *cres = NewStringf("%s;", call);
        Setattr(n, "wrap:action", cres);
        Delete(cres);
        Delete(call);
        Delete(mangled);
        Delete(sname);
    } else {
        if (!Strstr(type, "enum $unnamed")) {
            String *pname = Swig_cparm_name(0, 0);
            String *dref = Swig_wrapped_var_deref(type, pname, varcref);
            String *call = NewStringf("%s = %s;", nname, dref);
            Setattr(n, "wrap:action", call);
            Delete(call);
            Delete(dref);
            Delete(pname);
        } else {
            String *pname = Swig_cparm_name(0, 0);
            String *call = NewStringf("if (sizeof(int) == sizeof(%s)) *(int*)(void*)&(%s) = %s;", nname, nname, pname);
            Setattr(n, "wrap:action", call);
            Delete(pname);
            Delete(call);
        }
    }
    Setattr(n, "type", "void");
    Setattr(n, "parms", parms);
    Delete(parms);
    Delete(ty);
    Delete(nname);
    return SWIG_OK;
}
int Swig_MembersetToFunction(Node *n, String *classname, int flags) {
  String *name;
  ParmList *parms;
  Parm *p;
  SwigType *t;
  SwigType *ty;
  SwigType *type;
  SwigType *void_type = NewString("void");
  String *membername;
  String *mangled;
  String *self = 0;
  String *sname;

  int varcref = flags & CWRAP_NATURAL_VAR;

  if (flags & CWRAP_SMART_POINTER) {
    self = NewString("(*this)->");
  }

  name = Getattr(n, k_name);
  type = Getattr(n, k_type);

  sname = Swig_name_set(name);
  membername = Swig_name_member(classname, sname);
  mangled = Swig_name_mangle(membername);

  t = NewString(classname);
  SwigType_add_pointer(t);
  parms = NewParm(t, k_self);
  Setattr(parms, k_self, "1");
  Setattr(parms, k_hidden, "1");
  Delete(t);

  ty = Swig_wrapped_member_var_type(type, varcref);
  p = NewParm(ty, name);
  Setattr(parms, k_hidden, "1");
  set_nextSibling(parms, p);

  /* If the type is a pointer or reference.  We mark it with a special wrap:disown attribute */
  if (SwigType_check_decl(type, "p.")) {
    Setattr(p, k_wrapdisown, "1");
  }
  Delete(p);

  if (flags & CWRAP_EXTEND) {
    String *call;
    String *cres;
    String *code = Getattr(n, k_code);
    if (code) {
      Swig_add_extension_code(n, mangled, parms, void_type, code, cparse_cplusplus, k_self);
    }
    call = Swig_cfunction_call(mangled, parms);
    cres = NewStringf("%s;\n", call);
    Setattr(n, k_wrapaction, cres);
    Delete(call);
    Delete(cres);
  } else {
    String *call = Swig_cmemberset_call(name, type, self, varcref);
    String *cres = NewStringf("%s;\n", call);
    Setattr(n, k_wrapaction, cres);
    Delete(call);
    Delete(cres);
  }
  Setattr(n, k_type, void_type);
  Setattr(n, k_parms, parms);
  Delete(parms);
  Delete(ty);
  Delete(void_type);
  Delete(membername);
  Delete(sname);
  Delete(mangled);
  Delete(self);
  return SWIG_OK;
}
Ejemplo n.º 4
0
int Swig_MembersetToFunction(Node *n, String *classname, int flags, String **call) {
    String *name;
    ParmList *parms;
    Parm *p;
    SwigType *t;
    SwigType *ty;
    SwigType *type;
    SwigType *void_type = NewString("void");
    String *membername;
    String *mangled;
    String *self = 0;
    String *sname;

    int varcref = flags & CWRAP_NATURAL_VAR;

    if (flags & CWRAP_SMART_POINTER) {
        self = NewString("(*this)->");
    }
    if (flags & CWRAP_ALL_PROTECTED_ACCESS) {
        self = NewStringf("darg->");
    }

    name = Getattr(n, "name");
    type = Getattr(n, "type");

    sname = Swig_name_set(name);
    membername = Swig_name_member(classname, sname);
    mangled = Swig_name_mangle(membername);

    t = NewString(classname);
    SwigType_add_pointer(t);
    parms = NewParm(t, "self");
    Setattr(parms, "self", "1");
    Setattr(parms, "hidden","1");
    Delete(t);

    ty = Swig_wrapped_member_var_type(type, varcref);
    p = NewParm(ty, name);
    Setattr(parms, "hidden", "1");
    set_nextSibling(parms, p);

    /* If the type is a pointer or reference.  We mark it with a special wrap:disown attribute */
    if (SwigType_check_decl(type, "p.")) {
        Setattr(p, "wrap:disown", "1");
    }
    Delete(p);

    if (flags & CWRAP_EXTEND) {
        String *cres;
        String *code = Getattr(n, "code");
        if (code) {
            /* I don't think this ever gets run - WSF */
            Swig_add_extension_code(n, mangled, parms, void_type, code, cparse_cplusplus, "self");
        }
        *call = Swig_cfunction_call(mangled, parms);
        cres = NewStringf("%s;", *call);
        Setattr(n, "wrap:action", cres);
        Delete(cres);
    } else {
        String *cres;
        *call = Swig_cmemberset_call(name, type, self, varcref);
        cres = NewStringf("%s;", *call);
        Setattr(n, "wrap:action", cres);
        Delete(cres);
    }
    Setattr(n, "type", void_type);
    Setattr(n, "parms", parms);
    Delete(parms);
    Delete(ty);
    Delete(void_type);
    Delete(membername);
    Delete(sname);
    Delete(mangled);
    Delete(self);
    return SWIG_OK;
}