From 0d004519b08ace356a6d27a99a15f6bbb3616690 Mon Sep 17 00:00:00 2001 From: Roland Illig Date: Sat, 14 Sep 2024 12:38:20 +0200 Subject: [PATCH] Fix parsing of indirect modifiers --- v23/mklexer.go | 8 ++++++-- v23/mklexer_test.go | 6 +----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/v23/mklexer.go b/v23/mklexer.go index 79c681e6..88555600 100644 --- a/v23/mklexer.go +++ b/v23/mklexer.go @@ -359,8 +359,12 @@ func (p *MkLexer) exprModifier(varname string, closing byte) MkExprModifier { } return MkExprModifier(modifier) } - if modifier != "" && modifierNoVar == "" { - return MkExprModifier(modifier) + + lexer.Reset(mark) + if indirect := p.Expr(); indirect != nil { + if lexer.PeekByte() == ':' || lexer.PeekByte() == int(closing) { + return MkExprModifier(lexer.Since(mark)) + } } // ${:!uname -a!:[2]} diff --git a/v23/mklexer_test.go b/v23/mklexer_test.go index 9018f77d..eb94ea16 100644 --- a/v23/mklexer_test.go +++ b/v23/mklexer_test.go @@ -416,11 +416,7 @@ func (s *Suite) Test_MkLexer_Expr(c *check.C) { expr("", "!command!", "Q")) test("${_BUILD_DEFS.${v}:U${${v}}:${_BUILD_INFO_MOD.${v}}:Q}", - b.ExprTextToken( - "${_BUILD_DEFS.${v}:U${${v}}:${_BUILD_INFO_MOD.${v}}:Q}", - // FIXME: The indirect modifier is missing. - "_BUILD_DEFS.${v}", "U${${v}}", "Q"), - "WARN: Test_MkLexer_Expr.mk:1: Invalid variable modifier \"${_BUILD_INFO_MOD.${v}}\" for \"_BUILD_DEFS.${v}\".") + expr("_BUILD_DEFS.${v}", "U${${v}}", "${_BUILD_INFO_MOD.${v}}", "Q")) } // Pkglint can replace $(VAR) with ${VAR}. It doesn't look at all components