Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit 7f39617

Browse files
author
Yatao Li
committed
printf: fix empty interpolation string evaluates to null in printf env
1 parent 49ba592 commit 7f39617

File tree

1 file changed

+57
-54
lines changed

1 file changed

+57
-54
lines changed

src/fsharp/FSharp.Core/printf.fs

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -287,60 +287,63 @@ module internal PrintfImpl =
287287
member env.RunSteps (args: obj[], steps: Step[]) =
288288
let mutable argIndex = 0
289289

290-
for step in steps do
291-
match step with
292-
| Step (prefix, conv1) ->
293-
env.WriteSkipEmpty(prefix)
294-
env.Write(&argIndex, args, conv1)
295-
296-
| StepString prefix ->
297-
env.WriteSkipEmpty(prefix)
298-
299-
| StepLittleT(prefix) ->
300-
env.WriteSkipEmpty prefix
301-
let farg = args.[argIndex]
302-
argIndex <- argIndex + 1
303-
let f = farg :?> ('State -> 'Residue)
304-
env.WriteT(f env.State)
305-
306-
| StepLittleA(prefix) ->
307-
env.WriteSkipEmpty prefix
308-
let farg = args.[argIndex]
309-
argIndex <- argIndex + 1
310-
let arg = args.[argIndex]
311-
argIndex <- argIndex + 1
312-
let f = farg :?> ('State -> obj -> 'Residue)
313-
env.WriteT(f env.State arg)
314-
315-
| StepStar1(prefix, conv) ->
316-
env.WriteSkipEmpty prefix
317-
let star1 = args.[argIndex] :?> int
318-
argIndex <- argIndex + 1
319-
let arg1 = args.[argIndex]
320-
argIndex <- argIndex + 1
321-
env.Write (conv arg1 star1)
322-
323-
| StepPercentStar1(prefix) ->
324-
//let _star1 = args.[argIndex] :?> int
325-
argIndex <- argIndex + 1
326-
env.WriteSkipEmpty prefix
327-
env.Write("%")
328-
329-
| StepStar2(prefix, conv) ->
330-
env.WriteSkipEmpty prefix
331-
let star1 = args.[argIndex] :?> int
332-
argIndex <- argIndex + 1
333-
let star2 = args.[argIndex] :?> int
334-
argIndex <- argIndex + 1
335-
let arg1 = args.[argIndex]
336-
argIndex <- argIndex + 1
337-
env.Write (conv arg1 star1 star2)
338-
339-
| StepPercentStar2(prefix) ->
340-
env.WriteSkipEmpty prefix
341-
//let _star1 = args.[argIndex] :?> int
342-
argIndex <- argIndex + 2
343-
env.Write("%")
290+
match steps with
291+
| [| StepString one |] -> env.Write(one)
292+
| _ ->
293+
for step in steps do
294+
match step with
295+
| Step (prefix, conv1) ->
296+
env.WriteSkipEmpty(prefix)
297+
env.Write(&argIndex, args, conv1)
298+
299+
| StepString prefix ->
300+
env.WriteSkipEmpty(prefix)
301+
302+
| StepLittleT(prefix) ->
303+
env.WriteSkipEmpty prefix
304+
let farg = args.[argIndex]
305+
argIndex <- argIndex + 1
306+
let f = farg :?> ('State -> 'Residue)
307+
env.WriteT(f env.State)
308+
309+
| StepLittleA(prefix) ->
310+
env.WriteSkipEmpty prefix
311+
let farg = args.[argIndex]
312+
argIndex <- argIndex + 1
313+
let arg = args.[argIndex]
314+
argIndex <- argIndex + 1
315+
let f = farg :?> ('State -> obj -> 'Residue)
316+
env.WriteT(f env.State arg)
317+
318+
| StepStar1(prefix, conv) ->
319+
env.WriteSkipEmpty prefix
320+
let star1 = args.[argIndex] :?> int
321+
argIndex <- argIndex + 1
322+
let arg1 = args.[argIndex]
323+
argIndex <- argIndex + 1
324+
env.Write (conv arg1 star1)
325+
326+
| StepPercentStar1(prefix) ->
327+
//let _star1 = args.[argIndex] :?> int
328+
argIndex <- argIndex + 1
329+
env.WriteSkipEmpty prefix
330+
env.Write("%")
331+
332+
| StepStar2(prefix, conv) ->
333+
env.WriteSkipEmpty prefix
334+
let star1 = args.[argIndex] :?> int
335+
argIndex <- argIndex + 1
336+
let star2 = args.[argIndex] :?> int
337+
argIndex <- argIndex + 1
338+
let arg1 = args.[argIndex]
339+
argIndex <- argIndex + 1
340+
env.Write (conv arg1 star1 star2)
341+
342+
| StepPercentStar2(prefix) ->
343+
env.WriteSkipEmpty prefix
344+
//let _star1 = args.[argIndex] :?> int
345+
argIndex <- argIndex + 2
346+
env.Write("%")
344347

345348
env.Finish()
346349

0 commit comments

Comments
 (0)