Mercurial > projects > dang
diff gen/CodeGen.d @ 85:9375bd975730 new_gen
Allow indexing of pointers also
author | Anders Halager <halager@gmail.com> |
---|---|
date | Fri, 02 May 2008 20:18:50 +0200 |
parents | 9e90694f5da0 |
children | 29f486ccc203 |
line wrap: on
line diff
--- a/gen/CodeGen.d Fri May 02 20:17:22 2008 +0200 +++ b/gen/CodeGen.d Fri May 02 20:18:50 2008 +0200 @@ -503,12 +503,22 @@ return b.buildLoad(target, "deref"); case ExpType.Index: auto indexExp = cast(IndexExp)exp; - auto array = getPointer(indexExp.target); + auto type = indexExp.target.type; auto index = genExpression(indexExp.index); Value[2] gep_indices; gep_indices[0] = ConstantInt.Get(IntegerType.Int32, 0, false); gep_indices[1] = index; - return b.buildGEP(array, gep_indices[], "index"); + if (type.isArray()) + { + auto array = getPointer(indexExp.target); + return b.buildGEP(array, gep_indices[0 .. 2], "index"); + } + else if (type.isPointer()) + { + auto array = genExpression(indexExp.target); + return b.buildGEP(array, gep_indices[1 .. 2], "index"); + } + else assert(0, "Can only index pointers and arrays"); case ExpType.MemberReference: auto mem = cast(MemberReference)exp; Stdout(mem.target).newline;