Ruby  2.0.0p594(2014-10-27revision48167)
Data Structures | Macros | Functions
sprintf.c File Reference
#include "ruby/ruby.h"
#include "ruby/re.h"
#include "ruby/encoding.h"
#include "internal.h"
#include <math.h>
#include <stdarg.h>
#include "vsnprintf.c"

Go to the source code of this file.

Data Structures

struct  rb_printf_buffer_extra
 

Macros

#define BIT_DIGITS(N)   (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
 
#define BITSPERDIG   (SIZEOF_BDIGITS*CHAR_BIT)
 
#define EXTENDSIGN(n, l)   (((~0 << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0 << (n)))
 
#define FNONE   0
 
#define FSHARP   1
 
#define FMINUS   2
 
#define FPLUS   4
 
#define FZERO   8
 
#define FSPACE   16
 
#define FWIDTH   32
 
#define FPREC   64
 
#define FPREC0   128
 
#define CHECK(l)
 
#define PUSH(s, l)
 
#define FILL(c, l)
 
#define GETARG()
 
#define GETNEXTARG()
 
#define GETPOSARG(n)
 
#define GETNTHARG(nth)   (((nth) >= argc) ? (rb_raise(rb_eArgError, "too few arguments"), 0) : argv[(nth)])
 
#define GETNAMEARG(id, name, len, enc)
 
#define GETNUM(n, val)
 
#define GETASTER(val)
 
#define CHECK_FOR_WIDTH(f)
 
#define CHECK_FOR_FLAGS(f)
 
#define FILE   rb_printf_buffer
 
#define __sbuf   rb_printf_sbuf
 
#define __sFILE   rb_printf_sfile
 
#define FLOATING_POINT   1
 
#define BSD__dtoa   ruby_dtoa
 
#define BSD__hdtoa   ruby_hdtoa
 
#define f   buffer.base
 
#define f   buffer.base
 

Functions

static void fmt_setup (char *, size_t, int, int, int, int)
 
static char * remove_sign_bits (char *str, int base)
 
static char sign_bits (int base, const char *p)
 
static VALUE get_hash (volatile VALUE *hash, int argc, const VALUE *argv)
 
VALUE rb_f_sprintf (int argc, const VALUE *argv)
 
VALUE rb_str_format (int argc, const VALUE *argv, VALUE fmt)
 
static int ruby__sfvwrite (register rb_printf_buffer *fp, register struct __suio *uio)
 
static char * ruby__sfvextra (rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int sign)
 
VALUE rb_enc_vsprintf (rb_encoding *enc, const char *fmt, va_list ap)
 
VALUE rb_enc_sprintf (rb_encoding *enc, const char *format,...)
 
VALUE rb_vsprintf (const char *fmt, va_list ap)
 
VALUE rb_sprintf (const char *format,...)
 
VALUE rb_str_vcatf (VALUE str, const char *fmt, va_list ap)
 
VALUE rb_str_catf (VALUE str, const char *format,...)
 

Macro Definition Documentation

#define __sbuf   rb_printf_sbuf

Definition at line 1130 of file sprintf.c.

#define __sFILE   rb_printf_sfile

Definition at line 1131 of file sprintf.c.

#define BIT_DIGITS (   N)    (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */

Definition at line 25 of file sprintf.c.

Referenced by rb_str_format().

#define BITSPERDIG   (SIZEOF_BDIGITS*CHAR_BIT)

Definition at line 26 of file sprintf.c.

#define BSD__dtoa   ruby_dtoa

Definition at line 1149 of file sprintf.c.

#define BSD__hdtoa   ruby_hdtoa

Definition at line 1150 of file sprintf.c.

#define CHECK (   l)
Value:
do {\
while (blen + (l) >= bsiz) {\
bsiz*=2;\
}\
} while (0)
VP_EXPORT int
Definition: bigdecimal.c:5071
#define RSTRING_PTR(str)
while(a->frac[0]/shift==0)
Definition: bigdecimal.c:5138
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
#define ENC_CODERANGE_SET(obj, cr)
VALUE rb_str_resize(VALUE, long)
Definition: string.c:1854
q result
Definition: tcltklib.c:7069
#define ENC_CODERANGE(obj)

Definition at line 84 of file sprintf.c.

Referenced by rb_str_format(), and ruby__sfvwrite().

#define CHECK_FOR_FLAGS (   f)
Value:
if ((f) & FWIDTH) { \
rb_raise(rb_eArgError, "flag after width"); \
} \
if ((f) & FPREC0) { \
rb_raise(rb_eArgError, "flag after precision"); \
}
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1788
#define FPREC0
Definition: sprintf.c:82
#define f
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1200
#define FWIDTH
Definition: sprintf.c:80
VALUE rb_eArgError
Definition: error.c:517

Referenced by rb_str_format().

#define CHECK_FOR_WIDTH (   f)
Value:
if ((f) & FWIDTH) { \
rb_raise(rb_eArgError, "width given twice"); \
} \
if ((f) & FPREC0) { \
rb_raise(rb_eArgError, "width after precision"); \
}
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1788
#define FPREC0
Definition: sprintf.c:82
#define f
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1200
#define FWIDTH
Definition: sprintf.c:80
VALUE rb_eArgError
Definition: error.c:517

Referenced by rb_str_format().

#define EXTENDSIGN (   n,
 
)    (((~0 << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0 << (n)))

Definition at line 27 of file sprintf.c.

Referenced by remove_sign_bits().

#define f   buffer.base
#define f   buffer.base
#define FILE   rb_printf_buffer

Definition at line 1129 of file sprintf.c.

#define FILL (   c,
 
)
Value:
do { \
memset(&buf[blen], (c), (l));\
blen += (l);\
} while (0)
memset(y->frac+ix+1, 0,(y->Prec-(ix+1))*sizeof(BDIGIT))
#define CHECK(l)
Definition: sprintf.c:84
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
VpDivd * c
Definition: bigdecimal.c:1219

Definition at line 100 of file sprintf.c.

Referenced by rb_str_format().

#define FLOATING_POINT   1

Definition at line 1148 of file sprintf.c.

#define FMINUS   2

Definition at line 76 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FNONE   0

Definition at line 74 of file sprintf.c.

Referenced by rb_str_format().

#define FPLUS   4

Definition at line 77 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FPREC   64

Definition at line 81 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FPREC0   128

Definition at line 82 of file sprintf.c.

Referenced by rb_str_format().

#define FSHARP   1

Definition at line 75 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FSPACE   16

Definition at line 79 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FWIDTH   32

Definition at line 80 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FZERO   8

Definition at line 78 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define GETARG ( )
Value:
(nextvalue != Qundef ? nextvalue : \
#define GETNEXTARG()
Definition: sprintf.c:109
#define Qundef

Definition at line 106 of file sprintf.c.

Referenced by rb_str_format().

#define GETASTER (   val)
Value:
do { \
t = p++; \
n = 0; \
GETNUM(n, (val)); \
if (*p == '$') { \
} \
p = t; \
} \
(val) = NUM2INT(tmp); \
} while (0)
volatile VALUE tmp
Definition: tcltklib.c:10208
ssize_t n
Definition: bigdecimal.c:5676
#define GETNUM(n, val)
Definition: sprintf.c:133
Win32OLEIDispatch * p
Definition: win32ole.c:786
#define GETNEXTARG()
Definition: sprintf.c:109
#define val
Definition: tcltklib.c:1948
else
Definition: bigdecimal.c:1206
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1200
int t
Definition: ripper.c:14654
#define GETPOSARG(n)
Definition: sprintf.c:116
#define NUM2INT(x)

Definition at line 145 of file sprintf.c.

Referenced by rb_str_format().

#define GETNAMEARG (   id,
  name,
  len,
  enc 
)
Value:
( \
posarg > 0 ? \
(rb_enc_raise((enc), rb_eArgError, "named%.*s after unnumbered(%d)", (len), (name), posarg), 0) : \
posarg == -1 ? \
(rb_enc_raise((enc), rb_eArgError, "named%.*s after numbered", (len), (name)), 0) : \
(posarg = -2, rb_hash_lookup2(get_hash(&hash, argc, argv), (id), Qundef)))
static VALUE get_hash(volatile VALUE *hash, int argc, const VALUE *argv)
Definition: sprintf.c:160
VALUE rb_hash_lookup2(VALUE, VALUE, VALUE)
Definition: hash.c:581
VALUE enc
Definition: tcltklib.c:10310
VALUE hash
Definition: tkutil.c:267
void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt,...)
Definition: error.c:1775
VALUE * argv
Definition: tcltklib.c:1970
int argc
Definition: tcltklib.c:1969
#define Qundef
const char * name
Definition: nkf.c:208
VALUE rb_eArgError
Definition: error.c:517
size_t len
Definition: tcltklib.c:3567

Definition at line 126 of file sprintf.c.

Referenced by rb_str_format().

#define GETNEXTARG ( )
Value:
( \
posarg == -1 ? \
(rb_raise(rb_eArgError, "unnumbered(%d) mixed with numbered", nextarg), 0) : \
posarg == -2 ? \
(rb_raise(rb_eArgError, "unnumbered(%d) mixed with named", nextarg), 0) : \
(posarg = nextarg++, GETNTHARG(posarg)))
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1788
#define GETNTHARG(nth)
Definition: sprintf.c:123
VALUE rb_eArgError
Definition: error.c:517

Definition at line 109 of file sprintf.c.

#define GETNTHARG (   nth)    (((nth) >= argc) ? (rb_raise(rb_eArgError, "too few arguments"), 0) : argv[(nth)])

Definition at line 123 of file sprintf.c.

Referenced by rb_f_sprintf().

#define GETNUM (   n,
  val 
)
Value:
for (; p < end && rb_enc_isdigit(*p, enc); p++) { \
int next_n = 10 * (n) + (*p - '0'); \
if (next_n / 10 != (n)) {\
rb_raise(rb_eArgError, #val " too big"); \
} \
(n) = next_n; \
} \
if (p >= end) { \
rb_raise(rb_eArgError, "malformed format string - %%*[0-9]"); \
}
ssize_t n
Definition: bigdecimal.c:5676
VP_EXPORT int
Definition: bigdecimal.c:5071
Win32OLEIDispatch * p
Definition: win32ole.c:786
VALUE enc
Definition: tcltklib.c:10310
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1788
#define rb_enc_isdigit(c, enc)
#define val
Definition: tcltklib.c:1948
gz end
Definition: zlib.c:2270
if(RB_TYPE_P(r, T_FLOAT))
Definition: bigdecimal.c:1200
VALUE rb_eArgError
Definition: error.c:517

Definition at line 133 of file sprintf.c.

Referenced by rb_str_format().

#define GETPOSARG (   n)
Value:
(posarg > 0 ? \
(rb_raise(rb_eArgError, "numbered(%d) after unnumbered(%d)", (n), posarg), 0) : \
posarg == -2 ? \
(rb_raise(rb_eArgError, "numbered(%d) after named", (n)), 0) : \
(((n) < 1) ? (rb_raise(rb_eArgError, "invalid index - %d$", (n)), 0) : \
(posarg = -1, GETNTHARG(n))))
ssize_t n
Definition: bigdecimal.c:5676
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1788
#define GETNTHARG(nth)
Definition: sprintf.c:123
VALUE rb_eArgError
Definition: error.c:517

Definition at line 116 of file sprintf.c.

Referenced by rb_str_format().

#define PUSH (   s,
 
)
Value:
do { \
memcpy(&buf[blen], (s), (l));\
blen += (l);\
} while (0)
#define CHECK(l)
Definition: sprintf.c:84
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
memcpy(buf+1, str, len)
register char * s
Definition: os2.c:56

Definition at line 94 of file sprintf.c.

Referenced by rb_str_format().

Function Documentation

static void fmt_setup ( char *  buf,
size_t  size,
int  c,
int  flags,
int  width,
int  prec 
)
static

Definition at line 1104 of file sprintf.c.

References c, end, FMINUS, FPLUS, FPREC, FSHARP, FSPACE, FWIDTH, FZERO, size, snprintf, and strlen().

Referenced by rb_str_format().

static VALUE get_hash ( volatile VALUE hash,
int  argc,
const VALUE argv 
)
static

Definition at line 160 of file sprintf.c.

References hash, NIL_P(), Qundef, rb_check_hash_type(), rb_eArgError, rb_raise(), and tmp.

VALUE rb_enc_sprintf ( rb_encoding enc,
const char *  format,
  ... 
)

Definition at line 1256 of file sprintf.c.

References rb_enc_vsprintf(), result, and va_end().

Referenced by location_format(), mk_inspect(), of2str(), rb_str_upto(), and setup_exception().

VALUE rb_enc_vsprintf ( rb_encoding enc,
const char *  fmt,
va_list  ap 
)
VALUE rb_f_sprintf ( int  argc,
const VALUE argv 
)
VALUE rb_sprintf ( const char *  format,
  ... 
)
VALUE rb_str_catf ( VALUE  str,
const char *  format,
  ... 
)
VALUE rb_str_format ( int  argc,
const VALUE argv,
VALUE  fmt 
)

Definition at line 443 of file sprintf.c.

References arg, argc, argv, BIT_DIGITS, buf, c, CHECK, CHECK_FOR_FLAGS, CHECK_FOR_WIDTH, d, enc, ENC_CODERANGE_7BIT, ENC_CODERANGE_BROKEN, ENC_CODERANGE_SET, ENC_CODERANGE_UNKNOWN, end, expr, fbuf, FILL, FIX2LONG, FIXABLE, FIXNUM_P, flags, FMINUS, fmt_setup(), FNONE, FPLUS, FPREC, FPREC0, FSHARP, FSPACE, FWIDTH, FZERO, GETARG, GETASTER, GETNAMEARG, GETNUM, GETPOSARG, hash, i, ID2SYM, int, isinf(), isnan, len, LONG2FIX, memcpy(), memset(), n, NIL_P(), NUM2INT, OBJ_TAINT, OBJ_TAINTED, p, PRIdSIZE, PUSH, Qundef, rb_big2str(), rb_big2str0(), rb_big_2comp(), rb_big_clone(), rb_check_id_cstr(), rb_check_string_type(), rb_dbl2big(), rb_eArgError, rb_eKeyError, rb_enc_associate(), rb_enc_check(), rb_enc_codelen(), rb_enc_codepoint_len(), rb_enc_copy(), rb_enc_get(), rb_enc_isprint, rb_enc_mbclen(), rb_enc_mbcput, rb_enc_nth(), rb_enc_raise(), rb_enc_right_char_head, rb_enc_strlen(), rb_enc_toupper(), rb_Float(), RB_GC_GUARD, rb_id2name(), rb_inspect(), rb_int2big(), rb_Integer(), rb_long2int, rb_obj_as_string(), rb_raise(), rb_str_buf_new(), rb_str_coderange_scan_restartable(), rb_str_new4, rb_str_resize(), rb_str_set_len(), rb_str_to_inum(), rb_warn(), rb_warning(), RBIGNUM_SIGN, remove_sign_bits(), result, retry, RFLOAT_VALUE, RSTRING_END, RSTRING_LEN, RSTRING_PTR, RTEST, ruby_debug, ruby_verbose, s, sign_bits(), snprintf, str, StringValue, strlen(), t, T_BIGNUM, T_FIXNUM, T_FLOAT, T_STRING, tmp, TRUE, TYPE, v, and val.

Referenced by date_strftime_with_tmx(), rb_f_sprintf(), rb_str_format_m(), rb_str_upto(), and rb_strftime_with_timespec().

VALUE rb_str_vcatf ( VALUE  str,
const char *  fmt,
va_list  ap 
)
VALUE rb_vsprintf ( const char *  fmt,
va_list  ap 
)
static char* remove_sign_bits ( char *  str,
int  base 
)
static

Definition at line 32 of file sprintf.c.

References EXTENDSIGN, str, strlen(), and t.

Referenced by rb_str_format().

static char* ruby__sfvextra ( rb_printf_buffer *  fp,
size_t  valsize,
void valp,
long *  sz,
int  sign 
)
static
static int ruby__sfvwrite ( register rb_printf_buffer *  fp,
register struct __suio uio 
)
static
static char sign_bits ( int  base,
const char *  p 
)
static

Definition at line 57 of file sprintf.c.

References c.

Referenced by rb_str_format().