Comments (3)
That's interesting. Can you provide a minimal example that produces the error or the relevant code snippets (cpuid.lua, etc) so I can try to reproduce the error?
from hump.
Thanks for the quick response :)
The source for the project is here, https://github.com/cribznetwork/jimcrib-hacker
from hump.
Ok, so here is what I think is going on:
-- cupid.lua:114
if game_funcs[v] and not paused then
result = {select(1,xpcall(
function() return game_funcs[v](unpack(arg)) end, cupid_error
))}
end
where game_funcs
is a table that gets filled the following way:
-- cupid.lua:44
local game_funcs = {}
local protected_funcs = {'update','draw','keyreleased','keypressed','load'}
local function protector(table, key, value)
for k,v in pairs(protected_funcs) do
if ( v == key ) then
game_funcs[key] = value --< this line
return
end
end
rawset(table, key, value)
end
-- cupid.lua:94
setmetatable(wraped_love, {__index = cupid_stubs, __newindex = protector})
_love = love
love = wrapped_love
On the other hand, Gamestate.registerEvents() does this:
function GS.registerEvents(callbacks)
callbacks = callbacks or all_callbacks
for _, f in ipairs(callbacks) do
registry[f] = love[f] --< and this line
love[f] = function(...) return GS[f](...) end
end
end
where GS[f](...)
calls registry[f](...)
and then the f
on the current gamestate. Unfortunately this means that registry[f]
calls itself, ad infinitum, causing the stack overflow.
In other words it's the interaction between registerEvents()
and cupid.lua that caused the bug. Unfortunately I don't know how hump could detect such situations.
A possible workaround on the hump side of things is to omit calling registerEvents()
and call the gamestate functions yourself, i.e.:
function love.load()
Gamestate.switch(Menu)
end
function love.update(dt)
Gamestate.update(dt)
end
function love.draw()
Gamestate.draw()
end
-- etc.
from hump.
Related Issues (20)
- Documentation typo HOT 1
- Documentation typo in "gamestate" HOT 1
- Timer: After caching timers "to_update", timer:cancel() doesn't apply until next timer:update() HOT 1
- Vector unexpected symbol HOT 1
- bug HOT 4
- [hump.gamestate] textinput callback doesn't work properly HOT 3
- Camera documentation missing explanation about some parameters - worldCoords
- LOVE 11.0 requires extra arguments to setCanvas() at times
- Some minor things outlined in a forum post HOT 1
- hump.signal - crashes when sending "clear", "remove" or any other signals that share a name with a Registry function name. HOT 1
- Is there any maintainer for this repo? HOT 9
- Do I have to manually clear used timers? HOT 1
- [hump.timer] Subject values are not precise to targets after timer has completed HOT 6
- docs: camera:attach doesn't have any of its arguments listed in the docs
- Arguments to atan2 are reversed HOT 1
- [hump.timer] freeze timer HOT 1
- attempt to perform arithmatic on self.x and self.y doesnt work
- attempt to index local 'layer' (a nil value) HOT 1
- Would be nice if there's some method to check if the instance inherits from some class HOT 2
- [hump.signal] stopping signal propagation HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hump.