Differences From
Artifact [f85992f960]:
391 391 for cat, vals in pairs(b) do
392 392 if not new[cat] then
393 393 new[cat] = lib.tbl.copy(vals)
394 394 else
395 395 local f = fields[cat].op
396 396 for k,v in pairs(vals) do
397 397 local n = f(new[cat][k], v, 1)
398 - new[cat][k] = n > 0 and n or nil
398 + if type(n) == 'number' and n < 0 then n = nil end
399 + new[cat][k] = n
399 400 end
400 401 end
401 402 end
402 403 return new
403 404 end;
404 405
405 406 __mul = function(x,n)
407 + if n == 1 then return fab.clone(x) end
406 408 local new = fab {}
409 + if n == 0 then return new end
407 410 for cat, vals in pairs(x) do
408 411 new[cat] = {}
409 412 local f = fields[cat].op
410 413 for k,v in pairs(vals) do
411 414 local num = f(v,nil,n)
412 - new[cat][k] = num > 0 and num or nil
415 + if type(num) == 'number' and n < 0 then n = nil end
416 + new[cat][k] = num
413 417 end
414 418 end
415 419 return new
416 420 end;
417 421
418 422 __div = function(x,n)
419 423 return x * (1/n)
420 424 end;
421 425 }
422 426
423 427 starlit.type.fab = fab