Fuller support for qualifiers in array dimensions.
Added a field to the ArrayDecl node and modified tests
diff --git a/tests/test_c_parser.py b/tests/test_c_parser.py
index 67048a1..f6bf0bd 100644
--- a/tests/test_c_parser.py
+++ b/tests/test_c_parser.py
@@ -47,7 +47,7 @@
return ['Typename', nested]
elif typ == ArrayDecl:
dimval = decl.dim.value if decl.dim else ''
- return ['ArrayDecl', dimval, nested]
+ return ['ArrayDecl', dimval, decl.dim_quals, nested]
elif typ == PtrDecl:
return ['PtrDecl', nested]
elif typ == Typedef:
@@ -229,17 +229,17 @@
self.assertEqual(self.get_decl('long ar[15];'),
['Decl', 'ar',
- ['ArrayDecl', '15',
+ ['ArrayDecl', '15', [],
['TypeDecl', ['IdentifierType', ['long']]]]])
self.assertEqual(self.get_decl('long long ar[15];'),
['Decl', 'ar',
- ['ArrayDecl', '15',
+ ['ArrayDecl', '15', [],
['TypeDecl', ['IdentifierType', ['long', 'long']]]]])
self.assertEqual(self.get_decl('unsigned ar[];'),
['Decl', 'ar',
- ['ArrayDecl', '',
+ ['ArrayDecl', '', [],
['TypeDecl', ['IdentifierType', ['unsigned']]]]])
self.assertEqual(self.get_decl('int strlen(char* s);'),
@@ -278,30 +278,30 @@
self.assertEqual(self.get_decl('int (*a)[1][2];'),
['Decl', 'a',
['PtrDecl',
- ['ArrayDecl', '1',
- ['ArrayDecl', '2',
+ ['ArrayDecl', '1', [],
+ ['ArrayDecl', '2', [],
['TypeDecl', ['IdentifierType', ['int']]]]]]])
self.assertEqual(self.get_decl('int *a[1][2];'),
['Decl', 'a',
- ['ArrayDecl', '1',
- ['ArrayDecl', '2',
+ ['ArrayDecl', '1', [],
+ ['ArrayDecl', '2', [],
['PtrDecl', ['TypeDecl', ['IdentifierType', ['int']]]]]]])
self.assertEqual(self.get_decl('char ***ar3D[40];'),
['Decl', 'ar3D',
- ['ArrayDecl', '40',
+ ['ArrayDecl', '40', [],
['PtrDecl', ['PtrDecl', ['PtrDecl',
['TypeDecl', ['IdentifierType', ['char']]]]]]]])
self.assertEqual(self.get_decl('char (***ar3D)[40];'),
['Decl', 'ar3D',
['PtrDecl', ['PtrDecl', ['PtrDecl',
- ['ArrayDecl', '40', ['TypeDecl', ['IdentifierType', ['char']]]]]]]])
+ ['ArrayDecl', '40', [], ['TypeDecl', ['IdentifierType', ['char']]]]]]]])
self.assertEqual(self.get_decl('int (*x[4])(char, int);'),
['Decl', 'x',
- ['ArrayDecl', '4',
+ ['ArrayDecl', '4', [],
['PtrDecl',
['FuncDecl',
[ ['Typename', ['TypeDecl', ['IdentifierType', ['char']]]],
@@ -310,13 +310,13 @@
self.assertEqual(self.get_decl('char *(*(**foo [][8])())[];'),
['Decl', 'foo',
- ['ArrayDecl', '',
- ['ArrayDecl', '8',
+ ['ArrayDecl', '', [],
+ ['ArrayDecl', '8', [],
['PtrDecl', ['PtrDecl',
['FuncDecl',
[],
['PtrDecl',
- ['ArrayDecl', '',
+ ['ArrayDecl', '', [],
['PtrDecl',
['TypeDecl',
['IdentifierType', ['char']]]]]]]]]]]])
@@ -372,14 +372,14 @@
self.assertEqual(self.get_decl('int zz(int p[static 10]);'),
['Decl', 'zz',
['FuncDecl',
- [['Decl', 'p', ['ArrayDecl', '10',
+ [['Decl', 'p', ['ArrayDecl', '10', ['static'],
['TypeDecl', ['IdentifierType', ['int']]]]]],
['TypeDecl', ['IdentifierType', ['int']]]]])
self.assertEqual(self.get_decl('int zz(int p[const 10]);'),
['Decl', 'zz',
['FuncDecl',
- [['Decl', 'p', ['ArrayDecl', '10',
+ [['Decl', 'p', ['ArrayDecl', '10', ['const'],
['TypeDecl', ['IdentifierType', ['int']]]]]],
['TypeDecl', ['IdentifierType', ['int']]]]])
@@ -853,7 +853,7 @@
['TypeDecl',
['IdentifierType', ['Name']]]],
['Decl', 'NameArray',
- ['ArrayDecl', '3',
+ ['ArrayDecl', '3', [],
['TypeDecl', ['IdentifierType', ['Name']]]]]]]]])
self.assertEqual(s1_ast.ext[3].body.block_items[0].lvalue.field.name, 'Name')
@@ -959,7 +959,7 @@
['Decl', 'notp', ['TypeDecl', ['IdentifierType', ['char']]]])
self.assertEqual(self.get_decl(d2, 2),
['Decl', 'ar',
- ['ArrayDecl', '4',
+ ['ArrayDecl', '4', [],
['TypeDecl', ['IdentifierType', ['char']]]]])
def test_invalid_multiple_types_error(self):
@@ -1007,11 +1007,11 @@
'''
self.assertEqual(self.get_decl(d3, 0),
['Typedef', 'numberarray',
- ['ArrayDecl', '5',
+ ['ArrayDecl', '5', [],
['TypeDecl', ['IdentifierType', ['int']]]]])
self.assertEqual(self.get_decl(d3, 1),
['Typedef', 'numberarray',
- ['ArrayDecl', '5',
+ ['ArrayDecl', '5', [],
['TypeDecl', ['IdentifierType', ['int']]]]])
def test_decl_inits(self):
@@ -1030,7 +1030,7 @@
#~ self.parse(d2).show()
self.assertEqual(self.get_decl(d2),
['Decl', 'ar',
- ['ArrayDecl', '',
+ ['ArrayDecl', '', [],
['TypeDecl', ['IdentifierType', ['long']]]]])
self.assertEqual(self.get_decl_init(d2),
[ ['Constant', 'int', '7'],