mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
[svn r26] * Fixed templates defining a constant value
* Fixed problem with slice-slice copy assignment if a side was a temporary slice
This commit is contained in:
16
gen/arrays.c
16
gen/arrays.c
@@ -308,7 +308,21 @@ static llvm::Value* get_slice_ptr(elem* e, llvm::Value*& sz)
|
||||
assert(e->mem);
|
||||
const llvm::Type* t = e->mem->getType()->getContainedType(0);
|
||||
llvm::Value* ret = 0;
|
||||
if (llvm::isa<llvm::ArrayType>(t)) {
|
||||
if (e->arg != 0) {
|
||||
// this means it's a real slice
|
||||
ret = e->mem;
|
||||
|
||||
size_t elembsz = gTargetData->getTypeSize(ret->getType());
|
||||
llvm::ConstantInt* elemsz = llvm::ConstantInt::get(LLVM_DtoSize_t(), elembsz, false);
|
||||
|
||||
if (llvm::isa<llvm::ConstantInt>(e->arg)) {
|
||||
sz = llvm::ConstantExpr::getMul(elemsz, llvm::cast<llvm::Constant>(e->arg));
|
||||
}
|
||||
else {
|
||||
sz = llvm::BinaryOperator::createMul(elemsz,e->arg,"tmp",gIR->scopebb());
|
||||
}
|
||||
}
|
||||
else if (llvm::isa<llvm::ArrayType>(t)) {
|
||||
ret = LLVM_DtoGEPi(e->mem, 0, 0, "tmp", gIR->scopebb());
|
||||
|
||||
size_t elembsz = gTargetData->getTypeSize(ret->getType()->getContainedType(0));
|
||||
|
||||
@@ -497,7 +497,7 @@ void VarDeclaration::toObjFile()
|
||||
}
|
||||
|
||||
// global variable or magic
|
||||
if (!parent || parent->isModule())
|
||||
if (isDataseg())
|
||||
{
|
||||
bool _isconst = isConst();
|
||||
if (!_isconst)
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
module std.stdio;
|
||||
|
||||
import std.traits;
|
||||
|
||||
void _writef(T)(T t) {
|
||||
static if(is(T: Object)) _writef(t.toString()); else
|
||||
static if(is(T==char)) _writef("%c", t); else
|
||||
static if(is(T==char)) printf("%c", t); else
|
||||
static if(is(T: char[])) printf("%.*s", t.length, t.ptr); else
|
||||
static if(isArray!(T)) {
|
||||
_writef('[');
|
||||
if (t.length) _writef(t[0]);
|
||||
for (int i=1; i<elem.length; ++i) { _writef(','); _writef(t[i]); }
|
||||
for (int i=1; i<t.lengthi; ++i) { _writef(','); _writef(t[i]); }
|
||||
_writef(']');
|
||||
} else
|
||||
static if(is(T==int)) printf("%i", t); else
|
||||
|
||||
12
test/globals2.d
Normal file
12
test/globals2.d
Normal file
@@ -0,0 +1,12 @@
|
||||
module globals2;
|
||||
|
||||
template Bool(bool b)
|
||||
{
|
||||
const bool Bool = b;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
assert(Bool!(true));
|
||||
assert(!Bool!(false));
|
||||
}
|
||||
8
test/stdiotest.d
Normal file
8
test/stdiotest.d
Normal file
@@ -0,0 +1,8 @@
|
||||
module stdiotest;
|
||||
|
||||
import std.stdio;
|
||||
|
||||
void main()
|
||||
{
|
||||
writefln("hello world",42,'x');
|
||||
}
|
||||
Reference in New Issue
Block a user