Skip to content

Commit

Permalink
yields are needed for tail-recursion?
Browse files Browse the repository at this point in the history
  • Loading branch information
Thorium committed Jul 7, 2024
1 parent a733a40 commit 0f989ec
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 25 deletions.
17 changes: 7 additions & 10 deletions src/FSharp.Data.Csv.Core/CsvRuntime.fs
Original file line number Diff line number Diff line change
Expand Up @@ -69,17 +69,14 @@ module internal CsvReader =
| Char '\r'
| Char '\n' -> readLines lineNumber
| current ->
let r1 =
readLine [] (StringBuilder()) current
|> List.rev
|> Array.ofList,
lineNumber

let r2 = readLines (lineNumber + 1)

seq {
yield r1
yield! r2
yield
readLine [] (StringBuilder()) current
|> List.rev
|> Array.ofList,
lineNumber

yield! readLines (lineNumber + 1)
}

readLines 0
Expand Down
21 changes: 6 additions & 15 deletions src/FSharp.Data.Runtime.Utilities/NameUtils.fs
Original file line number Diff line number Diff line change
Expand Up @@ -52,33 +52,24 @@ let nicePascalName (s: string) =
| Upper _ -> consume from true (i + 1)
| Lower _ -> consume from false (i + 1)
| _ ->
let r1 = struct (from, i)
let r2 = restart (i + 1)

seq {
yield r1
yield! r2
yield struct (from, i)
yield! restart (i + 1)
}
// Consume are letters of the same kind (either all lower or all upper)
and consume from takeUpper i =
match takeUpper, tryAt s i with
| false, Lower _ -> consume from takeUpper (i + 1)
| true, Upper _ -> consume from takeUpper (i + 1)
| true, Lower _ ->
let r1 = struct (from, (i - 1))
let r2 = restart (i - 1)

seq {
yield r1
yield! r2
yield struct (from, (i - 1))
yield! restart (i - 1)
}
| _ ->
let r1 = struct (from, i)
let r2 = restart i

seq {
yield r1
yield! r2
yield struct (from, i)
yield! restart i
}

// Split string into segments and turn them to PascalCase
Expand Down

0 comments on commit 0f989ec

Please sign in to comment.