Applied fvbommel's patch from #112

Added missing TypeInfoInvariant codegen for D2
This commit is contained in:
Tomas Lindquist Olsen
2008-11-12 02:30:28 +01:00
parent 90474ba1c3
commit c36bd9f4b0
3 changed files with 29 additions and 32 deletions

View File

@@ -1613,6 +1613,11 @@ void OutBuffer::vprintf(const char *format, va_list args)
unsigned psize;
int count;
// On some platforms (i.e. x86_64) va_list is an array and thus passed by
// reference. Copy the input list so we can copy it back before retrying.
va_list orig_args;
va_copy(orig_args, args);
p = buffer;
psize = sizeof(buffer);
for (;;)
@@ -1622,8 +1627,7 @@ void OutBuffer::vprintf(const char *format, va_list args)
if (count != -1)
break;
psize *= 2;
#endif
#if POSIX
#elif POSIX
count = vsnprintf(p,psize,format,args);
if (count == -1)
psize *= 2;
@@ -1632,6 +1636,7 @@ void OutBuffer::vprintf(const char *format, va_list args)
else
break;
#endif
va_copy(args, orig_args);
p = (char *) alloca(psize); // buffer too small, try again with larger size
}
write(p,count);

View File

@@ -1613,6 +1613,11 @@ void OutBuffer::vprintf(const char *format, va_list args)
unsigned psize;
int count;
// On some platforms (i.e. x86_64) va_list is an array and thus passed by
// reference. Copy the input list so we can copy it back before retrying.
va_list orig_args;
va_copy(orig_args, args);
p = buffer;
psize = sizeof(buffer);
for (;;)
@@ -1622,8 +1627,7 @@ void OutBuffer::vprintf(const char *format, va_list args)
if (count != -1)
break;
psize *= 2;
#endif
#if POSIX
#elif POSIX
count = vsnprintf(p,psize,format,args);
if (count == -1)
psize *= 2;
@@ -1632,6 +1636,7 @@ void OutBuffer::vprintf(const char *format, va_list args)
else
break;
#endif
va_copy(args, orig_args);
p = (char *) alloca(psize); // buffer too small, try again with larger size
}
write(p,count);

View File

@@ -1229,45 +1229,32 @@ void TypeInfoConstDeclaration::toDt(dt_t **pdt)
assert(0);
}
// void TypeInfoConstDeclaration::toDt(dt_t **pdt)
// {
// //printf("TypeInfoConstDeclaration::toDt() %s\n", toChars());
// dtxoff(pdt, Type::typeinfoconst->toVtblSymbol(), 0, TYnptr); // vtbl for TypeInfo_Const
// dtdword(pdt, 0); // monitor
// Type *tm = tinfo->mutableOf();
// tm = tm->merge();
// tm->getTypeInfo(NULL);
// dtxoff(pdt, tm->vtinfo->toSymbol(), 0, TYnptr);
// }
///////////////////////////////////////////////////////////
/* ========================================================================= */
void TypeInfoInvariantDeclaration::toDt(dt_t **pdt)
{
assert(0 && "TypeInfoInvariantDeclaration::toDt");
}
void TypeInfoInvariantDeclaration::llvmDeclare()
{
assert(0 && "TypeInfoInvariantDeclaration::llvmDeclare");
Logger::println("TypeInfoInvariantDeclaration::toDt() %s", toChars());
LOG_SCOPE;
LLVM_D_Declare_TypeInfoBase(this, Type::typeinfoinvariant);
}
void TypeInfoInvariantDeclaration::llvmDefine()
{
assert(0 && "TypeInfoInvariantDeclaration::llvmDeclare");
Logger::println("TypeInfoInvariantDeclaration::toDt() %s", toChars());
LOG_SCOPE;
Type *tm = tinfo->mutableOf();
tm = tm->merge();
LLVM_D_Define_TypeInfoBase(tm, this, Type::typeinfoinvariant);
}
// void TypeInfoInvariantDeclaration::toDt(dt_t **pdt)
// {
// //printf("TypeInfoInvariantDeclaration::toDt() %s\n", toChars());
// dtxoff(pdt, Type::typeinfoinvariant->toVtblSymbol(), 0, TYnptr); // vtbl for TypeInfo_Invariant
// dtdword(pdt, 0); // monitor
// Type *tm = tinfo->mutableOf();
// tm = tm->merge();
// tm->getTypeInfo(NULL);
// dtxoff(pdt, tm->vtinfo->toSymbol(), 0, TYnptr);
// }
void TypeInfoInvariantDeclaration::toDt(dt_t **pdt)
{
assert(0);
}
#endif