]> git.tdb.fi Git - gldbg.git/blobdiff - genwrap.py
Bugfixes
[gldbg.git] / genwrap.py
index ec239853875a386fdca9a4961b733a77622177c5..1ee97cef332853da9e6c8ffb0d5033e7ae980b7f 100755 (executable)
@@ -125,11 +125,11 @@ class Function:
                        if self.kind=="value":
                                if self.base_ctype.startswith("const "):
                                        self.base_ctype = self.base_ctype[6:]
-                               self.io = iomap[self.base_ctype]
                        else:
                                if self.direction=="in":
                                        self.ctype = "const "+self.ctype
                                self.ctype = self.ctype+" *"
+                       self.io = iomap[self.base_ctype]
 
                def derive_csize(self):
                        if self.kind=="array" and self.size is not None:
@@ -138,8 +138,8 @@ class Function:
                                        self.csize = "%d*sizeof(%s)"%(self.size, self.base_ctype)
                                elif self.size.startswith("COMPSIZE("):
                                        self.csize = self.func.compsize(self.size[9:-1], self.base_ctype)
-                               elif self.size=="" and (self.type=="charARB" or self.type=="Char"):
-                                       self.csize = "strlen"
+                               elif self.size=="pname":
+                                       self.csize = "paramsize(pname)*sizeof(%s)"%self.base_ctype
                                else:
                                        s = self.func.get_param(self.size.split('*')[0])
                                        if (s.type=="SizeI" or s.type.endswith("Int32") or s.type.startswith("BufferSize")) and s.kind=="value":
@@ -187,7 +187,7 @@ class Function:
                                have_type = True
                        elif cn.endswith("Format"):
                                res += "formatsize(%s)"%param.name
-                       elif cn.endswith(("Parameter", "ParameterPName", "ParameterName")) or cn=="GetPName":
+                       elif param.name=="pname" or cn.endswith("Parameter"):
                                res += "paramsize(%s)"%param.name
                        elif cn=="MapTarget":
                                res += "mapsize(%s)"%param.name
@@ -197,7 +197,7 @@ class Function:
                                sys.stderr.write("Compsize '%s' for function '%s' failed: Parameter '%s' has unknown type '%s'\n"%(size, self.name, param.name, param.type))
                                return
                if not have_type:
-                       res += "*sizeof(%s)"%param.ctype
+                       res += "*sizeof(%s)"%btype
                return res
 
        def finalize(self):
@@ -211,6 +211,7 @@ class Function:
 class Template:
        def __init__(self, fn):
                self.sections = []
+               self.handcode = []
 
                literal = True
                text = ""
@@ -221,6 +222,10 @@ class Template:
                                        text = ""
                                text += line[1:]+"\n"
                                literal = True
+                       elif line[0]=='!':
+                               parts = line[1:].split()
+                               if parts[0]=="handcode":
+                                       self.handcode.append(parts[1])
                        else:
                                if literal and text:
                                        self.add_section(text, literal)
@@ -248,6 +253,8 @@ class Template:
                                print sect
                        else:
                                for func in functions:
+                                       if func.name in self.handcode:
+                                               continue
                                        globals = {
                                                "w": self.write,
                                                "wl": self.writeln,