// Copyright 2010 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Example-based syntax error messages.
// See yaccerrors.go.

package gc

var yymsg = []struct {
	yystate int
	yychar  int
	msg     string
}{
	// Each line of the form % token list
	// is converted by yaccerrors.go into the yystate and yychar caused
	// by that token list.

	% loadsys package LIMPORT '(' LLITERAL import_package import_there ','
		"unexpected comma during import block"},

	% loadsys package LIMPORT LNAME ';'
		"missing import path; require quoted string"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header ';'
		"missing { after if clause"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LSWITCH if_header ';'
		"missing { after switch clause"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR for_header ';'
		"missing { after for clause"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR ';' LBODY
		"missing { after for clause"},

	% loadsys package imports LFUNC LNAME '(' ')' ';' '{'
		"unexpected semicolon or newline before {"},

	% loadsys package imports LTYPE LNAME ';'
		"unexpected semicolon or newline in type declaration"},

	% loadsys package imports LCHAN '}'
		"unexpected } in channel type"},

	% loadsys package imports LCHAN ')'
		"unexpected ) in channel type"},

	% loadsys package imports LCHAN ','
		"unexpected comma in channel type"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' if_stmt ';' LELSE
		"unexpected semicolon or newline before else"},

	% loadsys package imports LTYPE LNAME LINTERFACE '{' LNAME ',' LNAME
		"name list not allowed in interface type"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFOR LVAR LNAME '=' LNAME
		"var declaration not allowed in for initializer"},

	% loadsys package imports LVAR LNAME '[' ']' LNAME '{'
		"unexpected { at end of statement"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LVAR LNAME '[' ']' LNAME '{'
		"unexpected { at end of statement"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LDEFER LNAME ';'
		"argument to go/defer must be function call"},

	% loadsys package imports LVAR LNAME '=' LNAME '{' LNAME ';'
		"need trailing comma before newline in composite literal"},

	% loadsys package imports LVAR LNAME '=' comptype '{' LNAME ';'
		"need trailing comma before newline in composite literal"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LFUNC LNAME
		"nested func not allowed"},

	% loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header loop_body LELSE ';'
		"else must be followed by if or statement block"},
}
