From 4c796850e99675a83d733076c5590da67df1b216 Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Thu, 22 Oct 2020 18:51:03 +0800 Subject: [PATCH] ldgen: allow more chars in sections fragments --- tools/ldgen/fragments.py | 9 ++++- tools/ldgen/test/test_fragments.py | 53 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/tools/ldgen/fragments.py b/tools/ldgen/fragments.py index 227abf464f..556bb8700c 100644 --- a/tools/ldgen/fragments.py +++ b/tools/ldgen/fragments.py @@ -31,6 +31,7 @@ from pyparsing import Optional from pyparsing import originalTextFor from pyparsing import Forward from pyparsing import indentedBlock +from pyparsing import Combine from collections import namedtuple import abc @@ -216,8 +217,14 @@ class Fragment(): class Sections(Fragment): + # Unless quoted, symbol names start with a letter, underscore, or point + # and may include any letters, underscores, digits, points, and hyphens. + GNU_LD_SYMBOLS = Word(alphas + "_.", alphanums + "._-") + + entries_grammar = Combine(GNU_LD_SYMBOLS + Optional("+")) + grammars = { - "entries": KeyGrammar(Word(alphanums + "+.").setResultsName("section"), 1, None, True) + "entries": KeyGrammar(entries_grammar.setResultsName("section"), 1, None, True) } """ diff --git a/tools/ldgen/test/test_fragments.py b/tools/ldgen/test/test_fragments.py index f0b5cf574f..dc6ff5b301 100755 --- a/tools/ldgen/test/test_fragments.py +++ b/tools/ldgen/test/test_fragments.py @@ -523,6 +523,59 @@ entries: with self.assertRaises(ParseFatalException): FragmentFile(test_fragment, self.sdkconfig) + def test_entries_grammar(self): + + test_fragment = self.create_fragment_file(u""" +[sections:test] +entries: + _valid1 + valid2. + .valid3_- +""") + + fragment_file = FragmentFile(test_fragment, self.sdkconfig) + self.assertEqual(fragment_file.fragments[0].entries, + {"_valid1", "valid2.", ".valid3_-"}) + + # invalid starting char + test_fragment = self.create_fragment_file(u""" +[sections:test] +entries: + 1invalid +""") + + with self.assertRaises(ParseException): + FragmentFile(test_fragment, self.sdkconfig) + + test_fragment = self.create_fragment_file(u""" +[sections:test] +entries: + -invalid +""") + + with self.assertRaises(ParseException): + FragmentFile(test_fragment, self.sdkconfig) + + # + notation + test_fragment = self.create_fragment_file(u""" +[sections:test] +entries: + valid+ +""") + + fragment_file = FragmentFile(test_fragment, self.sdkconfig) + self.assertEqual(fragment_file.fragments[0].entries, + {"valid+"}) + + test_fragment = self.create_fragment_file(u""" +[sections:test] +entries: + inva+lid+ +""") + + with self.assertRaises(ParseFatalException): + FragmentFile(test_fragment, self.sdkconfig) + class SchemeTest(FragmentTest):