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

Function CallSystemFunctionNative

sdk/angelscript/source/as_callfunc_mips.cpp:86–257  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

84asQWORD GetReturnedDouble();
85
86asQWORD CallSystemFunctionNative(asCContext *context, asCScriptFunction *descr, void *obj, asDWORD *args, void *retPointer, asQWORD &/*retQW2*/, void *secondObject)
87{
88 asCScriptEngine *engine = context->m_engine;
89 asSSystemFunctionInterface *sysFunc = descr->sysFuncIntf;
90 int callConv = sysFunc->callConv;
91
92 asQWORD retQW = 0;
93
94 void *func = (void*)sysFunc->func;
95 void **vftable;
96
97 asDWORD argBuffer[128]; // Ought to be big enough
98 asASSERT( sysFunc->paramSize < 128 );
99
100 asDWORD argOffset = 0;
101
102 SFloatRegs floatRegs;
103 asDWORD floatOffset = 0;
104
105 // If the application function returns the value in memory then
106 // the first argument must be the pointer to that memory
107 if( sysFunc->hostReturnInMemory )
108 {
109 asASSERT( retPointer );
110 argBuffer[argOffset++] = (asPWORD)retPointer;
111 }
112
113 if( callConv == ICC_CDECL_OBJFIRST || callConv == ICC_CDECL_OBJFIRST_RETURNINMEM ||
114 callConv == ICC_THISCALL || callConv == ICC_THISCALL_RETURNINMEM ||
115 callConv == ICC_VIRTUAL_THISCALL || callConv == ICC_VIRTUAL_THISCALL_RETURNINMEM ||
116 callConv == ICC_THISCALL_OBJFIRST || callConv == ICC_VIRTUAL_THISCALL_OBJFIRST ||
117 callConv == ICC_THISCALL_OBJFIRST_RETURNINMEM || callConv == ICC_VIRTUAL_THISCALL_OBJFIRST_RETURNINMEM ||
118 callConv == ICC_THISCALL_OBJLAST || callConv == ICC_VIRTUAL_THISCALL_OBJLAST ||
119 callConv == ICC_THISCALL_OBJLAST_RETURNINMEM || callConv == ICC_VIRTUAL_THISCALL_OBJLAST_RETURNINMEM )
120 {
121 // Add the object pointer as the first argument
122 argBuffer[argOffset++] = (asPWORD)obj;
123 }
124
125 if( callConv == ICC_THISCALL_OBJFIRST || callConv == ICC_VIRTUAL_THISCALL_OBJFIRST ||
126 callConv == ICC_THISCALL_OBJFIRST_RETURNINMEM || callConv == ICC_VIRTUAL_THISCALL_OBJFIRST_RETURNINMEM )
127 {
128 // Add the second object pointer
129 argBuffer[argOffset++] = (asPWORD)secondObject;
130 }
131
132 int spos = 0;
133 for( asUINT n = 0; n < descr->parameterTypes.GetLength(); n++ )
134 {
135 asCDataType &paramType = descr->parameterTypes[n];
136 if( paramType.IsObject() && !paramType.IsObjectHandle() && !paramType.IsReference() )
137 {
138 if( paramType.GetTypeInfo()->flags & COMPLEX_MASK )
139 {
140 // The object is passed by reference
141 argBuffer[argOffset++] = args[spos++];
142 }
143 else

Callers

nothing calls this directly

Calls 15

IsObjectMethod · 0.80
IsObjectHandleMethod · 0.80
GetTypeInfoMethod · 0.80
GetSizeInMemoryBytesMethod · 0.80
CallFreeMethod · 0.80
GetSizeInMemoryDWordsMethod · 0.80
GetTokenTypeMethod · 0.80
GetSizeOnStackDWordsMethod · 0.80
SetInternalExceptionMethod · 0.80
IsFloatTypeMethod · 0.80
GetReturnedFloatFunction · 0.70
GetReturnedDoubleFunction · 0.70

Tested by

no test coverage detected