]> git.cworth.org Git - apitrace/commitdiff
Support const methods.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 3 Feb 2012 19:05:54 +0000 (19:05 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 3 Feb 2012 19:07:25 +0000 (19:07 +0000)
Also several enhancements to C decl parser.

specs/scripts/cdecl.py
specs/stdapi.py

index d6ee05850df2159ff0e7b2246ed9be3e650c8220..940ce4424a6c948390be1f8647c704a923dba461 100755 (executable)
@@ -189,6 +189,11 @@ class DeclParser:
         value = 0
         while self.lookahead() != '}':
             type, name = self.parse_named_type()
+
+            if self.match(':'):
+                self.consume()
+                self.consume()
+
             if self.match(','):
                 self.consume(',')
             self.consume(';')
@@ -205,6 +210,8 @@ class DeclParser:
         if self.match(';'):
             return
         self.consume(':')
+        if self.lookahead() in ('public', 'protected'):
+            self.consume()
         base = self.consume()
         self.consume('{')
 
@@ -225,7 +232,7 @@ class DeclParser:
 
         ret = self.parse_type()
 
-        if self.match('__stdcall'):
+        if self.match('__stdcall', 'WINAPI'):
             self.consume()
             creator = 'StdFunction'
 
@@ -244,7 +251,10 @@ class DeclParser:
             args.append(arg)
             if self.match(','):
                 self.consume()
-        self.consume() == ')'
+        self.consume(')')
+        if self.lookahead() == 'const':
+            self.consume()
+            extra = ', const=True' + extra
         
         print '    %s(%s, "%s", [%s]%s),' % (creator, ret, name, ', '.join(args), extra)
 
@@ -256,6 +266,12 @@ class DeclParser:
         arg = '(%s, "%s")' % (type, name)
         if 'out' in tags:
             arg = 'Out' + arg
+
+        if self.match('='):
+            self.consume()
+            while not self.match(',', ')'):
+                self.consume()
+
         return arg
 
     def parse_tags(self):
index d9fd5455bbdf381d7dbcf008cc851f07f0a30764..6aa4089f6d0984880f475bf57a87d75fc0d2cd5e 100644 (file)
@@ -361,10 +361,17 @@ class Interface(Type):
 
 class Method(Function):
 
-    def __init__(self, type, name, args):
+    def __init__(self, type, name, args, const=False):
         Function.__init__(self, type, name, args, call = '__stdcall')
         for index in range(len(self.args)):
             self.args[index].index = index + 1
+        self.const = const
+
+    def prototype(self, name=None):
+        s = Function.prototype(self, name)
+        if self.const:
+            s += ' const'
+        return s
 
 
 class String(Type):