#include "stk.h"

extern STKSYS *stksys;

unsint STKVarRead(long p,NSTACK *nstk)
// 中間コード；変数からその内容を取り出す
// V2.8で大幅変更
{
STKSYS *sys;
short loc;
VAR0 *lv;
	sys=stksys; // 省メモリーのためローカル変数に置き換える
	
	// 現在の段から上の段へサーチする(0=グローバルまで)
	for (loc=sys->loc;loc>=0;loc--) {
		lv=&sys->Lvar[loc][p];
		if (!(lv->type&VKAKU)) {
			// 見つかった段と属性を記録
			nstk->num=lv->num;
			nstk->loc=loc;
			return(((lv->type&VTYPE)<<8)|NVADR);
		}
	}
	// グローバルまで未定義 = どこにも定義されていない
	nstk->num=sys->loc;
	return(NVADRN);
}

/* ローカルが有効な時の変数の参照/定義方法

グローバル	ﾛｰｶﾙ上の段	ﾛｰｶﾙその段	動作
----------------------------------------------------------------------------
  無関係	無関係		定義済み	ローカルその段参照
  未定義	未定義		未定義		ローカルその段定義
  無関係	定義済み	未定義		ローカル上の段参照
				ただし直後が変数定義でローカルその段定義
  定義済み	未定義		未定義		グローバル参照
				ただし直後が変数定義でローカルその段定義
*/
