fix infinite loop in src/line_gap.sml (still have other errors I need to address though)

This commit is contained in:
2024-07-16 01:03:09 +01:00
parent d47181921e
commit 1a325fcc87

View File

@@ -170,7 +170,7 @@ struct
val curVal = Vector.sub (lines, idx) val curVal = Vector.sub (lines, idx)
in in
if curVal > findNum then idx if curVal > findNum then idx
else forwardLinearSearch (findNum, idx, lines) else forwardLinearSearch (findNum, idx + 1, lines)
end end
fun helpBinSearch (findNum, lines, low, high) = fun helpBinSearch (findNum, lines, low, high) =
@@ -983,6 +983,7 @@ struct
in in
fun insert (idx, newString, buffer: t) = fun insert (idx, newString, buffer: t) =
let let
val _ = print "inserting...\n"
val newLines = countLineBreaks newString val newLines = countLineBreaks newString
in in
ins ins
@@ -1018,6 +1019,7 @@ struct
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) => (rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
let let
val nextIdx = moveIdx + String.size rightStringsHd val nextIdx = moveIdx + String.size rightStringsHd
val _ = println "1021"
in in
if nextIdx < finish then if nextIdx < finish then
(* Keep moving right. *) (* Keep moving right. *)
@@ -1110,6 +1112,7 @@ struct
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) => (rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
let let
val nextIdx = curIdx + String.size rightStringsHd val nextIdx = curIdx + String.size rightStringsHd
val _ = println "1113"
in in
if nextIdx < start then if nextIdx < start then
(* Keep moving right. (* Keep moving right.
@@ -1510,6 +1513,7 @@ struct
let let
val prevIdx = curIdx - String.size leftStringsHd val prevIdx = curIdx - String.size leftStringsHd
val prevLine = curLine - Vector.length leftLinesHd val prevLine = curLine - Vector.length leftLinesHd
val _ = println "1513"
in in
if start < prevIdx then if start < prevIdx then
(* Continue deleting leftward. *) (* Continue deleting leftward. *)
@@ -1597,6 +1601,7 @@ struct
, rightStrings , rightStrings
, rightLines , rightLines
) )
val _ = println "1600"
in in
deleteLeftFromHere deleteLeftFromHere
( start ( start
@@ -1622,6 +1627,7 @@ struct
case (leftStrings, leftLines) of case (leftStrings, leftLines) of
(leftStringsHd :: leftStringsTl, leftLinesHd :: leftLinesTl) => (leftStringsHd :: leftStringsTl, leftLinesHd :: leftLinesTl) =>
let let
val _ = println "1625"
val prevIdx = curIdx - String.size leftStringsHd val prevIdx = curIdx - String.size leftStringsHd
in in
if prevIdx > finish then if prevIdx > finish then
@@ -1782,19 +1788,7 @@ struct
end end
else else
leftLinesHd leftLinesHd
val _ = println "1791; base case"
val realsub1lines = countLineBreaks sub1
val _ =
if realsub1lines = sub1Lines then
()
else
let
val _ = println "realsub1lines error"
val _ = checkLineBreaks (sub1Lines, realsub1lines)
val _ = println "after realsub1lines error"
in
()
end
val sub2Lines = val sub2Lines =
let let
@@ -1809,18 +1803,14 @@ struct
Vector.tabulate Vector.tabulate
( Vector.length leftLinesHd - midpoint ( Vector.length leftLinesHd - midpoint
, fn idx => , fn idx =>
Vector.sub (leftLinesHd, idx + (midpoint)) Vector.sub (leftLinesHd, idx + midpoint)
- sub2Start - sub2Start
) )
else else
Vector.fromList [] Vector.fromList []
end end
val realsub2lines = countLineBreaks sub2 val _ = println "1829; base case"
val _ =
if realsub2lines = sub2Lines then ()
else println "realsub2lines error"
in in
{ idx = prevIdx + String.size sub1 { idx = prevIdx + String.size sub1
, line = , line =
@@ -1914,15 +1904,19 @@ struct
end end
else else
(* Cannot join while staying in limit. *) (* Cannot join while staying in limit. *)
deleteLeftFromHere let
( start val _ = print "1922"
, prevIdx in
, curLine - Vector.length leftLinesHd deleteLeftFromHere
, leftStringsTl ( start
, leftLinesTl , prevIdx
, leftStringsHd :: rightStrings , curLine - Vector.length leftLinesHd
, leftLinesHd :: rightLines , leftStringsTl
) , leftLinesTl
, leftStringsHd :: rightStrings
, leftLinesHd :: rightLines
)
end
| (_, _) => | (_, _) =>
(* Left strings and lines are empty, so just return. *) (* Left strings and lines are empty, so just return. *)
{ idx = 0 { idx = 0
@@ -1954,63 +1948,83 @@ struct
, rightLines , rightLines
) = ) =
if start > curIdx then if start > curIdx then
moveRightAndDelete let
( start val _ = println "1963"
, finish in
, curIdx moveRightAndDelete
, curLine ( start
, leftStrings , finish
, leftLines , curIdx
, rightStrings , curLine
, rightLines , leftStrings
) , leftLines
, rightStrings
, rightLines
)
end
else if start < curIdx then else if start < curIdx then
if finish <= curIdx then if finish <= curIdx then
moveLeftAndDelete let
( start val _ = println "1976"
, finish in
, curIdx moveLeftAndDelete
, curLine ( start
, leftStrings , finish
, leftLines , curIdx
, rightStrings , curLine
, rightLines , leftStrings
) , leftLines
, rightStrings
, rightLines
)
end
else else
deleteFromLetAndRight let
( start val _ = println "1988"
, finish in
, curIdx deleteFromLetAndRight
( start
, finish
, curIdx
, curLine
, leftStrings
, leftLines
, rightStrings
, rightLines
)
end
else
let
val _ = println "2000"
in
deleteRightFromHere
( curIdx
, curLine , curLine
, curIdx
, finish
, leftStrings , leftStrings
, leftLines , leftLines
, rightStrings , rightStrings
, rightLines , rightLines
) )
else end
deleteRightFromHere
( curIdx
, curLine
, curIdx
, finish
, leftStrings
, leftLines
, rightStrings
, rightLines
)
in in
fun delete (start, length, buffer: t) = fun delete (start, length, buffer: t) =
if length > 0 then if length > 0 then
del let
( start val _ = println "deleting..."
, start + length in
, #idx buffer del
, #line buffer ( start
, #leftStrings buffer , start + length
, #leftLines buffer , #idx buffer
, #rightStrings buffer , #line buffer
, #rightLines buffer , #leftStrings buffer
) , #leftLines buffer
, #rightStrings buffer
, #rightLines buffer
)
end
else else
buffer buffer
end end