Introduce 'c' (constant) as symbol kind

This is preparatory work for addressing issue #30. It also fixes a bug where --prettify made the constants writable.
This commit is contained in:
Sei Lisa 2024-05-25 20:48:30 +02:00
parent c924f3ae5c
commit 5841c2c17a
2 changed files with 70 additions and 13 deletions

View file

@ -418,6 +418,48 @@ class UnitTestRegression(UnitTestCase):
self.assertRaises(lslparse.EParseTypeMismatch, parser.parse,
'default{timer(){if(1)return 1;}}')
# Constants with 'c' in symbol table (introduced to solve issue #30)
# Some errors are not the expected ones. Most (all?) should be syntax.
parser.parse('integer a=LOOP;default{timer(){llOwnerSay(NAK+EOF);}}')
parser.parse('integer a=LOOP;default{timer(){llOwnerSay(NAK+EOF);}}',
('prettify',))
parser.parse('default{timer(){LOOP;}}')
parser.parse('default{timer(){LOOP;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{touch(integer LOOP){}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){ZERO_VECTOR.x;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){LOOP.x;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){LOOP=1;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){LOOP++;}}', ('prettify',))
# should raise EParseSyntax instead
self.assertRaises(lslparse.EParseUndefined, parser.parse,
'default{timer(){++LOOP;}}', ('prettify',))
# should raise EParseSyntax instead
self.assertRaises(lslparse.EParseAlreadyDefined, parser.parse,
'integer LOOP=0;', ('prettify',))
# should raise EParseSyntax instead
self.assertRaises(lslparse.EParseAlreadyDefined, parser.parse,
'integer LOOP(){}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){integer LOOP=1;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){integer LOOP;}}', ('prettify',))
# should raise EParseSyntax instead
self.assertRaises(lslparse.EParseAlreadyDefined, parser.parse,
'default{timer(){}}state LOOP{timer(){}}', ('prettify',))
# should raise EParseSyntax instead
self.assertRaises(lslparse.EParseUndefined, parser.parse,
'default{timer(){state LOOP;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){@LOOP;}}', ('prettify',))
self.assertRaises(lslparse.EParseSyntax, parser.parse,
'default{timer(){integer LOOP;}}', ('prettify',))
class UnitTestCoverage(UnitTestCase):
def test_coverage_misc(self):
"""Miscellaneous tests that can't be computed or are too difficult