Use metatables to make gGlobalSoundSource readonly

This commit is contained in:
Agent X 2023-12-03 19:13:53 -05:00
parent 07d3fe3b93
commit a905f317a7
3 changed files with 38 additions and 3 deletions

View File

@ -306,8 +306,20 @@ end
-- sound --
-----------
local function read_only(t)
local proxy = {}
local mt = { -- create metatable
__index = t,
__newindex = function()
error('attempt to update a read-only table', 2)
end
}
setmetatable(proxy, mt)
return proxy
end
--- @type Vec3f
gGlobalSoundSource = { x = 0, y = 0, z = 0 }
gGlobalSoundSource = read_only({ x = 0, y = 0, z = 0 })
--- @param bank number
--- @param soundID number

View File

@ -308,8 +308,20 @@ end
-- sound --
-----------
local function read_only(t)
local proxy = {}
local mt = { -- create metatable
__index = t,
__newindex = function()
error('attempt to update a read-only table', 2)
end
}
setmetatable(proxy, mt)
return proxy
end
--- @type Vec3f
gGlobalSoundSource = { x = 0, y = 0, z = 0 }
gGlobalSoundSource = read_only({ x = 0, y = 0, z = 0 })
--- @param bank number
--- @param soundID number

View File

@ -272,8 +272,19 @@ char gSmluaConstants[] = ""
"-----------\n"
"-- sound --\n"
"-----------\n"
"local function read_only(t)\n"
" local proxy = {}\n"
" local mt = { -- create metatable\n"
" __index = t,\n"
" __newindex = function()\n"
" error('attempt to update a read-only table', 2)\n"
" end\n"
" }\n"
" setmetatable(proxy, mt)\n"
" return proxy\n"
"end\n"
"--- @type Vec3f\n"
"gGlobalSoundSource = { x = 0, y = 0, z = 0 }\n"
"gGlobalSoundSource = read_only({ x = 0, y = 0, z = 0 })\n"
"--- @param bank number\n"
"--- @param soundID number\n"
"--- @param priority number\n"