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

Function CallSystemFunctionNative

sdk/angelscript/source/as_callfunc_e2k.cpp:113–240  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111 int argsCount, void *retPointer, int retSize, int stackSize, bool returnInMemory);
112
113void CallSystemFunctionNative(asCContext *context, asCScriptFunction *descr,
114 void *obj, asDWORD *args, void *retPointer, asQWORD *retQW, void *secondObject)
115{
116 asCScriptEngine *engine = context->m_engine;
117 asSSystemFunctionInterface *sysFunc = descr->sysFuncIntf;
118 const asCDataType &retType = descr->returnType;
119 asFUNCTION_t func = sysFunc->func;
120 int callConv = sysFunc->callConv;
121 E2KArguments parms(args);
122 E2KBuffer buffer;
123 bool retComplex = retType.IsObject() && (retType.GetTypeInfo()->flags & COMPLEX_RETURN_MASK);
124
125 if (sysFunc->hostReturnInMemory && retComplex) {
126 // The return is made in memory.
127 buffer.push((asPWORD) retPointer);
128 }
129
130 if (obj) {
131 asFUNCTION_t *vftable;
132 switch (callConv) {
133 case ICC_VIRTUAL_THISCALL:
134 case ICC_VIRTUAL_THISCALL_RETURNINMEM:
135#ifndef AS_NO_THISCALL_FUNCTOR_METHOD
136 case ICC_VIRTUAL_THISCALL_OBJFIRST:
137 case ICC_VIRTUAL_THISCALL_OBJFIRST_RETURNINMEM:
138 case ICC_VIRTUAL_THISCALL_OBJLAST:
139 case ICC_VIRTUAL_THISCALL_OBJLAST_RETURNINMEM:
140#endif
141 vftable = *((asFUNCTION_t**) obj);
142 func = vftable[FuncPtrToUInt(asFUNCTION_t(func)) >> 3];
143 break;
144 }
145 }
146
147 switch (callConv) {
148 case ICC_CDECL_OBJFIRST:
149 case ICC_THISCALL:
150 case ICC_VIRTUAL_THISCALL:
151 case ICC_CDECL_OBJFIRST_RETURNINMEM:
152 case ICC_THISCALL_RETURNINMEM:
153 case ICC_VIRTUAL_THISCALL_RETURNINMEM:
154#ifndef AS_NO_THISCALL_FUNCTOR_METHOD
155 case ICC_THISCALL_OBJLAST:
156 case ICC_VIRTUAL_THISCALL_OBJLAST:
157 case ICC_THISCALL_OBJLAST_RETURNINMEM:
158 case ICC_VIRTUAL_THISCALL_OBJLAST_RETURNINMEM:
159#endif
160 buffer.push((asPWORD) obj);
161 break;
162#ifndef AS_NO_THISCALL_FUNCTOR_METHOD
163 case ICC_THISCALL_OBJFIRST:
164 case ICC_VIRTUAL_THISCALL_OBJFIRST:
165 case ICC_THISCALL_OBJFIRST_RETURNINMEM:
166 case ICC_VIRTUAL_THISCALL_OBJFIRST_RETURNINMEM:
167 buffer.push((asPWORD) obj);
168 buffer.push((asPWORD) secondObject);
169 break;
170#endif

Callers

nothing calls this directly

Calls 15

FuncPtrToUIntFunction · 0.85
IsObjectMethod · 0.80
GetTypeInfoMethod · 0.80
pushMethod · 0.80
GetTokenTypeMethod · 0.80
takeQWordMethod · 0.80
takeDWordMethod · 0.80
IsPrimitiveMethod · 0.80
IsObjectHandleMethod · 0.80
takeMethod · 0.80
GetSizeOnStackDWordsMethod · 0.80
GetSizeInMemoryBytesMethod · 0.80

Tested by

no test coverage detected