chiark / gitweb /
Fix support for 64-bit int/float
authorJeff Ober <jober@ziprecruiter.com>
Thu, 9 Jan 2020 17:49:59 +0000 (12:49 -0500)
committerJeff Ober <jober@ziprecruiter.com>
Thu, 9 Jan 2020 17:49:59 +0000 (12:49 -0500)
lib/TOML/Tiny/Tokenizer.pm

index 8f4370d7e4217eaa32aadc7fe4ed8fb7e7fef0fa..9fd1b7f3fcaf9c0833341920ce207162e24d3535 100644 (file)
@@ -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;