MCPcopy Create free account
hub / github.com/anjo76/angelscript / AddInterfaceFromMixinToClass

Method AddInterfaceFromMixinToClass

sdk/angelscript/source/as_builder.cpp:3032–3079  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3030}
3031
3032void asCBuilder::AddInterfaceFromMixinToClass(sClassDeclaration *decl, asCScriptNode *errNode, sMixinClass *mixin)
3033{
3034 // Determine what interfaces that the mixin implements
3035 asCScriptNode *node = mixin->node;
3036 asASSERT(node->nodeType == snClass);
3037
3038 // Skip the name of the mixin
3039 node = node->firstChild->next;
3040
3041
3042 while( node && node->nodeType == snIdentifier )
3043 {
3044 bool ok = true;
3045 asSNameSpace *ns;
3046 asCString name;
3047 if( GetNamespaceAndNameFromNode(node, mixin->script, mixin->ns, ns, name) < 0 )
3048 ok = false;
3049 else
3050 {
3051 // Find the object type for the interface
3052 asCObjectType *objType = GetObjectType(name.AddressOf(), ns);
3053
3054 // Check that the object type is an interface
3055 if( objType && objType->IsInterface() )
3056 {
3057 // Only add the interface if the class doesn't already implement it
3058 if( !decl->typeInfo->Implements(objType) )
3059 AddInterfaceToClass(decl, errNode, objType);
3060 }
3061 else
3062 {
3063 WriteError(TXT_MIXIN_CLASS_CANNOT_INHERIT, mixin->script, node);
3064 ok = false;
3065 }
3066 }
3067
3068 if( !ok )
3069 {
3070 // Remove this node so the error isn't reported again
3071 asCScriptNode *delNode = node;
3072 node = node->prev;
3073 delNode->DisconnectParent();
3074 delNode->Destroy(engine);
3075 }
3076
3077 node = node->next;
3078 }
3079}
3080
3081void asCBuilder::AddInterfaceToClass(sClassDeclaration *decl, asCScriptNode *errNode, asCObjectType *intfType)
3082{

Callers

nothing calls this directly

Calls 5

DisconnectParentMethod · 0.80
DestroyMethod · 0.80
AddressOfMethod · 0.45
IsInterfaceMethod · 0.45
ImplementsMethod · 0.45

Tested by

no test coverage detected