fix: warn traceback, fix errors

This commit is contained in:
Qwreey 2023-01-05 00:59:22 +09:00
parent 40462a1f3f
commit 24e5e7f52a
7 changed files with 48 additions and 7 deletions

View file

@ -6,6 +6,7 @@ local insert = table.insert;
---@param shared quad_export ---@param shared quad_export
---@return quad_module_class ---@return quad_module_class
function module.init(shared) function module.init(shared)
local warn = shared.warn;
---@class quad_module_class ---@class quad_module_class
local new = {__type = "quad_module_class"}; local new = {__type = "quad_module_class"};
local InstanceNew = Instance.new; local InstanceNew = Instance.new;
@ -104,6 +105,9 @@ function module.init(shared)
-- store reading -- store reading
do do
local setValue = value:calcWithDefault(item); local setValue = value:calcWithDefault(item);
if setValue == nil then
warn "[Quad] register return value must not be nil, but got nil. did you inited values before?";
end
setProperty(item,index,setValue,className); setProperty(item,index,setValue,className);
end end

View file

@ -5,6 +5,7 @@ local wrap = coroutine.wrap;
---@param shared quad_export ---@param shared quad_export
---@return quad_module_event ---@return quad_module_event
function module.init(shared) function module.init(shared)
local warn = shared.warn;
---@class quad_module_event ---@class quad_module_event
local new = {__type = "quad_module_event"}; local new = {__type = "quad_module_event"};

View file

@ -27,6 +27,10 @@ function module.init(id)
local this = {__type = "quad_module_init",items = {}}; local this = {__type = "quad_module_init",items = {}};
this.require = require; this.require = require;
this.warn = function(err)
warn(tostring(err));
print(debug.traceback());
end;
this.round = type(round) == "table" and round; ---@type quad_module_round this.round = type(round) == "table" and round; ---@type quad_module_round
this.tween = type(advancedTween) == "table" and advancedTween; ---@type quad_module_tween this.tween = type(advancedTween) == "table" and advancedTween; ---@type quad_module_tween
this.style = style.init(this); ---@type quad_module_style this.style = style.init(this); ---@type quad_module_style

View file

@ -5,6 +5,7 @@ local pack = table.pack;
---@param shared quad_export ---@param shared quad_export
---@return quad_module_mount ---@return quad_module_mount
function module.init(shared) function module.init(shared)
local warn = shared.warn;
---@class quad_module_mount ---@class quad_module_mount
local new = {__type = "quad_module_mount"}; local new = {__type = "quad_module_mount"};

View file

@ -21,7 +21,7 @@ return function (query)
object = object[this]; object = object[this];
if not object then if not object then
object = lastObject.libs object = lastObject.libs
error(("[require] : object %s was not found from this worktree, require failed"):format(query)); error(("[Quad] (require) object %s was not found from this worktree, require failed"):format(query));
end end
end); end);
return require(object); return require(object);

View file

@ -23,6 +23,7 @@ local week = {__mode = "v"};
---@param shared quad_export ---@param shared quad_export
---@return quad_module_store ---@return quad_module_store
function module.init(shared) function module.init(shared)
local warn = shared.warn;
---@class quad_module_store ---@class quad_module_store
local new = {__type = "quad_module_store"}; local new = {__type = "quad_module_store"};
local items = shared.items; local items = shared.items;
@ -149,7 +150,7 @@ function module.init(shared)
local with = s.wfunc; local with = s.wfunc;
local tstore = s.store; local tstore = s.store;
local rawKey = s.key; local rawKey = s.key;
local tween = s.tvalue or s.dtvalue; local tween = s.tvalue or tstore.__tweens[rawKey];
local from = s.fvalue; local from = s.fvalue;
local add = s.avalue; local add = s.avalue;
local set = tstore[rawKey]; local set = tstore[rawKey];
@ -175,7 +176,8 @@ function module.init(shared)
calcWithNewValue = function(s,withItem,newValue,key) calcWithNewValue = function(s,withItem,newValue,key)
local with = s.wfunc; local with = s.wfunc;
local tstore = s.store; local tstore = s.store;
local tween = s.tvalue or s.dtvalue; local rawKey = s.key;
local tween = s.tvalue or tstore.__tweens[rawKey];
local from = s.fvalue; local from = s.fvalue;
local add = s.avalue; local add = s.avalue;
if add then if add then
@ -205,7 +207,35 @@ function module.init(shared)
function store:__newindex(key,value) function store:__newindex(key,value)
-- if got register, just copy data to self and connect -- if got register, just copy data to self and connect
if type(value) == "table" and value.__type == "quad_register" then if type(value) == "table" and value.__type == "quad_register" then
warn "[Quad] adding register value on store is only allowed when init store. set value request was ignored"; -- warn "[Quad] adding register value on store is only allowed when init store. set value request was ignored";
local selfValues = self.__self;
local selfTweens = self.__tweens;
-- fetch data from origin
do
local tstore = value.store;
for tkey in value.key:gmatch("^[,]") do
if not selfValues[tkey] then
selfValues[tkey] = tstore[tkey];
end
end
end
-- calc value
do
local setValue,tween = value:calcWithDefault(self);
selfValues[key] = setValue;
selfTweens[key] = tween;
end
-- make event connection
value:register(function (_,newValue,eventKey)
-- !HOLD IT SELF TO PREVENT THIS REGISTER BEGIN REMOVED FROM MEMORY
local setValue = value:calcWithNewValue(self,newValue,eventKey);
self[key] = setValue;
end);
return; return;
end end
self.__self[key] = value; self.__self[key] = value;
@ -226,7 +256,9 @@ function module.init(shared)
do do
local tstore = item.store; local tstore = item.store;
for tkey in item.key:gmatch("^[,]") do for tkey in item.key:gmatch("^[,]") do
selfValues[tkey] = tstore[tkey]; if not selfValues[tkey] then
selfValues[tkey] = tstore[tkey];
end
end end
end end
@ -253,12 +285,10 @@ function module.init(shared)
return last; return last;
end end
local register = self.__reg[key]; local register = self.__reg[key];
local tweens = self.__tweens;
if not register then if not register then
register = setmetatable({ register = setmetatable({
key = key; key = key;
store = self; store = self;
dtvalue = tweens and tweens[key];
},registerClass); },registerClass);
self.__reg[key] = register; self.__reg[key] = register;
end end

View file

@ -4,6 +4,7 @@ local insert = table.insert;
---@param shared quad_export ---@param shared quad_export
---@return quad_module_style ---@return quad_module_style
function module.init(shared) function module.init(shared)
local warn = shared.warn;
---@class quad_module_style ---@class quad_module_style
local new = {__type = "quad_module_style"}; local new = {__type = "quad_module_style"};