math.parser: (format-float) doesn't need to zero-terminate returned byte-array
							parent
							
								
									560900275a
								
							
						
					
					
						commit
						bbd71ae975
					
				| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
USING: layouts literals math math.parser sequences tools.test ;
 | 
					USING: layouts literals math math.parser.private sequences tools.test ;
 | 
				
			||||||
 | 
					IN: math.parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{ f }
 | 
					{ f }
 | 
				
			||||||
[ f string>number ]
 | 
					[ f string>number ]
 | 
				
			||||||
| 
						 | 
					@ -461,3 +462,14 @@ unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{ "deadbeef" } [ B{ 222 173 190 239 } bytes>hex-string ] unit-test
 | 
					{ "deadbeef" } [ B{ 222 173 190 239 } bytes>hex-string ] unit-test
 | 
				
			||||||
{ B{ 222 173 190 239 } } [ "deADbeEF" hex-string>bytes ] unit-test
 | 
					{ B{ 222 173 190 239 } } [ "deADbeEF" hex-string>bytes ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    B{ 49 46 53 53 69 43 48 53 }
 | 
				
			||||||
 | 
					} [
 | 
				
			||||||
 | 
					    155000.0 B{ } -1 3 B{ 69 0 } B{ 67 0 } (format-float)
 | 
				
			||||||
 | 
					] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Missing locale
 | 
				
			||||||
 | 
					{ "" } [
 | 
				
			||||||
 | 
					    33.4 "" 4 4 "f" "missing" format-float
 | 
				
			||||||
 | 
					] unit-test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,7 @@
 | 
				
			||||||
! Copyright (C) 2009 Joe Groff, 2013 John Benediktsson
 | 
					! Copyright (C) 2009 Joe Groff, 2013 John Benediktsson
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: accessors byte-arrays combinators kernel kernel.private
 | 
					USING: accessors byte-arrays combinators kernel kernel.private layouts
 | 
				
			||||||
layouts make math math.private sbufs sequences sequences.private
 | 
					make math math.private sbufs sequences sequences.private strings ;
 | 
				
			||||||
strings strings.private ;
 | 
					 | 
				
			||||||
IN: math.parser
 | 
					IN: math.parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
| 
						 | 
					@ -542,18 +541,10 @@ M: ratio >base
 | 
				
			||||||
: format-string ( format -- format )
 | 
					: format-string ( format -- format )
 | 
				
			||||||
    0 suffix >byte-array ; foldable
 | 
					    0 suffix >byte-array ; foldable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: format-head ( byte-array n -- string )
 | 
					 | 
				
			||||||
    swap over 0 <string> [
 | 
					 | 
				
			||||||
        [
 | 
					 | 
				
			||||||
            [ [ nth-unsafe ] 2keep drop ]
 | 
					 | 
				
			||||||
            [ set-string-nth-fast ] bi*
 | 
					 | 
				
			||||||
        ] 2curry each-integer
 | 
					 | 
				
			||||||
    ] keep ; inline
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: format-float ( n fill width precision format locale -- string )
 | 
					: format-float ( n fill width precision format locale -- string )
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        [ format-string ] 4dip [ format-string ] bi@ (format-float)
 | 
					        [ format-string ] 4dip [ format-string ] bi@ (format-float)
 | 
				
			||||||
        dup [ 0 = ] find drop format-head
 | 
					        >string
 | 
				
			||||||
    ] [
 | 
					    ] [
 | 
				
			||||||
        "C" = [ [ "G" = ] [ "E" = ] bi or CHAR: E CHAR: e ? fix-float ]
 | 
					        "C" = [ [ "G" = ] [ "E" = ] bi or CHAR: E CHAR: e ? fix-float ]
 | 
				
			||||||
        [ drop ] if
 | 
					        [ drop ] if
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -223,8 +223,7 @@ void factor_vm::primitive_format_float() {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    localized_stream.imbue(std::locale(locale));
 | 
					    localized_stream.imbue(std::locale(locale));
 | 
				
			||||||
  } catch (const runtime_error&) {
 | 
					  } catch (const runtime_error&) {
 | 
				
			||||||
    byte_array* array = allot_byte_array(1);
 | 
					    byte_array* array = allot_byte_array(0);
 | 
				
			||||||
    array->data<char>()[0] = '\0';
 | 
					 | 
				
			||||||
    ctx->replace(tag<byte_array>(array));
 | 
					    ctx->replace(tag<byte_array>(array));
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -247,7 +246,7 @@ void factor_vm::primitive_format_float() {
 | 
				
			||||||
  localized_stream << value;
 | 
					  localized_stream << value;
 | 
				
			||||||
  const std::string& tmp = localized_stream.str();
 | 
					  const std::string& tmp = localized_stream.str();
 | 
				
			||||||
  const char* cstr = tmp.c_str();
 | 
					  const char* cstr = tmp.c_str();
 | 
				
			||||||
  size_t size = tmp.length()+1;
 | 
					  size_t size = tmp.length();
 | 
				
			||||||
  byte_array* array = allot_byte_array(size);
 | 
					  byte_array* array = allot_byte_array(size);
 | 
				
			||||||
  memcpy(array->data<char>(), cstr, size);
 | 
					  memcpy(array->data<char>(), cstr, size);
 | 
				
			||||||
  ctx->replace(tag<byte_array>(array));
 | 
					  ctx->replace(tag<byte_array>(array));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue