issue #215 adapt fix by XmiliaH from pull request

pull/216/head
Dibyendu Majumdar 3 years ago
parent 658f04c3d8
commit 8e815bd67a

@ -874,10 +874,20 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
/* handled by MOVEI, MOVEF, MOVEIARRAY, MOVEFARRAY at runtime */ /* handled by MOVEI, MOVEF, MOVEIARRAY, MOVEFARRAY at runtime */
return; return;
} }
ravitype_t ex_ravi_type = ex->ravi_type;
if (ex->k == VINDEXED) {
if (ex_ravi_type == RAVI_TARRAYINT) {
ex_ravi_type = RAVI_TNUMINT;
}
else if (ex_ravi_type == RAVI_TARRAYFLT) {
ex_ravi_type = RAVI_TNUMFLT;
}
else {
ex_ravi_type = RAVI_TANY;
}
}
if (var->ravi_type == RAVI_TNUMFLT) { if (var->ravi_type == RAVI_TNUMFLT) {
if (ex->ravi_type == RAVI_TNUMFLT) if (ex_ravi_type == RAVI_TNUMFLT)
return;
if (ex->k == VINDEXED && ex->ravi_type == RAVI_TARRAYFLT)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
@ -886,22 +896,18 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
"Invalid assignment: number expected")); "Invalid assignment: number expected"));
} }
else if (var->ravi_type == RAVI_TNUMINT) { else if (var->ravi_type == RAVI_TNUMINT) {
if (ex->ravi_type == RAVI_TNUMINT) if (ex_ravi_type == RAVI_TNUMINT)
return;
if (ex->k == VINDEXED && ex->ravi_type == RAVI_TARRAYINT)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
luaO_pushfstring( luaO_pushfstring(
fs->ls->L, fs->ls->L,
"Invalid assignment: integer expected", "Invalid assignment: integer expected"));
var->ravi_type,
ex->ravi_type));
} }
else if (var->ravi_type == RAVI_TARRAYFLT || else if (var->ravi_type == RAVI_TARRAYFLT ||
var->ravi_type == RAVI_TARRAYINT || var->ravi_type == RAVI_TARRAYINT ||
var->ravi_type == RAVI_TTABLE) { var->ravi_type == RAVI_TTABLE) {
if (ex->ravi_type == var->ravi_type && ex->k != VINDEXED) if (ex_ravi_type == var->ravi_type)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
@ -911,33 +917,33 @@ static void check_valid_store(FuncState *fs, expdesc *var, expdesc *ex) {
var->ravi_type == RAVI_TTABLE ? "table" : (var->ravi_type == RAVI_TARRAYFLT ? "number[]" : "integer[]"))); var->ravi_type == RAVI_TTABLE ? "table" : (var->ravi_type == RAVI_TARRAYFLT ? "number[]" : "integer[]")));
} }
else if (var->ravi_type == RAVI_TSTRING) { else if (var->ravi_type == RAVI_TSTRING) {
if (ex->ravi_type == RAVI_TNIL || (ex->ravi_type == var->ravi_type && ex->k != VINDEXED)) if (ex_ravi_type == RAVI_TNIL || ex_ravi_type == RAVI_TSTRING)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
luaO_pushfstring( luaO_pushfstring(
fs->ls->L, fs->ls->L,
"Invalid assignment: string expected")); "Invalid assignment: string expected"));
} }
else if (var->ravi_type == RAVI_TFUNCTION) { else if (var->ravi_type == RAVI_TFUNCTION) {
if (ex->ravi_type == RAVI_TNIL || (ex->ravi_type == var->ravi_type && ex->k != VINDEXED)) if (ex_ravi_type == RAVI_TNIL || ex_ravi_type == RAVI_TFUNCTION)
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
luaO_pushfstring( luaO_pushfstring(
fs->ls->L, fs->ls->L,
"Invalid assignment: function expected")); "Invalid assignment: function expected"));
} }
else if (var->ravi_type == RAVI_TUSERDATA) { else if (var->ravi_type == RAVI_TUSERDATA) {
if (ex->ravi_type == RAVI_TNIL || if (ex_ravi_type == RAVI_TNIL ||
(ex->ravi_type == var->ravi_type && var->usertype && var->usertype == ex->usertype && ex->k != VINDEXED)) (ex_ravi_type == RAVI_TUSERDATA && var->usertype && var->usertype == ex->usertype))
return; return;
luaX_syntaxerror( luaX_syntaxerror(
fs->ls, fs->ls,
luaO_pushfstring( luaO_pushfstring(
fs->ls->L, fs->ls->L,
"Invalid assignment: usertype %s expected", (var->usertype ? getstr(var->usertype) : "UNKNOWN"))); "Invalid assignment: usertype %s expected", (var->usertype ? getstr(var->usertype) : "UNKNOWN")));
} }
} }
static OpCode check_valid_setupval(FuncState *fs, expdesc *var, expdesc *ex, static OpCode check_valid_setupval(FuncState *fs, expdesc *var, expdesc *ex,

Loading…
Cancel
Save