Mercurial > projects > dang
diff sema/SymbolTableBuilder.d @ 55:79cb0afafabe new_gen
Now structs are somewhat useable to use.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Sat, 26 Apr 2008 23:11:13 +0200 |
parents | da551f90e03f |
children | 4ae365eff712 |
line wrap: on
line diff
--- a/sema/SymbolTableBuilder.d Sat Apr 26 19:13:10 2008 +0200 +++ b/sema/SymbolTableBuilder.d Sat Apr 26 23:11:13 2008 +0200 @@ -42,12 +42,13 @@ override void visitStructDecl(StructDecl s) { DType[char[]] types; + + auto st = (cast(DStruct)s.env.types[s.identifier.get]); foreach(varDecl ; s.vars) { - types[varDecl.identifier.get] = typeOf(varDecl.type, s.env); + st.addMember(typeOf(varDecl.type, varDecl.env), varDecl.identifier.get); } - (cast(DStruct)s.env.types[s.identifier.get]).setMembers(types); super.visitStructDecl(s); } @@ -142,12 +143,15 @@ { auto sc = current(); auto sym = sc.add(s.identifier); + s.env = sc; + auto type = new DStruct(s.identifier); - auto type = new DStruct(s.identifier); sc.types[s.identifier.get] = type; - s.env = sc; + + sc = push(); super.visitStructDecl(s); + pop(sc); } override void visitDeclStmt(DeclStmt d)