diff --git a/centvrion/parser.py b/centvrion/parser.py index dbc0dfd..e041229 100644 --- a/centvrion/parser.py +++ b/centvrion/parser.py @@ -273,14 +273,14 @@ class Parser(): @self.pg.production('array_items : ') @self.pg.production('array_items : expression') - @self.pg.production('array_items : expression SYMBOL_COMMA array_items') + @self.pg.production('array_items : expression SYMBOL_COMMA opt_newline array_items') def array_items(calls): if len(calls) == 0: return [] elif len(calls) == 1: return [calls[0]] else: - return [calls[0]] + calls[2] + return [calls[0]] + calls[3] @self.pg.production('expression : id') def expression_id(tokens): diff --git a/tests.py b/tests.py index 6d46ed0..d38b5a3 100644 --- a/tests.py +++ b/tests.py @@ -1798,6 +1798,36 @@ class TestArraySlice(unittest.TestCase): run_test(self, source, nodes, value) +# --- Multiline arrays --- + +multiline_array_tests = [ + # newlines after commas + ("[I,\nII,\nIII]", + Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]), + ValList([ValInt(1), ValInt(2), ValInt(3)])), + # single newline after comma + ("[I, II,\nIII]", + Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]), + ValList([ValInt(1), ValInt(2), ValInt(3)])), + # empty array still works + ("[]", + Program([], [ExpressionStatement(DataArray([]))]), + ValList([])), + # nested arrays with newlines + ("[I,\n[II, III],\nIV]", + Program([], [ExpressionStatement(DataArray([ + Numeral("I"), + DataArray([Numeral("II"), Numeral("III")]), + Numeral("IV")]))]), + ValList([ValInt(1), ValList([ValInt(2), ValInt(3)]), ValInt(4)])), +] + +class TestMultilineArray(unittest.TestCase): + @parameterized.expand(multiline_array_tests) + def test_multiline_array(self, source, nodes, value): + run_test(self, source, nodes, value) + + # --- String indexing --- string_index_tests = [