mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 19:20:46 +00:00
Lunatic: remove old gamevar/serialization code.
git-svn-id: https://svn.eduke32.com/eduke32@3771 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
3092fb20e7
commit
f95967fad7
3 changed files with 2 additions and 142 deletions
|
@ -1746,131 +1746,11 @@ gv = setmtonce(gv_, tmpmt)
|
||||||
defs_c.create_globals(_G)
|
defs_c.create_globals(_G)
|
||||||
|
|
||||||
|
|
||||||
---=== Game variables ===---
|
|
||||||
|
|
||||||
-- gamevarNames[name] is true if that gamevar was declared
|
|
||||||
local gamevarNames = {}
|
|
||||||
|
|
||||||
-- code for prohibiting initial assignments to create new variables,
|
|
||||||
-- based on 14.2 of PiL
|
|
||||||
function gamevar(name, initval) -- aka 'declare'
|
|
||||||
if (type(name) ~= "string") then
|
|
||||||
error("First argument to 'gamevar' must be a string", 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (not string.match(name, "^[%a_][%w_]*$")) then
|
|
||||||
error("First argument to 'gamevar' must be a valid identifier", 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (string.match(name, "^_")) then
|
|
||||||
error("Identifier names starting with an underscore are reserved", 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (gamevarNames[name]) then
|
|
||||||
error(string.format("Duplicate declaration of identifier '%s'", name), 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (rawget(G_, name) ~= nil) then
|
|
||||||
error(string.format("Identifier name '%s' is already used in the global environment", name), 2)
|
|
||||||
end
|
|
||||||
|
|
||||||
gamevarNames[name] = true
|
|
||||||
rawset(G_, name, initval or false)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
---=== Serialization, from PiL with modifications ===---
|
|
||||||
local function basicSerialize(o)
|
|
||||||
if (type(o) == "number") then
|
|
||||||
if (o ~= o) then return "0/0" end -- nan
|
|
||||||
if (o == 1/0) then return "1/0" end -- inf
|
|
||||||
if (o == -1/0) then return "-1/0" end -- -inf
|
|
||||||
|
|
||||||
return tostring(o)
|
|
||||||
elseif (type(o) == "boolean") then
|
|
||||||
return tostring(o)
|
|
||||||
elseif (type(o) == "string") then
|
|
||||||
return string.format("%q", o)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- will contain all gamevar tables as keys (and true as value)
|
|
||||||
local tmpgvtabs = {}
|
|
||||||
|
|
||||||
local function save(name, value, saved, strings)
|
|
||||||
saved = saved or {} -- initial value
|
|
||||||
|
|
||||||
strings[#strings+1] = name .. "="
|
|
||||||
|
|
||||||
local str = basicSerialize(value)
|
|
||||||
|
|
||||||
if (str ~= nil) then
|
|
||||||
strings[#strings+1] = str .. "\n"
|
|
||||||
elseif (type(value) == "table") then
|
|
||||||
if (saved[value]) then -- value already saved?
|
|
||||||
strings[#strings+1] = saved[value] .. "\n" -- use its previous name
|
|
||||||
else
|
|
||||||
saved[value] = name -- save name for next time
|
|
||||||
strings[#strings+1] = "{}\n" -- create a new table
|
|
||||||
|
|
||||||
for k,v in pairs(value) do -- save its fields
|
|
||||||
local keystr = basicSerialize(k)
|
|
||||||
if (keystr == nil) then
|
|
||||||
error("cannot save a " .. type(k) .. " as key of a table", 2);
|
|
||||||
end
|
|
||||||
local fieldname = string.format("%s[%s]", name, keystr)
|
|
||||||
if (type(v)=="table" and not tmpgvtabs[v]) then
|
|
||||||
error("cannot save \""..name..
|
|
||||||
"\": gamevar tables may only contain tables that are also gamevars", 2)
|
|
||||||
end
|
|
||||||
save(fieldname, v, saved, strings)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
error("cannot save \""..name.."\", a " .. type(value), 2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function serializeGamevars()
|
|
||||||
local saved = {}
|
|
||||||
local strings = {}
|
|
||||||
|
|
||||||
for gvname,_ in pairs(gamevarNames) do
|
|
||||||
if (type(G_[gvname])=="table") then
|
|
||||||
tmpgvtabs[G_[gvname]] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- TODO: catch errors in save()
|
|
||||||
for gvname,_ in pairs(gamevarNames) do
|
|
||||||
save(gvname, G_[gvname], saved, strings)
|
|
||||||
end
|
|
||||||
strings[#strings+1] = "\n"
|
|
||||||
|
|
||||||
tmpgvtabs = {}
|
|
||||||
|
|
||||||
return table.concat(strings)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function loadGamevarsString(string)
|
|
||||||
--[=[
|
|
||||||
for gvname,_ in pairs(gamevarNames) do
|
|
||||||
G_[gvname] = nil;
|
|
||||||
end
|
|
||||||
gamevarNames = {}; -- clear gamevars
|
|
||||||
--]=]
|
|
||||||
|
|
||||||
assert(loadstring(string))()
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- REMOVE this for release
|
-- REMOVE this for release
|
||||||
DBG_ = {}
|
DBG_ = {}
|
||||||
DBG_.debug = require("debug")
|
DBG_.debug = require("debug")
|
||||||
DBG_.printkv = printkv
|
DBG_.printkv = printkv
|
||||||
DBG_.loadstring = loadstring
|
DBG_.loadstring = loadstring
|
||||||
DBG_.serializeGamevars = serializeGamevars
|
|
||||||
DBG_.loadGamevarsString = loadGamevarsString
|
|
||||||
DBG_.oom = function()
|
DBG_.oom = function()
|
||||||
local s = "1"
|
local s = "1"
|
||||||
for i=1,math.huge do
|
for i=1,math.huge do
|
||||||
|
|
|
@ -105,10 +105,6 @@ local g_cgopt = { ["no"]=false, ["debug-lineinfo"]=false, ["gendir"]=nil,
|
||||||
["cache-sap"]=false, ["error-nostate"]=true, }
|
["cache-sap"]=false, ["error-nostate"]=true, }
|
||||||
local function csapp() return g_cgopt["cache-sap"] end
|
local function csapp() return g_cgopt["cache-sap"] end
|
||||||
|
|
||||||
-- How many 'if' statements are following immediately each other,
|
|
||||||
-- needed to cope with CONs dangling-else resolution
|
|
||||||
local g_iflevel = 0
|
|
||||||
local g_ifelselevel = 0
|
|
||||||
-- Stack with *true* on top if the innermost block is a "whilevar*n".
|
-- Stack with *true* on top if the innermost block is a "whilevar*n".
|
||||||
local g_isWhile = {}
|
local g_isWhile = {}
|
||||||
-- Sequence number of 'while' statements, used to implement CON "break" inside
|
-- Sequence number of 'while' statements, used to implement CON "break" inside
|
||||||
|
@ -3124,8 +3120,6 @@ local function get_code_string(codetab, lineinfop)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on.parse_begin()
|
function on.parse_begin()
|
||||||
g_iflevel = 0
|
|
||||||
g_ifelselevel = 0
|
|
||||||
g_isWhile = {}
|
g_isWhile = {}
|
||||||
g_have_file[g_filename] = true
|
g_have_file[g_filename] = true
|
||||||
|
|
||||||
|
|
|
@ -31,27 +31,13 @@ local function checkfail(funcstr, expectedmsg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
---- check serialization ----
|
---- check serialization ----
|
||||||
gamevar("ourvar")
|
|
||||||
gamevar("ourvar2")
|
|
||||||
|
|
||||||
-- test nans, infs, precision, subnorms, booleans
|
-- test nans, infs, precision, subnorms, booleans
|
||||||
ourvar2 = { "asd"; 0/0, 1/0, -1/0, 0.12345678901234567, 1e-314, true }
|
ourvar2 = { "asd"; 0/0, 1/0, -1/0, 0.12345678901234567, 1e-314, true }
|
||||||
ourvar = { ourvar2; 1, 2, 3, "qwe"; [true]=0, [false]=1 }
|
ourvar = { ourvar2; 1, 2, 3, "qwe"; [true]=0, [false]=1 }
|
||||||
ourvar[#ourvar+1] = ourvar;
|
ourvar[#ourvar+1] = ourvar;
|
||||||
|
--]]
|
||||||
local gvstr = DBG_.serializeGamevars()
|
|
||||||
ourvar = -1
|
|
||||||
|
|
||||||
print("========== attempting to load string: ==========")
|
|
||||||
print(gvstr)
|
|
||||||
print("---------- (end string to load) ----------")
|
|
||||||
|
|
||||||
-- XXX: need to think about fully restoring state
|
|
||||||
DBG_.loadGamevarsString(gvstr)
|
|
||||||
print("ourvar[4]="..ourvar[4])
|
|
||||||
|
|
||||||
|
|
||||||
print('tweaking sector pals')
|
print('tweaking sector pals')
|
||||||
print('numsectors: ' .. gv.numsectors .. ' of ' .. gv.MAXSECTORS)
|
print('numsectors: ' .. gv.numsectors .. ' of ' .. gv.MAXSECTORS)
|
||||||
|
|
Loading…
Reference in a new issue