varlistの現在の先頭の base_ptr に 0 をセットする関数を追加

変数リストの現在の最後の変数を、新しいスコープの先頭とみなして、
それの base_ptr に0をセットする

新しいスコープ内にて、新たにローカル変数 a, b, c を宣言する場合の例:
push_heapstack();
varlist_add_local("a", 1, 1); // とりあえず a を宣言する
varlist_set_scope_head(); // これでヒープの最後の変数である a の base_ptr へ 0 がセットされる
varlist_add_local("b", 1, 1); // その後 b, c は普通に宣言していけばいい
varlist_add_local("c", 1, 1);

すなわち、あるローカル変数群の最初の１個目を宣言したあとに、それの base_ptr を 0 にセットすることで、
以降の変数のオフセットもそれに続くように設定されていく。
これによって、古いスコープの変数と、新しいスコープの変数で、
それら変数群の base_ptr （すなわちオフセット）は共に 0 となってしまうので、このままでは
重複してしまう。
そこで、このあとさらに、変数のアクセス時に現在の heap_head をオフセットとしてアクセスする必要がある。
この heap_head と base_ptr = 0 を上手く組み合わせることで、ローカル変数を実現しようと考えている。

現状は関数を追加しただけで、この関数を実際の処理へはまだ組み込んでいない状態。
現在のスコープの深さを保存する仕組みを追加

コンパイル時に用いる変数として
 cur_scope_depth に現在のスコープの深さを保存するようにした。
また、そのインターフェース関数で {inc,dec}_cur_scope_depth() を追加。

この cur_scope_depth は初期値は 0 で、0は現在のプログラムフローがグローバルであることを意味する。
そして、関数呼び出しやブロック開始などのような、スコープを1段深めるべき状況に入る度に、
この値を忘れずに inc するようにする。
また逆に、関数戻りやブロック終了などのような、スコープを1段浅くすべき状況に入る度に、
この値を忘れずに dec するようにする。
これによって、現在のプログラムフローがローカルか？グローバルか？の情報をコンパイル時に使えるようになる。

考えてる使い道としては、変数宣言時に、この cur_scope_depth を参照することで、
変数を、グローバル変数、ローカル変数のどちらとして確保すべきかが分かるので、
それによって変数宣言の具体的な処理を分岐させることができる。
の為に使うことを考えている。

それと、
struct Var にメンバー変数 is_local を追加した。
この構造体には、識別子がどのようなスペックの変数に結びつけられているかの情報が入るが、
新たに追加した is_local は、この識別子による変数をローカルとすべきか？のフラグが入る。

varlist_add_common() を修正し、識別子から Var を設定する際に、is_local も自動的に設定されるようにした。
その際に、識別子をグローバルとすべきか、ローカルとすべきかの判断は、cur_scope_depth を参照して分岐している。

それと地味な修正として
関数 varlist_add() は使用してる場所が存在しないので削除した。
が、これは以降で varlist_add_global() として、そのような動作をするような関数として際追加する予定。
それまでは、（一時的に）、全ての変数はローカル変数として宣言するようになる予定。

現状ではローカル変数も、実際にはヒープ領域に確保しているが、
今後の修正の方向としては、グローバル変数はヒープ領域に確保するが、ローカル変数に関してはスタック領域に確保するように修正する方向で考えてる。
そのため、現状だと expression などに関して、
declaration の完了時点でスタックを初期状態へとクリアーしてしまっているが、
これだとスタックにローカル変数を確保する際に都合が悪い。
そこで、スタックの0クリアについて修正する必要がある。
（スタックの掃除を0クリアではなく個別に丁寧にやる方向への修正）

それと、現状ではスタックへはプッシュ・ポップしかサポートしてないが、
これに加えてさらに、スタック上の任意アドレスへの読み書きを追加する必要がある。

見通しとしてはこんなところ。