| 111 | int argsCount, void *retPointer, int retSize, int stackSize, bool returnInMemory); |
| 112 | |
| 113 | void 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 |
nothing calls this directly
no test coverage detected