本文整理汇总了C++中TypePtr::getCPPInitializer方法的典型用法代码示例。如果您正苦于以下问题:C++ TypePtr::getCPPInitializer方法的具体用法?C++ TypePtr::getCPPInitializer怎么用?C++ TypePtr::getCPPInitializer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TypePtr
的用法示例。
在下文中一共展示了TypePtr::getCPPInitializer方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getCtorAndInitInfo
void ClassVariable::getCtorAndInitInfo(
ExpressionPtr exp,
bool &needsCppCtor,
bool &needsInit,
SimpleVariablePtr &var,
TypePtr &type,
Symbol *&sym,
ExpressionPtr &value) {
ClassScopePtr scope = getClassScope();
bool derivFromRedec = scope->derivesFromRedeclaring() &&
!m_modifiers->isPrivate();
AssignmentExpressionPtr assignment;
bool isAssign = exp->is(Expression::KindOfAssignmentExpression);
if (isAssign) {
assignment = static_pointer_cast<AssignmentExpression>(exp);
var = dynamic_pointer_cast<SimpleVariable>(assignment->getVariable());
ASSERT(var);
value = assignment->getValue();
ASSERT(value);
} else {
var = dynamic_pointer_cast<SimpleVariable>(exp);
ASSERT(var);
}
sym = scope->getVariables()->getSymbol(var->getName());
ASSERT(sym);
type = scope->getVariables()->getFinalType(var->getName());
ASSERT(type);
bool isValueNull = isAssign ? value->isLiteralNull() : false;
bool typeIsInitable = type->is(Type::KindOfVariant) ||
type->getCPPInitializer();
if (!derivFromRedec &&
!sym->isOverride() &&
(isAssign ?
(isValueNull ||
(value->is(Expression::KindOfScalarExpression) &&
type->isPrimitive())) :
typeIsInitable)) {
needsCppCtor = true;
} else if (isAssign || typeIsInitable) {
// if we aren't an assignment and the type is not a variant
// w/ no CPP initializer, then we currently don't bother
// to initialize it in init().
needsInit = true;
}
}
示例2: outputCPPImpl
void ReturnStatement::outputCPPImpl(CodeGenerator &cg, AnalysisResultPtr ar) {
bool braced = false;
FunctionScopePtr func = getFunctionScope();
ClassScopePtr cls = getClassScope();
if (func->isConstructor(cls)) {
cg_indentBegin("{\n"); braced = true;
cg_printf("gasInCtor(oldInCtor);\n");
}
if (m_exp) {
if (m_exp->hasContext(Expression::RefValue)) {
m_exp->setContext(Expression::NoRefWrapper);
}
m_exp->outputCPPBegin(cg, ar);
}
cg_printf("return");
if (m_exp) {
bool close = false;
cg_printf(" ");
if (m_exp->hasContext(Expression::RefValue) && m_exp->isRefable()) {
cg_printf("strongBind(");
close = true;
} else if (checkCopyElision(func, m_exp)) {
cg_printf("wrap_variant(");
close = true;
}
m_exp->outputCPP(cg, ar);
if (close) cg_printf(")");
cg_printf(";\n");
cg.setReferenceTempUsed(false);
m_exp->outputCPPEnd(cg, ar);
} else if (func &&
!(func->inPseudoMain() && !Option::GenerateCPPMain &&
cg.getOutput() != CodeGenerator::SystemCPP)) {
TypePtr type = func->getReturnType();
if (type) {
const char *initializer = type->getCPPInitializer();
cg_printf(" %s", initializer ? initializer : "null");
}
cg_printf(";\n");
}
if (braced) cg_indentEnd("}\n");
}
示例3: inferTypes
void ClassVariable::inferTypes(AnalysisResultPtr ar) {
m_declaration->inferAndCheck(ar, NEW_TYPE(Some), false);
if (m_modifiers->isStatic()) {
ClassScopePtr scope = ar->getClassScope();
for (int i = 0; i < m_declaration->getCount(); i++) {
ExpressionPtr exp = (*m_declaration)[i];
if (exp->is(Expression::KindOfAssignmentExpression)) {
scope->setNeedStaticInitializer();
AssignmentExpressionPtr assignment =
dynamic_pointer_cast<AssignmentExpression>(exp);
// If the class variable's type is Object, we have to
// force it to be a Variant, because we don't include
// the class header files in global_variables.h
SimpleVariablePtr var =
dynamic_pointer_cast<SimpleVariable>(assignment->getVariable());
if (var) {
TypePtr type = scope->getVariables()->getFinalType(var->getName());
if (type->is(Type::KindOfObject)) {
scope->getVariables()->forceVariant(ar, var->getName());
}
}
ExpressionPtr value = assignment->getValue();
if (value->containsDynamicConstant(ar)) {
scope->getVariables()->
setAttribute(VariableTable::ContainsDynamicStatic);
}
} else {
SimpleVariablePtr var = dynamic_pointer_cast<SimpleVariable>(exp);
TypePtr type = scope->getVariables()->getFinalType(var->getName());
// If the class variable's type is Object, we have to
// force it to be a Variant, because we don't include
// the class header files in global_variables.h
if (type->is(Type::KindOfObject)) {
scope->getVariables()->forceVariant(ar, var->getName());
}
const char *initializer = type->getCPPInitializer();
if (initializer) scope->setNeedStaticInitializer();
}
}
}
}
示例4: outputCPPImpl
void ClassVariable::outputCPPImpl(CodeGenerator &cg, AnalysisResultPtr ar) {
// bail out early if possible
switch (cg.getContext()) {
case CodeGenerator::CppConstructor:
case CodeGenerator::CppInitializer:
if (m_modifiers->isStatic()) return;
break;
default:
return;
}
ClassScopePtr scope = getClassScope();
bool derivFromRedec = scope->derivesFromRedeclaring() &&
!m_modifiers->isPrivate();
for (int i = 0; i < m_declaration->getCount(); i++) {
ExpressionPtr exp = (*m_declaration)[i];
SimpleVariablePtr var;
TypePtr type;
Symbol *sym;
ExpressionPtr value;
bool initInCtor = false;
bool initInInit = false;
getCtorAndInitInfo(exp, initInCtor, initInInit, var, type, sym, value);
bool isAssign = exp->is(Expression::KindOfAssignmentExpression);
bool isValueNull = isAssign ? value->isLiteralNull() : false;
switch (cg.getContext()) {
case CodeGenerator::CppConstructor:
if (initInCtor) {
if (!cg.hasInitListFirstElem()) {
cg.setInitListFirstElem();
} else {
cg_printf(", ");
}
if (isAssign) {
if (isValueNull) {
cg_printf("%s%s(Variant::nullInit)",
Option::PropertyPrefix,
var->getName().c_str());
} else {
ASSERT(value);
ASSERT(value->is(Expression::KindOfScalarExpression));
cg_printf("%s%s(",
Option::PropertyPrefix,
var->getName().c_str());
value->outputCPP(cg, ar);
cg_printf(")");
}
} else {
if (type->is(Type::KindOfVariant)) {
cg_printf("%s%s(Variant::nullInit)",
Option::PropertyPrefix,
var->getName().c_str());
} else {
const char *initializer = type->getCPPInitializer();
ASSERT(initializer);
cg_printf("%s%s(%s)",
Option::PropertyPrefix,
var->getName().c_str(),
initializer);
}
}
}
break;
case CodeGenerator::CppInitializer:
if (initInInit) {
if (isAssign) {
value->outputCPPBegin(cg, ar);
if (derivFromRedec) {
cg_printf("%sset(", Option::ObjectPrefix);
cg_printString(var->getName(), ar, shared_from_this());
cg_printf(", ");
value->outputCPP(cg, ar);
cg_printf(")");
} else if (isValueNull) {
cg_printf("setNull(%s%s)", Option::PropertyPrefix,
var->getName().c_str());
} else {
cg_printf("%s%s = ", Option::PropertyPrefix, var->getName().c_str());
value->outputCPP(cg, ar);
}
cg_printf(";\n");
value->outputCPPEnd(cg, ar);
} else {
if (derivFromRedec) {
cg_printf("%sset(", Option::ObjectPrefix);
cg_printString(var->getName(), ar, shared_from_this());
cg_printf(", null_variant);\n");
} else {
if (type->is(Type::KindOfVariant)) {
cg_printf("setNull(%s%s);\n", Option::PropertyPrefix,
var->getName().c_str());
} else {
const char *initializer = type->getCPPInitializer();
ASSERT(initializer);
cg_printf("%s%s = %s;\n", Option::PropertyPrefix,
//.........这里部分代码省略.........
示例5: outputCPPImpl
void ClassVariable::outputCPPImpl(CodeGenerator &cg, AnalysisResultPtr ar) {
ClassScopePtr scope = ar->getClassScope();
bool derivFromRedec = scope->derivesFromRedeclaring() &&
!m_modifiers->isPrivate();
for (int i = 0; i < m_declaration->getCount(); i++) {
ExpressionPtr exp = (*m_declaration)[i];
SimpleVariablePtr var;
TypePtr type;
switch (cg.getContext()) {
case CodeGenerator::CppConstructor:
if (m_modifiers->isStatic()) continue;
if (exp->is(Expression::KindOfAssignmentExpression)) {
AssignmentExpressionPtr assignment =
dynamic_pointer_cast<AssignmentExpression>(exp);
var = dynamic_pointer_cast<SimpleVariable>(assignment->getVariable());
ExpressionPtr value = assignment->getValue();
value->outputCPPBegin(cg, ar);
if (derivFromRedec) {
cg_printf("%sset(\"%s\",-1, ", Option::ObjectPrefix,
var->getName().c_str());
value->outputCPP(cg, ar);
cg_printf(")");
} else {
cg_printf("%s%s = ", Option::PropertyPrefix, var->getName().c_str());
value->outputCPP(cg, ar);
}
cg_printf(";\n");
value->outputCPPEnd(cg, ar);
} else {
var = dynamic_pointer_cast<SimpleVariable>(exp);
if (derivFromRedec) {
cg_printf("%sset(\"%s\",-1, null);\n", Option::ObjectPrefix,
var->getName().c_str());
} else {
type = scope->getVariables()->getFinalType(var->getName());
const char *initializer = type->getCPPInitializer();
if (initializer) {
cg_printf("%s%s = %s;\n", Option::PropertyPrefix,
var->getName().c_str(), initializer);
}
}
}
break;
case CodeGenerator::CppStaticInitializer:
{
if (!m_modifiers->isStatic()) continue;
VariableTablePtr variables = scope->getVariables();
if (exp->is(Expression::KindOfAssignmentExpression)) {
AssignmentExpressionPtr assignment =
dynamic_pointer_cast<AssignmentExpression>(exp);
var = dynamic_pointer_cast<SimpleVariable>
(assignment->getVariable());
ExpressionPtr value = assignment->getValue();
if (value->containsDynamicConstant(ar)) continue;
cg_printf("g->%s%s%s%s = ",
Option::StaticPropertyPrefix, scope->getId(cg).c_str(),
Option::IdPrefix.c_str(), var->getName().c_str());
value->outputCPP(cg, ar);
} else {
var = dynamic_pointer_cast<SimpleVariable>(exp);
type = scope->getVariables()->getFinalType(var->getName());
const char *initializer = type->getCPPInitializer();
if (initializer) {
cg_printf("g->%s%s%s%s = %s",
Option::StaticPropertyPrefix, scope->getId(cg).c_str(),
Option::IdPrefix.c_str(), var->getName().c_str(),
initializer);
}
}
cg_printf(";\n");
}
break;
case CodeGenerator::CppLazyStaticInitializer:
{
if (!m_modifiers->isStatic()) continue;
if (!exp->is(Expression::KindOfAssignmentExpression)) continue;
VariableTablePtr variables = scope->getVariables();
AssignmentExpressionPtr assignment =
dynamic_pointer_cast<AssignmentExpression>(exp);
var = dynamic_pointer_cast<SimpleVariable>(assignment->getVariable());
ExpressionPtr value = assignment->getValue();
if (!value->containsDynamicConstant(ar)) continue;
value->outputCPPBegin(cg, ar);
cg_printf("g->%s%s%s%s = ",
Option::StaticPropertyPrefix, scope->getId(cg).c_str(),
Option::IdPrefix.c_str(), var->getName().c_str());
value->outputCPP(cg, ar);
cg_printf(";\n");
value->outputCPPEnd(cg, ar);
}
break;
default:
//.........这里部分代码省略.........
示例6: outputCPPImpl
void SimpleVariable::outputCPPImpl(CodeGenerator &cg, AnalysisResultPtr ar) {
VariableTablePtr variables = getScope()->getVariables();
if (m_this) {
ASSERT((getContext() & ObjectContext) == 0);
if (hasContext(OprLValue) || hasContext(AssignmentLHS)) {
cg_printf("throw_assign_this()");
return;
}
if (variables->getAttribute(VariableTable::ContainsLDynamicVariable)) {
ASSERT(m_sym);
const string &namePrefix = getNamePrefix();
cg_printf("%s%sthis",
namePrefix.c_str(),
variables->getVariablePrefix(m_sym));
} else if (hasContext(DeepOprLValue) ||
hasContext(DeepAssignmentLHS) ||
hasContext(LValue)) {
// $this[] op= ...; or $this[] = ...
cg_printf("Variant(GET_THIS())");
} else {
ClassScopePtr cls = getOriginalClass();
if (!cls || cls->derivedByDynamic()) {
cg_printf("Object(GET_THIS())");
} else {
cg_printf("GET_THIS_TYPED(%s)", cls->getId().c_str());
}
}
} else if (m_superGlobal) {
const string &name = variables->getGlobalVariableName(ar, m_name);
cg_printf("g->%s", name.c_str());
} else if (m_globals) {
cg_printf("get_global_array_wrapper()");
} else {
ASSERT(m_sym);
bool sw = false;
if (m_sym->isShrinkWrapped() &&
m_context == Declaration) {
ASSERT(!getFunctionScope()->isGenerator());
TypePtr type = m_sym->getFinalType();
type->outputCPPDecl(cg, ar, getScope());
sw = true;
cg_printf(" ");
}
const string &prefix0 = getNamePrefix();
const char *prefix1 = variables->getVariablePrefix(m_sym);
cg_printf("%s%s%s",
prefix0.c_str(),
prefix1,
CodeGenerator::FormatLabel(m_name).c_str());
if (m_originalSym) {
cg.printf(" /* %s */", m_originalSym->getName().c_str());
}
if (sw) {
TypePtr type = m_sym->getFinalType();
const char *initializer = type->getCPPInitializer();
if (initializer) {
cg_printf(" = %s", initializer);
}
}
}
}