This commit is contained in:
Rui Ueyama 2018-08-30 12:31:28 +00:00
parent 3a06a615c0
commit 316525a1c7
3 changed files with 17 additions and 17 deletions

18
parse.c
View File

@ -21,7 +21,7 @@ typedef struct Env {
Map *vars;
Map *typedefs;
Map *tags;
struct Env *next;
struct Env *prev;
} Env;
static Program *prog;
@ -36,17 +36,17 @@ struct Env *env;
static Node null_stmt = {ND_NULL};
static Env *new_env(Env *next) {
static Env *new_env(Env *prev) {
Env *env = calloc(1, sizeof(Env));
env->vars = new_map();
env->typedefs = new_map();
env->tags = new_map();
env->next = next;
env->prev = prev;
return env;
}
static Var *find_var(char *name) {
for (Env *e = env; e; e = e->next) {
for (Env *e = env; e; e = e->prev) {
Var *var = map_get(e->vars, name);
if (var)
return var;
@ -55,7 +55,7 @@ static Var *find_var(char *name) {
}
static Type *find_typedef(char *name) {
for (Env *e = env; e; e = e->next) {
for (Env *e = env; e; e = e->prev) {
Type *ty = map_get(e->typedefs, name);
if (ty)
return ty;
@ -64,7 +64,7 @@ static Type *find_typedef(char *name) {
}
static Type *find_tag(char *name) {
for (Env *e = env; e; e = e->next) {
for (Env *e = env; e; e = e->prev) {
Type *ty = map_get(e->tags, name);
if (ty)
return ty;
@ -304,7 +304,7 @@ static Node *stmt_expr() {
vec_push(v, stmt());
} while (!consume('}'));
expect(')');
env = env->next;
env = env->prev;
Node *last = vec_pop(v);
if (last->op != ND_EXPR_STMT)
@ -771,7 +771,7 @@ static Node *stmt() {
vec_pop(breaks);
vec_pop(continues);
env = env->next;
env = env->prev;
return node;
}
case TK_WHILE: {
@ -871,7 +871,7 @@ static Node *compound_stmt() {
env = new_env(env);
while (!consume('}'))
vec_push(node->stmts, stmt());
env = env->next;
env = env->prev;
return node;
}

View File

@ -8,16 +8,16 @@ typedef struct Env {
Vector *input;
Vector *output;
int pos;
struct Env *next;
struct Env *prev;
} Env;
static Env *env;
static Env *new_env(Env *next, Vector *input) {
static Env *new_env(Env *prev, Vector *input) {
Env *env = calloc(1, sizeof(Env));
env->input = input;
env->output = new_vec();
env->next = next;
env->prev = prev;
return env;
}
@ -315,6 +315,6 @@ Vector *preprocess(Vector *tokens) {
}
Vector *v = env->output;
env = env->next;
env = env->prev;
return v;
}

View File

@ -4,7 +4,7 @@ typedef struct Env {
char *path;
char *buf;
Vector *tokens;
struct Env *next;
struct Env *prev;
} Env;
static Env *env;
@ -38,12 +38,12 @@ static char *read_file(FILE *fp) {
return sb_get(sb);
}
static Env *new_env(Env *next, char *path, char *buf) {
static Env *new_env(Env *prev, char *path, char *buf) {
Env *env = calloc(1, sizeof(Env));
env->path = strcmp(path, "-") ? path : "(stdin)";
env->buf = buf;
env->tokens = new_vec();
env->next = next;
env->prev = prev;
return env;
}
@ -498,7 +498,7 @@ Vector *tokenize(char *path, bool add_eof) {
if (add_eof)
add(TK_EOF, NULL);
Vector *v = env->tokens;
env = env->next;
env = env->prev;
v = preprocess(v);
v = strip_newline_tokens(v);