From 788628d9025319461b08fc4de985fd09b2a98b58 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Mon, 4 Jun 2018 21:21:04 +0300 Subject: [PATCH] #21 scanner.Lexer.charsToBytes optimization --- scanner/lexer.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scanner/lexer.go b/scanner/lexer.go index a2f322f..59afec5 100644 --- a/scanner/lexer.go +++ b/scanner/lexer.go @@ -441,6 +441,7 @@ type Lexer struct { PhpDocComment string Comments []comment.Comment heredocLabel []lex.Char + tokenBytesBuf *bytes.Buffer } // Rune2Class returns the rune integer id @@ -468,7 +469,7 @@ func NewLexer(src io.Reader, fName string) *Lexer { if err != nil { panic(err) } - return &Lexer{lx, []int{0}, "", nil, nil} + return &Lexer{lx, []int{0}, "", nil, nil, &bytes.Buffer{}} } func (l *Lexer) ungetChars(n int) []lex.Char { @@ -527,11 +528,13 @@ func (l *Lexer) addComment(c comment.Comment) { } func (l *Lexer) charsToBytes(chars []lex.Char) []byte { - bytesBuf := bytes.Buffer{} - for _, c := range chars { - bytesBuf.WriteRune(c.Rune) + l.tokenBytesBuf.WriteRune(c.Rune) } - return bytesBuf.Bytes() + r := l.tokenBytesBuf.Bytes() + + l.tokenBytesBuf.Reset() + + return r }