mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
90 lines
2.7 KiB
C++
90 lines
2.7 KiB
C++
//===-- irvar.cpp ---------------------------------------------------------===//
|
||
//
|
||
// LDC – the LLVM D compiler
|
||
//
|
||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||
// file for details.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
#include "gen/llvm.h"
|
||
#include "declaration.h"
|
||
#include "gen/irstate.h"
|
||
#include "ir/irvar.h"
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
|
||
IrVar::IrVar(VarDeclaration* var)
|
||
{
|
||
V = var;
|
||
value = NULL;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
|
||
IrGlobal::IrGlobal(VarDeclaration* v): IrVar(v)
|
||
{
|
||
type = NULL;
|
||
constInit = NULL;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
|
||
IrLocal::IrLocal(VarDeclaration* v) : IrVar(v)
|
||
{
|
||
nestedIndex = -1;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
|
||
IrParameter::IrParameter(VarDeclaration* v) : IrLocal(v), arg(0), isVthis(false)
|
||
{
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
|
||
IrField::IrField(VarDeclaration* v) : IrVar(v)
|
||
{
|
||
assert(V->ir.irField == NULL && "field for this variable already exists");
|
||
V->ir.irField = this;
|
||
|
||
if (v->aggrIndex)
|
||
{
|
||
index = v->aggrIndex;
|
||
unionOffset = 0;
|
||
}
|
||
else
|
||
{
|
||
index = 0;
|
||
unionOffset = v->offset;
|
||
}
|
||
constInit = NULL;
|
||
}
|
||
|
||
extern LLConstant* get_default_initializer(
|
||
VarDeclaration* vd,
|
||
Initializer* init);
|
||
|
||
llvm::Constant * IrField::getDefaultInit()
|
||
{
|
||
if (constInit)
|
||
return constInit;
|
||
constInit = get_default_initializer(V, V->init);
|
||
return constInit;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////////////
|