Beispiel #1
0
    def test_namespace(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
namespace A
{
    namespace B
    {
        struct C
        {

        }
    }
}
''',
                                 debug=True)

        self.assertEqual(1, len(parser.root_namespace._children))
        a = parser.root_namespace._children[0]

        self.assertEqual('A', a.name)
        self.assertEqual(1, len(a._children))

        b = a._children[0]
        self.assertEqual(1, len(b._children))
        self.assertEqual('B', b.name)

        c = b._children[0]
        self.assertEqual(0, len(c._children))
        self.assertEqual('C', c.name)
Beispiel #2
0
 def test_function(self) -> None:
     parser = cpptypeinfo.TypeParser()
     cpptypeinfo.parse_source(parser, 'typedef void (*T)();', debug=True)
     typedef = parser.root_namespace.user_type_map['T']
     if not isinstance(typedef, cpptypeinfo.usertype.Typedef):
         raise Exception()
     self.assertEqual(typedef.typeref.ref, cpptypeinfo.UInt64())
Beispiel #3
0
 def test_void_int(self) -> None:
     parser = cpptypeinfo.TypeParser()
     cpptypeinfo.parse_source(parser, 'void func(int a);', debug=True)
     func = parser.root_namespace.functions[0]
     self.assertEqual(TypeRef(cpptypeinfo.Void(), False), func.result)
     self.assertEqual(1, len(func.params))
     self.assertEqual(TypeRef(cpptypeinfo.Int32()), func.params[0].typeref)
Beispiel #4
0
 def test_int8_ptr(self) -> None:
     parser = cpptypeinfo.TypeParser()
     cpptypeinfo.parse_source(parser, 'typedef char* T;', debug=True)
     typedef = parser.root_namespace.user_type_map['T']
     if not isinstance(typedef, cpptypeinfo.usertype.Typedef):
         raise Exception()
     self.assertEqual(typedef.typeref.ref,
                      cpptypeinfo.usertype.Pointer(cpptypeinfo.Int8()))
Beispiel #5
0
    def test_callback(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct _NCB {
    void (*ncb_post)( struct _NCB * ); /* POST routine address        */
} NCB, *PNCB;
''',
                                 debug=True)
Beispiel #6
0
    def test_struct_forward_pointer(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct Forward *T;
''',
                                 debug=True)
        typedef = parser.root_namespace.user_type_map['T']
        if not isinstance(typedef, cpptypeinfo.usertype.Typedef):
            raise Exception()
Beispiel #7
0
    def test_linklist(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY;
''',
                                 debug=True)
Beispiel #8
0
    def test_elaborated(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct __crt_locale_pointers
{
    struct __crt_locale_data*    locinfo;
    struct __crt_multibyte_data* mbcinfo;
} __crt_locale_pointers
''',
                                 debug=True)
Beispiel #9
0
    def test_anonymous_union(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct D3D11_VIDEO_COLOR
    {
    union 
        {
        int YCbCr;
        float RGBA;
        } 	;
    } 	D3D11_VIDEO_COLOR;
''',
                                 debug=True)
Beispiel #10
0
    def test_struct(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
typedef struct Tag {
} T;

typedef T* TP;
''',
                                 debug=True)
        typedef = parser.root_namespace.user_type_map['T']
        if not isinstance(typedef, cpptypeinfo.usertype.Typedef):
            raise Exception()
        self.assertEqual(typedef.typeref.ref,
                         cpptypeinfo.usertype.Struct('Tag'))
Beispiel #11
0
    def test_excpt(self) -> None:
        parser = cpptypeinfo.TypeParser()
        cpptypeinfo.parse_source(parser,
                                 '''
        int __cdecl __C_specific_handler(
            struct _EXCEPTION_RECORD*   ExceptionRecord,
            void*                       EstablisherFrame,
            struct _CONTEXT*            ContextRecord,
            struct _DISPATCHER_CONTEXT* DispatcherContext
            );
''',
                                 debug=True)
        func = parser.root_namespace.functions[0]
        self.assertEqual(TypeRef(cpptypeinfo.Void(), False), func.result)
        self.assertEqual(1, len(func.params))
        self.assertEqual(TypeRef(cpptypeinfo.Int32()), func.params[0].typeref)
 def test_function(self) -> None:
     parser = cpptypeinfo.TypeParser()
     cpptypeinfo.parse_source(parser, SOURCE, debug=True)