本文整理汇总了C++中MethodInfo::getDeclaringType方法的典型用法代码示例。如果您正苦于以下问题:C++ MethodInfo::getDeclaringType方法的具体用法?C++ MethodInfo::getDeclaringType怎么用?C++ MethodInfo::getDeclaringType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MethodInfo
的用法示例。
在下文中一共展示了MethodInfo::getDeclaringType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lmAssert
Expression *TypeCompiler::visit(SuperExpression *expression)
{
lmAssert(currentMethod, "super outside of method");
Type *type = currentMethod->getDeclaringType();
Type *baseType = type->getBaseType();
//FIXME: issue a warning
if (!baseType)
{
return expression;
}
FuncState *fs = cs->fs;
if (currentMethod->isConstructor())
{
ConstructorInfo *base = baseType->getConstructor();
//FIXME: warn if no base constructor
if (!base)
{
return expression;
}
// load up base class
ExpDesc eclass;
BC::singleVar(cs, &eclass, baseType->getFullName().c_str());
// index with the __ls_constructor
BC::expToNextReg(fs, &eclass);
ExpDesc fname;
BC::expString(cs, &fname, "__ls_constructor");
BC::expToNextReg(fs, &fname);
BC::expToVal(fs, &fname);
BC::indexed(fs, &eclass, &fname);
// call the LSMethod
generateCall(&eclass, &expression->arguments);
}
else
{
utString name = currentMethod->getName();
if (expression->method)
{
name = expression->method->string;
}
MemberInfo *mi = baseType->findMember(name.c_str());
//FIXME: warn
if (!mi)
{
return expression;
}
lmAssert(mi->isMethod(), "Non-method in super call");
MethodInfo *methodInfo = (MethodInfo *)mi;
// load up declaring class
ExpDesc eclass;
BC::singleVar(cs, &eclass,
methodInfo->getDeclaringType()->getFullName().c_str());
BC::expToNextReg(fs, &eclass);
ExpDesc fname;
BC::expString(cs, &fname, name.c_str());
BC::expToNextReg(fs, &fname);
BC::expToVal(fs, &fname);
BC::indexed(fs, &eclass, &fname);
// call the LSMethod
generateCall(&eclass, &expression->arguments);
expression->e = eclass;
}
return expression;
}