// 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 bisonerrors, Makefile, go.y.

static struct {
	int yystate;
	int yychar;
	char *msg;
} yymsg[] = {
	// Each line of the form % token list
	// is converted by bisonerrors 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"
};
