File tree Expand file tree Collapse file tree 2 files changed +48
-5
lines changed Expand file tree Collapse file tree 2 files changed +48
-5
lines changed Original file line number Diff line number Diff line change @@ -1470,6 +1470,23 @@ def guess_ctypes_type(self, string):
1470
1470
x += ")" * pointers
1471
1471
return x
1472
1472
1473
+ def _remove_modifiers (self , vtype ):
1474
+ return " " .join (x for x in vtype .split () if x not in self .C_MODIFIERS )
1475
+
1476
+ def _create_raw_type (self , vtype ):
1477
+ lt = vtype .find ("<" )
1478
+ if lt != - 1 :
1479
+ gt = vtype .rfind (">" )
1480
+ vtype = (
1481
+ self ._remove_modifiers (vtype [:lt ])
1482
+ + vtype [lt : gt + 1 ]
1483
+ + self ._remove_modifiers (vtype [gt + 1 :])
1484
+ )
1485
+ else :
1486
+ vtype = self ._remove_modifiers (vtype )
1487
+
1488
+ return vtype
1489
+
1473
1490
def resolve_type (self , string , result ): # recursive
1474
1491
"""
1475
1492
keeps track of useful things like: how many pointers, number of typedefs, is fundamental or a class, etc...
@@ -1788,11 +1805,7 @@ def finalize_vars(self):
1788
1805
# create stripped raw_type #
1789
1806
for var in CppVariable .Vars :
1790
1807
if "raw_type" not in var :
1791
- raw = []
1792
- for x in var ["type" ].split ():
1793
- if x not in self .C_MODIFIERS :
1794
- raw .append (x )
1795
- var ["raw_type" ] = " " .join (raw )
1808
+ var ["raw_type" ] = self ._create_raw_type (var ["type" ])
1796
1809
1797
1810
# if 'AutoConstantEntry' in var['raw_type']: print(var); assert 0
1798
1811
if var ["class" ]:
Original file line number Diff line number Diff line change @@ -3648,5 +3648,35 @@ def test_fn(self):
3648
3648
self .assertEqual (fn ["rtnType" ], "HAL_Value" )
3649
3649
3650
3650
3651
+ class PointerTemplate_TestCase (unittest .TestCase ):
3652
+ def setUp (self ):
3653
+ self .cppHeader = CppHeaderParser .CppHeader (
3654
+ """
3655
+
3656
+ std::vector<Pointer*> * fn(std::vector<Pointer*> * ps);
3657
+
3658
+ """ ,
3659
+ "string" ,
3660
+ )
3661
+
3662
+ def test_fn (self ):
3663
+ self .assertEqual (len (self .cppHeader .functions ), 1 )
3664
+ fn = self .cppHeader .functions [0 ]
3665
+ self .assertEqual (fn ["name" ], "fn" )
3666
+ self .assertEqual (
3667
+ filter_pameters (fn ["parameters" ], ["namespace" , "raw_type" ]),
3668
+ [
3669
+ {
3670
+ "type" : "std::vector<Pointer *> *" ,
3671
+ "name" : "ps" ,
3672
+ "desc" : None ,
3673
+ "namespace" : None ,
3674
+ "raw_type" : "std::vector<Pointer *>" ,
3675
+ },
3676
+ ],
3677
+ )
3678
+ self .assertEqual (fn ["rtnType" ], "std::vector<Pointer *> *" )
3679
+
3680
+
3651
3681
if __name__ == "__main__" :
3652
3682
unittest .main ()
You can’t perform that action at this time.
0 commit comments