# HG changeset patch # User Christian Kamm # Date 1225026723 -3600 # Node ID 635f91212b78c23b43d31ac61d7136d4c9df4dac # Parent eea28bfa8416e5869fffe3b753587602c4ba949b Change _d_newclass into _d_allocclass. Add initialization to ClassInfo.create. diff -r eea28bfa8416 -r 635f91212b78 gen/classes.cpp --- a/gen/classes.cpp Sun Oct 26 14:11:14 2008 +0100 +++ b/gen/classes.cpp Sun Oct 26 14:12:03 2008 +0100 @@ -812,7 +812,7 @@ // default allocator else { - llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_newclass"); + llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_allocclass"); mem = gIR->CreateCallOrInvoke(fn, tc->sym->ir.irStruct->classInfo, ".newclass_gc_alloc")->get(); mem = DtoBitCast(mem, DtoType(tc), ".newclass_gc"); } diff -r eea28bfa8416 -r 635f91212b78 gen/runtime.cpp --- a/gen/runtime.cpp Sun Oct 26 14:11:14 2008 +0100 +++ b/gen/runtime.cpp Sun Oct 26 14:12:03 2008 +0100 @@ -257,9 +257,9 @@ llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname2, M); } - // Object _d_newclass(ClassInfo ci) + // Object _d_allocclass(ClassInfo ci) { - std::string fname("_d_newclass"); + std::string fname("_d_allocclass"); std::vector types; types.push_back(classInfoTy); const llvm::FunctionType* fty = llvm::FunctionType::get(objectTy, types, false); diff -r eea28bfa8416 -r 635f91212b78 runtime/internal/genobj.d --- a/runtime/internal/genobj.d Sun Oct 26 14:11:14 2008 +0100 +++ b/runtime/internal/genobj.d Sun Oct 26 14:12:03 2008 +0100 @@ -48,7 +48,7 @@ debug(PRINTF) import tango.stdc.stdio; // : printf; extern (C) void onOutOfMemoryError(); - extern (C) Object _d_newclass(ClassInfo ci); + extern (C) Object _d_allocclass(ClassInfo ci); } // NOTE: For some reason, this declaration method doesn't work @@ -188,7 +188,11 @@ { if (flags & 8 && !defaultConstructor) return null; - Object o = _d_newclass(this); + + Object o = _d_allocclass(this); + // initialize it + (cast(byte*) o)[0 .. init.length] = init[]; + if (flags & 8 && defaultConstructor) { defaultConstructor(o); diff -r eea28bfa8416 -r 635f91212b78 runtime/internal/lifetime.d --- a/runtime/internal/lifetime.d Sun Oct 26 14:11:14 2008 +0100 +++ b/runtime/internal/lifetime.d Sun Oct 26 14:12:03 2008 +0100 @@ -88,11 +88,11 @@ /** * */ -extern (C) Object _d_newclass(ClassInfo ci) +extern (C) Object _d_allocclass(ClassInfo ci) { void* p; - debug(PRINTF2) printf("_d_newclass(ci = %p, %s)\n", ci, cast(char *)ci.name.ptr); + debug(PRINTF2) printf("_d_allocclass(ci = %p, %s)\n", ci, cast(char *)ci.name.ptr); /+ if (ci.flags & 1) // if COM object { /* COM objects are not garbage collected, they are reference counted diff -r eea28bfa8416 -r 635f91212b78 runtime/internal/mars.h --- a/runtime/internal/mars.h Sun Oct 26 14:11:14 2008 +0100 +++ b/runtime/internal/mars.h Sun Oct 26 14:12:03 2008 +0100 @@ -94,7 +94,7 @@ int _d_isbaseof(ClassInfo *b, ClassInfo *c); Object *_d_dynamic_cast(Object *o, ClassInfo *ci); -Object * _d_newclass(ClassInfo *ci); +Object * _d_allocclass(ClassInfo *ci); void _d_delclass(Object **p); void _d_OutOfMemory();