Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9cc4035 authored by Min Yun's avatar Min Yun
Browse files

Fix End() of Rule

If a directive appears in the middle of a Rule,
the Rule does not reflect its length.
This must be reflected to obtain the correct End() position of the Rule.

Change-Id: I67a78f95487829c639b0c1414ac4cc096faa6363
parent cdd70d26
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ type Rule struct {
	Prerequisites *MakeString
	RecipePos     Pos
	Recipe        string
	RecipeEndPos  Pos
}

func (x *Rule) Dump() string {
@@ -95,7 +96,7 @@ func (x *Rule) Dump() string {
}

func (x *Rule) Pos() Pos { return x.Target.Pos() }
func (x *Rule) End() Pos { return Pos(int(x.RecipePos) + len(x.Recipe)) }
func (x *Rule) End() Pos { return x.RecipeEndPos }

type Variable struct {
	Name *MakeString
+1 −0
Original line number Diff line number Diff line
@@ -448,6 +448,7 @@ loop:
			Prerequisites: prerequisites,
			Recipe:        recipe,
			RecipePos:     recipePos,
			RecipeEndPos:  p.pos(),
		})
	}
}
+22 −0
Original line number Diff line number Diff line
@@ -124,3 +124,25 @@ func TestParse(t *testing.T) {
		})
	}
}

func TestRuleEnd(t *testing.T) {
	name := "ruleEndTest"
	in := `all:
ifeq (A, A)
	echo foo
	echo foo
	echo foo
	echo foo
endif
	echo bar
`
	p := NewParser(name, bytes.NewBufferString(in))
	got, errs := p.Parse()
	if len(errs) != 0 {
		t.Fatalf("Unexpected errors while parsing: %v", errs)
	}

	if got[0].End() < got[len(got) -1].Pos() {
		t.Errorf("Rule's end (%d) is smaller than directive that inside of rule's start (%v)\n", got[0].End(), got[len(got) -1].Pos())
	}
}