Mercurial > projects > dang
diff gen/CodeGen.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 | d84fec04d462 |
children | 4ae365eff712 |
line wrap: on
line diff
--- a/gen/CodeGen.d Sat Apr 26 19:13:10 2008 +0200 +++ b/gen/CodeGen.d Sat Apr 26 23:11:13 2008 +0200 @@ -74,17 +74,22 @@ foreach (p; fd.funcArgs) { DType t = p.env.find(p.identifier).type; - if(cast(DStruct)t) + if(auto st = cast(DStruct)t) { - Type pointer = PointerType.Get(llvm(t)); + Type pointer = PointerType.Get(llvm(st)); param_types ~= pointer; } else param_types ~= llvm(t); } auto ret_t = llvm(fd.env.find(fd.identifier).type); + if(auto st = cast(StructType)ret_t) + { + ret_t = PointerType.Get(ret_t); + } auto func_t = FunctionType.Get(ret_t, param_types); auto llfunc = m.addFunction(func_t, fd.identifier.get); + Stdout("uhh").newline; }; auto visitor = new VisitFuncDecls(registerFunc); visitor.visit(decls); @@ -282,9 +287,10 @@ return table.find(sym.id.get); else return b.buildLoad(table.find(sym.id.get), sym.id.get); - case ExpType.MemberLookup: + case ExpType.MemberReference: auto v = getPointer(exp); - return b.buildLoad(v, v.name); + return v; +// return b.buildLoad(v, v.name); } assert(0, "Reached end of switch in genExpression"); return null; @@ -313,7 +319,7 @@ throw error(__LINE__, PE.VoidRetInNonVoidFunc); Value v = genExpression(ret.exp); - if (v.type != t) +/* if (v.type != t) { IntegerType v_t = cast(IntegerType) v.type; IntegerType i_t = cast(IntegerType) t; @@ -326,7 +332,7 @@ v = b.buildSExt(v, t, ".cast"); else v = b.buildTrunc(v, t, ".cast"); - } + }*/ b.buildRet(v); break; case StmtType.Decl: @@ -458,8 +464,8 @@ auto identifier = cast(Identifier)exp; auto sym = exp.env.find(identifier); return table.find(sym.id.get); - case ExpType.MemberLookup: - auto mem = cast(MemberLookup)exp; + case ExpType.MemberReference: + auto mem = cast(MemberReference)exp; switch(mem.target.expType) { case ExpType.Identifier: @@ -471,12 +477,7 @@ DType t = sym.type; auto st = cast(DStruct)t; - int i = 0; - foreach(char[] name, DType type ; st.members) - if(name == child.get) - break; - else - i++; + int i = st.indexOf(child.get); Value[] vals; vals ~= ConstantInt.Get(IntegerType.Int32, 0, false); @@ -578,8 +579,7 @@ { Type[] members; foreach(m; s.members) - members ~= llvm(m); - + members ~= llvm(m.type); Type res = StructType.Get(members); type_map[t] = res;