103 lines
3.2 KiB
C
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 */
|