Skip to content

Commit 77757d9

Browse files
committed
format codebase
1 parent 7184ccd commit 77757d9

8 files changed

Lines changed: 119 additions & 89 deletions

File tree

nattlua/analyzer/intersect_comparison.lua

Lines changed: 95 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -9,112 +9,123 @@ local function intersect(a_min, a_max, operator, b_min, b_max)
99
if a_max < b_min then
1010
return a_min, a_max, b_min, b_max, nil, nil, nil, nil
1111
end
12-
12+
1313
-- Case 2: A < B is always false (A's lower bound ≥ B's upper bound)
1414
if a_min >= b_max then
1515
return nil, nil, nil, nil, a_min, a_max, b_min, b_max
1616
end
17-
17+
1818
-- Case 3: Ranges overlap, narrowing needed
19-
2019
-- TRUE branch (A < B):
21-
local a_min_true = a_min -- A's lower bound doesn't change
22-
local a_max_true = math.min(a_max, b_max - 1) -- A must be less than B's maximum
23-
local b_min_true = math.max(b_min, a_min + 1) -- B must be greater than A's minimum
24-
local b_max_true = b_max -- B's upper bound doesn't change
25-
20+
local a_min_true = a_min -- A's lower bound doesn't change
21+
local a_max_true = math.min(a_max, b_max - 1) -- A must be less than B's maximum
22+
local b_min_true = math.max(b_min, a_min + 1) -- B must be greater than A's minimum
23+
local b_max_true = b_max -- B's upper bound doesn't change
2624
-- FALSE branch (A ≥ B):
27-
local a_min_false = math.max(a_min, b_min) -- A must be at least B's minimum
28-
local a_max_false = a_max -- A's upper bound doesn't change
29-
local b_min_false = b_min -- B's lower bound doesn't change
30-
local b_max_false = math.min(b_max, a_max) -- B can't exceed A's maximum
31-
32-
return a_min_true, a_max_true, b_min_true, b_max_true,
33-
a_min_false, a_max_false, b_min_false, b_max_false
25+
local a_min_false = math.max(a_min, b_min) -- A must be at least B's minimum
26+
local a_max_false = a_max -- A's upper bound doesn't change
27+
local b_min_false = b_min -- B's lower bound doesn't change
28+
local b_max_false = math.min(b_max, a_max) -- B can't exceed A's maximum
29+
return a_min_true,
30+
a_max_true,
31+
b_min_true,
32+
b_max_true,
33+
a_min_false,
34+
a_max_false,
35+
b_min_false,
36+
b_max_false
3437
elseif operator == ">" then
3538
-- Return value structure:
3639
-- a_min_true, a_max_true, b_min_true, b_max_true, a_min_false, a_max_false, b_min_false, b_max_false
37-
3840
-- Case 1: A > B is always true (A's lower bound > B's upper bound)
3941
if a_min > b_max then
4042
return a_min, a_max, b_min, b_max, nil, nil, nil, nil
4143
end
42-
44+
4345
-- Case 2: A > B is always false (A's upper bound ≤ B's lower bound)
4446
if a_max <= b_min then
4547
return nil, nil, nil, nil, a_min, a_max, b_min, b_max
4648
end
47-
49+
4850
-- Case 3: Ranges overlap, narrowing needed
49-
5051
-- TRUE branch (A > B):
51-
local a_min_true = math.max(a_min, b_min + 1) -- A must be greater than B's minimum
52-
local a_max_true = a_max -- A's upper bound doesn't change
53-
local b_min_true = b_min -- B's lower bound doesn't change
54-
local b_max_true = math.min(b_max, a_max - 1) -- B must be less than A's maximum
55-
52+
local a_min_true = math.max(a_min, b_min + 1) -- A must be greater than B's minimum
53+
local a_max_true = a_max -- A's upper bound doesn't change
54+
local b_min_true = b_min -- B's lower bound doesn't change
55+
local b_max_true = math.min(b_max, a_max - 1) -- B must be less than A's maximum
5656
-- FALSE branch (A ≤ B):
57-
local a_min_false = a_min -- A's lower bound doesn't change
58-
local a_max_false = math.min(a_max, b_max) -- A can't exceed B's maximum
59-
local b_min_false = math.max(b_min, a_min) -- B must be at least A's minimum
60-
local b_max_false = b_max -- B's upper bound doesn't change
61-
62-
return a_min_true, a_max_true, b_min_true, b_max_true,
63-
a_min_false, a_max_false, b_min_false, b_max_false
57+
local a_min_false = a_min -- A's lower bound doesn't change
58+
local a_max_false = math.min(a_max, b_max) -- A can't exceed B's maximum
59+
local b_min_false = math.max(b_min, a_min) -- B must be at least A's minimum
60+
local b_max_false = b_max -- B's upper bound doesn't change
61+
return a_min_true,
62+
a_max_true,
63+
b_min_true,
64+
b_max_true,
65+
a_min_false,
66+
a_max_false,
67+
b_min_false,
68+
b_max_false
6469
elseif operator == "<=" then
6570
-- Case 1: A <= B is always true (A's upper bound <= B's lower bound)
6671
if a_max <= b_min then
6772
return a_min, a_max, b_min, b_max, nil, nil, nil, nil
6873
end
69-
74+
7075
-- Case 2: A <= B is always false (A's lower bound > B's upper bound)
7176
if a_min > b_max then
7277
return nil, nil, nil, nil, a_min, a_max, b_min, b_max
7378
end
74-
79+
7580
-- Case 3: Ranges overlap, narrowing needed
76-
7781
-- TRUE branch (A <= B):
78-
local a_min_true = a_min -- A's lower bound doesn't change
79-
local a_max_true = math.min(a_max, b_max) -- A must be less than or equal to B's maximum
80-
local b_min_true = math.max(b_min, a_min) -- B must be at least A's minimum
81-
local b_max_true = b_max -- B's upper bound doesn't change
82-
82+
local a_min_true = a_min -- A's lower bound doesn't change
83+
local a_max_true = math.min(a_max, b_max) -- A must be less than or equal to B's maximum
84+
local b_min_true = math.max(b_min, a_min) -- B must be at least A's minimum
85+
local b_max_true = b_max -- B's upper bound doesn't change
8386
-- FALSE branch (A > B):
84-
local a_min_false = math.max(a_min, b_max + 1) -- A must be greater than B's maximum
85-
local a_max_false = a_max -- A's upper bound doesn't change
86-
local b_min_false = b_min -- B's lower bound doesn't change
87-
local b_max_false = math.min(b_max, a_min - 1) -- B must be less than A's minimum
88-
89-
return a_min_true, a_max_true, b_min_true, b_max_true,
90-
a_min_false, a_max_false, b_min_false, b_max_false
87+
local a_min_false = math.max(a_min, b_max + 1) -- A must be greater than B's maximum
88+
local a_max_false = a_max -- A's upper bound doesn't change
89+
local b_min_false = b_min -- B's lower bound doesn't change
90+
local b_max_false = math.min(b_max, a_min - 1) -- B must be less than A's minimum
91+
return a_min_true,
92+
a_max_true,
93+
b_min_true,
94+
b_max_true,
95+
a_min_false,
96+
a_max_false,
97+
b_min_false,
98+
b_max_false
9199
elseif operator == ">=" then
92100
-- Case 1: A >= B is always true (A's lower bound >= B's upper bound)
93101
if a_min >= b_max then
94102
return a_min, a_max, b_min, b_max, nil, nil, nil, nil
95103
end
96-
104+
97105
-- Case 2: A >= B is always false (A's upper bound < B's lower bound)
98106
if a_max < b_min then
99107
return nil, nil, nil, nil, a_min, a_max, b_min, b_max
100108
end
101-
109+
102110
-- Case 3: Ranges overlap, narrowing needed
103-
104111
-- TRUE branch (A >= B):
105-
local a_min_true = math.max(a_min, b_min) -- A must be at least B's minimum
106-
local a_max_true = a_max -- A's upper bound doesn't change
107-
local b_min_true = b_min -- B's lower bound doesn't change
108-
local b_max_true = math.min(b_max, a_max) -- B can't exceed A's maximum
109-
112+
local a_min_true = math.max(a_min, b_min) -- A must be at least B's minimum
113+
local a_max_true = a_max -- A's upper bound doesn't change
114+
local b_min_true = b_min -- B's lower bound doesn't change
115+
local b_max_true = math.min(b_max, a_max) -- B can't exceed A's maximum
110116
-- FALSE branch (A < B):
111-
local a_min_false = a_min -- A's lower bound doesn't change
112-
local a_max_false = math.min(a_max, b_min - 1) -- A must be less than B's minimum
113-
local b_min_false = math.max(b_min, a_max + 1) -- B must be greater than A's maximum
114-
local b_max_false = b_max -- B's upper bound doesn't change
115-
116-
return a_min_true, a_max_true, b_min_true, b_max_true,
117-
a_min_false, a_max_false, b_min_false, b_max_false
117+
local a_min_false = a_min -- A's lower bound doesn't change
118+
local a_max_false = math.min(a_max, b_min - 1) -- A must be less than B's minimum
119+
local b_min_false = math.max(b_min, a_max + 1) -- B must be greater than A's maximum
120+
local b_max_false = b_max -- B's upper bound doesn't change
121+
return a_min_true,
122+
a_max_true,
123+
b_min_true,
124+
b_max_true,
125+
a_min_false,
126+
a_max_false,
127+
b_min_false,
128+
b_max_false
118129
elseif operator == "==" then
119130
-- Case 1: A == B is impossible (non-overlapping ranges)
120131
if a_max < b_min or b_max < a_min then
@@ -127,26 +138,23 @@ local function intersect(a_min, a_max, operator, b_min, b_max)
127138
end
128139

129140
-- Case 3: Ranges overlap, narrowing needed
130-
131141
-- TRUE branch (A == B): intersection of the two ranges
132142
local a_min_true = math.max(a_min, b_min)
133143
local a_max_true = math.min(a_max, b_max)
134-
local b_min_true = a_min_true -- For equality, the ranges must have the same values
144+
local b_min_true = a_min_true -- For equality, the ranges must have the same values
135145
local b_max_true = a_max_true
136-
137146
-- FALSE branch (A != B): all values where they don't overlap
138147
local a_min_false1 = a_min
139148
local a_max_false1 = math.min(a_max, b_min - 1)
140149
local a_min_false2 = math.max(a_min, b_max + 1)
141150
local a_max_false2 = a_max
142-
143151
local b_min_false1 = b_min
144152
local b_max_false1 = math.min(b_max, a_min - 1)
145153
local b_min_false2 = math.max(b_min, a_max + 1)
146154
local b_max_false2 = b_max
147-
148155
-- Combine the false ranges if possible
149156
local a_min_false, a_max_false
157+
150158
if a_max_false1 >= a_min_false1 and a_max_false2 >= a_min_false2 then
151159
a_min_false = math.min(a_min_false1, a_min_false2)
152160
a_max_false = math.max(a_max_false1, a_max_false2)
@@ -160,8 +168,9 @@ local function intersect(a_min, a_max, operator, b_min, b_max)
160168
a_min_false = nil
161169
a_max_false = nil
162170
end
163-
171+
164172
local b_min_false, b_max_false
173+
165174
if b_max_false1 >= b_min_false1 and b_max_false2 >= b_min_false2 then
166175
b_min_false = math.min(b_min_false1, b_min_false2)
167176
b_max_false = math.max(b_max_false1, b_max_false2)
@@ -174,17 +183,28 @@ local function intersect(a_min, a_max, operator, b_min, b_max)
174183
else
175184
b_min_false = nil
176185
b_max_false = nil
177-
end
186+
end
178187

179-
return a_min_true, a_max_true, b_min_true, b_max_true,
180-
a_min_false, a_max_false, b_min_false, b_max_false
188+
return a_min_true,
189+
a_max_true,
190+
b_min_true,
191+
b_max_true,
192+
a_min_false,
193+
a_max_false,
194+
b_min_false,
195+
b_max_false
181196
elseif operator == "~=" then
182197
-- Implement ~= as the logical inverse of ==
183-
local a_min_true, a_max_true, b_min_true, b_max_true, a_min_false, a_max_false, b_min_false, b_max_false =
184-
intersect(a_min, a_max, "==", b_min, b_max)
185-
198+
local a_min_true, a_max_true, b_min_true, b_max_true, a_min_false, a_max_false, b_min_false, b_max_false = intersect(a_min, a_max, "==", b_min, b_max)
186199
-- Swap the true and false branches to represent the logical NOT
187-
return a_min_false, a_max_false, b_min_false, b_max_false, a_min_true, a_max_true, b_min_true, b_max_true
200+
return a_min_false,
201+
a_max_false,
202+
b_min_false,
203+
b_max_false,
204+
a_min_true,
205+
a_max_true,
206+
b_min_true,
207+
b_max_true
188208
end
189209
end
190210

@@ -215,6 +235,7 @@ local function intersect_comparison(a--[[#: NumericType]], b--[[#: NumericType]]
215235
result_a_false = LNumberRange(a_min_res_false, a_max_res_false)
216236
end
217237
end
238+
218239
if b_min_res_true and b_max_res_true then
219240
if b_min_res_true == b_max_res_true then
220241
result_b_true = LNumber(b_min_res_true)

nattlua/analyzer/mutation_tracking.lua

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,11 @@ return function(META)
175175
end
176176

177177
function META:TrackUpvalueUnion(obj, truthy_union, falsy_union, inverted)
178-
if not truthy_union or not falsy_union then debug.trace() error() end
178+
if not truthy_union or not falsy_union then
179+
debug.trace()
180+
error()
181+
end
182+
179183
local upvalue = obj:GetUpvalue()
180184

181185
if not upvalue then return end
@@ -487,8 +491,12 @@ return function(META)
487491

488492
union:SetUpvalue(data.upvalue)
489493
end
490-
491-
if data.stack[#data.stack] and data.stack[#data.stack].falsy and data.stack[#data.stack].falsy.Type == "range" then
494+
495+
if
496+
data.stack[#data.stack] and
497+
data.stack[#data.stack].falsy and
498+
data.stack[#data.stack].falsy.Type == "range"
499+
then
492500
self:MutateUpvalue(data.upvalue, collect_falsy_values(data.stack), true)
493501
else
494502
self:MutateUpvalue(data.upvalue, union, true)

nattlua/analyzer/operators/binary.lua

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,8 @@ local intersect_comparison = require("nattlua.analyzer.intersect_comparison")
147147

148148
local function number_comparison(self, l, r, op, invert)
149149
local nl, nr, nl2, nr2 = intersect_comparison(l, r, op, invert)
150-
151-
if nl and nr then
152-
self:TrackUpvalueUnion(l, nl, nr)
153-
end
150+
151+
if nl and nr then self:TrackUpvalueUnion(l, nl, nr) end
154152

155153
if nl2 and nr2 then self:TrackUpvalueUnion(r, nl2, nr2) end
156154

nattlua/definitions/lua/table.nlua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ analyzer function table.insert(tbl: List<|any|>, ...: ...any)
5151
else
5252
pos = analyzer:GetArrayLengthFromTable(tbl)
5353
end
54+
5455
local contract = tbl:GetContract()
5556

5657
if contract then

nattlua/types/number.lua

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,11 @@ do
266266
end,
267267
}
268268

269-
for k,v in pairs(operators) do
270-
operators[k] = function(l, r)
269+
for k, v in pairs(operators) do
270+
operators[k] = function(l, r)
271271
if l == inf or r == inf then return inf end
272-
return v(l, r)
272+
273+
return v(l, r)
273274
end
274275
end
275276

test/tests/nattlua/analyzer/complex/brainfudge.nlua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,9 +408,11 @@ local function secondPassMemset(instList: InstructionList)
408408
max = max - (currentFindSize + 1) * 2
409409
else
410410
if movingDirection == 1 then
411-
--table.insert(instList, i, {MEMSET, 1, currentFindSize, currentAssignation})
411+
412+
--table.insert(instList, i, {MEMSET, 1, currentFindSize, currentAssignation})
412413
else
413-
--table.insert(instList, i, {MEMSET, -currentFindSize - 1, currentFindSize, currentAssignation}) -- TODO
414+
415+
--table.insert(instList, i, {MEMSET, -currentFindSize - 1, currentFindSize, currentAssignation}) -- TODO
414416
end
415417

416418
max = max - (currentFindSize * 2 - 1)

test/tests/nattlua/analyzer/number.lua

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ if n > 0 then
9797
if n < 10 then attest.equal(n, _ as 1 .. 9) end
9898
end
9999
]]
100-
101100
analyze[[
102101
local n = _ as number
103102
@@ -106,4 +105,4 @@ if n > 1 and n < 15 then
106105
else
107106
attest.equal(n, _ as -inf..1 | 15..inf )
108107
end
109-
]]
108+
]]

test/tests/nattlua/types/number.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ do
354354

355355
do
356356
local nan = math.huge / math.huge
357-
local at, af, bt, bf = intersect_comparison(LNumberRange(nan, nan), LNumberRange(5, 10), "<")
357+
local at, af, bt, bf = intersect_comparison(LNumberRange(nan, nan), LNumberRange(5, 10), "<")
358358
assert(rangesEqual(at, LNumberRange(nan, nan)))
359359
assert(rangesEqual(af, LNumberRange(5, 10)))
360360
end

0 commit comments

Comments
 (0)