複数文字のローカル変数

以下に対応できるようにする
foo = 1;
bar = 2 + 3;
return foo + bar;

typedef struct LVar Lvar;

// local variable
struct LVar {
    LVar *next; // next variable or null
    char *name; // variable name
    int len; // name length
    int offset; // RBP offset
};

LVar *locals;

### if, while, for
アセンブラではcmpを使って、jumpしてend or biginに行くか処理をするか判定している

program = stmt *
stmt = expr ";"
	| "if" "(" expr ")" stmt ("else" stmt)?
	| "while" "(" expr ")" stmt
	| "for" "(" expr? ";" expr? ";" expr? ")" stmt

if

  Aをコンパイルしたコード // スタックトップに結果が入っているはず
  pop rax
  cmp rax, 0
  je  .LendXXX
  Bをコンパイルしたコード
.LendXXX:

if else

  Aをコンパイルしたコード // スタックトップに結果が入っているはず
  pop rax
  cmp rax, 0
  je  .LelseXXX
  Bをコンパイルしたコード
  jmp .LendXXX
.LelseXXX
  Cをコンパイルしたコード
.LendXXX

while

.LbeginXXX:
  Aをコンパイルしたコード
  pop rax
  cmp rax, 0
  je  .LendXXX
  Bをコンパイルしたコード
  jmp .LbeginXXX
.LendXXX:

for

  Aをコンパイルしたコード
.LbeginXXX:
  Bをコンパイルしたコード
  pop rax
  cmp rax, 0
  je  .LendXXX
  Dをコンパイルしたコード
  Cをコンパイルしたコード
  jmp .LbeginXXX
.LendXXX: