From: Jeff Ober Date: Thu, 9 Jan 2020 17:49:59 +0000 (-0500) Subject: Fix support for 64-bit int/float X-Git-Tag: nailing-cargo/1.0.0~234^2~61 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ce99a085a5f7ba018b49d2e66a2bcdde92b4501e;p=nailing-cargo.git Fix support for 64-bit int/float --- diff --git a/lib/TOML/Tiny/Tokenizer.pm b/lib/TOML/Tiny/Tokenizer.pm index 8f4370d..9fd1b7f 100644 --- a/lib/TOML/Tiny/Tokenizer.pm +++ b/lib/TOML/Tiny/Tokenizer.pm @@ -212,6 +212,40 @@ sub tokenize_key { } } +sub tokenize_float { + use bignum; + my $self = shift; + my $toml = shift; + $toml =~ s/_//g; + return 0 + $toml; +} + +sub tokenize_integer { + use bigint; + + my $self = shift; + my $toml = shift; + + $toml =~ s/_//g; + + for ($toml) { + when (/(?&Oct) $TOML/x) { + $toml =~ s/^0o/0/; # convert to perl's octal format + return oct $toml; + } + + when (/(?&Bin) $TOML/x) { + return oct $toml; + } + + when (/(?&Hex) $TOML/x) { + return hex $toml; + } + } + + return 0 + $toml; +} + sub tokenize_string { my $self = shift; my $toml = shift; @@ -225,6 +259,7 @@ sub tokenize_string { $self->{line} += scalar( grep{ defined $_ } @newlines ); $str =~ s/^(?&WS) (?&NL) $TOML//x; + $str =~ s/\\(?&NL)\s* $TOML//xgs; $str = unescape_str($str); } @@ -240,6 +275,7 @@ sub tokenize_string { $self->{line} += scalar( grep{ defined $_ } @newlines ); $str =~ s/^(?&WS) (?&NL) $TOML//x; + $str =~ s/\\(?&NL)\s* $TOML//xgs; } when (/^ ((?&StringLiteral)) $TOML/x) { @@ -250,33 +286,6 @@ sub tokenize_string { return ''.$str; } -sub tokenize_float { goto \&tokenize_number } -sub tokenize_integer { goto \&tokenize_number } - -sub tokenize_number { - my $self = shift; - my $toml = shift; - - $toml =~ s/_//g; - - for ($toml) { - when (/(?&Oct) $TOML/x) { - $toml =~ s/^0o/0/; # convert to perl's octal format - return oct $toml; - } - - when (/(?&Bin) $TOML/x) { - return oct $toml; - } - - when (/(?&Hex) $TOML/x) { - return hex $toml; - } - } - - return 0 + $toml; -} - # Adapted from TOML::Parser::Util sub unescape_str { my $str = shift;