本文整理汇总了C++中EnumDeclaration::getDefaultValue方法的典型用法代码示例。如果您正苦于以下问题:C++ EnumDeclaration::getDefaultValue方法的具体用法?C++ EnumDeclaration::getDefaultValue怎么用?C++ EnumDeclaration::getDefaultValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EnumDeclaration
的用法示例。
在下文中一共展示了EnumDeclaration::getDefaultValue方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: visit
void visit(TypeInfoEnumDeclaration *decl) override {
IF_LOG Logger::println("TypeInfoEnumDeclaration::llvmDefine() %s",
decl->toChars());
LOG_SCOPE;
RTTIBuilder b(getEnumTypeInfoType());
assert(decl->tinfo->ty == Tenum);
TypeEnum *tc = static_cast<TypeEnum *>(decl->tinfo);
EnumDeclaration *sd = tc->sym;
// TypeInfo base
b.push_typeinfo(sd->memtype);
// char[] name
b.push_string(sd->toPrettyChars());
// void[] init
// the array is null if the default initializer is zero
if (!sd->members || decl->tinfo->isZeroInit(decl->loc)) {
b.push_null_void_array();
}
// otherwise emit a void[] with the default initializer
else {
Expression *defaultval = sd->getDefaultValue(decl->loc);
LLConstant *c = toConstElem(defaultval, gIR);
b.push_void_array(c, sd->memtype, sd);
}
// finish
b.finalize(gvar);
}
示例2: visit
void visit(TypeInfoEnumDeclaration *decl) override {
IF_LOG Logger::println("TypeInfoEnumDeclaration::llvmDefine() %s",
decl->toChars());
LOG_SCOPE;
RTTIBuilder b(Type::typeinfoenum);
assert(decl->tinfo->ty == Tenum);
TypeEnum *tc = static_cast<TypeEnum *>(decl->tinfo);
EnumDeclaration *sd = tc->sym;
// TypeInfo base
b.push_typeinfo(sd->memtype);
// char[] name
b.push_string(sd->toPrettyChars());
// void[] init
// emit void[] with the default initialier, the array is null if the default
// initializer is zero
if (!sd->members || decl->tinfo->isZeroInit(decl->loc)) {
b.push_null_void_array();
}
// otherwise emit a void[] with the default initializer
else {
Type *memtype = sd->memtype;
LLType *memty = DtoType(memtype);
LLConstant *C;
Expression *defaultval = sd->getDefaultValue(decl->loc);
if (memtype->isintegral()) {
C = LLConstantInt::get(memty, defaultval->toInteger(),
!isLLVMUnsigned(memtype));
} else if (memtype->isString()) {
C = DtoConstString(
static_cast<const char *>(defaultval->toStringExp()->string));
} else if (memtype->isfloating()) {
C = LLConstantFP::get(memty, defaultval->toReal());
} else {
llvm_unreachable("Unsupported type");
}
b.push_void_array(C, memtype, sd);
}
// finish
b.finalize(getIrGlobal(decl));
}