Ruby 1.9.3p327(2012-11-10revision37606)
Defines | Functions
sprintf.c File Reference
#include "ruby/ruby.h"
#include "ruby/re.h"
#include "ruby/encoding.h"
#include <math.h>
#include <stdarg.h>
#include "vsnprintf.c"
Include dependency graph for sprintf.c:

Go to the source code of this file.

Defines

#define BIT_DIGITS(N)   (((N)*146)/485 + 1)
#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 GETPOSARG(n)
#define GETNTHARG(nth)   (((nth) >= argc) ? (rb_raise(rb_eArgError, "too few arguments"), 0) : argv[(nth)])
#define GETNAMEARG(id, name, len)
#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

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)
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,...)

Define Documentation

#define __sbuf   rb_printf_sbuf

Definition at line 1112 of file sprintf.c.

#define __sFILE   rb_printf_sfile

Definition at line 1113 of file sprintf.c.

#define BIT_DIGITS (   N)    (((N)*146)/485 + 1)

Definition at line 24 of file sprintf.c.

Referenced by rb_str_format().

#define BITSPERDIG   (SIZEOF_BDIGITS*CHAR_BIT)

Definition at line 25 of file sprintf.c.

#define BSD__dtoa   ruby_dtoa

Definition at line 1131 of file sprintf.c.

#define BSD__hdtoa   ruby_hdtoa

Definition at line 1132 of file sprintf.c.

#define CHECK (   l)
Value:
do {\
    int cr = ENC_CODERANGE(result);\
    while (blen + (l) >= bsiz) {\
        bsiz*=2;\
    }\
    rb_str_resize(result, bsiz);\
    ENC_CODERANGE_SET(result, cr);\
    buf = RSTRING_PTR(result);\
} while (0)

Definition at line 83 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"); \
    }

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"); \
    }

Referenced by rb_str_format().

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

Definition at line 26 of file sprintf.c.

Referenced by remove_sign_bits().

#define FILE   rb_printf_buffer

Definition at line 1111 of file sprintf.c.

#define FILL (   c,
 
)
Value:
do { \
    CHECK(l);\
    memset(&buf[blen], (c), (l));\
    blen += (l);\
} while (0)

Definition at line 99 of file sprintf.c.

Referenced by rb_str_format().

#define FLOATING_POINT   1

Definition at line 1130 of file sprintf.c.

#define FMINUS   2

Definition at line 75 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FNONE   0

Definition at line 73 of file sprintf.c.

Referenced by rb_str_format().

#define FPLUS   4

Definition at line 76 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FPREC   64

Definition at line 80 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FPREC0   128

Definition at line 81 of file sprintf.c.

Referenced by rb_str_format().

#define FSHARP   1

Definition at line 74 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FSPACE   16

Definition at line 78 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FWIDTH   32

Definition at line 79 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define FZERO   8

Definition at line 77 of file sprintf.c.

Referenced by fmt_setup(), and rb_str_format().

#define GETARG ( )
Value:
(nextvalue != Qundef ? nextvalue : \
    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)))

Definition at line 105 of file sprintf.c.

Referenced by rb_str_format().

#define GETASTER (   val)
Value:
do { \
    t = p++; \
    n = 0; \
    GETNUM(n, (val)); \
    if (*p == '$') { \
        tmp = GETPOSARG(n); \
    } \
    else { \
        tmp = GETARG(); \
        p = t; \
    } \
    (val) = NUM2INT(tmp); \
} while (0)

Definition at line 141 of file sprintf.c.

Referenced by rb_str_format().

#define GETNAMEARG (   id,
  name,
  len 
)
Value:
( \
    posarg > 0 ? \
    (rb_raise(rb_eArgError, "named%.*s after unnumbered(%d)", (len), (name), posarg), 0) : \
    posarg == -1 ? \
    (rb_raise(rb_eArgError, "named%.*s after numbered", (len), (name)), 0) :    \
    (posarg = -2, rb_hash_lookup2(get_hash(&hash, argc, argv), (id), Qundef)))

Definition at line 122 of file sprintf.c.

Referenced by rb_str_format().

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

Definition at line 119 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]"); \
    }

Definition at line 129 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))))

Definition at line 112 of file sprintf.c.

Referenced by rb_str_format().

#define PUSH (   s,
 
)
Value:
do { \
    CHECK(l);\
    memcpy(&buf[blen], (s), (l));\
    blen += (l);\
} while (0)

Definition at line 93 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 1086 of file sprintf.c.

References 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 156 of file sprintf.c.

References hash(), NIL_P, Qundef, rb_check_convert_type(), rb_eArgError, rb_raise(), and T_HASH.

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

Definition at line 1184 of file sprintf.c.

References rb_enc_vsprintf(), and result.

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

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 
)
VALUE rb_str_vcatf ( VALUE  str,
const char *  fmt,
va_list  ap 
)
VALUE rb_vsprintf ( const char *  fmt,
va_list  ap 
)

Definition at line 1197 of file sprintf.c.

References NULL, and rb_enc_vsprintf().

Referenced by rb_fatal(), rb_name_error(), rb_raise(), and rb_sprintf().

static char* remove_sign_bits ( char *  str,
int  base 
) [static]

Definition at line 31 of file sprintf.c.

References EXTENDSIGN, and strlen().

Referenced by rb_str_format().

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 56 of file sprintf.c.

Referenced by rb_str_format().