pike.git / src / post_modules / GL / gen.pike

version» Context lines:

pike.git/src/post_modules/GL/gen.pike:88:    if(i>=mi || i>0)    t+="|void";    typ+=({t});    }    return ({typ,tm,rows((['i':"ZT_INT",'f':"ZT_FLOAT",'d':"ZT_DOUBLE"]),    values(rt))*"|",rt});   }      array(string) gen_func(string name, string ty)   { -  string res="", got="", prot, vdec, vret, fu=name; +  string res="", got="", prot, vdec, vret, vcast, fu=name;    array novec, args=({}), argt=({}); -  int r234, argt_cut=-1, img_obj=0; +  int r234, argt_cut=-1, img_obj=0, polya=-1;    string rtypes;       switch(ty[0]) {    case 'V':    prot=":void";    break;    case 'I':    case 'O':    case 'E':    prot=":int";    vdec="INT32";    vret="push_int";    break; -  +  case 'S': +  prot=":string"; +  vdec="const GLubyte *"; +  vret="push_text"; +  vcast="(char *)"; +  break;    default:    error("%s: Unknown return type '%c'.", name, ty[0]);    }       res += "static void f_"+name+"(INT32 args)\n{\n"+    (vdec?(" "+vdec+" res;\n"):"");       int a=1;    for(int i=1; i<sizeof(ty); i++)    switch(ty[i]) {
pike.git/src/post_modules/GL/gen.pike:138:    got += " arg"+a+"=sp["+(a-1)+"-args].u.float_number;\n";    a++;    break;    case 'F':    argt += ({"float"});    args += ({ "arg"+a });    res += " float arg"+a+";\n";    got += " arg"+a+"=sp["+(a-1)+"-args].u.float_number;\n";    a++;    break; +  case 'Z': +  argt += ({"float|int"}); +  args += ({ "sp["+(a-1)+"-args]" }); +  polya = (a++)-1; +  break;    case '+':    int mi, mx;    switch(sizeof(ty[i+1..])) {    case 1:    mi = 1; mx = 4; break;    case 2:    mi = 1; mx = 2; break;    case 3:    mi = 2; mx = 4; break;    case 4:
pike.git/src/post_modules/GL/gen.pike:263:    })*"|";    }))+    (r234>0?({"BIT_MANY|BIT_MIXED|BIT_VOID"}):({}))+({"0"}))*", "+");\n";       if(sizeof(got))    res += "\n"+got+"\n";       switch(r234)    {    case 0: +  if(polya<0)    res += (vret?" res=":" ")+fu+"("+(args*",")+");\n"; -  +  else +  res += " switch("+args[polya]+".type) {\n"+ +  Array.map(argt[polya]/"|", lambda(string t) +  { +  array(string) a = copy_value(args); +  a[polya] += ".u"; +  switch(t) { +  case "int": +  a[polya]+=".integer"; break; +  case "float": +  a[polya]+=".float_number"; break; +  } +  return " case T_"+upper_case(t)+": "+ +  (vret?"res=":"")+fu+t[0..0]+"("+ +  (a*",")+"); break;\n"; +  })*""+" }\n";    break;    case 1:    if(sizeof(rtypes)==1)    res += " switch(r234) {\n"+Array.map(novec, lambda(int i, string vret,    string r, string fu,    array(string) args) {    return " case "+i+": "+    (vret?"res=":"")+    fu+i+"v("+    (args+({"zv4.v."+r}))*
pike.git/src/post_modules/GL/gen.pike:361:    ((args+({"zv16."+r[i..i]}))*",")+"); break;";    }, rtypes, fu, vret, args, novec)*"\n"+    "\n }\n";    break;    }       if(img_obj) {    res += " release_img(&img);\n";    }    res += " pop_n_elems(args);\n"; -  res += (vret? " "+vret+"(res);\n":/*" push_int(0);\n"*/""); +  res += (vret? " "+vret+"("+(vcast||"")+"res);\n":/*" push_int(0);\n"*/"");    res += "}\n\n";    return ({res,prot});   }      string gen()   {    string res = "";    array t = Array.transpose(func_misc);    array fn=t[0];    mapping ty = mkmapping(@t);