orca/ext/wasm3/source/m3_function.h

103 lines
3.2 KiB
C

//
// m3_function.h
//
// Created by Steven Massey on 4/7/21.
// Copyright © 2021 Steven Massey. All rights reserved.
//
#ifndef m3_function_h
#define m3_function_h
#include "m3_core.h"
d_m3BeginExternC
//---------------------------------------------------------------------------------------------------------------------------------
typedef struct M3FuncType
{
struct M3FuncType * next;
u16 numRets;
u16 numArgs;
u8 types []; // returns, then args
}
M3FuncType;
typedef M3FuncType * IM3FuncType;
M3Result AllocFuncType (IM3FuncType * o_functionType, u32 i_numTypes);
bool AreFuncTypesEqual (const IM3FuncType i_typeA, const IM3FuncType i_typeB);
u16 GetFuncTypeNumParams (const IM3FuncType i_funcType);
u8 GetFuncTypeParamType (const IM3FuncType i_funcType, u16 i_index);
u16 GetFuncTypeNumResults (const IM3FuncType i_funcType);
u8 GetFuncTypeResultType (const IM3FuncType i_funcType, u16 i_index);
//---------------------------------------------------------------------------------------------------------------------------------
typedef struct M3Function
{
struct M3Module * module;
M3ImportInfo import;
bytes_t wasm;
bytes_t wasmEnd;
cstr_t names[d_m3MaxDuplicateFunctionImpl];
u16 numNames; // maximum of d_m3MaxDuplicateFunctionImpl
IM3FuncType funcType;
pc_t compiled;
# if (d_m3EnableCodePageRefCounting)
IM3CodePage * codePageRefs; // array of all pages used
u32 numCodePageRefs;
# endif
# if defined (DEBUG)
u32 hits;
u32 index;
# endif
u16 maxStackSlots;
u16 numRetSlots;
u16 numRetAndArgSlots;
u16 numLocals; // not including args
u16 numLocalBytes;
bool ownsWasmCode;
u16 numConstantBytes;
void * constants;
}
M3Function;
void Function_Release (IM3Function i_function);
void Function_FreeCompiledCode (IM3Function i_function);
cstr_t GetFunctionImportModuleName (IM3Function i_function);
cstr_t * GetFunctionNames (IM3Function i_function, u16 * o_numNames);
u16 GetFunctionNumArgs (IM3Function i_function);
u8 GetFunctionArgType (IM3Function i_function, u32 i_index);
u16 GetFunctionNumReturns (IM3Function i_function);
u8 GetFunctionReturnType (const IM3Function i_function, u16 i_index);
u32 GetFunctionNumArgsAndLocals (IM3Function i_function);
cstr_t SPrintFunctionArgList (IM3Function i_function, m3stack_t i_sp);
//---------------------------------------------------------------------------------------------------------------------------------
d_m3EndExternC
#endif /* m3_function_h */