From 91b1a4e3e5dc0bb939dabcdca549c01f3211267c Mon Sep 17 00:00:00 2001 From: Robert Lowry Date: Wed, 20 Nov 2024 08:49:54 -0600 Subject: [PATCH] parser: stop after parsing end psuedo op line (#82) compile_test88: 47 -> 45 errors --- parser.go | 9 +++++++++ parser_test.go | 1 + 2 files changed, 10 insertions(+) diff --git a/parser.go b/parser.go index 5ef7bc5..64f9a0c 100644 --- a/parser.go +++ b/parser.go @@ -60,6 +60,7 @@ type parser struct { err error currentLine sourceLine metadata WarriorData + endSeen bool // collected lines lines []sourceLine @@ -172,6 +173,10 @@ func (p *parser) consumeEmitLine(nextState parseStateFn) parseStateFn { // eof: nil // anything else: error func parseLine(p *parser) parseStateFn { + if p.endSeen { + return nil + } + p.currentLine = sourceLine{line: p.line} switch p.nextToken.typ { @@ -298,6 +303,10 @@ func parsePseudoOp(p *parser) parseStateFn { p.currentLine.op = p.nextToken.val p.currentLine.typ = linePseudoOp + if strings.ToLower(p.nextToken.val) == "end" { + p.endSeen = true + } + lastToken := p.nextToken p.next() diff --git a/parser_test.go b/parser_test.go index f30e1e7..656f128 100644 --- a/parser_test.go +++ b/parser_test.go @@ -193,6 +193,7 @@ func TestParserNoError(t *testing.T) { "dat 0\n", "label: label2: dat 0", "label: : dat 0", + "end\n\n--", } for _, val := range testCases {