diff --git a/tools/ldgen/fragments.py b/tools/ldgen/fragments.py index d3e2a2e761..b35bddf954 100644 --- a/tools/ldgen/fragments.py +++ b/tools/ldgen/fragments.py @@ -25,7 +25,6 @@ from pyparsing import (Combine, Forward, Group, Keyword, Literal, OneOrMore, Opt originalTextFor, restOfLine) from sdkconfig import SDKConfig -KeyGrammar = namedtuple('KeyGrammar', 'grammar min max required') class FragmentFile(): @@ -192,6 +191,8 @@ class Fragment(): such as checking the validity of the fragment name and getting the entry values. """ + KeyValue = namedtuple('KeyValue', 'grammar min max required') + IDENTIFIER = Word(alphas + '_', alphanums + '_') ENTITY = Word(alphanums + '.-_$') @@ -213,7 +214,7 @@ class Sections(Fragment): entries_grammar = Combine(GNU_LD_SYMBOLS + Optional('+')) grammars = { - 'entries': KeyGrammar(entries_grammar.setResultsName('section'), 1, None, True) + 'entries': Fragment.KeyValue(entries_grammar.setResultsName('section'), 1, None, True) } """ @@ -251,7 +252,7 @@ class Scheme(Fragment): """ grammars = { - 'entries': KeyGrammar(Fragment.IDENTIFIER.setResultsName('sections') + Suppress('->') + + 'entries': Fragment.KeyValue(Fragment.IDENTIFIER.setResultsName('sections') + Suppress('->') + Fragment.IDENTIFIER.setResultsName('target'), 1, None, True) } @@ -448,8 +449,8 @@ class Mapping(Fragment): Optional(Suppress(';') + delimitedList(section_target_flags).setResultsName('sections_target_flags'))) grammars = { - 'archive': KeyGrammar(Or([Fragment.ENTITY, Word(Entity.ALL)]).setResultsName('archive'), 1, 1, True), - 'entries': KeyGrammar(entry, 0, None, True) + 'archive': Fragment.KeyValue(Or([Fragment.ENTITY, Word(Entity.ALL)]).setResultsName('archive'), 1, 1, True), + 'entries': Fragment.KeyValue(entry, 0, None, True) } return grammars diff --git a/tools/ldgen/generation.py b/tools/ldgen/generation.py index 71fbf48339..ea3453619a 100644 --- a/tools/ldgen/generation.py +++ b/tools/ldgen/generation.py @@ -292,7 +292,7 @@ class RootNode(EntityNode): def __init__(self): EntityNode.__init__(self, None, Entity.ALL) self.child_t = ArchiveNode - self.entity = Entity('*') + self.entity = Entity(Entity.ALL) class Generation: diff --git a/tools/ldgen/test/test_fragments.py b/tools/ldgen/test/test_fragments.py index d844ae5fb4..9bdb427f6e 100755 --- a/tools/ldgen/test/test_fragments.py +++ b/tools/ldgen/test/test_fragments.py @@ -23,20 +23,20 @@ from io import StringIO from pyparsing import ParseException, ParseFatalException, Word, alphanums try: - from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, KeyGrammar, Mapping + from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, Mapping from sdkconfig import SDKConfig except ImportError: sys.path.append('../') - from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, KeyGrammar, Mapping + from fragments import FRAGMENT_TYPES, Fragment, FragmentFile, Mapping from sdkconfig import SDKConfig class SampleFragment(Fragment): grammars = { - 'key_1': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 0, None, True), - 'key_2': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 0, None, False), - 'key_3': KeyGrammar(Word(alphanums + '_').setResultsName('value'), 3, 5, False) + 'key_1': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 0, None, True), + 'key_2': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 0, None, False), + 'key_3': Fragment.KeyValue(Word(alphanums + '_').setResultsName('value'), 3, 5, False) } def set_key_value(self, key, parse_results):