starlit  Diff

Differences From Artifact [f85992f960]:

To Artifact [06631e46d8]:


   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