本文整理汇总了C++中Toplevel::typeErrorClass方法的典型用法代码示例。如果您正苦于以下问题:C++ Toplevel::typeErrorClass方法的具体用法?C++ Toplevel::typeErrorClass怎么用?C++ Toplevel::typeErrorClass使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Toplevel
的用法示例。
在下文中一共展示了Toplevel::typeErrorClass方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: applyTypeArgs
Atom VectorClass::applyTypeArgs(int argc, Atom* argv)
{
Toplevel* toplevel = this->toplevel();
//Vector only takes 1 type argument
AvmAssert(argc==1);
if (argc != 1)
{
toplevel->typeErrorClass()->throwError(kWrongTypeArgCountError, traits()->formatClassName(), core()->toErrorString(1), core()->toErrorString(argc));
}
Atom const typeAtom = argv[0];
ClassClosure* parameterizedType;
if (ISNULL(typeAtom))
{
parameterizedType = toplevel->objectVectorClass;
}
else
{
if (atomKind(typeAtom) != kObjectType)
toplevel->throwVerifyError(kCorruptABCError);
ScriptObject* typeObj = AvmCore::atomToScriptObject(typeAtom);
if (typeObj == toplevel->intClass)
{
parameterizedType = toplevel->intVectorClass;
}
else if (typeObj == toplevel->uintClass)
{
parameterizedType = toplevel->uintVectorClass;
}
else if (typeObj == toplevel->numberClass)
{
parameterizedType = toplevel->doubleVectorClass;
}
else
{
// if we have an object, we must have an itraits (otherwise the typearg is not a Class)
Traits* typeTraits = typeObj->vtable->traits->itraits;
if (!typeTraits)
toplevel->throwVerifyError(kCorruptABCError);
ClassClosure* typeClass = (ClassClosure*)typeObj;
Domain* typeDomain = typeObj->traits()->pool->domain;
if ((parameterizedType = typeDomain->getParameterizedType(typeClass)) == NULL)
{
Stringp fullname = VectorClass::makeVectorClassName(core(), typeTraits);
VTable* vt = this->vtable->newParameterizedVTable(typeTraits, fullname);
ObjectVectorClass* parameterizedVector = new (vt->gc(), vt->getExtraSize()) ObjectVectorClass(vt);
parameterizedVector->index_type = typeClass;
parameterizedVector->setDelegate(toplevel->classClass->prototypePtr());
// Is this right? Should each instantiation get its own prototype?
parameterizedVector->setPrototypePtr(toplevel->objectVectorClass->prototypePtr());
typeDomain->addParameterizedType(typeClass, parameterizedVector);
parameterizedType = parameterizedVector;
}
}
}
return parameterizedType->atom();
}