]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: catch (A).X as a parse error
authorRob Pike <r@golang.org>
Fri, 24 Aug 2012 20:00:24 +0000 (13:00 -0700)
committerRob Pike <r@golang.org>
Fri, 24 Aug 2012 20:00:24 +0000 (13:00 -0700)
This shouldn't be an error (see issue 3999), but until it's handled
correctly, treat it as one to avoid confusion. Without this CL,
(A).X parses as two arguments.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6473059

src/pkg/text/template/parse/lex.go
src/pkg/text/template/parse/parse_test.go

index c73f533d19125b1c0d6c063d00fe94c581b39279..2f4c6ffe6443dcd17baf70c47b3acc43668dd120 100644 (file)
@@ -354,6 +354,12 @@ func lexInsideAction(l *lexer) stateFn {
                if l.parenDepth < 0 {
                        return l.errorf("unexpected right paren %#U", r)
                }
+               // Catch the mistake of (a).X, which will parse as two args.
+               // See issue 3999. TODO: Remove once arg parsing is
+               // better defined.
+               if l.peek() == '.' {
+                       return l.errorf("cannot evaluate field of parenthesized expression")
+               }
                return lexInsideAction
        case r <= unicode.MaxASCII && unicode.IsPrint(r):
                l.emit(itemChar)
index da0df20950fd54f82909b9c70305d2a59823250e..da1ce1dd173bc73ae69f3602eaf83a020ea16340 100644 (file)
@@ -232,6 +232,9 @@ var parseTests = []parseTest{
        {"invalid punctuation", "{{printf 3, 4}}", hasError, ""},
        {"multidecl outside range", "{{with $v, $u := 3}}{{end}}", hasError, ""},
        {"too many decls in range", "{{range $u, $v, $w := 3}}{{end}}", hasError, ""},
+       // This one should work but doesn't. Caught as a parse error to avoid confusion.
+       // TODO: Update after issue 3999 is resolved.
+       {"dot applied to parentheses", "{{printf (printf .).}}", hasError, ""},
        // Equals (and other chars) do not assignments make (yet).
        {"bug0a", "{{$x := 0}}{{$x}}", noError, "{{$x := 0}}{{$x}}"},
        {"bug0b", "{{$x = 1}}{{$x}}", hasError, ""},