def p_parameter_declaration(p): '''parameter_declaration : declaration_specifiers declarator | declaration_specifiers abstract_declarator | declaration_specifiers ''' p[0] = cdeclarations.Parameter() cdeclarations.apply_specifiers(p[1], p[0]) if len(p) > 2: p[0].declarator = p[2]
def p_struct_declaration(p): '''struct_declaration : specifier_qualifier_list struct_declarator_list ';' | specifier_qualifier_list ';' ''' # p[0] returned is a tuple, to handle multiple declarators in one # declaration. r = () if len(p) >= 4: for declarator in p[2]: declaration = cdeclarations.Declaration() cdeclarations.apply_specifiers(p[1], declaration) declaration.declarator = declarator r += (declaration, ) p[0] = r
def p_struct_declaration(p): '''struct_declaration : specifier_qualifier_list struct_declarator_list ';' | specifier_qualifier_list ';' ''' # p[0] returned is a tuple, to handle multiple declarators in one # declaration. r = () if len(p) >= 4: for declarator in p[2]: declaration = cdeclarations.Declaration() cdeclarations.apply_specifiers(p[1], declaration) declaration.declarator = declarator r += (declaration,) p[0] = r
def p_type_name(p): '''type_name : specifier_qualifier_list | specifier_qualifier_list abstract_declarator ''' typ = p[1] if len(p) == 3: declarator = p[2] else: declarator = None declaration = cdeclarations.Declaration() declaration.declarator = declarator cdeclarations.apply_specifiers(typ, declaration) ctype = ctypesparser.get_ctypes_type(declaration.type, declaration.declarator) p[0] = ctype
def p_type_name(p): '''type_name : specifier_qualifier_list | specifier_qualifier_list abstract_declarator ''' typ=p[1] if len(p)==3: declarator = p[2] else: declarator = None declaration = cdeclarations.Declaration() declaration.declarator = declarator cdeclarations.apply_specifiers(typ,declaration) ctype = p.parser.cparser.get_ctypes_type(declaration.type, declaration.declarator) p[0] = ctype
def p_declaration_impl(p): '''declaration_impl : declaration_specifiers | declaration_specifiers init_declarator_list ''' declaration = cdeclarations.Declaration() cdeclarations.apply_specifiers(p[1], declaration) if len(p) == 2: filename = p.slice[1].filename lineno = p.slice[1].lineno p.parser.cparser.impl_handle_declaration(declaration, filename, lineno) return filename = p.slice[2].filename lineno = p.slice[2].lineno for declarator in p[2]: declaration.declarator = declarator p.parser.cparser.impl_handle_declaration(declaration, filename, lineno)