From 90bea8751f9b7c32cff16ce9f4c646769a8051b3 Mon Sep 17 00:00:00 2001
From: Kristoffer Carlsson <kcarlsson89@gmail.com>
Date: Mon, 29 Mar 2021 16:29:47 +0200
Subject: [PATCH] Fix a small bug in the TOML parser and add an example of
 printing to a file (#40208)

fix the TOML parser to parse 0e-3 and add an example of writing to a file
---
 base/toml_parser.jl           |  2 --
 stdlib/TOML/docs/src/index.md | 13 +++++++++++--
 stdlib/TOML/test/values.jl    |  5 +++--
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/base/toml_parser.jl b/base/toml_parser.jl
index c69096504df0b5..956c62196d6b80 100644
--- a/base/toml_parser.jl
+++ b/base/toml_parser.jl
@@ -821,8 +821,6 @@ function parse_number_or_date_start(l::Parser)
             ate && return parse_int(l, contains_underscore)
         elseif accept(l, isdigit)
             return parse_local_time(l)
-        elseif peek(l) !== '.'
-            return ParserError(ErrLeadingZeroNotAllowedInteger)
         end
     end
 
diff --git a/stdlib/TOML/docs/src/index.md b/stdlib/TOML/docs/src/index.md
index e34bb8d85f2f1a..36e8ec62481083 100644
--- a/stdlib/TOML/docs/src/index.md
+++ b/stdlib/TOML/docs/src/index.md
@@ -65,8 +65,6 @@ format.
 ```jldoctest
 julia> using TOML
 
-julia> fname = tempname();
-
 julia> data = Dict(
           "names" => ["Julia", "Julio"],
           "age" => [10, 20],
@@ -75,6 +73,17 @@ julia> data = Dict(
 julia> TOML.print(data)
 names = ["Julia", "Julio"]
 age = [10, 20]
+
+julia> fname = tempname();
+
+julia> open(fname, "w") do io
+           TOML.print(io, data)
+       end
+
+julia> TOML.parsefile(fname)
+Dict{String, Any} with 2 entries:
+  "names" => ["Julia", "Julio"]
+  "age"   => [10, 20]
 ```
 
 Keys can be sorted according to some value
diff --git a/stdlib/TOML/test/values.jl b/stdlib/TOML/test/values.jl
index 9f09e26b01cdac..8337bb5a547148 100644
--- a/stdlib/TOML/test/values.jl
+++ b/stdlib/TOML/test/values.jl
@@ -39,6 +39,7 @@ end
     @test testval("1.0e0"       , 1.0)
     @test testval("1.0e+0"      , 1.0)
     @test testval("1.0e-0"      , 1.0)
+    @test testval("0e-3"        , 0.0)
     @test testval("1.001e-0"    , 1.001)
     @test testval("2e10"        , 2e10)
     @test testval("2e+10"       , 2e10)
@@ -53,8 +54,8 @@ end
     @test testval("+1_000" , 1000  |> Int64)
     @test testval("-1_000" , -1000 |> Int64)
 
-    @test failval("0_"     , Internals.ErrLeadingZeroNotAllowedInteger)
-    @test failval("0__0"   , Internals.ErrLeadingZeroNotAllowedInteger)
+    @test failval("0_"     , Internals.ErrUnderscoreNotSurroundedByDigits)
+    @test failval("0__0"   , Internals.ErrUnderscoreNotSurroundedByDigits)
     @test failval("__0"    , Internals.ErrUnexpectedStartOfValue)
     @test failval("1_0_"   , Internals.ErrTrailingUnderscoreNumber)
     @test failval("1_0__0" , Internals.ErrUnderscoreNotSurroundedByDigits)