master
Dibyendu Majumdar 3 years ago
parent 53ec0c19b3
commit e3d8203bd9

@ -344,6 +344,10 @@ static const char Lua_header[] =
"#define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE)\n" "#define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE)\n"
"#define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT)\n" "#define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT)\n"
"#define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE)\n" "#define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE)\n"
"#define RAVI_TM_STRING_OR_NIL (RAVI_TM_STRING | RAVI_TM_NIL)\n"
"#define RAVI_TM_FUNCTION_OR_NIL (RAVI_TM_FUNCTION | RAVI_TM_NIL)\n"
"#define RAVI_TM_BOOLEAN_OR_NIL (RAVI_TM_BOOLEAN | RAVI_TM_NIL)\n"
"#define RAVI_TM_USERDATA_OR_NIL (RAVI_TM_USERDATA | RAVI_TM_NIL)\n"
"#define RAVI_TM_ANY (~0)\n" "#define RAVI_TM_ANY (~0)\n"
"typedef enum {\n" "typedef enum {\n"
"RAVI_TNIL = RAVI_TM_NIL, /* NIL */\n" "RAVI_TNIL = RAVI_TM_NIL, /* NIL */\n"
@ -353,12 +357,12 @@ static const char Lua_header[] =
"RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */\n" "RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */\n"
"RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */\n" "RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */\n"
"RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */\n" "RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */\n"
"RAVI_TSTRING = RAVI_TM_STRING | RAVI_TM_NIL, /* string */\n" "RAVI_TSTRING = RAVI_TM_STRING_OR_NIL, /* string */\n"
"RAVI_TFUNCTION = RAVI_TM_FUNCTION | RAVI_TM_NIL, /* Lua or C Function */\n" "RAVI_TFUNCTION = RAVI_TM_FUNCTION_OR_NIL, /* Lua or C Function */\n"
"RAVI_TBOOLEAN = RAVI_TM_BOOLEAN | RAVI_TM_NIL, /* boolean */\n" "RAVI_TBOOLEAN = RAVI_TM_BOOLEAN_OR_NIL, /* boolean */\n"
"RAVI_TTRUE = RAVI_TM_TRUE,\n" "RAVI_TTRUE = RAVI_TM_TRUE,\n"
"RAVI_TFALSE = RAVI_TM_FALSE,\n" "RAVI_TFALSE = RAVI_TM_FALSE,\n"
"RAVI_TUSERDATA = RAVI_TM_USERDATA | RAVI_TM_NIL, /* userdata or lightuserdata */\n" "RAVI_TUSERDATA = RAVI_TM_USERDATA_OR_NIL, /* userdata or lightuserdata */\n"
"RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */\n" "RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */\n"
"} ravitype_t;\n" "} ravitype_t;\n"
"typedef struct Upvaldesc {\n" "typedef struct Upvaldesc {\n"

@ -700,11 +700,11 @@ static void discharge2reg (FuncState *fs, expdesc *e, int reg) {
break; break;
default: default:
luaK_codeABC(fs, OP_MOVE, reg, e->u.info, 0); luaK_codeABC(fs, OP_MOVE, reg, e->u.info, 0);
if (ravi_type == (RAVI_TM_STRING | RAVI_TM_NIL)) if (ravi_type == RAVI_TM_STRING_OR_NIL)
luaK_codeABC(fs, OP_RAVI_TOSTRING, reg, 0, 0); luaK_codeABC(fs, OP_RAVI_TOSTRING, reg, 0, 0);
else if (ravi_type == (RAVI_TM_FUNCTION | RAVI_TM_NIL)) else if (ravi_type == RAVI_TM_FUNCTION_OR_NIL)
luaK_codeABC(fs, OP_RAVI_TOCLOSURE, reg, 0, 0); luaK_codeABC(fs, OP_RAVI_TOCLOSURE, reg, 0, 0);
else if (ravi_type == (RAVI_TM_USERDATA | RAVI_TM_NIL) && usertype) else if (ravi_type == RAVI_TM_USERDATA_OR_NIL && usertype)
luaK_codeABx(fs, OP_RAVI_TOTYPE, reg, luaK_stringK(fs, usertype)); luaK_codeABx(fs, OP_RAVI_TOTYPE, reg, luaK_stringK(fs, usertype));
break; break;
} }
@ -869,9 +869,9 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
var->ravi_type_map == RAVI_TM_FLOAT_ARRAY || var->ravi_type_map == RAVI_TM_FLOAT_ARRAY ||
var->ravi_type_map == RAVI_TM_INTEGER_ARRAY || var->ravi_type_map == RAVI_TM_INTEGER_ARRAY ||
var->ravi_type_map == RAVI_TM_TABLE || var->ravi_type_map == RAVI_TM_TABLE ||
var->ravi_type_map == (RAVI_TM_STRING | RAVI_TM_NIL) || var->ravi_type_map == RAVI_TM_STRING_OR_NIL ||
var->ravi_type_map == (RAVI_TM_FUNCTION | RAVI_TM_NIL) || var->ravi_type_map == RAVI_TM_FUNCTION_OR_NIL ||
var->ravi_type_map == (RAVI_TM_USERDATA | RAVI_TM_NIL))) { var->ravi_type_map == RAVI_TM_USERDATA_OR_NIL)) {
/* handled by MOVEI, MOVEF, MOVEIARRAY, MOVEFARRAY at runtime */ /* handled by MOVEI, MOVEF, MOVEIARRAY, MOVEFARRAY at runtime */
return; return;
} }
@ -913,8 +913,8 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
"Invalid assignment: %s expected", "Invalid assignment: %s expected",
var->ravi_type_map == RAVI_TM_TABLE ? "table" : (var->ravi_type_map == RAVI_TM_FLOAT_ARRAY ? "number[]" : "integer[]"))); var->ravi_type_map == RAVI_TM_TABLE ? "table" : (var->ravi_type_map == RAVI_TM_FLOAT_ARRAY ? "number[]" : "integer[]")));
} }
else if (var->ravi_type_map == (RAVI_TM_STRING | RAVI_TM_NIL)) { else if (var->ravi_type_map == RAVI_TM_STRING_OR_NIL) {
if ((ex_ravi_type_map & ~(RAVI_TM_STRING | RAVI_TM_NIL)) == 0) if ((ex_ravi_type_map & ~RAVI_TM_STRING_OR_NIL) == 0)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
@ -922,8 +922,8 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
fs->ls->L, fs->ls->L,
"Invalid assignment: string expected")); "Invalid assignment: string expected"));
} }
else if (var->ravi_type_map == (RAVI_TM_FUNCTION | RAVI_TM_NIL)) { else if (var->ravi_type_map == RAVI_TM_FUNCTION_OR_NIL) {
if ((ex_ravi_type_map & ~(RAVI_TM_FUNCTION | RAVI_TM_NIL)) == 0) if ((ex_ravi_type_map & ~RAVI_TM_FUNCTION_OR_NIL) == 0)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
@ -931,8 +931,8 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
fs->ls->L, fs->ls->L,
"Invalid assignment: function expected")); "Invalid assignment: function expected"));
} }
else if (var->ravi_type_map == (RAVI_TM_USERDATA | RAVI_TM_NIL)) { else if (var->ravi_type_map == RAVI_TM_USERDATA_OR_NIL) {
if ((ex_ravi_type_map & ~(RAVI_TM_USERDATA | RAVI_TM_NIL)) == 0 && if ((ex_ravi_type_map & ~RAVI_TM_USERDATA_OR_NIL) == 0 &&
(!(ex_ravi_type_map & RAVI_TM_USERDATA) || (var->usertype && var->usertype == ex->usertype))) (!(ex_ravi_type_map & RAVI_TM_USERDATA) || (var->usertype && var->usertype == ex->usertype)))
return; return;
luaX_syntaxerror( luaX_syntaxerror(
@ -948,8 +948,8 @@ static OpCode check_valid_setupval(FuncState *fs, expdesc *var, expdesc *ex,
OpCode op = OP_SETUPVAL; OpCode op = OP_SETUPVAL;
if ((var->ravi_type_map == RAVI_TM_INTEGER || var->ravi_type_map == RAVI_TM_FLOAT || if ((var->ravi_type_map == RAVI_TM_INTEGER || var->ravi_type_map == RAVI_TM_FLOAT ||
var->ravi_type_map == RAVI_TM_INTEGER_ARRAY || var->ravi_type_map == RAVI_TM_FLOAT_ARRAY || var->ravi_type_map == RAVI_TM_INTEGER_ARRAY || var->ravi_type_map == RAVI_TM_FLOAT_ARRAY ||
var->ravi_type_map == RAVI_TM_TABLE || var->ravi_type_map == (RAVI_TM_STRING | RAVI_TM_NIL) || var->ravi_type_map == RAVI_TM_TABLE || var->ravi_type_map == RAVI_TM_STRING_OR_NIL ||
var->ravi_type_map == (RAVI_TM_FUNCTION | RAVI_TM_NIL) || var->ravi_type_map == (RAVI_TM_USERDATA | RAVI_TM_NIL)) && var->ravi_type_map == RAVI_TM_FUNCTION_OR_NIL || var->ravi_type_map == RAVI_TM_USERDATA_OR_NIL) &&
ex->ravi_type_map & ~var->ravi_type_map) { ex->ravi_type_map & ~var->ravi_type_map) {
if (var->ravi_type_map == RAVI_TM_INTEGER) if (var->ravi_type_map == RAVI_TM_INTEGER)
op = OP_RAVI_SETUPVALI; op = OP_RAVI_SETUPVALI;
@ -961,11 +961,11 @@ static OpCode check_valid_setupval(FuncState *fs, expdesc *var, expdesc *ex,
op = OP_RAVI_SETUPVAL_FARRAY; op = OP_RAVI_SETUPVAL_FARRAY;
else if (var->ravi_type_map == RAVI_TM_TABLE) else if (var->ravi_type_map == RAVI_TM_TABLE)
op = OP_RAVI_SETUPVALT; op = OP_RAVI_SETUPVALT;
else if (var->ravi_type_map == (RAVI_TM_STRING | RAVI_TM_NIL)) else if (var->ravi_type_map == RAVI_TM_STRING_OR_NIL)
luaK_codeABC(fs, OP_RAVI_TOSTRING, reg, 0, 0); luaK_codeABC(fs, OP_RAVI_TOSTRING, reg, 0, 0);
else if (var->ravi_type_map == (RAVI_TM_FUNCTION | RAVI_TM_NIL)) else if (var->ravi_type_map == RAVI_TM_FUNCTION_OR_NIL)
luaK_codeABC(fs, OP_RAVI_TOCLOSURE, reg, 0, 0); luaK_codeABC(fs, OP_RAVI_TOCLOSURE, reg, 0, 0);
else if (var->ravi_type_map == (RAVI_TM_USERDATA | RAVI_TM_NIL)) { else if (var->ravi_type_map == RAVI_TM_USERDATA_OR_NIL) {
TString *usertype = fs->f->upvalues[var->u.info].usertype; TString *usertype = fs->f->upvalues[var->u.info].usertype;
luaK_codeABx(fs, OP_RAVI_TOTYPE, reg, luaK_stringK(fs, usertype)); luaK_codeABx(fs, OP_RAVI_TOTYPE, reg, luaK_stringK(fs, usertype));
} }
@ -1547,17 +1547,17 @@ static void code_type_assertion(FuncState *fs, UnOpr op, expdesc *e, TString *us
opcode = OP_RAVI_TOTAB; opcode = OP_RAVI_TOTAB;
tm = RAVI_TM_TABLE; tm = RAVI_TM_TABLE;
} }
else if (op == OPR_TO_STRING && (e->ravi_type_map & (~(RAVI_TM_STRING | RAVI_TM_NIL))) != 0) { else if (op == OPR_TO_STRING && (e->ravi_type_map & (~RAVI_TM_STRING_OR_NIL)) != 0) {
opcode = OP_RAVI_TOSTRING; opcode = OP_RAVI_TOSTRING;
tm = RAVI_TM_STRING | RAVI_TM_NIL; tm = RAVI_TM_STRING_OR_NIL;
} }
else if (op == OPR_TO_CLOSURE && (e->ravi_type_map & (~(RAVI_TM_FUNCTION | RAVI_TM_NIL))) != 0) { else if (op == OPR_TO_CLOSURE && (e->ravi_type_map & (~RAVI_TM_FUNCTION_OR_NIL)) != 0) {
opcode = OP_RAVI_TOCLOSURE; opcode = OP_RAVI_TOCLOSURE;
tm = RAVI_TM_FUNCTION | RAVI_TM_NIL; tm = RAVI_TM_FUNCTION_OR_NIL;
} }
else if (op == OPR_TO_TYPE) { else if (op == OPR_TO_TYPE) {
opcode = OP_RAVI_TOTYPE; opcode = OP_RAVI_TOTYPE;
tm = RAVI_TM_USERDATA | RAVI_TM_NIL; tm = RAVI_TM_USERDATA_OR_NIL;
} }
else { else {
/* nothing to do*/ /* nothing to do*/

@ -90,23 +90,27 @@ typedef uint32_t ravi_type_map;
#define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE) #define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE)
#define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT) #define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT)
#define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE) #define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE)
#define RAVI_TM_STRING_OR_NIL (RAVI_TM_STRING | RAVI_TM_NIL)
#define RAVI_TM_FUNCTION_OR_NIL (RAVI_TM_FUNCTION | RAVI_TM_NIL)
#define RAVI_TM_BOOLEAN_OR_NIL (RAVI_TM_BOOLEAN | RAVI_TM_NIL)
#define RAVI_TM_USERDATA_OR_NIL (RAVI_TM_USERDATA | RAVI_TM_NIL)
#define RAVI_TM_ANY (~0) #define RAVI_TM_ANY (~0)
typedef enum { typedef enum {
RAVI_TNIL = RAVI_TM_NIL, /* NIL */ RAVI_TNIL = RAVI_TM_NIL, /* NIL */
RAVI_TNUMINT = RAVI_TM_INTEGER, /* integer number */ RAVI_TNUMINT = RAVI_TM_INTEGER, /* integer number */
RAVI_TNUMFLT = RAVI_TM_FLOAT, /* floating point number */ RAVI_TNUMFLT = RAVI_TM_FLOAT, /* floating point number */
RAVI_TNUMBER = RAVI_TM_NUMBER, RAVI_TNUMBER = RAVI_TM_NUMBER,
RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */ RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */
RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */ RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */
RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */ RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */
RAVI_TSTRING = RAVI_TM_STRING | RAVI_TM_NIL, /* string */ RAVI_TSTRING = RAVI_TM_STRING_OR_NIL, /* string */
RAVI_TFUNCTION = RAVI_TM_FUNCTION | RAVI_TM_NIL, /* Lua or C Function */ RAVI_TFUNCTION = RAVI_TM_FUNCTION_OR_NIL, /* Lua or C Function */
RAVI_TBOOLEAN = RAVI_TM_BOOLEAN | RAVI_TM_NIL, /* boolean */ RAVI_TBOOLEAN = RAVI_TM_BOOLEAN_OR_NIL, /* boolean */
RAVI_TTRUE = RAVI_TM_TRUE, RAVI_TTRUE = RAVI_TM_TRUE,
RAVI_TFALSE = RAVI_TM_FALSE, RAVI_TFALSE = RAVI_TM_FALSE,
RAVI_TUSERDATA = RAVI_TM_USERDATA | RAVI_TM_NIL, /* userdata or lightuserdata */ RAVI_TUSERDATA = RAVI_TM_USERDATA_OR_NIL, /* userdata or lightuserdata */
RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */ RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */
} ravitype_t; } ravitype_t;
/* /*

@ -635,11 +635,11 @@ static void ravi_code_typecoersion(LexState *ls, int reg, ravi_type_map tm,
luaK_codeABC(ls->fs, tm == RAVI_TM_INTEGER_ARRAY ? OP_RAVI_TOIARRAY : OP_RAVI_TOFARRAY, reg, 0, 0); luaK_codeABC(ls->fs, tm == RAVI_TM_INTEGER_ARRAY ? OP_RAVI_TOIARRAY : OP_RAVI_TOFARRAY, reg, 0, 0);
else if (tm == RAVI_TM_TABLE) else if (tm == RAVI_TM_TABLE)
luaK_codeABC(ls->fs, OP_RAVI_TOTAB, reg, 0, 0); luaK_codeABC(ls->fs, OP_RAVI_TOTAB, reg, 0, 0);
else if (tm == (RAVI_TM_USERDATA | RAVI_TM_NIL)) else if (tm == RAVI_TM_USERDATA_OR_NIL)
luaK_codeABx(ls->fs, OP_RAVI_TOTYPE, reg, luaK_stringK(ls->fs, typename)); luaK_codeABx(ls->fs, OP_RAVI_TOTYPE, reg, luaK_stringK(ls->fs, typename));
else if (tm == (RAVI_TM_STRING | RAVI_TM_NIL)) else if (tm == RAVI_TM_STRING_OR_NIL)
luaK_codeABC(ls->fs, OP_RAVI_TOSTRING, reg, 0, 0); luaK_codeABC(ls->fs, OP_RAVI_TOSTRING, reg, 0, 0);
else if (tm == (RAVI_TM_FUNCTION | RAVI_TM_NIL)) else if (tm == RAVI_TM_FUNCTION_OR_NIL)
luaK_codeABC(ls->fs, OP_RAVI_TOCLOSURE, reg, 0, 0); luaK_codeABC(ls->fs, OP_RAVI_TOCLOSURE, reg, 0, 0);
// TODO coerse to boolean // TODO coerse to boolean
} }
@ -1274,18 +1274,18 @@ static ravi_type_map declare_localvar(LexState *ls, TString **pusertype) {
else if (strcmp(str, "number") == 0) else if (strcmp(str, "number") == 0)
tm = RAVI_TM_FLOAT; tm = RAVI_TM_FLOAT;
else if (strcmp(str, "closure") == 0) else if (strcmp(str, "closure") == 0)
tm = RAVI_TM_FUNCTION | RAVI_TM_NIL; tm = RAVI_TM_FUNCTION_OR_NIL;
else if (strcmp(str, "table") == 0) else if (strcmp(str, "table") == 0)
tm = RAVI_TM_TABLE; tm = RAVI_TM_TABLE;
else if (strcmp(str, "string") == 0) else if (strcmp(str, "string") == 0)
tm = RAVI_TM_STRING | RAVI_TM_NIL; tm = RAVI_TM_STRING_OR_NIL;
//else if (strcmp(str, "boolean") == 0) //else if (strcmp(str, "boolean") == 0)
// tm = RAVI_TM_BOOLEAN | RAVI_TM_NIL; // tm = RAVI_TM_BOOLEAN_OR_NIL;
else if (strcmp(str, "any") == 0) else if (strcmp(str, "any") == 0)
tm = RAVI_TM_ANY; tm = RAVI_TM_ANY;
else { else {
/* default is a userdata type */ /* default is a userdata type */
tm = RAVI_TM_USERDATA | RAVI_TM_NIL; tm = RAVI_TM_USERDATA_OR_NIL;
typename = user_defined_type_name(ls, typename); typename = user_defined_type_name(ls, typename);
str = getstr(typename); str = getstr(typename);
*pusertype = typename; *pusertype = typename;
@ -1458,8 +1458,8 @@ static void ravi_typecheck(LexState *ls, expdesc *v, ravi_type_map *var_types,
/* if we are calling a function then convert return types */ /* if we are calling a function then convert return types */
else if ((vartype == RAVI_TM_FLOAT || vartype == RAVI_TM_INTEGER || else if ((vartype == RAVI_TM_FLOAT || vartype == RAVI_TM_INTEGER ||
vartype == RAVI_TM_FLOAT_ARRAY || vartype == RAVI_TM_INTEGER_ARRAY || vartype == RAVI_TM_FLOAT_ARRAY || vartype == RAVI_TM_INTEGER_ARRAY ||
vartype == RAVI_TM_TABLE || vartype == (RAVI_TM_STRING | RAVI_TM_NIL) || vartype == RAVI_TM_TABLE || vartype == RAVI_TM_STRING_OR_NIL ||
vartype == (RAVI_TM_FUNCTION | RAVI_TM_NIL) || vartype == (RAVI_TM_USERDATA | RAVI_TM_NIL)) && vartype == RAVI_TM_FUNCTION_OR_NIL || vartype == RAVI_TM_USERDATA_OR_NIL) &&
v->k == VCALL) { v->k == VCALL) {
/* For local variable declarations that call functions e.g. /* For local variable declarations that call functions e.g.
* local i = func() * local i = func()
@ -1486,9 +1486,9 @@ static void ravi_typecheck(LexState *ls, expdesc *v, ravi_type_map *var_types,
/* do we need to convert ? */ /* do we need to convert ? */
ravi_code_typecoersion(ls, a + (i - n), var_types[i], NULL); ravi_code_typecoersion(ls, a + (i - n), var_types[i], NULL);
} }
else if (vartype == (RAVI_TM_STRING | RAVI_TM_NIL) || else if (vartype == RAVI_TM_STRING_OR_NIL ||
vartype == (RAVI_TM_FUNCTION | RAVI_TM_NIL) || vartype == RAVI_TM_FUNCTION_OR_NIL ||
vartype == (RAVI_TM_USERDATA | RAVI_TM_NIL)) { vartype == RAVI_TM_USERDATA_OR_NIL) {
TString *usertype = usertypes[n]; // NULL if var_types[n] is not userdata TString *usertype = usertypes[n]; // NULL if var_types[n] is not userdata
/* we need to make sure that a register is assigned to 'v' /* we need to make sure that a register is assigned to 'v'
so that we can emit type assertion instructions. This would have so that we can emit type assertion instructions. This would have

@ -192,12 +192,12 @@ static ravi_type_map ravi_map_old_type_to_new(lu_byte type) {
case 2: return RAVI_TM_FLOAT; case 2: return RAVI_TM_FLOAT;
case 3: return RAVI_TM_INTEGER_ARRAY; case 3: return RAVI_TM_INTEGER_ARRAY;
case 4: return RAVI_TM_FLOAT_ARRAY; case 4: return RAVI_TM_FLOAT_ARRAY;
case 5: return RAVI_TM_FUNCTION | RAVI_TM_NIL; case 5: return RAVI_TM_FUNCTION_OR_NIL;
case 6: return RAVI_TM_TABLE; case 6: return RAVI_TM_TABLE;
case 7: return RAVI_TM_STRING | RAVI_TM_NIL; case 7: return RAVI_TM_STRING_OR_NIL;
case 8: return RAVI_TM_NIL; case 8: return RAVI_TM_NIL;
case 9: return RAVI_TM_BOOLEAN | RAVI_TM_NIL; case 9: return RAVI_TM_BOOLEAN_OR_NIL;
case 10: return RAVI_TM_USERDATA | RAVI_TM_NIL; case 10: return RAVI_TM_USERDATA_OR_NIL;
default: return RAVI_TM_ANY; default: return RAVI_TM_ANY;
} }
} }

@ -331,6 +331,10 @@ static const char Lua_header[] =
"#define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE)\n" "#define RAVI_TM_BOOLEAN (RAVI_TM_FALSE | RAVI_TM_TRUE)\n"
"#define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT)\n" "#define RAVI_TM_NUMBER (RAVI_TM_INTEGER | RAVI_TM_FLOAT)\n"
"#define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE)\n" "#define RAVI_TM_INDEXABLE (RAVI_TM_INTEGER_ARRAY | RAVI_TM_FLOAT_ARRAY | RAVI_TM_TABLE)\n"
"#define RAVI_TM_STRING_OR_NIL (RAVI_TM_STRING | RAVI_TM_NIL)\n"
"#define RAVI_TM_FUNCTION_OR_NIL (RAVI_TM_FUNCTION | RAVI_TM_NIL)\n"
"#define RAVI_TM_BOOLEAN_OR_NIL (RAVI_TM_BOOLEAN | RAVI_TM_NIL)\n"
"#define RAVI_TM_USERDATA_OR_NIL (RAVI_TM_USERDATA | RAVI_TM_NIL)\n"
"#define RAVI_TM_ANY (~0)\n" "#define RAVI_TM_ANY (~0)\n"
"typedef enum {\n" "typedef enum {\n"
"RAVI_TNIL = RAVI_TM_NIL, /* NIL */\n" "RAVI_TNIL = RAVI_TM_NIL, /* NIL */\n"
@ -340,12 +344,12 @@ static const char Lua_header[] =
"RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */\n" "RAVI_TARRAYINT = RAVI_TM_INTEGER_ARRAY, /* array of ints */\n"
"RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */\n" "RAVI_TARRAYFLT = RAVI_TM_FLOAT_ARRAY, /* array of doubles */\n"
"RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */\n" "RAVI_TTABLE = RAVI_TM_TABLE, /* Lua table */\n"
"RAVI_TSTRING = RAVI_TM_STRING | RAVI_TM_NIL, /* string */\n" "RAVI_TSTRING = RAVI_TM_STRING_OR_NIL, /* string */\n"
"RAVI_TFUNCTION = RAVI_TM_FUNCTION | RAVI_TM_NIL, /* Lua or C Function */\n" "RAVI_TFUNCTION = RAVI_TM_FUNCTION_OR_NIL, /* Lua or C Function */\n"
"RAVI_TBOOLEAN = RAVI_TM_BOOLEAN | RAVI_TM_NIL, /* boolean */\n" "RAVI_TBOOLEAN = RAVI_TM_BOOLEAN_OR_NIL, /* boolean */\n"
"RAVI_TTRUE = RAVI_TM_TRUE,\n" "RAVI_TTRUE = RAVI_TM_TRUE,\n"
"RAVI_TFALSE = RAVI_TM_FALSE,\n" "RAVI_TFALSE = RAVI_TM_FALSE,\n"
"RAVI_TUSERDATA = RAVI_TM_USERDATA | RAVI_TM_NIL, /* userdata or lightuserdata */\n" "RAVI_TUSERDATA = RAVI_TM_USERDATA_OR_NIL, /* userdata or lightuserdata */\n"
"RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */\n" "RAVI_TANY = RAVI_TM_ANY, /* Lua dynamic type */\n"
"} ravitype_t;\n" "} ravitype_t;\n"
"typedef struct Upvaldesc {\n" "typedef struct Upvaldesc {\n"

Loading…
Cancel
Save