Skip to content

Commit c1fa21e

Browse files
committed
Fixed tests
1 parent 30f85b4 commit c1fa21e

File tree

6 files changed

+35
-18
lines changed

6 files changed

+35
-18
lines changed

parse/block.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (p BlockParser[NodeT]) String() string {
3737
}
3838

3939
func (p BlockParser[NodeT]) Parse(v *TokenView) (block BlockNode[NodeT], err ParsingError) {
40-
leftCurly, err := v.ConsumeToken(lex.LeftCurlyBraceToken)
40+
leftCurly, err := v.ConsumeTokenIgnoreSeparator(lex.LeftCurlyBraceToken)
4141

4242
if err != nil {
4343
return
@@ -46,7 +46,7 @@ func (p BlockParser[NodeT]) Parse(v *TokenView) (block BlockNode[NodeT], err Par
4646
block.Start = leftCurly.View.Start
4747
block.Nodes = ParseMany(p.Parser, v)
4848

49-
rightCurly, err := v.ConsumeToken(lex.RightCurlyBraceToken)
49+
rightCurly, err := v.ConsumeTokenIgnoreSeparator(lex.RightCurlyBraceToken)
5050
if err != nil {
5151
return
5252
}

parse/file_test.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,39 +76,48 @@ func TestSingleFunction(t *testing.T) {
7676
}
7777

7878
func TestFileParserTwoFunctionsNoExtraSeparator(t *testing.T) {
79-
src := `function @first =
80-
ret
79+
src := `function @first = { ret }
8180
function @second =
82-
ret`
81+
{
82+
ret
83+
}`
8384

84-
expected := `function @first =
85+
expected := `function @first = {
8586
ret
87+
}
8688
87-
function @second =
89+
function @second = {
8890
ret
91+
}
8992
`
9093
testFormattedFile(t, src, expected)
9194
}
9295

9396
func TestFileWithLabels(t *testing.T) {
94-
src := `function $32 @fib $i32 %n =
95-
jle %n $32 #1 .return
97+
src := `
98+
function $32 @fib $i32 %n =
99+
{
100+
101+
jle %n $32 #1 .return
96102
%n = dec %n
97103
%a = call @fib %n
98104
%n = dec %n
99-
%b = call @fib %n
105+
%b = call @fib %n
100106
%n = add %a %b
101-
.return
102-
ret %n`
103107
104-
expected := `function $32 @fib $i32 %n =
108+
.return ret %n }
109+
`
110+
111+
expected := `function $32 @fib $i32 %n = {
105112
jle %n $32 #1 .return
106113
%n = dec %n
107114
%a = call @fib %n
108115
%n = dec %n
109116
%b = call @fib %n
110117
%n = add %a %b
111-
.return ret %n
118+
.return
119+
ret %n
120+
}
112121
`
113122
testFormattedFile(t, src, expected)
114123
}

parse/function.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (FunctionParser) String() string {
3333
}
3434

3535
func (FunctionParser) parseFunctionKeyword(v *TokenView, node *FunctionNode) ParsingError {
36-
kw, err := v.ConsumeToken(lex.FunctionKeywordToken)
36+
kw, err := v.ConsumeTokenIgnoreSeparator(lex.FunctionKeywordToken)
3737
if err != nil {
3838
return err
3939
}

parse/instruction.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ func (InstructionParser) parseOperator(v *TokenView, node *InstructionNode) Pars
9292
//
9393
// > Lbl* (Reg+ Eql)? Opr Arg+ !Arg
9494
func (p InstructionParser) Parse(v *TokenView) (node InstructionNode, err ParsingError) {
95-
v.ConsumeManyTokens(lex.SeparatorToken)
9695
node.Labels, _ = ParseManyIgnoreSeparators(p.LabelParser, v)
9796
node.Targets = ParseMany(p.RegisterParser, v)
9897

@@ -107,6 +106,6 @@ func (p InstructionParser) Parse(v *TokenView) (node InstructionNode, err Parsin
107106
}
108107

109108
node.Arguments = ParseMany(p.ArgumentParser, v)
110-
err = v.ConsumeAtLeastTokens(1, lex.SeparatorToken)
111-
return node, err
109+
v.ConsumeManyTokens(lex.SeparatorToken)
110+
return node, nil
112111
}

parse/parser.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func ParseManyIgnoreSeparators[Node any](
4949
p Parser[Node],
5050
v *TokenView,
5151
) (nodes []Node, err ParsingError) {
52+
v.ConsumeManyTokens(lex.SeparatorToken)
5253
for {
5354
var node Node
5455
node, err = p.Parse(v)

parse/token_view.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ func (v *TokenView) ConsumeManyTokens(
5151
}
5252
}
5353

54+
// Consume a token, but ignore any separator tokens that come before it.
55+
func (v *TokenView) ConsumeTokenIgnoreSeparator(
56+
expectedTypes ...lex.TokenType,
57+
) (lex.Token, ParsingError) {
58+
v.ConsumeManyTokens(lex.SeparatorToken)
59+
return v.ConsumeToken(expectedTypes...)
60+
}
61+
5462
// Consume as many tokens as possible greedly, until we recieve an error.
5563
//
5664
// If the number of tokens consumed is strictly less than the provided number,

0 commit comments

Comments
 (0)