//--------------------------------------------------------------------------------------
//
// X-BASIC'
// 	エラー定義(日本語)
//
//--------------------------------------------------------------------------------------

#ifndef	__XB_ERRORJ__
#define __XB_ERRORJ__	1

#include "XBdefines.h"

//--------------------------------------------------------------------------------------

#ifdef FROM_ERR_C	// Cソース生成時
#define	EXTERNe	// EXTERNe宣言を消し、実体確保する
#else			// ヘッダー生成時
#define	EXTERNe	extern
#endif

//-------------------------------------------------------------------

EXTERNe	const char *errorMesJ[]
#ifdef FROM_ERR_C
={	// XB_ERRORNOと合わせること
// 正常終了
	"正常終了",

	// 発生位置が特定できないエラー/ソース外で発生するエラー
	"endenumがない",
	"endfuncがない",
	"ネスト構造が閉じてない",
	
	//----------------------------------------
	"区分け用コード",
	//----------------------------------------

// 内部エラー系
	"システムエラー",
	"外部関数ファイルのパラメータテーブルがおかしい",
	"ワークエリアを確保出来ない",
	"中間コード領域を拡大できない",
	"変数領域を拡大できない",
	"ネストワークがオーバーフローした",

// 実行時エラー
	"0除算",
	"floatでは使えない演算子",
	"文字列は足し算しか出来ない",
	"式の型が異なる",
	"配列宣言異常",
	"配列1次元の要素数が大きすぎる",
	"配列の次元数が多すぎる",
	"配列の要素数が負数",
	"最大文字列長を超えている",
	"文字列内位置指定がおかしい",
	"関数に異常な引数あり",
	"外部関数のパラメーターリストがおかしい",
	"外部関数内エラー",
	"変数または配列が多すぎる(宣言個数)",
	"再帰呼び出しが深すぎる",

// 以下コンパイル時エラー
	// 文法エラー",
	"未サポート構文",
	"文法エラー",
	"exit文エラー",
	"for文エラー",
	"func文エラー",
	"if文エラー",
	"input/linput文エラー",
	"return文エラー",
	"label文エラー",
	"using 文後に ; がない",
	"配列が)で閉じてない",
	"行数が多すぎる",
	
	// パラメーターエラー
	"ステートメントのパラメータ数が少ない",
	"usingフォーマット異常",
	
	// 制御構文系
	"next に対応する for がない",
	"if のない then/else",
	"endwhile に対応する while がない",
	"until に対応する repeat がない",
	"case,default,endswitch には switch が必要",
	"default の後に case は置かない方がいい",
	"default が2つ以上ある",
//	 0123456789012345678901234501234567890123456789012345
	"switch には 最低1つの case が必要",
//	 01234567890123456789012345|これの倍の長さをerrorView.frame.size.widthに取る
	"switch 中に continue がある",
	"１つのswitch中のbreakが多すぎる",
	"ネスト構造が閉じてない",
	"ネスト構造無しに break,continueは出来ない",
	"end がないのに funcがあった",
	
	// 関数系
	"関数名二重宣言",
	"関数の引数が多い",
	"関数の引数が足りない",
	"引数に配列は使えない",
	"引数の配列の次元が合わない",
	"関数の引数の配列の要素数が合わない",
	"endfuncがない",
	"endfuncまたはreturnに対応するfuncがない",
	"void型の関数には返り値はない",
	"リターン値はint型以外なのに指定がない",
	"goto で関数ブロックの外に飛ぶ",
	"goto 異常",
	"func文が多すぎる",
	
	// 式系
	"変数の型が異なる",
	"式異常",
	"数値として異常",
	"文字列変数が多すぎる",
	"変更対象文字列長を超えている",
	"システム変数には代入出来ない",
	"名前が多すぎる",
	
	// 宣言系
	"未宣言変数",
	"未宣言変数を int型で自動登録(警告)",
	"変数二重宣言",
	"変数宣言がおかしい",
	"変数がステートメントと同名である",
	"変数が関数と同名である",
	"変数がenum定数と同名である",	// v3.00
	"ラベル名二重宣言",
	"型が指定されていない",
	
	// 配列系
	"未宣言関数/配列",
	"dim 無しで配列宣言した",
	"配列の要素数指定が多い",
	"配列の要素数指定が足りない",
	"配列の要素数指定は定数のみ",
	"配列に要素数指定がない",
	"配列の総要素数が多すぎる",
	"最大次元数を超えている",
	"グローバルで可変長配列は使えない",
	
	// 定数処理
	"enum〜endenumの書式がおかしい",
	"ステートメントと同名の定数名がある",
	"関数名と同名の定数名がある",
	"定数名が再定義されている",
	"endenumがない",
	"endenumに対応するenumがない",
}
#endif
;

//-------------------------------------------------------------------

EXTERNe	const char *warnMesJ[]
#ifdef FROM_ERR_C
={	// XB_WARNNOと合わせること
	// 正常終了
	"正常終了",
	//
	"入力型が異なります",
	"数値指定が間違っています",
}
#endif
;

//-------------------------------------------------------------------

#endif
