mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-04 09:00:33 +03:00
parent
97819eb7ff
commit
c897015f62
3 changed files with 9 additions and 6 deletions
|
@ -363,15 +363,15 @@ static void DtoSetArray(DValue* array, LLValue* dim, LLValue* ptr)
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit)
|
LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit, Type* targetType)
|
||||||
{
|
{
|
||||||
IF_LOG Logger::println("DtoConstArrayInitializer: %s | %s", arrinit->toChars(), arrinit->type->toChars());
|
IF_LOG Logger::println("DtoConstArrayInitializer: %s | %s", arrinit->toChars(), targetType->toChars());
|
||||||
LOG_SCOPE;
|
LOG_SCOPE;
|
||||||
|
|
||||||
assert(arrinit->value.dim == arrinit->index.dim);
|
assert(arrinit->value.dim == arrinit->index.dim);
|
||||||
|
|
||||||
// get base array type
|
// get base array type
|
||||||
Type* arrty = arrinit->type->toBasetype();
|
Type* arrty = targetType->toBasetype();
|
||||||
size_t arrlen = arrinit->dim;
|
size_t arrlen = arrinit->dim;
|
||||||
|
|
||||||
// for statis arrays, dmd does not include any trailing default
|
// for statis arrays, dmd does not include any trailing default
|
||||||
|
|
|
@ -30,8 +30,11 @@ llvm::StructType* DtoArrayType(Type* arrayTy);
|
||||||
llvm::StructType* DtoArrayType(LLType* elemTy);
|
llvm::StructType* DtoArrayType(LLType* elemTy);
|
||||||
llvm::ArrayType* DtoStaticArrayType(Type* sarrayTy);
|
llvm::ArrayType* DtoStaticArrayType(Type* sarrayTy);
|
||||||
|
|
||||||
LLType* DtoConstArrayInitializerType(ArrayInitializer* arrinit);
|
/// Creates a (global) constant with the element data for the given arary
|
||||||
LLConstant* DtoConstArrayInitializer(ArrayInitializer* si);
|
/// initializer. targetType is explicit because the frontend sometimes emits
|
||||||
|
/// ArrayInitializers for vectors typed as static arrays.
|
||||||
|
LLConstant* DtoConstArrayInitializer(ArrayInitializer* si, Type* targetType);
|
||||||
|
|
||||||
LLConstant* DtoConstSlice(LLConstant* dim, LLConstant* ptr, Type *type = 0);
|
LLConstant* DtoConstSlice(LLConstant* dim, LLConstant* ptr, Type *type = 0);
|
||||||
|
|
||||||
/// Returns whether the array literal can be evaluated to a (LLVM) constant.
|
/// Returns whether the array literal can be evaluated to a (LLVM) constant.
|
||||||
|
|
|
@ -1178,7 +1178,7 @@ LLConstant* DtoConstInitializer(Loc& loc, Type* type, Initializer* init)
|
||||||
else if (ArrayInitializer* ai = init->isArrayInitializer())
|
else if (ArrayInitializer* ai = init->isArrayInitializer())
|
||||||
{
|
{
|
||||||
Logger::println("const array initializer");
|
Logger::println("const array initializer");
|
||||||
_init = DtoConstArrayInitializer(ai);
|
_init = DtoConstArrayInitializer(ai, type);
|
||||||
}
|
}
|
||||||
else if (init->isVoidInitializer())
|
else if (init->isVoidInitializer())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue