Mercurial > projects > ldc
view gen/dvalue.h @ 1607:207a8a438dea
Merge DMD r253: refactor: Argument => Parameter
---
dmd/arrayop.c | 30 ++++----
dmd/arraytypes.h | 2 +-
dmd/class.c | 8 +-
dmd/declaration.c | 10 ++--
dmd/declaration.h | 16 ++--
dmd/doc.c | 12 ++--
dmd/dsymbol.c | 4 +-
dmd/expression.c | 48 +++++++-------
dmd/expression.h | 32 +++++-----
dmd/func.c | 78 +++++++++++-----------
dmd/init.c | 2 +-
dmd/interpret.c | 8 +-
dmd/mtype.c | 190 ++++++++++++++++++++++++++--------------------------
dmd/mtype.h | 32 +++++-----
dmd/opover.c | 34 +++++-----
dmd/parse.c | 40 ++++++------
dmd/parse.h | 2 +-
dmd/statement.c | 90 +++++++++++++-------------
dmd/statement.h | 14 ++--
dmd/struct.c | 8 +-
dmd/template.c | 30 ++++----
gen/functions.cpp | 10 ++--
gen/functions.h | 2 +-
gen/tocall.cpp | 10 ++--
gen/typinf.cpp | 6 +-
25 files changed, 359 insertions(+), 359 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:20 -0300 |
parents | a5bfed1f6775 |
children |
line wrap: on
line source
#ifndef LDC_GEN_DVALUE_H #define LDC_GEN_DVALUE_H /* These classes are used for generating the IR. They encapsulate D values and provide a common interface to the most common operations. When more specialized handling is necessary, they hold enough information to do-the-right-thing (TM) */ #include <cassert> #include "root.h" struct Type; struct Dsymbol; struct VarDeclaration; struct FuncDeclaration; namespace llvm { class Value; class Type; class Constant; } struct DImValue; struct DConstValue; struct DNullValue; struct DVarValue; struct DFieldValue; struct DFuncValue; struct DSliceValue; // base class for d-values struct DValue : Object { Type* type; DValue(Type* ty) : type(ty) {} Type*& getType() { assert(type); return type; } virtual llvm::Value* getLVal() { assert(0); return 0; } virtual llvm::Value* getRVal() { assert(0); return 0; } virtual bool isLVal() { return false; } virtual DImValue* isIm() { return NULL; } virtual DConstValue* isConst() { return NULL; } virtual DNullValue* isNull() { return NULL; } virtual DVarValue* isVar() { return NULL; } virtual DFieldValue* isField() { return NULL; } virtual DSliceValue* isSlice() { return NULL; } virtual DFuncValue* isFunc() { return NULL; } protected: DValue() {} DValue(const DValue&) { } DValue& operator=(const DValue& other) { type = other.type; return *this; } }; // immediate d-value struct DImValue : DValue { llvm::Value* val; DImValue(Type* t, llvm::Value* v) : DValue(t), val(v) { } virtual llvm::Value* getRVal() { assert(val); return val; } virtual DImValue* isIm() { return this; } }; // constant d-value struct DConstValue : DValue { llvm::Constant* c; DConstValue(Type* t, llvm::Constant* con) : DValue(t), c(con) {} virtual llvm::Value* getRVal(); virtual DConstValue* isConst() { return this; } }; // null d-value struct DNullValue : DConstValue { DNullValue(Type* t, llvm::Constant* con) : DConstValue(t,con) {} virtual DNullValue* isNull() { return this; } }; // variable d-value struct DVarValue : DValue { VarDeclaration* var; llvm::Value* val; DVarValue(Type* t, VarDeclaration* vd, llvm::Value* llvmValue); DVarValue(Type* t, llvm::Value* llvmValue); virtual bool isLVal() { return true; } virtual llvm::Value* getLVal(); virtual llvm::Value* getRVal(); virtual DVarValue* isVar() { return this; } }; // field d-value struct DFieldValue : DVarValue { DFieldValue(Type* t, llvm::Value* llvmValue) : DVarValue(t, llvmValue) {} virtual DFieldValue* isField() { return this; } }; // slice d-value struct DSliceValue : DValue { llvm::Value* len; llvm::Value* ptr; DSliceValue(Type* t, llvm::Value* l, llvm::Value* p) : DValue(t), len(l), ptr(p) {} virtual llvm::Value* getRVal(); virtual DSliceValue* isSlice() { return this; } }; // function d-value struct DFuncValue : DValue { FuncDeclaration* func; llvm::Value* val; llvm::Value* vthis; DFuncValue(FuncDeclaration* fd, llvm::Value* v, llvm::Value* vt = 0); virtual llvm::Value* getRVal(); virtual DFuncValue* isFunc() { return this; } }; #endif // LDC_GEN_DVALUE_H