Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • STJr/SRB2
  • Sryder/SRB2
  • wolfy852/SRB2
  • Alpha2244/SRB2
  • Inuyasha/SRB2
  • yoshibot/SRB2
  • TehRealSalt/SRB2
  • PrisimaTF/SRB2
  • Hatninja/SRB2
  • SteelT/SRB2
  • james/SRB2
  • ShaderWraith/SRB2
  • SinnamonLat/SRB2
  • mazmazz_/SRB2
  • filpAM/SRB2
  • chaoloveicemdboy/SRB2
  • Whooa21/SRB2
  • Machturne/SRB2
  • Golden/SRB2
  • Tatsuru/SRB2
  • Snu/SRB2
  • Zwip-Zwap_Zapony/SRB2
  • fickleheart/SRB2
  • alphaRexJames/SRB2
  • JJK/SRB2
  • diskpoppy/SRB2
  • Hannu_Hanhi/SRB2
  • ZipperQR/SRB2
  • kays/SRB2
  • spherallic/SRB2
  • Zippy_Zolton/SRB2
  • namiishere/SRB2
  • Ors/SRB2
  • SMS_Alfredo/SRB2
  • sonic_edge/SRB2
  • lavla/SRB2
  • ashi/SRB2
  • X.organic/SRB2
  • Fafabis/SRB2
  • Meziu/SRB2
  • v-rob/SRB2
  • tertu/SRB2
  • bitten2up/SRB2
  • flarn2006/SRB2
  • Krabs/SRB2
  • clairebun/SRB2
  • Lactozilla/SRB2
  • thehackstack/SRB2
  • Spice/SRB2
  • win8linux/SRB2
  • JohnFrostFox/SRB2
  • talktoneon726/SRB2
  • Wane/SRB2
  • Lamibe/SRB2
  • spectrumuk2/srb-2
  • nerdyminer18/srb-2
  • 256nil/SRB2
  • ARJr/SRB2
  • Alam/SRB2
  • Zenya/srb-2-marathon-demos
  • Acelite/srb-2-archivedmodifications
  • MIDIMan/SRB2
  • Lach/SRB2
  • Frostiikin/bounce-tweaks
  • Jaden/SRB2
  • Tyron/SRB2
  • Astronight/SRB2
  • Mari0shi06/SRB2
  • aiire/SRB2
  • Galactice/SRB2
  • srb2-ports/srb2-dreamcast
  • sdasdas/SRB2
  • chreas/srb-2-vr
  • StarManiaKG/the-story-of-sinically-rocketing-and-botching-the-2nd
  • LoganAir/SRB2
  • NepDisk/srb-2
  • alufolie91/SRB2
  • Felicia.iso/SRB2
  • twi/SRB2
  • BarrelsOFun/SRB2
  • Speed2411/SRB2
  • Leather_Realms/SRB2
  • Ayemar/SRB2
  • Acelite/SRB2
  • VladDoc/SRB2
  • kaldrum/model-features
  • strawberryfox417/SRB2
  • Lugent/SRB2
  • Rem/SRB2
  • Refrag/SRB2
  • Henry_3230/srb-3230
  • TehPuertoRicanSpartan2/tprs-srb2
  • Leminn/srb-2-marathon-stuff
  • chromaticpipe2/SRB2
  • MiguelGustavo15/SRB2
  • Maru/srb-2-tests
  • SilicDev/SRB2
  • UnmatchedBracket/SRB2
  • HybridDog/SRB2
  • xordspar0/SRB2
  • jsjhbewfhh/SRB2
  • Fancy2209/SRB2
  • Lorsoen/SRB2
  • shindoukin/SRB2
  • GamerOfDays/SRB2
  • Craftyawesome/SRB2
  • tenshi-tensai-tennoji/SRB2
  • Scarfdudebalder/SRB2
  • luigi-budd/srb-2-fix-interplag-lockon
  • mskluesner/SRB2
  • johnpetersa19/SRB2
  • Pheazant/SRB2
  • chromaticpipe2/srb2classic
  • romoney5/SRB2
  • PAS/SRB2Classic
  • BlueStaggo/SRB2
  • Jisk/srb-2-beef-jerky
117 results
Select Git revision
Show changes
Commits on Source (7)
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "lstate.h" #include "lstate.h"
#include "lstring.h" #include "lstring.h"
#include "ltable.h" #include "ltable.h"
#include "lvm.h"
...@@ -1006,11 +1007,33 @@ static void poplhs (FuncState *fs) { ...@@ -1006,11 +1007,33 @@ static void poplhs (FuncState *fs) {
} }
static void assignment (LexState *ls) { static void implicitlocal (LexState *ls, expdesc *v, int *nvarsp) {
TValue *name;
int n;
if (v->k == VGLOBAL) {
/* Overwriting this shouldn't matter as long as
I put it back, right? Right? :sweat_drops: */
StkId old = ls->L->base;
/* I tried to optimize this down as far as I could... */
name = &ls->fs->f->k[v->u.s.info];/* global's name from singlevar */
luaV_gettable(ls->L, gt(ls->L), name, (TValue *)ls->L->base);
if (ttisnil(ls->L->base)) {/* james: if global don't exist, make local */
n = (*nvarsp)++;
new_localvar(ls, rawtsvalue(name), n);
/* can't forget to enumerate it as local! */
v->k = VLOCAL;
v->u.s.info = ls->fs->nactvar + n;
}
ls->L->base = old;
}
}
static void assignment (LexState *ls, int *nvarsp) {
expdesc e; expdesc e;
expdesc_list *lh = ls->fs->lhs; expdesc_list *lh = ls->fs->lhs;
check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED,
"syntax error"); "syntax error");
implicitlocal(ls, &lh->v, nvarsp);
if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */ if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */
expdesc_list nv; expdesc_list nv;
nv.prev = lh; nv.prev = lh;
...@@ -1020,7 +1043,7 @@ static void assignment (LexState *ls) { ...@@ -1020,7 +1043,7 @@ static void assignment (LexState *ls) {
luaY_checklimit(ls->fs, ls->fs->nrhs, LUAI_MAXCCALLS - ls->L->nCcalls, luaY_checklimit(ls->fs, ls->fs->nrhs, LUAI_MAXCCALLS - ls->L->nCcalls,
"variables in assignment"); "variables in assignment");
pushlhs(ls->fs, &nv); pushlhs(ls->fs, &nv);
assignment(ls); assignment(ls, nvarsp);
poplhs(ls->fs); poplhs(ls->fs);
} }
else { /* assignment -> `=' explist1 */ else { /* assignment -> `=' explist1 */
...@@ -1348,6 +1371,7 @@ static void localstat (LexState *ls) { ...@@ -1348,6 +1371,7 @@ static void localstat (LexState *ls) {
static int funcname (LexState *ls, expdesc *v) { static int funcname (LexState *ls, expdesc *v) {
/* funcname -> NAME {field} [`:' NAME] */ /* funcname -> NAME {field} [`:' NAME] */
int needself = 0; int needself = 0;
int nvars = 0;
singlevar(ls, v); singlevar(ls, v);
while (ls->t.token == '.') while (ls->t.token == '.')
field(ls, v); field(ls, v);
...@@ -1355,6 +1379,8 @@ static int funcname (LexState *ls, expdesc *v) { ...@@ -1355,6 +1379,8 @@ static int funcname (LexState *ls, expdesc *v) {
needself = 1; needself = 1;
field(ls, v); field(ls, v);
} }
implicitlocal(ls, v, &nvars);
adjustlocalvars(ls, nvars);
return needself; return needself;
} }
...@@ -1375,6 +1401,7 @@ static void exprstat (LexState *ls) { ...@@ -1375,6 +1401,7 @@ static void exprstat (LexState *ls) {
/* stat -> func | assignment */ /* stat -> func | assignment */
FuncState *fs = ls->fs; FuncState *fs = ls->fs;
expdesc_list v; expdesc_list v;
int nvars = 0;
primaryexp(ls, &v.v); primaryexp(ls, &v.v);
if (v.v.k == VCALL) /* stat -> func */ if (v.v.k == VCALL) /* stat -> func */
SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */
...@@ -1382,10 +1409,11 @@ static void exprstat (LexState *ls) { ...@@ -1382,10 +1409,11 @@ static void exprstat (LexState *ls) {
v.prev = NULL; v.prev = NULL;
lua_assert(ls->fs->lhs == NULL && ls->fs->nlhs == 0 && ls->fs->nrhs == 0); lua_assert(ls->fs->lhs == NULL && ls->fs->nlhs == 0 && ls->fs->nrhs == 0);
pushlhs(ls->fs, &v); pushlhs(ls->fs, &v);
assignment(ls); assignment(ls, &nvars);
poplhs(ls->fs); poplhs(ls->fs);
ls->fs->nrhs = 0; ls->fs->nrhs = 0;
lua_assert(ls->fs->lhs == NULL && ls->fs->nlhs == 0); lua_assert(ls->fs->lhs == NULL && ls->fs->nlhs == 0);
adjustlocalvars(ls, nvars);
} }
} }
......
...@@ -316,20 +316,19 @@ static int setglobals(lua_State *L) ...@@ -316,20 +316,19 @@ static int setglobals(lua_State *L)
const char *csname; const char *csname;
char *name; char *name;
lua_remove(L, 1); // we're not gonna be using _G csname = lua_tostring(L, 2);
csname = lua_tostring(L, 1);
// make an uppercase copy of the name // make an uppercase copy of the name
name = Z_StrDup(csname); name = Z_StrDup(csname);
strupr(name); strupr(name);
if (fastncmp(name, "A_", 2) && lua_isfunction(L, 2)) if (fastncmp(name, "A_", 3) && lua_isfunction(L, 3))
{ {
// Accept new A_Action functions // Accept new A_Action functions
// Add the action to Lua actions refrence table // Add the action to Lua actions refrence table
lua_getfield(L, LUA_REGISTRYINDEX, LREG_ACTIONS); lua_getfield(L, LUA_REGISTRYINDEX, LREG_ACTIONS);
lua_pushstring(L, name); // "A_ACTION" lua_pushstring(L, name); // "A_ACTION"
lua_pushvalue(L, 2); // function lua_pushvalue(L, 3); // function
lua_rawset(L, -3); // rawset doesn't trigger this metatable again. lua_rawset(L, -3); // rawset doesn't trigger this metatable again.
// otherwise we would've used setfield, obviously. // otherwise we would've used setfield, obviously.
...@@ -337,11 +336,15 @@ static int setglobals(lua_State *L) ...@@ -337,11 +336,15 @@ static int setglobals(lua_State *L)
return 0; return 0;
} }
if (LUA_CheckGlobals(L, csname))
return 0;
Z_Free(name); Z_Free(name);
return luaL_error(L, "Implicit global " LUA_QS " prevented. Create a local variable instead.", csname);
if (! LUA_CheckGlobals(L, csname))
{
lua_settop(L, 3);
lua_rawset(L, 1);
}
return 0;
} }
// Clear and create a new Lua state, laddo! // Clear and create a new Lua state, laddo!
......