Skip to content

Commit

Permalink
cmd/compile: remove gratuituous copying of lexer token data
Browse files Browse the repository at this point in the history
Rename yySymType to lexer; should eventually capture all lexer state.
Embed lexer in parser and access lexer token data directly.

Change-Id: I246194705d594f80426f3ba77d8580af9185daf7
Reviewed-on: https://go-review.googlesource.com/19759
Reviewed-by: Matthew Dempsky <[email protected]>
  • Loading branch information
griesemer committed Feb 21, 2016
1 parent 5621b09 commit 11e51ed
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 27 deletions.
29 changes: 17 additions & 12 deletions src/cmd/compile/internal/gc/lex.go
Original file line number Diff line number Diff line change
Expand Up @@ -866,10 +866,15 @@ func isfrog(c int) bool {
return false
}

type yySymType struct {
sym *Sym
val Val
op Op
type lexer struct {
// TODO(gri) move other lexer state here and out of global variables
// (source, current line number, etc.)

// current token
tok int32
sym_ *Sym // valid if tok == LNAME
val Val // valid if tok == LLITERAL
op Op // valid if tok == LASOP
}

const (
Expand Down Expand Up @@ -920,7 +925,7 @@ const (
LRSH
)

func _yylex(yylval *yySymType) int32 {
func (yylval *lexer) _yylex() int32 {
var c1 int
var op Op
var escflag int
Expand Down Expand Up @@ -1402,7 +1407,7 @@ talph:
if Debug['x'] != 0 {
fmt.Printf("lex: %s %s\n", s, lexname(int(s.Lexical)))
}
yylval.sym = s
yylval.sym_ = s
return int32(s.Lexical)

ncu:
Expand Down Expand Up @@ -1828,16 +1833,16 @@ func pragcgo(text string) {
}
}

func yylex(yylval *yySymType) int32 {
lx := _yylex(yylval)
func (l *lexer) next() {
tok := l._yylex()

if curio.nlsemi && lx == EOF {
if curio.nlsemi && tok == EOF {
// Treat EOF as "end of line" for the purposes
// of inserting a semicolon.
lx = ';'
tok = ';'
}

switch lx {
switch tok {
case LNAME,
LLITERAL,
LBREAK,
Expand All @@ -1855,7 +1860,7 @@ func yylex(yylval *yySymType) int32 {
curio.nlsemi = false
}

return lx
l.tok = tok
}

func getc() int {
Expand Down
19 changes: 4 additions & 15 deletions src/cmd/compile/internal/gc/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,10 @@ func parse_file(bin *obj.Biobuf) {
}

type parser struct {
tok int32 // next token (one-token look-ahead)
op Op // valid if tok == LASOP
val Val // valid if tok == LLITERAL
sym_ *Sym // valid if tok == LNAME
fnest int // function nesting level (for error handling)
xnest int // expression nesting level (for complit ambiguity resolution)
yy yySymType // for temporary use by next
indent []byte // tracing support
}

func (p *parser) next() {
p.tok = yylex(&p.yy)
p.op = p.yy.op
p.val = p.yy.val
p.sym_ = p.yy.sym
lexer
fnest int // function nesting level (for error handling)
xnest int // expression nesting level (for complit ambiguity resolution)
indent []byte // tracing support
}

func (p *parser) got(tok int32) bool {
Expand Down

0 comments on commit 11e51ed

Please sign in to comment.