]> gitweb.factorcode.org Git - factor.git/commitdiff
math.parser: check skip characters in one place.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 24 Dec 2021 04:49:10 +0000 (20:49 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 24 Dec 2021 04:49:10 +0000 (20:49 -0800)
core/math/parser/parser.factor

index d868b2e864ee0a5afdcd3300b50ae6098857d9e4..34e779a876116beddb9adb38dcd8fef04576317c 100644 (file)
@@ -206,6 +206,9 @@ CONSTANT: min-magnitude-2 -1074
 : <float-parse> ( i number-parse n -- float-parse i number-parse n )
      [ drop nip [ radix>> ] [ magnitude>> ] bi [ 0 f ] dip float-parse boa ] 3keep ; inline
 
+: if-skip ( char true false -- )
+    pick ",_" member-eq? [ drop nip call ] [ nip call ] if ; inline
+
 DEFER: @exponent-digit
 DEFER: @mantissa-digit
 DEFER: @denom-digit
@@ -214,9 +217,7 @@ DEFER: @pos-digit
 DEFER: @neg-digit
 
 : @exponent-digit-or-punc ( float-parse i number-parse n char -- float-parse n/f )
-    dup ",_" member-eq? [
-        drop [ @exponent-digit ] require-next-digit
-    ] [ @exponent-digit ] if ; inline
+    [ [ @exponent-digit ] require-next-digit ] [ @exponent-digit ] if-skip ; inline
 
 : @exponent-digit ( float-parse i number-parse n char -- float-parse n/f )
     { float-parse fixnum number-parse integer fixnum } declare
@@ -245,9 +246,7 @@ DEFER: @neg-digit
     [ exponent-char? [ drop ->exponent ] ] dip if ; inline
 
 : @mantissa-digit-or-punc ( float-parse i number-parse n char -- float-parse n/f )
-    dup ",_" member-eq? [
-        drop [ @mantissa-digit ] require-next-digit
-    ] [ @mantissa-digit ] if ; inline
+    [ [ @mantissa-digit ] require-next-digit ] [ @mantissa-digit ] if-skip ; inline
 
 : @mantissa-digit ( float-parse i number-parse n char -- float-parse n/f )
     { float-parse fixnum number-parse integer fixnum } declare
@@ -264,14 +263,12 @@ DEFER: @neg-digit
     <float-parse> [ @mantissa-digit ] require-next-digit ?make-float ; inline
 
 : @denom-digit-or-punc ( i number-parse n char -- n/f )
-    dup ",_" member-eq? [
-        drop [ @denom-digit ] require-next-digit
-    ] [
+    [ [ @denom-digit ] require-next-digit ] [
         {
             { CHAR: . [ ->mantissa ] }
             [ [ @denom-digit ] or-exponent ]
         } case
-    ] if ; inline
+    ] if-skip ; inline
 
 : @denom-digit ( i number-parse n char -- n/f )
     { fixnum number-parse integer fixnum } declare
@@ -288,14 +285,12 @@ DEFER: @neg-digit
     @split [ @denom-first-digit ] require-next-digit ?make-ratio ;
 
 : @num-digit-or-punc ( i number-parse n char -- n/f )
-    dup ",_" member-eq? [
-        drop [ @num-digit ] require-next-digit
-    ] [
+    [ [ @num-digit ] require-next-digit ] [
         {
             { CHAR: / [ ->denominator ] }
             [ @num-digit ]
         } case
-    ] if ; inline
+    ] if-skip ; inline
 
 : @num-digit ( i number-parse n char -- n/f )
     { fixnum number-parse integer fixnum } declare
@@ -306,16 +301,14 @@ DEFER: @neg-digit
     @split [ @num-digit ] require-next-digit ?add-ratio ;
 
 : @pos-digit-or-punc ( i number-parse n char -- n/f )
-    dup ",_" member-eq? [
-        drop [ @pos-digit ] require-next-digit
-    ] [
+    [ [ @pos-digit ] require-next-digit ] [
         {
             { CHAR: + [ ->numerator ] }
             { CHAR: / [ ->denominator ] }
             { CHAR: . [ ->mantissa ] }
             [ [ @pos-digit ] or-exponent ]
         } case
-    ] if ; inline
+    ] if-skip ; inline
 
 : @pos-digit ( i number-parse n char -- n/f )
     { fixnum number-parse integer fixnum } declare
@@ -342,16 +335,14 @@ DEFER: @neg-digit
     } case ; inline
 
 : @neg-digit-or-punc ( i number-parse n char -- n/f )
-    dup ",_" member-eq? [
-        drop [ @neg-digit ] require-next-digit
-    ] [
+    [ [ @neg-digit ] require-next-digit ] [
         {
             { CHAR: - [ ->numerator ] }
             { CHAR: / [ ->denominator ] }
             { CHAR: . [ ->mantissa ] }
             [ [ @neg-digit ] or-exponent ]
         } case
-    ] if ; inline
+    ] if-skip ; inline
 
 : @neg-digit ( i number-parse n char -- n/f )
     { fixnum number-parse integer fixnum } declare