Mercurial > projects > ldc
view gen/elem.c @ 4:e116aa1488e6 trunk
[svn r8] changed backend includes to always use the gen/<foo>.h prefix
fixed passing string literals as array parameters
few other fixes
moved some array routines into gen/arrays
author | lindquist |
---|---|
date | Mon, 03 Sep 2007 17:34:30 +0200 |
parents | c53b6e3fe49a |
children | d3ee9efe20e2 |
line wrap: on
line source
#include <iostream> #include "llvm/Instructions.h" #include "gen/elem.h" #include "gen/irstate.h" #include "gen/logger.h" ////////////////////////////////////////////////////////////////////////////////////////// elem::elem() { mem = 0; val = 0; arg = 0; type = NONE; inplace = false; field = false; vardecl = 0; funcdecl = 0; } llvm::Value* elem::getValue() { assert(val || mem); switch(type) { case NONE: assert(0 && "type == NONE"); break; case VAR: case REF: { if (val) { return val; } else { if (!llvm::isa<llvm::PointerType>(mem->getType())) { Logger::cout() << "unexpected type: " << *mem->getType() << '\n'; assert(0); } const llvm::PointerType* pt = llvm::cast<llvm::PointerType>(mem->getType()); if (!pt->getElementType()->isFirstClassType()) { return mem; } else { return new llvm::LoadInst(mem, "tmp", gIR->scopebb()); } } } case VAL: case NUL: case FUNC: case CONST: case SLICE: return val ? val : mem; } assert(0 && "type == invalid value"); return 0; }