92 lines
2.6 KiB
Go
92 lines
2.6 KiB
Go
package wazevoapi
|
|
|
|
// ExitCode is an exit code of an execution of a function.
|
|
type ExitCode uint32
|
|
|
|
const (
|
|
ExitCodeOK ExitCode = iota
|
|
ExitCodeGrowStack
|
|
ExitCodeGrowMemory
|
|
ExitCodeUnreachable
|
|
ExitCodeMemoryOutOfBounds
|
|
// ExitCodeCallGoModuleFunction is an exit code for a call to an api.GoModuleFunction.
|
|
ExitCodeCallGoModuleFunction
|
|
// ExitCodeCallGoFunction is an exit code for a call to an api.GoFunction.
|
|
ExitCodeCallGoFunction
|
|
ExitCodeTableOutOfBounds
|
|
ExitCodeIndirectCallNullPointer
|
|
ExitCodeIndirectCallTypeMismatch
|
|
ExitCodeIntegerDivisionByZero
|
|
ExitCodeIntegerOverflow
|
|
ExitCodeInvalidConversionToInteger
|
|
ExitCodeCheckModuleExitCode
|
|
ExitCodeCallListenerBefore
|
|
ExitCodeCallListenerAfter
|
|
ExitCodeCallGoModuleFunctionWithListener
|
|
ExitCodeCallGoFunctionWithListener
|
|
exitCodeMax
|
|
)
|
|
|
|
const ExitCodeMask = 0xff
|
|
|
|
// String implements fmt.Stringer.
|
|
func (e ExitCode) String() string {
|
|
switch e {
|
|
case ExitCodeOK:
|
|
return "ok"
|
|
case ExitCodeGrowStack:
|
|
return "grow_stack"
|
|
case ExitCodeCallGoModuleFunction:
|
|
return "call_go_module_function"
|
|
case ExitCodeCallGoFunction:
|
|
return "call_go_function"
|
|
case ExitCodeUnreachable:
|
|
return "unreachable"
|
|
case ExitCodeMemoryOutOfBounds:
|
|
return "memory_out_of_bounds"
|
|
case ExitCodeTableOutOfBounds:
|
|
return "table_out_of_bounds"
|
|
case ExitCodeIndirectCallNullPointer:
|
|
return "indirect_call_null_pointer"
|
|
case ExitCodeIndirectCallTypeMismatch:
|
|
return "indirect_call_type_mismatch"
|
|
case ExitCodeIntegerDivisionByZero:
|
|
return "integer_division_by_zero"
|
|
case ExitCodeIntegerOverflow:
|
|
return "integer_overflow"
|
|
case ExitCodeInvalidConversionToInteger:
|
|
return "invalid_conversion_to_integer"
|
|
case ExitCodeCheckModuleExitCode:
|
|
return "check_module_exit_code"
|
|
case ExitCodeCallListenerBefore:
|
|
return "call_listener_before"
|
|
case ExitCodeCallListenerAfter:
|
|
return "call_listener_after"
|
|
case ExitCodeCallGoModuleFunctionWithListener:
|
|
return "call_go_module_function_with_listener"
|
|
case ExitCodeCallGoFunctionWithListener:
|
|
return "call_go_function_with_listener"
|
|
case ExitCodeGrowMemory:
|
|
return "grow_memory"
|
|
}
|
|
panic("TODO")
|
|
}
|
|
|
|
func ExitCodeCallGoModuleFunctionWithIndex(index int, withListener bool) ExitCode {
|
|
if withListener {
|
|
return ExitCodeCallGoModuleFunctionWithListener | ExitCode(index<<8)
|
|
}
|
|
return ExitCodeCallGoModuleFunction | ExitCode(index<<8)
|
|
}
|
|
|
|
func ExitCodeCallGoFunctionWithIndex(index int, withListener bool) ExitCode {
|
|
if withListener {
|
|
return ExitCodeCallGoFunctionWithListener | ExitCode(index<<8)
|
|
}
|
|
return ExitCodeCallGoFunction | ExitCode(index<<8)
|
|
}
|
|
|
|
func GoFunctionIndexFromExitCode(exitCode ExitCode) int {
|
|
return int(exitCode >> 8)
|
|
}
|