Teach trans to allocate, initialize and load from local variables.

This commit is contained in:
Graydon Hoare 2010-10-19 14:54:10 -07:00
parent 10d628dbd0
commit b8cca0971f
6 changed files with 174 additions and 18 deletions

View file

@ -1,5 +1,6 @@
import std._uint;
import std._int;
import front.ast;
type pos = rec(uint line, uint col);
type span = rec(str filename, pos lo, pos hi);
@ -43,6 +44,24 @@ fn new_str_hash[V]() -> std.map.hashmap[str,V] {
ret std.map.mk_hashmap[str,V](hasher, eqer);
}
fn new_def_hash[V]() -> std.map.hashmap[ast.def_id,V] {
fn hash(&ast.def_id d) -> uint {
let uint u = d._0 as uint;
u <<= 16u;
u |= d._1 as uint;
ret u;
}
fn eq(&ast.def_id a, &ast.def_id b) -> bool {
ret a._0 == b._0 && a._1 == b._1;
}
let std.map.hashfn[ast.def_id] hasher = hash;
let std.map.eqfn[ast.def_id] eqer = eq;
ret std.map.mk_hashmap[ast.def_id,V](hasher, eqer);
}
fn istr(int i) -> str {
ret _int.to_str(i, 10u);
}