diff --git a/cx/opcodes_base.go b/cx/opcodes_base.go index f997f9af2..eea959221 100644 --- a/cx/opcodes_base.go +++ b/cx/opcodes_base.go @@ -151,81 +151,80 @@ func init() { []*CXArgument{newOpPar(TYPE_STR, false)}, []*CXArgument{}) - // exec - handleOpcode := func(opCode int) opcodeHandler { - switch opCode { - // time - case OP_TIME_SLEEP: - return op_time_Sleep - case OP_TIME_UNIX: - case OP_TIME_UNIX_MILLI: - return op_time_UnixMilli - case OP_TIME_UNIX_NANO: - return op_time_UnixNano - - // http - // case OP_HTTP_GET: - // return op_http_get - - // os - case OP_OS_GET_WORKING_DIRECTORY: - return op_os_GetWorkingDirectory - case OP_OS_OPEN: - return op_os_Open - case OP_OS_CLOSE: - return op_os_Close - case OP_OS_SEEK: - return op_os_Seek - case OP_OS_READ_F32: - return op_os_ReadF32 - case OP_OS_READ_UI32: - return op_os_ReadUI32 - case OP_OS_READ_UI16: - return op_os_ReadUI16 - case OP_OS_READ_F32_SLICE: - return op_os_ReadF32Slice - case OP_OS_READ_UI32_SLICE: - return op_os_ReadUI32Slice - case OP_OS_READ_UI16_SLICE: - return op_os_ReadUI16Slice - case OP_OS_READ_ALL_TEXT: - return op_os_ReadAllText - case OP_OS_RUN: - return op_os_Run - case OP_OS_EXIT: - return op_os_Exit - - // json - case OP_JSON_OPEN: - return opJSONOpen - case OP_JSON_CLOSE: - return opJSONClose - case OP_JSON_TOKEN_MORE: - return opJSONTokenMore - case OP_JSON_TOKEN_NEXT: - return opJSONTokenNext - case OP_JSON_TOKEN_TYPE: - return opJSONTokenType - case OP_JSON_TOKEN_DELIM: - return opJSONTokenDelim - case OP_JSON_TOKEN_BOOL: - return opJSONTokenBool - case OP_JSON_TOKEN_F64: - return opJSONTokenF64 - case OP_JSON_TOKEN_I64: - return opJSONTokenI64 - case OP_JSON_TOKEN_STR: - return opJSONTokenStr - - // profile - case OP_START_CPU_PROFILE: - return opStartProfile - case OP_STOP_CPU_PROFILE: - return opStopProfile - } - - return nil + opcodeHandlerFinders = append(opcodeHandlerFinders, handleBaseOpcode) +} + +func handleBaseOpcode(opCode int) opcodeHandler { + switch opCode { + // time + case OP_TIME_SLEEP: + return op_time_Sleep + case OP_TIME_UNIX: + case OP_TIME_UNIX_MILLI: + return op_time_UnixMilli + case OP_TIME_UNIX_NANO: + return op_time_UnixNano + + // http + // case OP_HTTP_GET: + // return op_http_get + + // os + case OP_OS_GET_WORKING_DIRECTORY: + return op_os_GetWorkingDirectory + case OP_OS_OPEN: + return op_os_Open + case OP_OS_CLOSE: + return op_os_Close + case OP_OS_SEEK: + return op_os_Seek + case OP_OS_READ_F32: + return op_os_ReadF32 + case OP_OS_READ_UI32: + return op_os_ReadUI32 + case OP_OS_READ_UI16: + return op_os_ReadUI16 + case OP_OS_READ_F32_SLICE: + return op_os_ReadF32Slice + case OP_OS_READ_UI32_SLICE: + return op_os_ReadUI32Slice + case OP_OS_READ_UI16_SLICE: + return op_os_ReadUI16Slice + case OP_OS_READ_ALL_TEXT: + return op_os_ReadAllText + case OP_OS_RUN: + return op_os_Run + case OP_OS_EXIT: + return op_os_Exit + + // json + case OP_JSON_OPEN: + return opJSONOpen + case OP_JSON_CLOSE: + return opJSONClose + case OP_JSON_TOKEN_MORE: + return opJSONTokenMore + case OP_JSON_TOKEN_NEXT: + return opJSONTokenNext + case OP_JSON_TOKEN_TYPE: + return opJSONTokenType + case OP_JSON_TOKEN_DELIM: + return opJSONTokenDelim + case OP_JSON_TOKEN_BOOL: + return opJSONTokenBool + case OP_JSON_TOKEN_F64: + return opJSONTokenF64 + case OP_JSON_TOKEN_I64: + return opJSONTokenI64 + case OP_JSON_TOKEN_STR: + return opJSONTokenStr + + // profile + case OP_START_CPU_PROFILE: + return opStartProfile + case OP_STOP_CPU_PROFILE: + return opStopProfile } - opcodeHandlerFinders = append(opcodeHandlerFinders, handleOpcode) + return nil } diff --git a/cx/opcodes_core.go b/cx/opcodes_core.go index 02c6f1487..1911c31c6 100644 --- a/cx/opcodes_core.go +++ b/cx/opcodes_core.go @@ -1,5 +1,10 @@ package cxcore +//import ( +//"fmt" +//"sort" +//) + // CorePackages ... var CorePackages = []string{ // temporary solution until we can implement these packages in pure CX I guess @@ -503,7 +508,8 @@ func execNative(prgrm *CXProgram) { } if handler == nil { - panic("invalid bare opcode") + //dumpOpCodes(opCode) + panic("invalid core opcode") } handler(prgrm) @@ -517,8 +523,8 @@ func AddOpCode(code int, name string, inputs []*CXArgument, outputs []*CXArgumen } /* -// debug helper -func DumpOpCodes(opCode int) { +// Debug helper function used to find opcodes when they are not registered +func dumpOpCodes(opCode int) { var keys []int for k := range OpNames { keys = append(keys, k) @@ -1759,846 +1765,845 @@ func init() { []*CXArgument{newOpPar(TYPE_AFF, false), newOpPar(TYPE_I32, false), newOpPar(TYPE_AFF, false)}, []*CXArgument{}) - // exec - handleOpcode := func(opCode int) opcodeHandler { - switch opCode { - case OP_IDENTITY: - return opIdentity - case OP_JMP: - return opJmp - case OP_DEBUG: - return func(prgrm *CXProgram) { - prgrm.PrintStack() - } + opcodeHandlerFinders = append(opcodeHandlerFinders, handleCoreOpcode) +} - case OP_SERIALIZE: - return opSerialize - case OP_DESERIALIZE: - return opDeserialize - - case OP_UND_EQUAL: - return opEqual - case OP_UND_UNEQUAL: - return opUnequal - case OP_UND_BITAND: - return opBitand - case OP_UND_BITXOR: - return opBitxor - case OP_UND_BITOR: - return opBitor - case OP_UND_BITCLEAR: - return opBitclear - case OP_UND_MUL: - return opMul - case OP_UND_DIV: - return opDiv - case OP_UND_MOD: - return opMod - case OP_UND_ADD: - return opAdd - case OP_UND_SUB: - return opSub - case OP_UND_NEG: - return opNeg - case OP_UND_BITSHL: - return opBitshl - case OP_UND_BITSHR: - return opBitshr - case OP_UND_LT: - return opLt - case OP_UND_GT: - return opGt - case OP_UND_LTEQ: - return opLteq - case OP_UND_GTEQ: - return opGteq - case OP_UND_LEN: - return opLen - case OP_UND_PRINTF: - return opPrintf - case OP_UND_SPRINTF: - return opSprintf - case OP_UND_READ: - return opRead - - case OP_BOOL_PRINT: - return opBoolPrint - case OP_BOOL_EQUAL: - return opBoolEqual - case OP_BOOL_UNEQUAL: - return opBoolUnequal - case OP_BOOL_NOT: - return opBoolNot - case OP_BOOL_OR: - return opBoolOr - case OP_BOOL_AND: - return opBoolAnd - - case OP_I8_STR: - return opI8ToStr - case OP_I8_I16: - return opI8ToI16 - case OP_I8_I32: - return opI8ToI32 - case OP_I8_I64: - return opI8ToI64 - case OP_I8_UI8: - return opI8ToUI8 - case OP_I8_UI16: - return opI8ToUI16 - case OP_I8_UI32: - return opI8ToUI32 - case OP_I8_UI64: - return opI8ToUI64 - case OP_I8_F32: - return opI8ToF32 - case OP_I8_F64: - return opI8ToF64 - case OP_I8_PRINT: - return opI8Print - case OP_I8_ADD: - return opI8Add - case OP_I8_SUB: - return opI8Sub - case OP_I8_NEG: - return opI8Neg - case OP_I8_MUL: - return opI8Mul - case OP_I8_DIV: - return opI8Div - case OP_I8_MOD: - return opI8Mod - case OP_I8_ABS: - return opI8Abs - case OP_I8_GT: - return opI8Gt - case OP_I8_GTEQ: - return opI8Gteq - case OP_I8_LT: - return opI8Lt - case OP_I8_LTEQ: - return opI8Lteq - case OP_I8_EQ: - return opI8Eq - case OP_I8_UNEQ: - return opI8Uneq - case OP_I8_BITAND: - return opI8Bitand - case OP_I8_BITOR: - return opI8Bitor - case OP_I8_BITXOR: - return opI8Bitxor - case OP_I8_BITCLEAR: - return opI8Bitclear - case OP_I8_BITSHL: - return opI8Bitshl - case OP_I8_BITSHR: - return opI8Bitshr - case OP_I8_MAX: - return opI8Max - case OP_I8_MIN: - return opI8Min - case OP_I8_RAND: - return opI8Rand - - case OP_I16_STR: - return opI16ToStr - case OP_I16_I8: - return opI16ToI8 - case OP_I16_I32: - return opI16ToI32 - case OP_I16_I64: - return opI16ToI64 - case OP_I16_UI8: - return opI16ToUI8 - case OP_I16_UI16: - return opI16ToUI16 - case OP_I16_UI32: - return opI16ToUI32 - case OP_I16_UI64: - return opI16ToUI64 - case OP_I16_F32: - return opI16ToF32 - case OP_I16_F64: - return opI16ToF64 - case OP_I16_PRINT: - return opI16Print - case OP_I16_ADD: - return opI16Add - case OP_I16_SUB: - return opI16Sub - case OP_I16_NEG: - return opI16Neg - case OP_I16_MUL: - return opI16Mul - case OP_I16_DIV: - return opI16Div - case OP_I16_MOD: - return opI16Mod - case OP_I16_ABS: - return opI16Abs - case OP_I16_GT: - return opI16Gt - case OP_I16_GTEQ: - return opI16Gteq - case OP_I16_LT: - return opI16Lt - case OP_I16_LTEQ: - return opI16Lteq - case OP_I16_EQ: - return opI16Eq - case OP_I16_UNEQ: - return opI16Uneq - case OP_I16_BITAND: - return opI16Bitand - case OP_I16_BITOR: - return opI16Bitor - case OP_I16_BITXOR: - return opI16Bitxor - case OP_I16_BITCLEAR: - return opI16Bitclear - case OP_I16_BITSHL: - return opI16Bitshl - case OP_I16_BITSHR: - return opI16Bitshr - case OP_I16_MAX: - return opI16Max - case OP_I16_MIN: - return opI16Min - case OP_I16_RAND: - return opI16Rand - - case OP_I32_STR: - return opI32ToStr - case OP_I32_I8: - return opI32ToI8 - case OP_I32_I16: - return opI32ToI16 - case OP_I32_I64: - return opI32ToI64 - case OP_I32_UI8: - return opI32ToUI8 - case OP_I32_UI16: - return opI32ToUI16 - case OP_I32_UI32: - return opI32ToUI32 - case OP_I32_UI64: - return opI32ToUI64 - case OP_I32_F32: - return opI32ToF32 - case OP_I32_F64: - return opI32ToF64 - case OP_I32_PRINT: - return opI32Print - case OP_I32_ADD: - return opI32Add - case OP_I32_SUB: - return opI32Sub - case OP_I32_NEG: - return opI32Neg - case OP_I32_MUL: - return opI32Mul - case OP_I32_DIV: - return opI32Div - case OP_I32_MOD: - return opI32Mod - case OP_I32_ABS: - return opI32Abs - case OP_I32_GT: - return opI32Gt - case OP_I32_GTEQ: - return opI32Gteq - case OP_I32_LT: - return opI32Lt - case OP_I32_LTEQ: - return opI32Lteq - case OP_I32_EQ: - return opI32Eq - case OP_I32_UNEQ: - return opI32Uneq - case OP_I32_BITAND: - return opI32Bitand - case OP_I32_BITOR: - return opI32Bitor - case OP_I32_BITXOR: - return opI32Bitxor - case OP_I32_BITCLEAR: - return opI32Bitclear - case OP_I32_BITSHL: - return opI32Bitshl - case OP_I32_BITSHR: - return opI32Bitshr - case OP_I32_MAX: - return opI32Max - case OP_I32_MIN: - return opI32Min - case OP_I32_RAND: - return opI32Rand - - case OP_I64_STR: - return opI64ToStr - case OP_I64_I8: - return opI64ToI8 - case OP_I64_I16: - return opI64ToI16 - case OP_I64_I32: - return opI64ToI32 - case OP_I64_UI8: - return opI64ToUI8 - case OP_I64_UI16: - return opI64ToUI16 - case OP_I64_UI32: - return opI64ToUI32 - case OP_I64_UI64: - return opI64ToUI64 - case OP_I64_F32: - return opI64ToF32 - case OP_I64_F64: - return opI64ToF64 - case OP_I64_PRINT: - return opI64Print - case OP_I64_ADD: - return opI64Add - case OP_I64_SUB: - return opI64Sub - case OP_I64_NEG: - return opI64Neg - case OP_I64_MUL: - return opI64Mul - case OP_I64_DIV: - return opI64Div - case OP_I64_MOD: - return opI64Mod - case OP_I64_ABS: - return opI64Abs - case OP_I64_GT: - return opI64Gt - case OP_I64_GTEQ: - return opI64Gteq - case OP_I64_LT: - return opI64Lt - case OP_I64_LTEQ: - return opI64Lteq - case OP_I64_EQ: - return opI64Eq - case OP_I64_UNEQ: - return opI64Uneq - case OP_I64_BITAND: - return opI64Bitand - case OP_I64_BITOR: - return opI64Bitor - case OP_I64_BITXOR: - return opI64Bitxor - case OP_I64_BITCLEAR: - return opI64Bitclear - case OP_I64_BITSHL: - return opI64Bitshl - case OP_I64_BITSHR: - return opI64Bitshr - case OP_I64_MAX: - return opI64Max - case OP_I64_MIN: - return opI64Min - case OP_I64_RAND: - return opI64Rand - - case OP_UI8_STR: - return opUI8ToStr - case OP_UI8_I8: - return opUI8ToI8 - case OP_UI8_I16: - return opUI8ToI16 - case OP_UI8_I32: - return opUI8ToI32 - case OP_UI8_I64: - return opUI8ToI64 - case OP_UI8_UI16: - return opUI8ToUI16 - case OP_UI8_UI32: - return opUI8ToUI32 - case OP_UI8_UI64: - return opUI8ToUI64 - case OP_UI8_F32: - return opUI8ToF32 - case OP_UI8_F64: - return opUI8ToF64 - case OP_UI8_PRINT: - return opUI8Print - case OP_UI8_ADD: - return opUI8Add - case OP_UI8_SUB: - return opUI8Sub - case OP_UI8_MUL: - return opUI8Mul - case OP_UI8_DIV: - return opUI8Div - case OP_UI8_MOD: - return opUI8Mod - case OP_UI8_GT: - return opUI8Gt - case OP_UI8_GTEQ: - return opUI8Gteq - case OP_UI8_LT: - return opUI8Lt - case OP_UI8_LTEQ: - return opUI8Lteq - case OP_UI8_EQ: - return opUI8Eq - case OP_UI8_UNEQ: - return opUI8Uneq - case OP_UI8_BITAND: - return opUI8Bitand - case OP_UI8_BITOR: - return opUI8Bitor - case OP_UI8_BITXOR: - return opUI8Bitxor - case OP_UI8_BITCLEAR: - return opUI8Bitclear - case OP_UI8_BITSHL: - return opUI8Bitshl - case OP_UI8_BITSHR: - return opUI8Bitshr - case OP_UI8_MAX: - return opUI8Max - case OP_UI8_MIN: - return opUI8Min - case OP_UI8_RAND: - return opUI8Rand - - case OP_UI16_STR: - return opUI16ToStr - case OP_UI16_I8: - return opUI16ToI8 - case OP_UI16_I16: - return opUI16ToI16 - case OP_UI16_I32: - return opUI16ToI32 - case OP_UI16_I64: - return opUI16ToI64 - case OP_UI16_UI8: - return opUI16ToUI8 - case OP_UI16_UI32: - return opUI16ToUI32 - case OP_UI16_UI64: - return opUI16ToUI64 - case OP_UI16_F32: - return opUI16ToF32 - case OP_UI16_F64: - return opUI16ToF64 - case OP_UI16_PRINT: - return opUI16Print - case OP_UI16_ADD: - return opUI16Add - case OP_UI16_SUB: - return opUI16Sub - case OP_UI16_MUL: - return opUI16Mul - case OP_UI16_DIV: - return opUI16Div - case OP_UI16_MOD: - return opUI16Mod - case OP_UI16_GT: - return opUI16Gt - case OP_UI16_GTEQ: - return opUI16Gteq - case OP_UI16_LT: - return opUI16Lt - case OP_UI16_LTEQ: - return opUI16Lteq - case OP_UI16_EQ: - return opUI16Eq - case OP_UI16_UNEQ: - return opUI16Uneq - case OP_UI16_BITAND: - return opUI16Bitand - case OP_UI16_BITOR: - return opUI16Bitor - case OP_UI16_BITXOR: - return opUI16Bitxor - case OP_UI16_BITCLEAR: - return opUI16Bitclear - case OP_UI16_BITSHL: - return opUI16Bitshl - case OP_UI16_BITSHR: - return opUI16Bitshr - case OP_UI16_MAX: - return opUI16Max - case OP_UI16_MIN: - return opUI16Min - case OP_UI16_RAND: - return opUI16Rand - - case OP_UI32_STR: - return opUI32ToStr - case OP_UI32_I8: - return opUI32ToI8 - case OP_UI32_I16: - return opUI32ToI16 - case OP_UI32_I32: - return opUI32ToI32 - case OP_UI32_I64: - return opUI32ToI64 - case OP_UI32_UI8: - return opUI32ToUI8 - case OP_UI32_UI16: - return opUI32ToUI16 - case OP_UI32_UI64: - return opUI32ToUI64 - case OP_UI32_F32: - return opUI32ToF32 - case OP_UI32_F64: - return opUI32ToF64 - case OP_UI32_PRINT: - return opUI32Print - case OP_UI32_ADD: - return opUI32Add - case OP_UI32_SUB: - return opUI32Sub - case OP_UI32_MUL: - return opUI32Mul - case OP_UI32_DIV: - return opUI32Div - case OP_UI32_MOD: - return opUI32Mod - case OP_UI32_GT: - return opUI32Gt - case OP_UI32_GTEQ: - return opUI32Gteq - case OP_UI32_LT: - return opUI32Lt - case OP_UI32_LTEQ: - return opUI32Lteq - case OP_UI32_EQ: - return opUI32Eq - case OP_UI32_UNEQ: - return opUI32Uneq - case OP_UI32_BITAND: - return opUI32Bitand - case OP_UI32_BITOR: - return opUI32Bitor - case OP_UI32_BITXOR: - return opUI32Bitxor - case OP_UI32_BITCLEAR: - return opUI32Bitclear - case OP_UI32_BITSHL: - return opUI32Bitshl - case OP_UI32_BITSHR: - return opUI32Bitshr - case OP_UI32_MAX: - return opUI32Max - case OP_UI32_MIN: - return opUI32Min - case OP_UI32_RAND: - return opUI32Rand - - case OP_UI64_STR: - return opUI64ToStr - case OP_UI64_I8: - return opUI64ToI8 - case OP_UI64_I16: - return opUI64ToI16 - case OP_UI64_I32: - return opUI64ToI32 - case OP_UI64_I64: - return opUI64ToI64 - case OP_UI64_UI8: - return opUI64ToUI8 - case OP_UI64_UI16: - return opUI64ToUI16 - case OP_UI64_UI32: - return opUI64ToUI32 - case OP_UI64_F32: - return opUI64ToF32 - case OP_UI64_F64: - return opUI64ToF64 - case OP_UI64_PRINT: - return opUI64Print - case OP_UI64_ADD: - return opUI64Add - case OP_UI64_SUB: - return opUI64Sub - case OP_UI64_MUL: - return opUI64Mul - case OP_UI64_DIV: - return opUI64Div - case OP_UI64_MOD: - return opUI64Mod - case OP_UI64_GT: - return opUI64Gt - case OP_UI64_GTEQ: - return opUI64Gteq - case OP_UI64_LT: - return opUI64Lt - case OP_UI64_LTEQ: - return opUI64Lteq - case OP_UI64_EQ: - return opUI64Eq - case OP_UI64_UNEQ: - return opUI64Uneq - case OP_UI64_BITAND: - return opUI64Bitand - case OP_UI64_BITOR: - return opUI64Bitor - case OP_UI64_BITXOR: - return opUI64Bitxor - case OP_UI64_BITCLEAR: - return opUI64Bitclear - case OP_UI64_BITSHL: - return opUI64Bitshl - case OP_UI64_BITSHR: - return opUI64Bitshr - case OP_UI64_MAX: - return opUI64Max - case OP_UI64_MIN: - return opUI64Min - case OP_UI64_RAND: - return opUI64Rand - - case OP_F32_IS_NAN: - return opF32Isnan - case OP_F32_STR: - return opF32ToStr - case OP_F32_I8: - return opF32ToI8 - case OP_F32_I16: - return opF32ToI16 - case OP_F32_I32: - return opF32ToI32 - case OP_F32_I64: - return opF32ToI64 - case OP_F32_UI8: - return opF32ToUI8 - case OP_F32_UI16: - return opF32ToUI16 - case OP_F32_UI32: - return opF32ToUI32 - case OP_F32_UI64: - return opF32ToUI64 - case OP_F32_F64: - return opF32ToF64 - case OP_F32_PRINT: - return opF32Print - case OP_F32_ADD: - return opF32Add - case OP_F32_SUB: - return opF32Sub - case OP_F32_NEG: - return opF32Neg - case OP_F32_MUL: - return opF32Mul - case OP_F32_DIV: - return opF32Div - case OP_F32_MOD: - return opF32Mod - case OP_F32_ABS: - return opF32Abs - case OP_F32_POW: - return opF32Pow - case OP_F32_GT: - return opF32Gt - case OP_F32_GTEQ: - return opF32Gteq - case OP_F32_LT: - return opF32Lt - case OP_F32_LTEQ: - return opF32Lteq - case OP_F32_EQ: - return opF32Eq - case OP_F32_UNEQ: - return opF32Uneq - case OP_F32_ACOS: - return opF32Acos - case OP_F32_COS: - return opF32Cos - case OP_F32_ASIN: - return opF32Asin - case OP_F32_SIN: - return opF32Sin - case OP_F32_SQRT: - return opF32Sqrt - case OP_F32_LOG: - return opF32Log - case OP_F32_LOG2: - return opF32Log2 - case OP_F32_LOG10: - return opF32Log10 - case OP_F32_MAX: - return opF32Max - case OP_F32_MIN: - return opF32Min - case OP_F32_RAND: - return opF32Rand - - case OP_F64_IS_NAN: - return opF64Isnan - case OP_F64_STR: - return opF64ToStr - case OP_F64_I8: - return opF64ToI8 - case OP_F64_I16: - return opF64ToI16 - case OP_F64_I32: - return opF64ToI32 - case OP_F64_I64: - return opF64ToI64 - case OP_F64_UI8: - return opF64ToUI8 - case OP_F64_UI16: - return opF64ToUI16 - case OP_F64_UI32: - return opF64ToUI32 - case OP_F64_UI64: - return opF64ToUI64 - case OP_F64_F32: - return opF64ToF32 - case OP_F64_PRINT: - return opF64Print - case OP_F64_ADD: - return opF64Add - case OP_F64_SUB: - return opF64Sub - case OP_F64_NEG: - return opF64Neg - case OP_F64_MUL: - return opF64Mul - case OP_F64_DIV: - return opF64Div - case OP_F64_MOD: - return opF64Mod - case OP_F64_ABS: - return opF64Abs - case OP_F64_POW: - return opF64Pow - case OP_F64_GT: - return opF64Gt - case OP_F64_GTEQ: - return opF64Gteq - case OP_F64_LT: - return opF64Lt - case OP_F64_LTEQ: - return opF64Lteq - case OP_F64_EQ: - return opF64Eq - case OP_F64_UNEQ: - return opF64Uneq - case OP_F64_ACOS: - return opF64Acos - case OP_F64_COS: - return opF64Cos - case OP_F64_ASIN: - return opF64Asin - case OP_F64_SIN: - return opF64Sin - case OP_F64_SQRT: - return opF64Sqrt - case OP_F64_LOG: - return opF64Log - case OP_F64_LOG2: - return opF64Log2 - case OP_F64_LOG10: - return opF64Log10 - case OP_F64_MAX: - return opF64Max - case OP_F64_MIN: - return opF64Min - case OP_F64_RAND: - return opF64Rand - - case OP_STR_I8: - return opStrToI8 - case OP_STR_I16: - return opStrToI16 - case OP_STR_I32: - return opStrToI32 - case OP_STR_I64: - return opStrToI64 - case OP_STR_UI8: - return opStrToUI8 - case OP_STR_UI16: - return opStrToUI16 - case OP_STR_UI32: - return opStrToUI32 - case OP_STR_UI64: - return opStrToUI64 - case OP_STR_F32: - return opStrToF32 - case OP_STR_F64: - return opStrToF64 - case OP_STR_PRINT: - return opStrPrint - case OP_STR_EQ: - return opStrEq - case OP_STR_CONCAT: - return opStrConcat - case OP_STR_SUBSTR: - return opStrSubstr - case OP_STR_INDEX: - return opStrIndex - case OP_STR_TRIM_SPACE: - return opStrTrimSpace - - case OP_APPEND: - return opAppend - case OP_RESIZE: - return opResize - case OP_INSERT: - return opInsert - case OP_REMOVE: - return opRemove - case OP_COPY: - return opCopy - - case OP_MAKE: - case OP_READ: - case OP_WRITE: - case OP_LEN: - case OP_CONCAT: - case OP_CAST: - case OP_EQ: - case OP_UNEQ: - case OP_AND: - case OP_OR: - case OP_NOT: - case OP_SLEEP: - case OP_HALT: - case OP_GOTO: - case OP_REMCX: - case OP_ADDCX: - case OP_QUERY: - case OP_EXECUTE: - case OP_INDEX: - case OP_NAME: - case OP_EVOLVE: - case OP_ASSERT: - return opAssertValue - case OP_TEST: - return opTest - case OP_PANIC: - return opPanic - case OP_PANIC_IF: - return opPanicIf - case OP_PANIC_IF_NOT: - return opPanicIfNot - case OP_STRERROR: - return opStrError - - // affordances - case OP_AFF_PRINT: - return opAffPrint - case OP_AFF_QUERY: - return opAffQuery - case OP_AFF_ON: - return opAffOn - case OP_AFF_OF: - return opAffOf - case OP_AFF_INFORM: - return opAffInform - case OP_AFF_REQUEST: - return opAffRequest +func handleCoreOpcode(opCode int) opcodeHandler { + switch opCode { + case OP_IDENTITY: + return opIdentity + case OP_JMP: + return opJmp + case OP_DEBUG: + return func(prgrm *CXProgram) { + prgrm.PrintStack() } - return nil + case OP_SERIALIZE: + return opSerialize + case OP_DESERIALIZE: + return opDeserialize + + case OP_UND_EQUAL: + return opEqual + case OP_UND_UNEQUAL: + return opUnequal + case OP_UND_BITAND: + return opBitand + case OP_UND_BITXOR: + return opBitxor + case OP_UND_BITOR: + return opBitor + case OP_UND_BITCLEAR: + return opBitclear + case OP_UND_MUL: + return opMul + case OP_UND_DIV: + return opDiv + case OP_UND_MOD: + return opMod + case OP_UND_ADD: + return opAdd + case OP_UND_SUB: + return opSub + case OP_UND_NEG: + return opNeg + case OP_UND_BITSHL: + return opBitshl + case OP_UND_BITSHR: + return opBitshr + case OP_UND_LT: + return opLt + case OP_UND_GT: + return opGt + case OP_UND_LTEQ: + return opLteq + case OP_UND_GTEQ: + return opGteq + case OP_UND_LEN: + return opLen + case OP_UND_PRINTF: + return opPrintf + case OP_UND_SPRINTF: + return opSprintf + case OP_UND_READ: + return opRead + + case OP_BOOL_PRINT: + return opBoolPrint + case OP_BOOL_EQUAL: + return opBoolEqual + case OP_BOOL_UNEQUAL: + return opBoolUnequal + case OP_BOOL_NOT: + return opBoolNot + case OP_BOOL_OR: + return opBoolOr + case OP_BOOL_AND: + return opBoolAnd + + case OP_I8_STR: + return opI8ToStr + case OP_I8_I16: + return opI8ToI16 + case OP_I8_I32: + return opI8ToI32 + case OP_I8_I64: + return opI8ToI64 + case OP_I8_UI8: + return opI8ToUI8 + case OP_I8_UI16: + return opI8ToUI16 + case OP_I8_UI32: + return opI8ToUI32 + case OP_I8_UI64: + return opI8ToUI64 + case OP_I8_F32: + return opI8ToF32 + case OP_I8_F64: + return opI8ToF64 + case OP_I8_PRINT: + return opI8Print + case OP_I8_ADD: + return opI8Add + case OP_I8_SUB: + return opI8Sub + case OP_I8_NEG: + return opI8Neg + case OP_I8_MUL: + return opI8Mul + case OP_I8_DIV: + return opI8Div + case OP_I8_MOD: + return opI8Mod + case OP_I8_ABS: + return opI8Abs + case OP_I8_GT: + return opI8Gt + case OP_I8_GTEQ: + return opI8Gteq + case OP_I8_LT: + return opI8Lt + case OP_I8_LTEQ: + return opI8Lteq + case OP_I8_EQ: + return opI8Eq + case OP_I8_UNEQ: + return opI8Uneq + case OP_I8_BITAND: + return opI8Bitand + case OP_I8_BITOR: + return opI8Bitor + case OP_I8_BITXOR: + return opI8Bitxor + case OP_I8_BITCLEAR: + return opI8Bitclear + case OP_I8_BITSHL: + return opI8Bitshl + case OP_I8_BITSHR: + return opI8Bitshr + case OP_I8_MAX: + return opI8Max + case OP_I8_MIN: + return opI8Min + case OP_I8_RAND: + return opI8Rand + + case OP_I16_STR: + return opI16ToStr + case OP_I16_I8: + return opI16ToI8 + case OP_I16_I32: + return opI16ToI32 + case OP_I16_I64: + return opI16ToI64 + case OP_I16_UI8: + return opI16ToUI8 + case OP_I16_UI16: + return opI16ToUI16 + case OP_I16_UI32: + return opI16ToUI32 + case OP_I16_UI64: + return opI16ToUI64 + case OP_I16_F32: + return opI16ToF32 + case OP_I16_F64: + return opI16ToF64 + case OP_I16_PRINT: + return opI16Print + case OP_I16_ADD: + return opI16Add + case OP_I16_SUB: + return opI16Sub + case OP_I16_NEG: + return opI16Neg + case OP_I16_MUL: + return opI16Mul + case OP_I16_DIV: + return opI16Div + case OP_I16_MOD: + return opI16Mod + case OP_I16_ABS: + return opI16Abs + case OP_I16_GT: + return opI16Gt + case OP_I16_GTEQ: + return opI16Gteq + case OP_I16_LT: + return opI16Lt + case OP_I16_LTEQ: + return opI16Lteq + case OP_I16_EQ: + return opI16Eq + case OP_I16_UNEQ: + return opI16Uneq + case OP_I16_BITAND: + return opI16Bitand + case OP_I16_BITOR: + return opI16Bitor + case OP_I16_BITXOR: + return opI16Bitxor + case OP_I16_BITCLEAR: + return opI16Bitclear + case OP_I16_BITSHL: + return opI16Bitshl + case OP_I16_BITSHR: + return opI16Bitshr + case OP_I16_MAX: + return opI16Max + case OP_I16_MIN: + return opI16Min + case OP_I16_RAND: + return opI16Rand + + case OP_I32_STR: + return opI32ToStr + case OP_I32_I8: + return opI32ToI8 + case OP_I32_I16: + return opI32ToI16 + case OP_I32_I64: + return opI32ToI64 + case OP_I32_UI8: + return opI32ToUI8 + case OP_I32_UI16: + return opI32ToUI16 + case OP_I32_UI32: + return opI32ToUI32 + case OP_I32_UI64: + return opI32ToUI64 + case OP_I32_F32: + return opI32ToF32 + case OP_I32_F64: + return opI32ToF64 + case OP_I32_PRINT: + return opI32Print + case OP_I32_ADD: + return opI32Add + case OP_I32_SUB: + return opI32Sub + case OP_I32_NEG: + return opI32Neg + case OP_I32_MUL: + return opI32Mul + case OP_I32_DIV: + return opI32Div + case OP_I32_MOD: + return opI32Mod + case OP_I32_ABS: + return opI32Abs + case OP_I32_GT: + return opI32Gt + case OP_I32_GTEQ: + return opI32Gteq + case OP_I32_LT: + return opI32Lt + case OP_I32_LTEQ: + return opI32Lteq + case OP_I32_EQ: + return opI32Eq + case OP_I32_UNEQ: + return opI32Uneq + case OP_I32_BITAND: + return opI32Bitand + case OP_I32_BITOR: + return opI32Bitor + case OP_I32_BITXOR: + return opI32Bitxor + case OP_I32_BITCLEAR: + return opI32Bitclear + case OP_I32_BITSHL: + return opI32Bitshl + case OP_I32_BITSHR: + return opI32Bitshr + case OP_I32_MAX: + return opI32Max + case OP_I32_MIN: + return opI32Min + case OP_I32_RAND: + return opI32Rand + + case OP_I64_STR: + return opI64ToStr + case OP_I64_I8: + return opI64ToI8 + case OP_I64_I16: + return opI64ToI16 + case OP_I64_I32: + return opI64ToI32 + case OP_I64_UI8: + return opI64ToUI8 + case OP_I64_UI16: + return opI64ToUI16 + case OP_I64_UI32: + return opI64ToUI32 + case OP_I64_UI64: + return opI64ToUI64 + case OP_I64_F32: + return opI64ToF32 + case OP_I64_F64: + return opI64ToF64 + case OP_I64_PRINT: + return opI64Print + case OP_I64_ADD: + return opI64Add + case OP_I64_SUB: + return opI64Sub + case OP_I64_NEG: + return opI64Neg + case OP_I64_MUL: + return opI64Mul + case OP_I64_DIV: + return opI64Div + case OP_I64_MOD: + return opI64Mod + case OP_I64_ABS: + return opI64Abs + case OP_I64_GT: + return opI64Gt + case OP_I64_GTEQ: + return opI64Gteq + case OP_I64_LT: + return opI64Lt + case OP_I64_LTEQ: + return opI64Lteq + case OP_I64_EQ: + return opI64Eq + case OP_I64_UNEQ: + return opI64Uneq + case OP_I64_BITAND: + return opI64Bitand + case OP_I64_BITOR: + return opI64Bitor + case OP_I64_BITXOR: + return opI64Bitxor + case OP_I64_BITCLEAR: + return opI64Bitclear + case OP_I64_BITSHL: + return opI64Bitshl + case OP_I64_BITSHR: + return opI64Bitshr + case OP_I64_MAX: + return opI64Max + case OP_I64_MIN: + return opI64Min + case OP_I64_RAND: + return opI64Rand + + case OP_UI8_STR: + return opUI8ToStr + case OP_UI8_I8: + return opUI8ToI8 + case OP_UI8_I16: + return opUI8ToI16 + case OP_UI8_I32: + return opUI8ToI32 + case OP_UI8_I64: + return opUI8ToI64 + case OP_UI8_UI16: + return opUI8ToUI16 + case OP_UI8_UI32: + return opUI8ToUI32 + case OP_UI8_UI64: + return opUI8ToUI64 + case OP_UI8_F32: + return opUI8ToF32 + case OP_UI8_F64: + return opUI8ToF64 + case OP_UI8_PRINT: + return opUI8Print + case OP_UI8_ADD: + return opUI8Add + case OP_UI8_SUB: + return opUI8Sub + case OP_UI8_MUL: + return opUI8Mul + case OP_UI8_DIV: + return opUI8Div + case OP_UI8_MOD: + return opUI8Mod + case OP_UI8_GT: + return opUI8Gt + case OP_UI8_GTEQ: + return opUI8Gteq + case OP_UI8_LT: + return opUI8Lt + case OP_UI8_LTEQ: + return opUI8Lteq + case OP_UI8_EQ: + return opUI8Eq + case OP_UI8_UNEQ: + return opUI8Uneq + case OP_UI8_BITAND: + return opUI8Bitand + case OP_UI8_BITOR: + return opUI8Bitor + case OP_UI8_BITXOR: + return opUI8Bitxor + case OP_UI8_BITCLEAR: + return opUI8Bitclear + case OP_UI8_BITSHL: + return opUI8Bitshl + case OP_UI8_BITSHR: + return opUI8Bitshr + case OP_UI8_MAX: + return opUI8Max + case OP_UI8_MIN: + return opUI8Min + case OP_UI8_RAND: + return opUI8Rand + + case OP_UI16_STR: + return opUI16ToStr + case OP_UI16_I8: + return opUI16ToI8 + case OP_UI16_I16: + return opUI16ToI16 + case OP_UI16_I32: + return opUI16ToI32 + case OP_UI16_I64: + return opUI16ToI64 + case OP_UI16_UI8: + return opUI16ToUI8 + case OP_UI16_UI32: + return opUI16ToUI32 + case OP_UI16_UI64: + return opUI16ToUI64 + case OP_UI16_F32: + return opUI16ToF32 + case OP_UI16_F64: + return opUI16ToF64 + case OP_UI16_PRINT: + return opUI16Print + case OP_UI16_ADD: + return opUI16Add + case OP_UI16_SUB: + return opUI16Sub + case OP_UI16_MUL: + return opUI16Mul + case OP_UI16_DIV: + return opUI16Div + case OP_UI16_MOD: + return opUI16Mod + case OP_UI16_GT: + return opUI16Gt + case OP_UI16_GTEQ: + return opUI16Gteq + case OP_UI16_LT: + return opUI16Lt + case OP_UI16_LTEQ: + return opUI16Lteq + case OP_UI16_EQ: + return opUI16Eq + case OP_UI16_UNEQ: + return opUI16Uneq + case OP_UI16_BITAND: + return opUI16Bitand + case OP_UI16_BITOR: + return opUI16Bitor + case OP_UI16_BITXOR: + return opUI16Bitxor + case OP_UI16_BITCLEAR: + return opUI16Bitclear + case OP_UI16_BITSHL: + return opUI16Bitshl + case OP_UI16_BITSHR: + return opUI16Bitshr + case OP_UI16_MAX: + return opUI16Max + case OP_UI16_MIN: + return opUI16Min + case OP_UI16_RAND: + return opUI16Rand + + case OP_UI32_STR: + return opUI32ToStr + case OP_UI32_I8: + return opUI32ToI8 + case OP_UI32_I16: + return opUI32ToI16 + case OP_UI32_I32: + return opUI32ToI32 + case OP_UI32_I64: + return opUI32ToI64 + case OP_UI32_UI8: + return opUI32ToUI8 + case OP_UI32_UI16: + return opUI32ToUI16 + case OP_UI32_UI64: + return opUI32ToUI64 + case OP_UI32_F32: + return opUI32ToF32 + case OP_UI32_F64: + return opUI32ToF64 + case OP_UI32_PRINT: + return opUI32Print + case OP_UI32_ADD: + return opUI32Add + case OP_UI32_SUB: + return opUI32Sub + case OP_UI32_MUL: + return opUI32Mul + case OP_UI32_DIV: + return opUI32Div + case OP_UI32_MOD: + return opUI32Mod + case OP_UI32_GT: + return opUI32Gt + case OP_UI32_GTEQ: + return opUI32Gteq + case OP_UI32_LT: + return opUI32Lt + case OP_UI32_LTEQ: + return opUI32Lteq + case OP_UI32_EQ: + return opUI32Eq + case OP_UI32_UNEQ: + return opUI32Uneq + case OP_UI32_BITAND: + return opUI32Bitand + case OP_UI32_BITOR: + return opUI32Bitor + case OP_UI32_BITXOR: + return opUI32Bitxor + case OP_UI32_BITCLEAR: + return opUI32Bitclear + case OP_UI32_BITSHL: + return opUI32Bitshl + case OP_UI32_BITSHR: + return opUI32Bitshr + case OP_UI32_MAX: + return opUI32Max + case OP_UI32_MIN: + return opUI32Min + case OP_UI32_RAND: + return opUI32Rand + + case OP_UI64_STR: + return opUI64ToStr + case OP_UI64_I8: + return opUI64ToI8 + case OP_UI64_I16: + return opUI64ToI16 + case OP_UI64_I32: + return opUI64ToI32 + case OP_UI64_I64: + return opUI64ToI64 + case OP_UI64_UI8: + return opUI64ToUI8 + case OP_UI64_UI16: + return opUI64ToUI16 + case OP_UI64_UI32: + return opUI64ToUI32 + case OP_UI64_F32: + return opUI64ToF32 + case OP_UI64_F64: + return opUI64ToF64 + case OP_UI64_PRINT: + return opUI64Print + case OP_UI64_ADD: + return opUI64Add + case OP_UI64_SUB: + return opUI64Sub + case OP_UI64_MUL: + return opUI64Mul + case OP_UI64_DIV: + return opUI64Div + case OP_UI64_MOD: + return opUI64Mod + case OP_UI64_GT: + return opUI64Gt + case OP_UI64_GTEQ: + return opUI64Gteq + case OP_UI64_LT: + return opUI64Lt + case OP_UI64_LTEQ: + return opUI64Lteq + case OP_UI64_EQ: + return opUI64Eq + case OP_UI64_UNEQ: + return opUI64Uneq + case OP_UI64_BITAND: + return opUI64Bitand + case OP_UI64_BITOR: + return opUI64Bitor + case OP_UI64_BITXOR: + return opUI64Bitxor + case OP_UI64_BITCLEAR: + return opUI64Bitclear + case OP_UI64_BITSHL: + return opUI64Bitshl + case OP_UI64_BITSHR: + return opUI64Bitshr + case OP_UI64_MAX: + return opUI64Max + case OP_UI64_MIN: + return opUI64Min + case OP_UI64_RAND: + return opUI64Rand + + case OP_F32_IS_NAN: + return opF32Isnan + case OP_F32_STR: + return opF32ToStr + case OP_F32_I8: + return opF32ToI8 + case OP_F32_I16: + return opF32ToI16 + case OP_F32_I32: + return opF32ToI32 + case OP_F32_I64: + return opF32ToI64 + case OP_F32_UI8: + return opF32ToUI8 + case OP_F32_UI16: + return opF32ToUI16 + case OP_F32_UI32: + return opF32ToUI32 + case OP_F32_UI64: + return opF32ToUI64 + case OP_F32_F64: + return opF32ToF64 + case OP_F32_PRINT: + return opF32Print + case OP_F32_ADD: + return opF32Add + case OP_F32_SUB: + return opF32Sub + case OP_F32_NEG: + return opF32Neg + case OP_F32_MUL: + return opF32Mul + case OP_F32_DIV: + return opF32Div + case OP_F32_MOD: + return opF32Mod + case OP_F32_ABS: + return opF32Abs + case OP_F32_POW: + return opF32Pow + case OP_F32_GT: + return opF32Gt + case OP_F32_GTEQ: + return opF32Gteq + case OP_F32_LT: + return opF32Lt + case OP_F32_LTEQ: + return opF32Lteq + case OP_F32_EQ: + return opF32Eq + case OP_F32_UNEQ: + return opF32Uneq + case OP_F32_ACOS: + return opF32Acos + case OP_F32_COS: + return opF32Cos + case OP_F32_ASIN: + return opF32Asin + case OP_F32_SIN: + return opF32Sin + case OP_F32_SQRT: + return opF32Sqrt + case OP_F32_LOG: + return opF32Log + case OP_F32_LOG2: + return opF32Log2 + case OP_F32_LOG10: + return opF32Log10 + case OP_F32_MAX: + return opF32Max + case OP_F32_MIN: + return opF32Min + case OP_F32_RAND: + return opF32Rand + + case OP_F64_IS_NAN: + return opF64Isnan + case OP_F64_STR: + return opF64ToStr + case OP_F64_I8: + return opF64ToI8 + case OP_F64_I16: + return opF64ToI16 + case OP_F64_I32: + return opF64ToI32 + case OP_F64_I64: + return opF64ToI64 + case OP_F64_UI8: + return opF64ToUI8 + case OP_F64_UI16: + return opF64ToUI16 + case OP_F64_UI32: + return opF64ToUI32 + case OP_F64_UI64: + return opF64ToUI64 + case OP_F64_F32: + return opF64ToF32 + case OP_F64_PRINT: + return opF64Print + case OP_F64_ADD: + return opF64Add + case OP_F64_SUB: + return opF64Sub + case OP_F64_NEG: + return opF64Neg + case OP_F64_MUL: + return opF64Mul + case OP_F64_DIV: + return opF64Div + case OP_F64_MOD: + return opF64Mod + case OP_F64_ABS: + return opF64Abs + case OP_F64_POW: + return opF64Pow + case OP_F64_GT: + return opF64Gt + case OP_F64_GTEQ: + return opF64Gteq + case OP_F64_LT: + return opF64Lt + case OP_F64_LTEQ: + return opF64Lteq + case OP_F64_EQ: + return opF64Eq + case OP_F64_UNEQ: + return opF64Uneq + case OP_F64_ACOS: + return opF64Acos + case OP_F64_COS: + return opF64Cos + case OP_F64_ASIN: + return opF64Asin + case OP_F64_SIN: + return opF64Sin + case OP_F64_SQRT: + return opF64Sqrt + case OP_F64_LOG: + return opF64Log + case OP_F64_LOG2: + return opF64Log2 + case OP_F64_LOG10: + return opF64Log10 + case OP_F64_MAX: + return opF64Max + case OP_F64_MIN: + return opF64Min + case OP_F64_RAND: + return opF64Rand + + case OP_STR_I8: + return opStrToI8 + case OP_STR_I16: + return opStrToI16 + case OP_STR_I32: + return opStrToI32 + case OP_STR_I64: + return opStrToI64 + case OP_STR_UI8: + return opStrToUI8 + case OP_STR_UI16: + return opStrToUI16 + case OP_STR_UI32: + return opStrToUI32 + case OP_STR_UI64: + return opStrToUI64 + case OP_STR_F32: + return opStrToF32 + case OP_STR_F64: + return opStrToF64 + case OP_STR_PRINT: + return opStrPrint + case OP_STR_EQ: + return opStrEq + case OP_STR_CONCAT: + return opStrConcat + case OP_STR_SUBSTR: + return opStrSubstr + case OP_STR_INDEX: + return opStrIndex + case OP_STR_TRIM_SPACE: + return opStrTrimSpace + + case OP_APPEND: + return opAppend + case OP_RESIZE: + return opResize + case OP_INSERT: + return opInsert + case OP_REMOVE: + return opRemove + case OP_COPY: + return opCopy + + case OP_MAKE: + case OP_READ: + case OP_WRITE: + case OP_LEN: + case OP_CONCAT: + case OP_CAST: + case OP_EQ: + case OP_UNEQ: + case OP_AND: + case OP_OR: + case OP_NOT: + case OP_SLEEP: + case OP_HALT: + case OP_GOTO: + case OP_REMCX: + case OP_ADDCX: + case OP_QUERY: + case OP_EXECUTE: + case OP_INDEX: + case OP_NAME: + case OP_EVOLVE: + case OP_ASSERT: + return opAssertValue + case OP_TEST: + return opTest + case OP_PANIC: + return opPanic + case OP_PANIC_IF: + return opPanicIf + case OP_PANIC_IF_NOT: + return opPanicIfNot + case OP_STRERROR: + return opStrError + + // affordances + case OP_AFF_PRINT: + return opAffPrint + case OP_AFF_QUERY: + return opAffQuery + case OP_AFF_ON: + return opAffOn + case OP_AFF_OF: + return opAffOf + case OP_AFF_INFORM: + return opAffInform + case OP_AFF_REQUEST: + return opAffRequest } - opcodeHandlerFinders = append(opcodeHandlerFinders, handleOpcode) + return nil } diff --git a/cx/opcodes_opengl.go b/cx/opcodes_opengl.go index 3fe1ee021..d885c0527 100644 --- a/cx/opcodes_opengl.go +++ b/cx/opcodes_opengl.go @@ -820,414 +820,415 @@ func init() { []*CXArgument{}) // exec - handleOpcode := func(opCode int) opcodeHandler { - switch opCode { - // gogl - case OP_GL_INIT: - return op_gl_Init - case OP_GL_DESTROY: - return op_gl_Destroy - case OP_GL_STRS: - return op_gl_Strs - case OP_GL_FREE: - return op_gl_Free - case OP_GL_NEW_TEXTURE: - return op_gl_NewTexture - case OP_GL_NEW_TEXTURE_CUBE: - return op_gl_NewTextureCube - case OP_GL_NEW_GIF: - return op_gl_NewGIF - case OP_GL_FREE_GIF: - return op_gl_FreeGIF - case OP_GL_GIF_FRAME_TO_TEXTURE: - return op_gl_GIFFrameToTexture - case OP_GL_APPEND_F32: - return opGlAppend - case OP_GL_APPEND_UI16: - return opGlAppend - case OP_GL_APPEND_UI32: - return opGlAppend - // gl_0_0 - case OP_GL_MATRIX_MODE: - return op_gl_MatrixMode - case OP_GL_ROTATEF: - return op_gl_Rotatef - case OP_GL_TRANSLATEF: - return op_gl_Translatef - case OP_GL_LOAD_IDENTITY: - return op_gl_LoadIdentity - case OP_GL_PUSH_MATRIX: - return op_gl_PushMatrix - case OP_GL_POP_MATRIX: - return op_gl_PopMatrix - case OP_GL_ENABLE_CLIENT_STATE: - return op_gl_EnableClientState - case OP_GL_COLOR3F: - return op_gl_Color3f - case OP_GL_COLOR4F: - return op_gl_Color4f - case OP_GL_BEGIN: - return op_gl_Begin - case OP_GL_END: - return op_gl_End - case OP_GL_NORMAL3F: - return op_gl_Normal3f - case OP_GL_VERTEX_2F: - return op_gl_Vertex2f - case OP_GL_VERTEX_3F: - return op_gl_Vertex3f - case OP_GL_LIGHTFV: - return op_gl_Lightfv - case OP_GL_FRUSTUM: - return op_gl_Frustum - case OP_GL_TEX_ENVI: - return op_gl_TexEnvi - case OP_GL_ORTHO: - return op_gl_Ortho - case OP_GL_SCALEF: - return op_gl_Scalef - case OP_GL_TEX_COORD_2D: - return op_gl_TexCoord2d - case OP_GL_TEX_COORD_2F: - return op_gl_TexCoord2f + opcodeHandlerFinders = append(opcodeHandlerFinders, handleExtraOpcode) +} - // gl_1_0 - case OP_GL_CULL_FACE: - return op_gl_CullFace - case OP_GL_FRONT_FACE: - return op_gl_FrontFace - case OP_GL_HINT: - return op_gl_Hint - case OP_GL_SCISSOR: - return op_gl_Scissor - case OP_GL_TEX_PARAMETERI: - return op_gl_TexParameteri - case OP_GL_TEX_IMAGE_2D: - return op_gl_TexImage2D - case OP_GL_CLEAR: - return op_gl_Clear - case OP_GL_CLEAR_COLOR: - return op_gl_ClearColor - case OP_GL_CLEAR_STENCIL: - return op_gl_ClearStencil - case OP_GL_CLEAR_DEPTH: - return op_gl_ClearDepth - case OP_GL_STENCIL_MASK: - return op_gl_StencilMask - case OP_GL_COLOR_MASK: - return op_gl_ColorMask - case OP_GL_DEPTH_MASK: - return op_gl_DepthMask - case OP_GL_DISABLE: - return op_gl_Disable - case OP_GL_ENABLE: - return op_gl_Enable - case OP_GL_BLEND_FUNC: - return op_gl_BlendFunc - case OP_GL_STENCIL_FUNC: - return op_gl_StencilFunc - case OP_GL_STENCIL_OP: - return op_gl_StencilOp - case OP_GL_DEPTH_FUNC: - return op_gl_DepthFunc - case OP_GL_GET_ERROR: - return op_gl_GetError - case OP_GL_GET_TEX_LEVEL_PARAMETERIV: - return op_gl_GetTexLevelParameteriv - case OP_GL_DEPTH_RANGE: - return op_gl_DepthRange - case OP_GL_VIEWPORT: - return op_gl_Viewport +func handleExtraOpcode(opCode int) opcodeHandler { + switch opCode { + // gogl + case OP_GL_INIT: + return op_gl_Init + case OP_GL_DESTROY: + return op_gl_Destroy + case OP_GL_STRS: + return op_gl_Strs + case OP_GL_FREE: + return op_gl_Free + case OP_GL_NEW_TEXTURE: + return op_gl_NewTexture + case OP_GL_NEW_TEXTURE_CUBE: + return op_gl_NewTextureCube + case OP_GL_NEW_GIF: + return op_gl_NewGIF + case OP_GL_FREE_GIF: + return op_gl_FreeGIF + case OP_GL_GIF_FRAME_TO_TEXTURE: + return op_gl_GIFFrameToTexture + case OP_GL_APPEND_F32: + return opGlAppend + case OP_GL_APPEND_UI16: + return opGlAppend + case OP_GL_APPEND_UI32: + return opGlAppend - // gl_1_1 - case OP_GL_DRAW_ARRAYS: - return op_gl_DrawArrays - case OP_GL_DRAW_ELEMENTS: - return op_gl_DrawElements - case OP_GL_BIND_TEXTURE: - return op_gl_BindTexture - case OP_GL_DELETE_TEXTURES: - return op_gl_DeleteTextures - case OP_GL_GEN_TEXTURES: - return op_gl_GenTextures + // gl_0_0 + case OP_GL_MATRIX_MODE: + return op_gl_MatrixMode + case OP_GL_ROTATEF: + return op_gl_Rotatef + case OP_GL_TRANSLATEF: + return op_gl_Translatef + case OP_GL_LOAD_IDENTITY: + return op_gl_LoadIdentity + case OP_GL_PUSH_MATRIX: + return op_gl_PushMatrix + case OP_GL_POP_MATRIX: + return op_gl_PopMatrix + case OP_GL_ENABLE_CLIENT_STATE: + return op_gl_EnableClientState + case OP_GL_COLOR3F: + return op_gl_Color3f + case OP_GL_COLOR4F: + return op_gl_Color4f + case OP_GL_BEGIN: + return op_gl_Begin + case OP_GL_END: + return op_gl_End + case OP_GL_NORMAL3F: + return op_gl_Normal3f + case OP_GL_VERTEX_2F: + return op_gl_Vertex2f + case OP_GL_VERTEX_3F: + return op_gl_Vertex3f + case OP_GL_LIGHTFV: + return op_gl_Lightfv + case OP_GL_FRUSTUM: + return op_gl_Frustum + case OP_GL_TEX_ENVI: + return op_gl_TexEnvi + case OP_GL_ORTHO: + return op_gl_Ortho + case OP_GL_SCALEF: + return op_gl_Scalef + case OP_GL_TEX_COORD_2D: + return op_gl_TexCoord2d + case OP_GL_TEX_COORD_2F: + return op_gl_TexCoord2f - // gl_1_3 - case OP_GL_ACTIVE_TEXTURE: - return op_gl_ActiveTexture + // gl_1_0 + case OP_GL_CULL_FACE: + return op_gl_CullFace + case OP_GL_FRONT_FACE: + return op_gl_FrontFace + case OP_GL_HINT: + return op_gl_Hint + case OP_GL_SCISSOR: + return op_gl_Scissor + case OP_GL_TEX_PARAMETERI: + return op_gl_TexParameteri + case OP_GL_TEX_IMAGE_2D: + return op_gl_TexImage2D + case OP_GL_CLEAR: + return op_gl_Clear + case OP_GL_CLEAR_COLOR: + return op_gl_ClearColor + case OP_GL_CLEAR_STENCIL: + return op_gl_ClearStencil + case OP_GL_CLEAR_DEPTH: + return op_gl_ClearDepth + case OP_GL_STENCIL_MASK: + return op_gl_StencilMask + case OP_GL_COLOR_MASK: + return op_gl_ColorMask + case OP_GL_DEPTH_MASK: + return op_gl_DepthMask + case OP_GL_DISABLE: + return op_gl_Disable + case OP_GL_ENABLE: + return op_gl_Enable + case OP_GL_BLEND_FUNC: + return op_gl_BlendFunc + case OP_GL_STENCIL_FUNC: + return op_gl_StencilFunc + case OP_GL_STENCIL_OP: + return op_gl_StencilOp + case OP_GL_DEPTH_FUNC: + return op_gl_DepthFunc + case OP_GL_GET_ERROR: + return op_gl_GetError + case OP_GL_GET_TEX_LEVEL_PARAMETERIV: + return op_gl_GetTexLevelParameteriv + case OP_GL_DEPTH_RANGE: + return op_gl_DepthRange + case OP_GL_VIEWPORT: + return op_gl_Viewport - // gl_1_4 - case OP_GL_BLEND_FUNC_SEPARATE: - return op_gl_BlendFuncSeparate - // gl_1_5 - case OP_GL_BIND_BUFFER: - return op_gl_BindBuffer - case OP_GL_DELETE_BUFFERS: - return op_gl_DeleteBuffers - case OP_GL_GEN_BUFFERS: - return op_gl_GenBuffers - case OP_GL_BUFFER_DATA: - return op_gl_BufferData - case OP_GL_BUFFER_SUB_DATA: - return op_gl_BufferSubData + // gl_1_1 + case OP_GL_DRAW_ARRAYS: + return op_gl_DrawArrays + case OP_GL_DRAW_ELEMENTS: + return op_gl_DrawElements + case OP_GL_BIND_TEXTURE: + return op_gl_BindTexture + case OP_GL_DELETE_TEXTURES: + return op_gl_DeleteTextures + case OP_GL_GEN_TEXTURES: + return op_gl_GenTextures - // gl_2_0 - case OP_GL_DRAW_BUFFERS: - return op_gl_DrawBuffers - case OP_GL_STENCIL_OP_SEPARATE: - return op_gl_StencilOpSeparate - case OP_GL_STENCIL_FUNC_SEPARATE: - return op_gl_StencilFuncSeparate - case OP_GL_STENCIL_MASK_SEPARATE: - return op_gl_StencilMaskSeparate - case OP_GL_ATTACH_SHADER: - return op_gl_AttachShader - case OP_GL_BIND_ATTRIB_LOCATION: - return op_gl_BindAttribLocation - case OP_GL_COMPILE_SHADER: - return op_gl_CompileShader - case OP_GL_CREATE_PROGRAM: - return op_gl_CreateProgram - case OP_GL_CREATE_SHADER: - return op_gl_CreateShader - case OP_GL_DELETE_PROGRAM: - return op_gl_DeleteProgram - case OP_GL_DELETE_SHADER: - return op_gl_DeleteShader - case OP_GL_DETACH_SHADER: - return op_gl_DetachShader - case OP_GL_ENABLE_VERTEX_ATTRIB_ARRAY: - return op_gl_EnableVertexAttribArray - case OP_GL_GET_ATTRIB_LOCATION: - return op_gl_GetAttribLocation - case OP_GL_GET_SHADERIV: - return op_gl_GetShaderiv - case OP_GL_GET_UNIFORM_LOCATION: - return op_gl_GetUniformLocation - case OP_GL_LINK_PROGRAM: - return op_gl_LinkProgram - case OP_GL_SHADER_SOURCE: - return op_gl_ShaderSource - case OP_GL_USE_PROGRAM: - return op_gl_UseProgram - case OP_GL_UNIFORM_1F: - return op_gl_Uniform1f - case OP_GL_UNIFORM_2F: - return op_gl_Uniform2f - case OP_GL_UNIFORM_3F: - return op_gl_Uniform3f - case OP_GL_UNIFORM_4F: - return op_gl_Uniform4f - case OP_GL_UNIFORM_1I: - return op_gl_Uniform1i - case OP_GL_UNIFORM_2I: - return op_gl_Uniform2i - case OP_GL_UNIFORM_3I: - return op_gl_Uniform3i - case OP_GL_UNIFORM_4I: - return op_gl_Uniform4i - case OP_GL_UNIFORM_1FV: - return op_gl_Uniform1fv - case OP_GL_UNIFORM_2FV: - return op_gl_Uniform2fv - case OP_GL_UNIFORM_3FV: - return op_gl_Uniform3fv - case OP_GL_UNIFORM_4FV: - return op_gl_Uniform4fv - case OP_GL_UNIFORM_1IV: - return op_gl_Uniform1iv - case OP_GL_UNIFORM_2IV: - return op_gl_Uniform2iv - case OP_GL_UNIFORM_3IV: - return op_gl_Uniform3iv - case OP_GL_UNIFORM_4IV: - return op_gl_Uniform4iv - case OP_GL_UNIFORM_MATRIX_2FV: - return op_gl_UniformMatrix2fv - case OP_GL_UNIFORM_MATRIX_3FV: - return op_gl_UniformMatrix3fv - case OP_GL_UNIFORM_MATRIX_4FV: - return op_gl_UniformMatrix4fv - case OP_GL_UNIFORM_V4F: - return op_gl_UniformV4F - case OP_GL_UNIFORM_M44F: - return op_gl_UniformM44F - case OP_GL_UNIFORM_M44FV: - return op_gl_UniformM44FV - case OP_GL_VERTEX_ATTRIB_POINTER: - return op_gl_VertexAttribPointer - case OP_GL_VERTEX_ATTRIB_POINTER_I32: - return op_gl_VertexAttribPointerI32 + // gl_1_3 + case OP_GL_ACTIVE_TEXTURE: + return op_gl_ActiveTexture - // gl_3_0 - case OP_GL_CLEAR_BUFFER_I: - return op_gl_ClearBufferI - case OP_GL_CLEAR_BUFFER_UI: - return op_gl_ClearBufferUI - case OP_GL_CLEAR_BUFFER_F: - return op_gl_ClearBufferF - case OP_GL_BIND_RENDERBUFFER: - return op_gl_BindRenderbuffer - case OP_GL_DELETE_RENDERBUFFERS: - return op_gl_DeleteRenderbuffers - case OP_GL_GEN_RENDERBUFFERS: - return op_gl_GenRenderbuffers - case OP_GL_RENDERBUFFER_STORAGE: - return op_gl_RenderbufferStorage - case OP_GL_BIND_FRAMEBUFFER: - return op_gl_BindFramebuffer - case OP_GL_DELETE_FRAMEBUFFERS: - return op_gl_DeleteFramebuffers - case OP_GL_GEN_FRAMEBUFFERS: - return op_gl_GenFramebuffers - case OP_GL_CHECK_FRAMEBUFFER_STATUS: - return op_gl_CheckFramebufferStatus - case OP_GL_FRAMEBUFFER_TEXTURE_2D: - return op_gl_FramebufferTexture2D - case OP_GL_FRAMEBUFFER_RENDERBUFFER: - return op_gl_FramebufferRenderbuffer - case OP_GL_GENERATE_MIPMAP: - return op_gl_GenerateMipmap - case OP_GL_BIND_VERTEX_ARRAY: - return op_gl_BindVertexArray - case OP_GL_DELETE_VERTEX_ARRAYS: - return op_gl_DeleteVertexArrays - case OP_GL_GEN_VERTEX_ARRAYS: - return op_gl_GenVertexArrays + // gl_1_4 + case OP_GL_BLEND_FUNC_SEPARATE: + return op_gl_BlendFuncSeparate + // gl_1_5 + case OP_GL_BIND_BUFFER: + return op_gl_BindBuffer + case OP_GL_DELETE_BUFFERS: + return op_gl_DeleteBuffers + case OP_GL_GEN_BUFFERS: + return op_gl_GenBuffers + case OP_GL_BUFFER_DATA: + return op_gl_BufferData + case OP_GL_BUFFER_SUB_DATA: + return op_gl_BufferSubData - // goglfw - case OP_GLFW_FULLSCREEN: - return op_glfw_Fullscreen + // gl_2_0 + case OP_GL_DRAW_BUFFERS: + return op_gl_DrawBuffers + case OP_GL_STENCIL_OP_SEPARATE: + return op_gl_StencilOpSeparate + case OP_GL_STENCIL_FUNC_SEPARATE: + return op_gl_StencilFuncSeparate + case OP_GL_STENCIL_MASK_SEPARATE: + return op_gl_StencilMaskSeparate + case OP_GL_ATTACH_SHADER: + return op_gl_AttachShader + case OP_GL_BIND_ATTRIB_LOCATION: + return op_gl_BindAttribLocation + case OP_GL_COMPILE_SHADER: + return op_gl_CompileShader + case OP_GL_CREATE_PROGRAM: + return op_gl_CreateProgram + case OP_GL_CREATE_SHADER: + return op_gl_CreateShader + case OP_GL_DELETE_PROGRAM: + return op_gl_DeleteProgram + case OP_GL_DELETE_SHADER: + return op_gl_DeleteShader + case OP_GL_DETACH_SHADER: + return op_gl_DetachShader + case OP_GL_ENABLE_VERTEX_ATTRIB_ARRAY: + return op_gl_EnableVertexAttribArray + case OP_GL_GET_ATTRIB_LOCATION: + return op_gl_GetAttribLocation + case OP_GL_GET_SHADERIV: + return op_gl_GetShaderiv + case OP_GL_GET_UNIFORM_LOCATION: + return op_gl_GetUniformLocation + case OP_GL_LINK_PROGRAM: + return op_gl_LinkProgram + case OP_GL_SHADER_SOURCE: + return op_gl_ShaderSource + case OP_GL_USE_PROGRAM: + return op_gl_UseProgram + case OP_GL_UNIFORM_1F: + return op_gl_Uniform1f + case OP_GL_UNIFORM_2F: + return op_gl_Uniform2f + case OP_GL_UNIFORM_3F: + return op_gl_Uniform3f + case OP_GL_UNIFORM_4F: + return op_gl_Uniform4f + case OP_GL_UNIFORM_1I: + return op_gl_Uniform1i + case OP_GL_UNIFORM_2I: + return op_gl_Uniform2i + case OP_GL_UNIFORM_3I: + return op_gl_Uniform3i + case OP_GL_UNIFORM_4I: + return op_gl_Uniform4i + case OP_GL_UNIFORM_1FV: + return op_gl_Uniform1fv + case OP_GL_UNIFORM_2FV: + return op_gl_Uniform2fv + case OP_GL_UNIFORM_3FV: + return op_gl_Uniform3fv + case OP_GL_UNIFORM_4FV: + return op_gl_Uniform4fv + case OP_GL_UNIFORM_1IV: + return op_gl_Uniform1iv + case OP_GL_UNIFORM_2IV: + return op_gl_Uniform2iv + case OP_GL_UNIFORM_3IV: + return op_gl_Uniform3iv + case OP_GL_UNIFORM_4IV: + return op_gl_Uniform4iv + case OP_GL_UNIFORM_MATRIX_2FV: + return op_gl_UniformMatrix2fv + case OP_GL_UNIFORM_MATRIX_3FV: + return op_gl_UniformMatrix3fv + case OP_GL_UNIFORM_MATRIX_4FV: + return op_gl_UniformMatrix4fv + case OP_GL_UNIFORM_V4F: + return op_gl_UniformV4F + case OP_GL_UNIFORM_M44F: + return op_gl_UniformM44F + case OP_GL_UNIFORM_M44FV: + return op_gl_UniformM44FV + case OP_GL_VERTEX_ATTRIB_POINTER: + return op_gl_VertexAttribPointer + case OP_GL_VERTEX_ATTRIB_POINTER_I32: + return op_gl_VertexAttribPointerI32 + + // gl_3_0 + case OP_GL_CLEAR_BUFFER_I: + return op_gl_ClearBufferI + case OP_GL_CLEAR_BUFFER_UI: + return op_gl_ClearBufferUI + case OP_GL_CLEAR_BUFFER_F: + return op_gl_ClearBufferF + case OP_GL_BIND_RENDERBUFFER: + return op_gl_BindRenderbuffer + case OP_GL_DELETE_RENDERBUFFERS: + return op_gl_DeleteRenderbuffers + case OP_GL_GEN_RENDERBUFFERS: + return op_gl_GenRenderbuffers + case OP_GL_RENDERBUFFER_STORAGE: + return op_gl_RenderbufferStorage + case OP_GL_BIND_FRAMEBUFFER: + return op_gl_BindFramebuffer + case OP_GL_DELETE_FRAMEBUFFERS: + return op_gl_DeleteFramebuffers + case OP_GL_GEN_FRAMEBUFFERS: + return op_gl_GenFramebuffers + case OP_GL_CHECK_FRAMEBUFFER_STATUS: + return op_gl_CheckFramebufferStatus + case OP_GL_FRAMEBUFFER_TEXTURE_2D: + return op_gl_FramebufferTexture2D + case OP_GL_FRAMEBUFFER_RENDERBUFFER: + return op_gl_FramebufferRenderbuffer + case OP_GL_GENERATE_MIPMAP: + return op_gl_GenerateMipmap + case OP_GL_BIND_VERTEX_ARRAY: + return op_gl_BindVertexArray + case OP_GL_DELETE_VERTEX_ARRAYS: + return op_gl_DeleteVertexArrays + case OP_GL_GEN_VERTEX_ARRAYS: + return op_gl_GenVertexArrays - // glfw - case OP_GLFW_INIT: - return op_glfw_Init - case OP_GLFW_WINDOW_HINT: - return op_glfw_WindowHint - case OP_GLFW_CREATE_WINDOW: - return op_glfw_CreateWindow - case OP_GLFW_MAKE_CONTEXT_CURRENT: - return op_glfw_MakeContextCurrent - case OP_GLFW_SHOULD_CLOSE: - return op_glfw_ShouldClose - case OP_GLFW_SET_SHOULD_CLOSE: - return op_glfw_SetShouldClose - case OP_GLFW_POLL_EVENTS: - return op_glfw_PollEvents - case OP_GLFW_SWAP_BUFFERS: - return op_glfw_SwapBuffers - case OP_GLFW_GET_FRAMEBUFFER_SIZE: - return op_glfw_GetFramebufferSize - case OP_GLFW_GET_WINDOW_POS: - return op_glfw_GetWindowPos - case OP_GLFW_GET_WINDOW_SIZE: - return op_glfw_GetWindowSize - case OP_GLFW_SWAP_INTERVAL: - return op_glfw_SwapInterval - case OP_GLFW_SET_KEY_CALLBACK: - return op_glfw_SetKeyCallback - case OP_GLFW_SET_KEY_CALLBACK_EX: - return op_glfw_SetKeyCallbackEx - case OP_GLFW_GET_TIME: - return op_glfw_GetTime - case OP_GLFW_SET_MOUSE_BUTTON_CALLBACK: - return op_glfw_SetMouseButtonCallback - case OP_GLFW_SET_MOUSE_BUTTON_CALLBACK_EX: - return op_glfw_SetMouseButtonCallbackEx - case OP_GLFW_SET_CURSOR_POS_CALLBACK: - return op_glfw_SetCursorPosCallback - case OP_GLFW_SET_CURSOR_POS_CALLBACK_EX: - return op_glfw_SetCursorPosCallbackEx - case OP_GLFW_SET_FRAMEBUFFER_SIZE_CALLBACK: - return op_glfw_SetFramebufferSizeCallback - case OP_GLFW_SET_WINDOW_POS_CALLBACK: - return op_glfw_SetWindowPosCallback - case OP_GLFW_SET_WINDOW_SIZE_CALLBACK: - return op_glfw_SetWindowSizeCallback - case OP_GLFW_GET_CURSOR_POS: - return op_glfw_GetCursorPos - case OP_GLFW_SET_INPUT_MODE: - return op_glfw_SetInputMode - case OP_GLFW_SET_WINDOW_POS: - return op_glfw_SetWindowPos - case OP_GLFW_GET_KEY: - return op_glfw_GetKey - case OP_GLFW_FUNC_I32_I32: - return op_glfw_func_i32_i32 - case OP_GLFW_CALL_I32_I32: - return op_glfw_call_i32_i32 + // goglfw + case OP_GLFW_FULLSCREEN: + return op_glfw_Fullscreen - // gltext - case OP_GLTEXT_LOAD_TRUE_TYPE: - return op_gltext_LoadTrueType - case OP_GLTEXT_PRINTF: - return op_gltext_Printf - case OP_GLTEXT_METRICS: - return op_gltext_Metrics - case OP_GLTEXT_TEXTURE: - return op_gltext_Texture - case OP_GLTEXT_NEXT_GLYPH: - return op_gltext_NextGlyph - case OP_GLTEXT_GLYPH_BOUNDS: - return op_gltext_GlyphBounds - case OP_GLTEXT_GLYPH_METRICS: - return op_gltext_GlyphMetrics - case OP_GLTEXT_GLYPH_INFO: - return op_gltext_GlyphInfo + // glfw + case OP_GLFW_INIT: + return op_glfw_Init + case OP_GLFW_WINDOW_HINT: + return op_glfw_WindowHint + case OP_GLFW_CREATE_WINDOW: + return op_glfw_CreateWindow + case OP_GLFW_MAKE_CONTEXT_CURRENT: + return op_glfw_MakeContextCurrent + case OP_GLFW_SHOULD_CLOSE: + return op_glfw_ShouldClose + case OP_GLFW_SET_SHOULD_CLOSE: + return op_glfw_SetShouldClose + case OP_GLFW_POLL_EVENTS: + return op_glfw_PollEvents + case OP_GLFW_SWAP_BUFFERS: + return op_glfw_SwapBuffers + case OP_GLFW_GET_FRAMEBUFFER_SIZE: + return op_glfw_GetFramebufferSize + case OP_GLFW_GET_WINDOW_POS: + return op_glfw_GetWindowPos + case OP_GLFW_GET_WINDOW_SIZE: + return op_glfw_GetWindowSize + case OP_GLFW_SWAP_INTERVAL: + return op_glfw_SwapInterval + case OP_GLFW_SET_KEY_CALLBACK: + return op_glfw_SetKeyCallback + case OP_GLFW_SET_KEY_CALLBACK_EX: + return op_glfw_SetKeyCallbackEx + case OP_GLFW_GET_TIME: + return op_glfw_GetTime + case OP_GLFW_SET_MOUSE_BUTTON_CALLBACK: + return op_glfw_SetMouseButtonCallback + case OP_GLFW_SET_MOUSE_BUTTON_CALLBACK_EX: + return op_glfw_SetMouseButtonCallbackEx + case OP_GLFW_SET_CURSOR_POS_CALLBACK: + return op_glfw_SetCursorPosCallback + case OP_GLFW_SET_CURSOR_POS_CALLBACK_EX: + return op_glfw_SetCursorPosCallbackEx + case OP_GLFW_SET_FRAMEBUFFER_SIZE_CALLBACK: + return op_glfw_SetFramebufferSizeCallback + case OP_GLFW_SET_WINDOW_POS_CALLBACK: + return op_glfw_SetWindowPosCallback + case OP_GLFW_SET_WINDOW_SIZE_CALLBACK: + return op_glfw_SetWindowSizeCallback + case OP_GLFW_GET_CURSOR_POS: + return op_glfw_GetCursorPos + case OP_GLFW_SET_INPUT_MODE: + return op_glfw_SetInputMode + case OP_GLFW_SET_WINDOW_POS: + return op_glfw_SetWindowPos + case OP_GLFW_GET_KEY: + return op_glfw_GetKey + case OP_GLFW_FUNC_I32_I32: + return op_glfw_func_i32_i32 + case OP_GLFW_CALL_I32_I32: + return op_glfw_call_i32_i32 - // goal - case OP_AL_LOAD_WAV: - return opAlLoadWav + // gltext + case OP_GLTEXT_LOAD_TRUE_TYPE: + return op_gltext_LoadTrueType + case OP_GLTEXT_PRINTF: + return op_gltext_Printf + case OP_GLTEXT_METRICS: + return op_gltext_Metrics + case OP_GLTEXT_TEXTURE: + return op_gltext_Texture + case OP_GLTEXT_NEXT_GLYPH: + return op_gltext_NextGlyph + case OP_GLTEXT_GLYPH_BOUNDS: + return op_gltext_GlyphBounds + case OP_GLTEXT_GLYPH_METRICS: + return op_gltext_GlyphMetrics + case OP_GLTEXT_GLYPH_INFO: + return op_gltext_GlyphInfo - // openal - case OP_AL_CLOSE_DEVICE: - return opAlCloseDevice - case OP_AL_DELETE_BUFFERS: - return opAlDeleteBuffers - case OP_AL_DELETE_SOURCES: - return opAlDeleteSources - case OP_AL_DEVICE_ERROR: - return opAlDeviceError - case OP_AL_ERROR: - return opAlError - case OP_AL_EXTENSIONS: - return opAlExtensions - case OP_AL_OPEN_DEVICE: - return opAlOpenDevice - case OP_AL_PAUSE_SOURCES: - return opAlPauseSources - case OP_AL_PLAY_SOURCES: - return opAlPlaySources - case OP_AL_RENDERER: - return opAlRenderer - case OP_AL_REWIND_SOURCES: - return opAlRewindSources - case OP_AL_STOP_SOURCES: - return opAlStopSources - case OP_AL_VENDOR: - return opAlVendor - case OP_AL_VERSION: - return opAlVersion - case OP_AL_GEN_BUFFERS: - return opAlGenBuffers - case OP_AL_BUFFER_DATA: - return opAlBufferData - case OP_AL_GEN_SOURCES: - return opAlGenSources - case OP_AL_SOURCE_BUFFERS_PROCESSED: - return opAlSourceBuffersProcessed - case OP_AL_SOURCE_BUFFERS_QUEUED: - return opAlSourceBuffersQueued - case OP_AL_SOURCE_QUEUE_BUFFERS: - return opAlSourceQueueBuffers - case OP_AL_SOURCE_STATE: - return opAlSourceState - case OP_AL_SOURCE_UNQUEUE_BUFFERS: - return opAlSourceUnqueueBuffers - } + // goal + case OP_AL_LOAD_WAV: + return opAlLoadWav - return nil + // openal + case OP_AL_CLOSE_DEVICE: + return opAlCloseDevice + case OP_AL_DELETE_BUFFERS: + return opAlDeleteBuffers + case OP_AL_DELETE_SOURCES: + return opAlDeleteSources + case OP_AL_DEVICE_ERROR: + return opAlDeviceError + case OP_AL_ERROR: + return opAlError + case OP_AL_EXTENSIONS: + return opAlExtensions + case OP_AL_OPEN_DEVICE: + return opAlOpenDevice + case OP_AL_PAUSE_SOURCES: + return opAlPauseSources + case OP_AL_PLAY_SOURCES: + return opAlPlaySources + case OP_AL_RENDERER: + return opAlRenderer + case OP_AL_REWIND_SOURCES: + return opAlRewindSources + case OP_AL_STOP_SOURCES: + return opAlStopSources + case OP_AL_VENDOR: + return opAlVendor + case OP_AL_VERSION: + return opAlVersion + case OP_AL_GEN_BUFFERS: + return opAlGenBuffers + case OP_AL_BUFFER_DATA: + return opAlBufferData + case OP_AL_GEN_SOURCES: + return opAlGenSources + case OP_AL_SOURCE_BUFFERS_PROCESSED: + return opAlSourceBuffersProcessed + case OP_AL_SOURCE_BUFFERS_QUEUED: + return opAlSourceBuffersQueued + case OP_AL_SOURCE_QUEUE_BUFFERS: + return opAlSourceQueueBuffers + case OP_AL_SOURCE_STATE: + return opAlSourceState + case OP_AL_SOURCE_UNQUEUE_BUFFERS: + return opAlSourceUnqueueBuffers } - opcodeHandlerFinders = append(opcodeHandlerFinders, handleOpcode) + return nil }