Style fixes in libruntime.

This commit is contained in:
Ruben Ayrapetyan
2014-08-12 14:16:05 +04:00
parent aa43e06366
commit b4a29f754a
11 changed files with 830 additions and 673 deletions
+43 -17
View File
@@ -27,61 +27,87 @@
* and call assertion fail handler. * and call assertion fail handler.
*/ */
void __noreturn void __noreturn
jerry_exit( jerry_status_t code) /**< status code */ jerry_exit (jerry_status_t code) /**< status code */
{ {
#ifndef JERRY_NDEBUG #ifndef JERRY_NDEBUG
if ( code != ERR_OK ) if (code != ERR_OK)
{ {
__printf("Error: "); __printf ("Error: ");
switch ( code ) switch (code)
{ {
case ERR_OK: case ERR_OK:
{
JERRY_UNREACHABLE(); JERRY_UNREACHABLE();
break; break;
}
case ERR_IO: case ERR_IO:
__printf("ERR_IO\n"); {
__printf ("ERR_IO\n");
break; break;
}
case ERR_BUFFER_SIZE: case ERR_BUFFER_SIZE:
__printf("ERR_BUFFER_SIZE\n"); {
__printf ("ERR_BUFFER_SIZE\n");
break; break;
}
case ERR_SEVERAL_FILES: case ERR_SEVERAL_FILES:
__printf("ERR_SEVERAL_FILES\n"); {
__printf ("ERR_SEVERAL_FILES\n");
break; break;
}
case ERR_NO_FILES: case ERR_NO_FILES:
__printf("ERR_NO_FILES\n"); {
__printf ("ERR_NO_FILES\n");
break; break;
}
case ERR_NON_CHAR: case ERR_NON_CHAR:
__printf("ERR_NON_CHAR\n"); {
__printf ("ERR_NON_CHAR\n");
break; break;
}
case ERR_UNCLOSED: case ERR_UNCLOSED:
__printf("ERR_UNCLOSED\n"); {
__printf ("ERR_UNCLOSED\n");
break; break;
}
case ERR_INT_LITERAL: case ERR_INT_LITERAL:
__printf("ERR_INT_LITERAL\n"); {
__printf ("ERR_INT_LITERAL\n");
break; break;
}
case ERR_STRING: case ERR_STRING:
__printf("ERR_STRING\n"); {
__printf ("ERR_STRING\n");
break; break;
}
case ERR_PARSER: case ERR_PARSER:
__printf("ERR_PARSER\n"); {
__printf ("ERR_PARSER\n");
break; break;
}
case ERR_MEMORY: case ERR_MEMORY:
__printf("ERR_MEMORY\n"); {
__printf ("ERR_MEMORY\n");
break; break;
}
case ERR_SYSCALL: case ERR_SYSCALL:
{
JERRY_UNREACHABLE(); JERRY_UNREACHABLE();
break; break;
}
case ERR_GENERAL: case ERR_GENERAL:
__printf("ERR_GENERAL\n"); {
__printf ("ERR_GENERAL\n");
break; break;
} }
}
/* The failed assertion is 'Return code is zero' */ /* The failed assertion is 'Return code is zero' */
jerry_assert_fail( "Return code is zero", __FILE__, __LINE__); jerry_assert_fail ("Return code is zero", __FILE__, __LINE__);
} }
#endif /* !JERRY_NDEBUG */ #endif /* !JERRY_NDEBUG */
__exit( -code ); __exit (-code);
} /* jerry_exit */ } /* jerry_exit */
+228 -158
View File
@@ -46,71 +46,71 @@ typedef uint8_t libc_printf_arg_flags_mask_t;
/** /**
* Left justification of field's contents * Left justification of field's contents
*/ */
#define LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY ( 1 << 0 ) #define LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY (1 << 0)
/** /**
* Force print of number's sign * Force print of number's sign
*/ */
#define LIBC_PRINTF_ARG_FLAG_PRINT_SIGN ( 1 << 1 ) #define LIBC_PRINTF_ARG_FLAG_PRINT_SIGN (1 << 1)
/** /**
* If no sign is printed, print space before value * If no sign is printed, print space before value
*/ */
#define LIBC_PRINTF_ARG_FLAG_SPACE ( 1 << 2 ) #define LIBC_PRINTF_ARG_FLAG_SPACE (1 << 2)
/** /**
* For o, x, X preceed value with 0, 0x or 0X for non-zero values. * For o, x, X preceed value with 0, 0x or 0X for non-zero values.
*/ */
#define LIBC_PRINTF_ARG_FLAG_SHARP ( 1 << 3 ) #define LIBC_PRINTF_ARG_FLAG_SHARP (1 << 3)
/** /**
* Left-pad field with zeroes instead of spaces * Left-pad field with zeroes instead of spaces
*/ */
#define LIBC_PRINTF_ARG_FLAG_ZERO_PADDING ( 1 << 4 ) #define LIBC_PRINTF_ARG_FLAG_ZERO_PADDING (1 << 4)
/** /**
* printf helper function that outputs a char * printf helper function that outputs a char
*/ */
static void static void
libc_printf_putchar( _FILE *stream, /**< stream pointer */ libc_printf_putchar (_FILE *stream, /**< stream pointer */
char character) /**< character */ char character) /**< character */
{ {
__fwrite( &character, 1, sizeof(character), stream); __fwrite (&character, 1, sizeof (character), stream);
} /* libc_printf_putchar */ } /* libc_printf_putchar */
/** /**
* printf helper function that outputs justified string * printf helper function that outputs justified string
*/ */
static void static void
libc_printf_justified_string_output( _FILE *stream, /**< stream pointer */ libc_printf_justified_string_output (_FILE *stream, /**< stream pointer */
const char *string_p, /**< string */ const char *string_p, /**< string */
size_t width, /**< minimum field width */ size_t width, /**< minimum field width */
bool is_left_justify, /**< justify to left (true) or right (false) */ bool is_left_justify, /**< justify to left (true) or right (false) */
bool is_zero_padding) /**< left-pad with zeroes (true) or spaces (false) */ bool is_zero_padding) /**< left-pad with zeroes (true) or spaces (false) */
{ {
const size_t str_length = __strlen( string_p); const size_t str_length = __strlen (string_p);
size_t outputted_length = 0; size_t outputted_length = 0;
if ( !is_left_justify ) if (!is_left_justify)
{ {
char padding_char = is_zero_padding ? '0' : ' '; char padding_char = is_zero_padding ? '0' : ' ';
while ( outputted_length + str_length < width ) while (outputted_length + str_length < width)
{ {
libc_printf_putchar( stream, padding_char); libc_printf_putchar (stream, padding_char);
outputted_length++; outputted_length++;
} }
} }
__fwrite( string_p, 1, str_length * sizeof(*string_p), stream); __fwrite (string_p, 1, str_length * sizeof (*string_p), stream);
outputted_length += str_length; outputted_length += str_length;
if ( is_left_justify ) if (is_left_justify)
{ {
while( outputted_length < width ) while (outputted_length < width)
{ {
libc_printf_putchar( stream, ' '); libc_printf_putchar (stream, ' ');
outputted_length++; outputted_length++;
} }
} }
@@ -120,7 +120,7 @@ libc_printf_justified_string_output( _FILE *stream, /**< stream pointer */
* printf helper function that converts unsigned integer to string * printf helper function that converts unsigned integer to string
*/ */
static char* static char*
libc_printf_uint_to_string( uintmax_t value, /**< integer value */ libc_printf_uint_to_string (uintmax_t value, /**< integer value */
char *buffer_p, /**< buffer for output string */ char *buffer_p, /**< buffer for output string */
size_t buffer_size, /**< buffer size */ size_t buffer_size, /**< buffer size */
const char *alphabet, /**< alphabet used for digits */ const char *alphabet, /**< alphabet used for digits */
@@ -130,20 +130,20 @@ libc_printf_uint_to_string( uintmax_t value, /**< integer value */
char *str_p = str_buffer_end; char *str_p = str_buffer_end;
*--str_p = '\0'; *--str_p = '\0';
JERRY_ASSERT( radix >= 2 ); JERRY_ASSERT(radix >= 2);
if ( ( radix & ( radix - 1 ) ) != 0 ) if ((radix & (radix - 1)) != 0)
{ {
/* /*
* Radix is not power of 2. Only 32-bit numbers are supported in this mode. * Radix is not power of 2. Only 32-bit numbers are supported in this mode.
*/ */
JERRY_ASSERT( ( value >> 32 ) == 0 ); JERRY_ASSERT((value >> 32) == 0);
uint32_t value_lo = (uint32_t) value; uint32_t value_lo = (uint32_t) value;
while ( value_lo != 0 ) while (value_lo != 0)
{ {
JERRY_ASSERT ( str_p != buffer_p ); JERRY_ASSERT (str_p != buffer_p);
*--str_p = alphabet[ value_lo % radix ]; *--str_p = alphabet[ value_lo % radix ];
value_lo /= radix; value_lo /= radix;
@@ -152,34 +152,34 @@ libc_printf_uint_to_string( uintmax_t value, /**< integer value */
else else
{ {
uint32_t shift = 0; uint32_t shift = 0;
while ( !( radix & ( 1u << shift ) ) ) while (!(radix & (1u << shift)))
{ {
shift++; shift++;
JERRY_ASSERT( shift <= 32 ); JERRY_ASSERT(shift <= 32);
} }
uint32_t value_lo = (uint32_t) value; uint32_t value_lo = (uint32_t) value;
uint32_t value_hi = (uint32_t) ( value >> 32 ); uint32_t value_hi = (uint32_t) (value >> 32);
while ( value_lo != 0 while (value_lo != 0
|| value_hi != 0 ) || value_hi != 0)
{ {
JERRY_ASSERT ( str_p != buffer_p ); JERRY_ASSERT (str_p != buffer_p);
*--str_p = alphabet[ value_lo & ( radix - 1 ) ]; *--str_p = alphabet[ value_lo & (radix - 1) ];
value_lo >>= shift; value_lo >>= shift;
value_lo += ( value_hi & ( radix - 1 ) ) << ( 32 - shift ); value_lo += (value_hi & (radix - 1)) << (32 - shift);
value_hi >>= shift; value_hi >>= shift;
} }
} }
if ( *str_p == '\0' ) if (*str_p == '\0')
{ {
*--str_p = '0'; *--str_p = '0';
} }
JERRY_ASSERT( str_p >= buffer_p && str_p < str_buffer_end ); JERRY_ASSERT(str_p >= buffer_p && str_p < str_buffer_end);
return str_p; return str_p;
} /* libc_printf_uint_to_string */ } /* libc_printf_uint_to_string */
@@ -190,101 +190,119 @@ libc_printf_uint_to_string( uintmax_t value, /**< integer value */
* @return updated va_list * @return updated va_list
*/ */
static void static void
libc_printf_write_d_i( _FILE *stream, /**< stream pointer */ libc_printf_write_d_i (_FILE *stream, /**< stream pointer */
va_list* args_list_p, /**< args' list */ va_list* args_list_p, /**< args' list */
libc_printf_arg_flags_mask_t flags, /**< field's flags */ libc_printf_arg_flags_mask_t flags, /**< field's flags */
libc_printf_arg_length_type_t length, /**< field's length type */ libc_printf_arg_length_type_t length, /**< field's length type */
uint32_t width) /**< minimum field width to output */ uint32_t width) /**< minimum field width to output */
{ {
JERRY_ASSERT( ( flags & LIBC_PRINTF_ARG_FLAG_SHARP ) == 0 ); JERRY_ASSERT((flags & LIBC_PRINTF_ARG_FLAG_SHARP) == 0);
bool is_signed = true; bool is_signed = true;
uintmax_t value = 0; uintmax_t value = 0;
/* true - positive, false - negative */ /* true - positive, false - negative */
bool sign = true; bool sign = true;
const uintmax_t value_sign_mask = ((uintmax_t)1) << ( sizeof(value) * JERRY_BITSINBYTE - 1 ); const uintmax_t value_sign_mask = ((uintmax_t)1) << (sizeof (value) * JERRY_BITSINBYTE - 1);
switch ( length ) switch (length)
{ {
case LIBC_PRINTF_ARG_LENGTH_TYPE_NONE: case LIBC_PRINTF_ARG_LENGTH_TYPE_NONE:
value = (uintmax_t)va_arg( *args_list_p, int); {
value = (uintmax_t)va_arg (*args_list_p, int);
break; break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_HH:
value = (uintmax_t)va_arg( *args_list_p, int); /* char is promoted to int */
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_H:
value = (uintmax_t)va_arg( *args_list_p, int); /* short int is promoted to int */
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_L:
value = (uintmax_t)va_arg( *args_list_p, long int);
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_LL:
value = (uintmax_t)va_arg( *args_list_p, long long int);
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_J:
value = (uintmax_t)va_arg( *args_list_p, intmax_t);
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_Z:
is_signed = false;
value = (uintmax_t)va_arg( *args_list_p, size_t);
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_T:
is_signed = false;
value = (uintmax_t)va_arg( *args_list_p, ptrdiff_t);
break;
case LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL:
JERRY_UNREACHABLE();
} }
if ( is_signed ) case LIBC_PRINTF_ARG_LENGTH_TYPE_HH:
{ {
sign = ( ( value & value_sign_mask ) == 0 ); value = (uintmax_t)va_arg (*args_list_p, int); /* char is promoted to int */
break;
}
if ( !sign ) case LIBC_PRINTF_ARG_LENGTH_TYPE_H:
{
value = (uintmax_t)va_arg (*args_list_p, int); /* short int is promoted to int */
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_L:
{
value = (uintmax_t)va_arg (*args_list_p, long int);
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_LL:
{
value = (uintmax_t)va_arg (*args_list_p, long long int);
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_J:
{
value = (uintmax_t)va_arg (*args_list_p, intmax_t);
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_Z:
{
is_signed = false;
value = (uintmax_t)va_arg (*args_list_p, size_t);
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_T:
{
is_signed = false;
value = (uintmax_t)va_arg (*args_list_p, ptrdiff_t);
break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL:
{
JERRY_UNREACHABLE();
}
}
if (is_signed)
{
sign = ((value & value_sign_mask) == 0);
if (!sign)
{ {
value = (uintmax_t) (-value); value = (uintmax_t) (-value);
} }
} }
char str_buffer[ 32 ]; char str_buffer[ 32 ];
const char *string_p = libc_printf_uint_to_string( value, const char *string_p = libc_printf_uint_to_string (value,
str_buffer, str_buffer,
sizeof(str_buffer), sizeof (str_buffer),
"0123456789", "0123456789",
10); 10);
if ( !sign if (!sign
|| ( flags & LIBC_PRINTF_ARG_FLAG_PRINT_SIGN ) ) || (flags & LIBC_PRINTF_ARG_FLAG_PRINT_SIGN))
{ {
/* printing sign */ /* printing sign */
libc_printf_putchar( stream, sign ? '+' : '-' ); libc_printf_putchar (stream, sign ? '+' : '-');
if ( width > 0 ) if (width > 0)
{ {
width--; width--;
} }
} }
else if ( flags & LIBC_PRINTF_ARG_FLAG_SPACE ) else if (flags & LIBC_PRINTF_ARG_FLAG_SPACE)
{ {
/* no sign and space flag, printing one space */ /* no sign and space flag, printing one space */
libc_printf_putchar( stream, ' '); libc_printf_putchar (stream, ' ');
if ( width > 0 ) if (width > 0)
{ {
width--; width--;
} }
} }
libc_printf_justified_string_output( stream, libc_printf_justified_string_output (stream,
string_p, string_p,
width, width,
flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY, flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY,
@@ -297,7 +315,7 @@ libc_printf_write_d_i( _FILE *stream, /**< stream pointer */
* @return updated va_list * @return updated va_list
*/ */
static void static void
libc_printf_write_u_o_x_X( _FILE *stream, /**< stream pointer */ libc_printf_write_u_o_x_X(_FILE *stream, /**< stream pointer */
char specifier, /**< specifier (u, o, x, X) */ char specifier, /**< specifier (u, o, x, X) */
va_list* args_list_p, /**< args' list */ va_list* args_list_p, /**< args' list */
libc_printf_arg_flags_mask_t flags, /**< field's flags */ libc_printf_arg_flags_mask_t flags, /**< field's flags */
@@ -306,61 +324,79 @@ libc_printf_write_u_o_x_X( _FILE *stream, /**< stream pointer */
{ {
uintmax_t value = 0; uintmax_t value = 0;
switch ( length ) switch (length)
{ {
case LIBC_PRINTF_ARG_LENGTH_TYPE_NONE: case LIBC_PRINTF_ARG_LENGTH_TYPE_NONE:
value = (uintmax_t)va_arg( *args_list_p, unsigned int); {
value = (uintmax_t)va_arg (*args_list_p, unsigned int);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_HH: case LIBC_PRINTF_ARG_LENGTH_TYPE_HH:
value = (uintmax_t)va_arg( *args_list_p, unsigned int); /* char is promoted to int */ {
value = (uintmax_t)va_arg (*args_list_p, unsigned int); /* char is promoted to int */
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_H: case LIBC_PRINTF_ARG_LENGTH_TYPE_H:
value = (uintmax_t)va_arg( *args_list_p, unsigned int); /* short int is promoted to int */ {
value = (uintmax_t)va_arg (*args_list_p, unsigned int); /* short int is promoted to int */
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_L: case LIBC_PRINTF_ARG_LENGTH_TYPE_L:
value = (uintmax_t)va_arg( *args_list_p, unsigned long int); {
value = (uintmax_t)va_arg (*args_list_p, unsigned long int);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_LL: case LIBC_PRINTF_ARG_LENGTH_TYPE_LL:
value = (uintmax_t)va_arg( *args_list_p, unsigned long long int); {
value = (uintmax_t)va_arg (*args_list_p, unsigned long long int);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_J: case LIBC_PRINTF_ARG_LENGTH_TYPE_J:
value = (uintmax_t)va_arg( *args_list_p, uintmax_t); {
value = (uintmax_t)va_arg (*args_list_p, uintmax_t);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_Z: case LIBC_PRINTF_ARG_LENGTH_TYPE_Z:
value = (uintmax_t)va_arg( *args_list_p, size_t); {
value = (uintmax_t)va_arg (*args_list_p, size_t);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_T: case LIBC_PRINTF_ARG_LENGTH_TYPE_T:
value = (uintmax_t)va_arg( *args_list_p, ptrdiff_t); {
value = (uintmax_t)va_arg (*args_list_p, ptrdiff_t);
break; break;
}
case LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL: case LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL:
{
JERRY_UNREACHABLE(); JERRY_UNREACHABLE();
} }
if ( flags & LIBC_PRINTF_ARG_FLAG_SHARP )
{
if ( value != 0 && specifier != 'u' )
{
libc_printf_putchar( stream, '0');
if ( specifier == 'x' )
{
libc_printf_putchar( stream, 'x');
} }
else if ( specifier == 'X' )
if (flags & LIBC_PRINTF_ARG_FLAG_SHARP)
{ {
libc_printf_putchar( stream, 'X'); if (value != 0 && specifier != 'u')
{
libc_printf_putchar (stream, '0');
if (specifier == 'x')
{
libc_printf_putchar (stream, 'x');
}
else if (specifier == 'X')
{
libc_printf_putchar (stream, 'X');
} }
else else
{ {
JERRY_ASSERT( specifier == 'o' ); JERRY_ASSERT(specifier == 'o');
} }
} }
} }
@@ -368,61 +404,71 @@ libc_printf_write_u_o_x_X( _FILE *stream, /**< stream pointer */
uint32_t radix = 10; uint32_t radix = 10;
const char *alphabet; const char *alphabet;
switch ( specifier ) switch (specifier)
{ {
case 'u': case 'u':
{
alphabet = "0123456789"; alphabet = "0123456789";
radix = 10; radix = 10;
break; break;
}
case 'o': case 'o':
{
alphabet = "01234567"; alphabet = "01234567";
radix = 8; radix = 8;
break; break;
}
case 'x': case 'x':
{
alphabet = "0123456789abcdef"; alphabet = "0123456789abcdef";
radix = 16; radix = 16;
break; break;
}
case 'X': case 'X':
{
alphabet = "0123456789ABCDEF"; alphabet = "0123456789ABCDEF";
radix = 16; radix = 16;
break; break;
}
default: default:
{
JERRY_UNREACHABLE(); JERRY_UNREACHABLE();
} }
}
char str_buffer[ 32 ]; char str_buffer[ 32 ];
const char *string_p = libc_printf_uint_to_string( value, const char *string_p = libc_printf_uint_to_string (value,
str_buffer, str_buffer,
sizeof(str_buffer), sizeof (str_buffer),
alphabet, alphabet,
radix); radix);
if ( flags & LIBC_PRINTF_ARG_FLAG_PRINT_SIGN ) if (flags & LIBC_PRINTF_ARG_FLAG_PRINT_SIGN)
{ {
/* printing sign */ /* printing sign */
libc_printf_putchar( stream, '+'); libc_printf_putchar (stream, '+');
if ( width > 0 ) if (width > 0)
{ {
width--; width--;
} }
} }
else if ( flags & LIBC_PRINTF_ARG_FLAG_SPACE ) else if (flags & LIBC_PRINTF_ARG_FLAG_SPACE)
{ {
/* no sign and space flag, printing one space */ /* no sign and space flag, printing one space */
libc_printf_putchar( stream, ' '); libc_printf_putchar (stream, ' ');
if ( width > 0 ) if (width > 0)
{ {
width--; width--;
} }
} }
libc_printf_justified_string_output( stream, libc_printf_justified_string_output (stream,
string_p, string_p,
width, width,
flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY, flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY,
@@ -435,21 +481,21 @@ libc_printf_write_u_o_x_X( _FILE *stream, /**< stream pointer */
* @return number of characters printed * @return number of characters printed
*/ */
static int static int
__vfprintf( _FILE *stream, /**< stream pointer */ __vfprintf (_FILE *stream, /**< stream pointer */
const char *format, /**< format string */ const char *format, /**< format string */
va_list args) /**< arguments */ va_list args) /**< arguments */
{ {
va_list args_copy; va_list args_copy;
va_copy( args_copy, args); va_copy (args_copy, args);
const char *format_iter_p = format; const char *format_iter_p = format;
while ( *format_iter_p ) while (*format_iter_p)
{ {
if ( *format_iter_p != '%' ) if (*format_iter_p != '%')
{ {
libc_printf_putchar( stream, *format_iter_p); libc_printf_putchar (stream, *format_iter_p);
} }
else else
{ {
@@ -457,27 +503,27 @@ __vfprintf( _FILE *stream, /**< stream pointer */
uint32_t width = 0; uint32_t width = 0;
libc_printf_arg_length_type_t length = LIBC_PRINTF_ARG_LENGTH_TYPE_NONE; libc_printf_arg_length_type_t length = LIBC_PRINTF_ARG_LENGTH_TYPE_NONE;
while ( true ) while (true)
{ {
format_iter_p++; format_iter_p++;
if ( *format_iter_p == '-' ) if (*format_iter_p == '-')
{ {
flags |= LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY; flags |= LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY;
} }
else if ( *format_iter_p == '+' ) else if (*format_iter_p == '+')
{ {
flags |= LIBC_PRINTF_ARG_FLAG_PRINT_SIGN; flags |= LIBC_PRINTF_ARG_FLAG_PRINT_SIGN;
} }
else if ( *format_iter_p == ' ' ) else if (*format_iter_p == ' ')
{ {
flags |= LIBC_PRINTF_ARG_FLAG_SPACE; flags |= LIBC_PRINTF_ARG_FLAG_SPACE;
} }
else if ( *format_iter_p == '#' ) else if (*format_iter_p == '#')
{ {
flags |= LIBC_PRINTF_ARG_FLAG_SHARP; flags |= LIBC_PRINTF_ARG_FLAG_SHARP;
} }
else if ( *format_iter_p == '0' ) else if (*format_iter_p == '0')
{ {
flags |= LIBC_PRINTF_ARG_FLAG_ZERO_PADDING; flags |= LIBC_PRINTF_ARG_FLAG_ZERO_PADDING;
} }
@@ -487,29 +533,30 @@ __vfprintf( _FILE *stream, /**< stream pointer */
} }
} }
if ( *format_iter_p == '*' ) if (*format_iter_p == '*')
{ {
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
} }
// If there is a number, recognize it as field width // If there is a number, recognize it as field width
while ( *format_iter_p >= '0' && *format_iter_p <= '9' ) while (*format_iter_p >= '0' && *format_iter_p <= '9')
{ {
width = width * 10u + (uint32_t) (*format_iter_p - '0'); width = width * 10u + (uint32_t) (*format_iter_p - '0');
format_iter_p++; format_iter_p++;
} }
if ( *format_iter_p == '.' ) if (*format_iter_p == '.')
{ {
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
} }
switch ( *format_iter_p ) switch (*format_iter_p)
{ {
case 'h': case 'h':
{
format_iter_p++; format_iter_p++;
if ( *format_iter_p == 'h' ) if (*format_iter_p == 'h')
{ {
format_iter_p++; format_iter_p++;
@@ -520,10 +567,12 @@ __vfprintf( _FILE *stream, /**< stream pointer */
length = LIBC_PRINTF_ARG_LENGTH_TYPE_H; length = LIBC_PRINTF_ARG_LENGTH_TYPE_H;
} }
break; break;
}
case 'l': case 'l':
{
format_iter_p++; format_iter_p++;
if ( *format_iter_p == 'l' ) if (*format_iter_p == 'l')
{ {
format_iter_p++; format_iter_p++;
@@ -534,41 +583,54 @@ __vfprintf( _FILE *stream, /**< stream pointer */
length = LIBC_PRINTF_ARG_LENGTH_TYPE_L; length = LIBC_PRINTF_ARG_LENGTH_TYPE_L;
} }
break; break;
}
case 'j': case 'j':
{
format_iter_p++; format_iter_p++;
length = LIBC_PRINTF_ARG_LENGTH_TYPE_J; length = LIBC_PRINTF_ARG_LENGTH_TYPE_J;
break; break;
}
case 'z': case 'z':
{
format_iter_p++; format_iter_p++;
length = LIBC_PRINTF_ARG_LENGTH_TYPE_Z; length = LIBC_PRINTF_ARG_LENGTH_TYPE_Z;
break; break;
}
case 't': case 't':
{
format_iter_p++; format_iter_p++;
length = LIBC_PRINTF_ARG_LENGTH_TYPE_T; length = LIBC_PRINTF_ARG_LENGTH_TYPE_T;
break; break;
}
case 'L': case 'L':
{
format_iter_p++; format_iter_p++;
length = LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL; length = LIBC_PRINTF_ARG_LENGTH_TYPE_HIGHL;
break; break;
} }
}
switch ( *format_iter_p ) switch (*format_iter_p)
{ {
case 'd': case 'd':
case 'i': case 'i':
libc_printf_write_d_i( stream, &args_copy, flags, length, width); {
libc_printf_write_d_i (stream, &args_copy, flags, length, width);
break; break;
}
case 'u': case 'u':
case 'o': case 'o':
case 'x': case 'x':
case 'X': case 'X':
libc_printf_write_u_o_x_X( stream, *format_iter_p, &args_copy, flags, length, width); {
libc_printf_write_u_o_x_X(stream, *format_iter_p, &args_copy, flags, length, width);
break; break;
}
case 'f': case 'f':
case 'F': case 'F':
@@ -578,11 +640,14 @@ __vfprintf( _FILE *stream, /**< stream pointer */
case 'G': case 'G':
case 'a': case 'a':
case 'A': case 'A':
{
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
break; break;
}
case 'c': case 'c':
if ( length & LIBC_PRINTF_ARG_LENGTH_TYPE_L ) {
if (length & LIBC_PRINTF_ARG_LENGTH_TYPE_L)
{ {
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
} }
@@ -590,68 +655,73 @@ __vfprintf( _FILE *stream, /**< stream pointer */
{ {
char str[2] = char str[2] =
{ {
(char)va_arg( args_copy, int), /* char is promoted to int */ (char)va_arg (args_copy, int), /* char is promoted to int */
'\0' '\0'
}; };
libc_printf_justified_string_output( stream, libc_printf_justified_string_output (stream,
str, str,
width, width,
flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY, flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY,
flags & LIBC_PRINTF_ARG_FLAG_ZERO_PADDING); flags & LIBC_PRINTF_ARG_FLAG_ZERO_PADDING);
} }
break; break;
}
case 's': case 's':
if ( length & LIBC_PRINTF_ARG_LENGTH_TYPE_L ) {
if (length & LIBC_PRINTF_ARG_LENGTH_TYPE_L)
{ {
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
} }
else else
{ {
char *str_p = va_arg( args_copy, char*); char *str_p = va_arg (args_copy, char*);
libc_printf_justified_string_output( stream, libc_printf_justified_string_output (stream,
str_p, str_p,
width, width,
flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY, flags & LIBC_PRINTF_ARG_FLAG_LEFT_JUSTIFY,
flags & LIBC_PRINTF_ARG_FLAG_ZERO_PADDING); flags & LIBC_PRINTF_ARG_FLAG_ZERO_PADDING);
} }
break; break;
}
case 'p': case 'p':
{ {
va_list args_copy2; va_list args_copy2;
va_copy( args_copy2, args_copy); va_copy (args_copy2, args_copy);
void *value = va_arg( args_copy2, void*); void *value = va_arg (args_copy2, void*);
va_end( args_copy2); va_end (args_copy2);
if ( value == NULL ) if (value == NULL)
{ {
__printf( "(nil)"); __printf ("(nil)");
} }
else else
{ {
libc_printf_write_u_o_x_X( stream, libc_printf_write_u_o_x_X(stream,
'x', 'x',
&args_copy, &args_copy,
flags | LIBC_PRINTF_ARG_FLAG_SHARP, flags | LIBC_PRINTF_ARG_FLAG_SHARP,
LIBC_PRINTF_ARG_LENGTH_TYPE_Z, LIBC_PRINTF_ARG_LENGTH_TYPE_Z,
width); width);
} }
}
break; break;
}
case 'n': case 'n':
{
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
break; break;
} }
} }
}
format_iter_p++; format_iter_p++;
} }
va_end( args_copy); va_end (args_copy);
return 0; return 0;
} /* __vfprintf */ } /* __vfprintf */
@@ -662,17 +732,17 @@ __vfprintf( _FILE *stream, /**< stream pointer */
* @return number of characters printed * @return number of characters printed
*/ */
int int
__fprintf( _FILE *stream, /**< stream pointer */ __fprintf (_FILE *stream, /**< stream pointer */
const char *format, /**< format string */ const char *format, /**< format string */
...) /**< parameters' values */ ...) /**< parameters' values */
{ {
va_list args; va_list args;
va_start( args, format); va_start (args, format);
int ret = __vfprintf( stream, format, args); int ret = __vfprintf (stream, format, args);
va_end( args); va_end (args);
return ret; return ret;
} /* __fprintf */ } /* __fprintf */
@@ -683,16 +753,16 @@ __fprintf( _FILE *stream, /**< stream pointer */
* @return number of characters printed * @return number of characters printed
*/ */
int int
__printf( const char *format, /**< format string */ __printf (const char *format, /**< format string */
...) /**< parameters' values */ ...) /**< parameters' values */
{ {
va_list args; va_list args;
va_start( args, format); va_start (args, format);
int ret = __vfprintf( LIBC_STDOUT, format, args); int ret = __vfprintf (LIBC_STDOUT, format, args);
va_end( args); va_end (args);
return ret; return ret;
} /* __printf */ } /* __printf */
+58 -25
View File
@@ -19,23 +19,23 @@
#include "jerry-libc.h" #include "jerry-libc.h"
FIXME( #ifndef LIBC_MUSL should be removed from here when own libc will be implemented ) FIXME(#ifndef LIBC_MUSL should be removed from here when own libc will be implemented)
#ifndef LIBC_MUSL #ifndef LIBC_MUSL
/** /**
* memcpy alias to __memcpy (for compiler usage) * memcpy alias to __memcpy (for compiler usage)
*/ */
extern void *memcpy(void *s1, const void*s2, size_t n); extern void *memcpy (void *s1, const void*s2, size_t n);
/** /**
* memset alias to __memset (for compiler usage) * memset alias to __memset (for compiler usage)
*/ */
extern void *memset(void *s, int c, size_t n); extern void *memset (void *s, int c, size_t n);
/** /**
* memmove alias to __memmove (for compiler usage) * memmove alias to __memmove (for compiler usage)
*/ */
extern void *memmove(void *s1, const void*s2, size_t n); extern void *memmove (void *s1, const void*s2, size_t n);
#ifdef __GNUC__ #ifdef __GNUC__
/* /*
@@ -53,31 +53,31 @@ CALL_PRAGMA(GCC optimize ("-fno-tree-loop-distribute-patterns"))
/** /**
* memcpy alias to __memcpy (for compiler usage) * memcpy alias to __memcpy (for compiler usage)
*/ */
void* memcpy(void *s1, /**< destination */ void* memcpy (void *s1, /**< destination */
const void* s2, /**< source */ const void* s2, /**< source */
size_t n) /**< bytes number */ size_t n) /**< bytes number */
{ {
return __memcpy(s1, s2, n); return __memcpy (s1, s2, n);
} /* memcpy */ } /* memcpy */
/** /**
* memset alias to __memset (for compiler usage) * memset alias to __memset (for compiler usage)
*/ */
void* memset(void *s, /**< area to set values in */ void* memset (void *s, /**< area to set values in */
int c, /**< value to set */ int c, /**< value to set */
size_t n) /**< area size */ size_t n) /**< area size */
{ {
return __memset(s, c, n); return __memset (s, c, n);
} /* memset */ } /* memset */
/** /**
* memmove alias to __memmove (for compiler usage) * memmove alias to __memmove (for compiler usage)
*/ */
void* memmove(void *s1, /**< destination*/ void* memmove (void *s1, /**< destination*/
const void*s2, /**< source */ const void*s2, /**< source */
size_t n) /**< area size */ size_t n) /**< area size */
{ {
return __memmove(s1, s2, n); return __memmove (s1, s2, n);
} /* memmove */ } /* memmove */
#ifdef __GNUC__ #ifdef __GNUC__
@@ -93,12 +93,12 @@ CALL_PRAGMA(GCC diagnostic pop)
* @return @s * @return @s
*/ */
void* void*
__memset(void *s, /**< area to set values in */ __memset (void *s, /**< area to set values in */
int c, /**< value to set */ int c, /**< value to set */
size_t n) /**< area size */ size_t n) /**< area size */
{ {
uint8_t *area_p = s; uint8_t *area_p = s;
for ( size_t index = 0; index < n; index++ ) for (size_t index = 0; index < n; index++)
{ {
area_p[ index ] = (uint8_t)c; area_p[ index ] = (uint8_t)c;
} }
@@ -114,17 +114,18 @@ __memset(void *s, /**< area to set values in */
* 1, otherwise * 1, otherwise
*/ */
int int
__memcmp(const void *s1, /**< first area */ __memcmp (const void *s1, /**< first area */
const void *s2, /**< second area */ const void *s2, /**< second area */
size_t n) /**< area size */ size_t n) /**< area size */
{ {
const uint8_t *area1_p = s1, *area2_p = s2; const uint8_t *area1_p = s1, *area2_p = s2;
for ( size_t index = 0; index < n; index++ ) for (size_t index = 0; index < n; index++)
{ {
if ( area1_p[ index ] < area2_p[ index ] ) if (area1_p[ index ] < area2_p[ index ])
{ {
return -1; return -1;
} else if ( area1_p[ index ] > area2_p[ index ] ) }
else if (area1_p[ index ] > area2_p[ index ])
{ {
return 1; return 1;
} }
@@ -137,14 +138,14 @@ __memcmp(const void *s1, /**< first area */
* memcpy * memcpy
*/ */
void * void *
__memcpy(void *s1, /**< destination */ __memcpy (void *s1, /**< destination */
const void *s2, /**< source */ const void *s2, /**< source */
size_t n) /**< bytes number */ size_t n) /**< bytes number */
{ {
uint8_t *area1_p = s1; uint8_t *area1_p = s1;
const uint8_t *area2_p = s2; const uint8_t *area2_p = s2;
for ( size_t index = 0; index < n; index++ ) for (size_t index = 0; index < n; index++)
{ {
area1_p[ index ] = area2_p[ index ]; area1_p[ index ] = area2_p[ index ];
} }
@@ -158,22 +159,23 @@ __memcpy(void *s1, /**< destination */
* @return the dest pointer's value * @return the dest pointer's value
*/ */
void * void *
__memmove(void *s1, /**< destination */ __memmove (void *s1, /**< destination */
const void *s2, /**< source */ const void *s2, /**< source */
size_t n) /**< bytes number */ size_t n) /**< bytes number */
{ {
uint8_t *dest_p = s1; uint8_t *dest_p = s1;
const uint8_t *src_p = s2; const uint8_t *src_p = s2;
if ( dest_p < src_p ) if (dest_p < src_p)
{ /* from begin to end */ { /* from begin to end */
for ( size_t index = 0; index < n; index++ ) for (size_t index = 0; index < n; index++)
{ {
dest_p[ index ] = src_p[ index ]; dest_p[ index ] = src_p[ index ];
} }
} else if ( dest_p > src_p ) }
else if (dest_p > src_p)
{ /* from end to begin */ { /* from end to begin */
for ( size_t index = 1; index <= n; index++ ) for (size_t index = 1; index <= n; index++)
{ {
dest_p[ n - index ] = src_p[ n - index ]; dest_p[ n - index ] = src_p[ n - index ];
} }
@@ -191,23 +193,35 @@ __strcmp (const char *s1, const char *s2)
if (s1 == NULL) if (s1 == NULL)
{ {
if (s2 != NULL) if (s2 != NULL)
{
return -1; return -1;
}
else else
{
return 0; return 0;
} }
}
if (s2 == NULL) if (s2 == NULL)
{
return 1; return 1;
}
for (i = 0; s1[i]; i++) for (i = 0; s1[i]; i++)
{ {
if (s1[i] > s2[i]) if (s1[i] > s2[i])
{
return 1; return 1;
}
else if (s1[i] < s2[i]) else if (s1[i] < s2[i])
{
return -1; return -1;
} }
}
if (s2[i]) if (s2[i])
{
return -1; return -1;
}
return 0; return 0;
} }
@@ -222,20 +236,30 @@ __strncmp (const char *s1, const char *s2, size_t n)
if (s1 == NULL) if (s1 == NULL)
{ {
if (s2 != NULL) if (s2 != NULL)
{
return -1; return -1;
}
else else
{
return 0; return 0;
} }
}
if (s2 == NULL) if (s2 == NULL)
{
return 1; return 1;
}
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
if (s1[i] > s2[i]) if (s1[i] > s2[i])
{
return 1; return 1;
}
else if (s1[i] < s2[i]) else if (s1[i] < s2[i])
{
return -1; return -1;
} }
}
return 0; return 0;
} }
@@ -244,7 +268,7 @@ __strncmp (const char *s1, const char *s2, size_t n)
null byte among the first n bytes of src, the string placed in dest will not be null-terminated. null byte among the first n bytes of src, the string placed in dest will not be null-terminated.
@return a pointer to the destination string dest. */ @return a pointer to the destination string dest. */
char * char *
__strncpy(char *dest, const char *src, size_t n) __strncpy (char *dest, const char *src, size_t n)
{ {
size_t i; size_t i;
@@ -252,8 +276,10 @@ __strncpy(char *dest, const char *src, size_t n)
{ {
dest[i] = src[i]; dest[i] = src[i];
if (src[i] == '\0') if (src[i] == '\0')
{
break; break;
} }
}
return dest; return dest;
} }
@@ -274,7 +300,10 @@ __strlen (const char *s)
{ {
size_t i; size_t i;
for (i = 0; s[i]; i++) for (i = 0; s[i]; i++)
{
; ;
}
return i; return i;
} }
@@ -291,10 +320,14 @@ __isspace (int c)
case '\r': case '\r':
case '\t': case '\t':
case '\v': case '\v':
{
return 1; return 1;
}
default: default:
{
return 0; return 0;
} }
}
} }
/** Checks for an uppercase letter. */ /** Checks for an uppercase letter. */
@@ -312,7 +345,7 @@ __islower (int c)
} }
/** Checks for an alphabetic character. /** Checks for an alphabetic character.
In the standard "C" locale, it is equivalent to (isupper(c) || islower(c)). */ In the standard "C" locale, it is equivalent to (isupper (c) || islower (c)). */
int int
__isalpha (int c) __isalpha (int c)
{ {
+11 -11
View File
@@ -91,19 +91,19 @@ typedef enum
__SEEK_END /**< relative to end of file */ __SEEK_END /**< relative to end of file */
} _whence_t; } _whence_t;
extern _FILE* __fopen(const char *, const char *); extern _FILE* __fopen (const char *, const char *);
extern int __fclose(_FILE *); extern int __fclose (_FILE *);
extern int __fseek(_FILE *, long offset, _whence_t); extern int __fseek (_FILE *, long offset, _whence_t);
extern long __ftell(_FILE *); extern long __ftell (_FILE *);
extern void __rewind(_FILE *); extern void __rewind (_FILE *);
extern size_t __fread(void *, size_t, size_t, _FILE *); extern size_t __fread (void *, size_t, size_t, _FILE *);
extern size_t __fwrite(const void *, size_t, size_t, _FILE *); extern size_t __fwrite (const void *, size_t, size_t, _FILE *);
extern int __fprintf(_FILE *, const char *, ...); extern int __fprintf (_FILE *, const char *, ...);
#define DBL_MANT_DIG ( 52) #define DBL_MANT_DIG (52)
#define DBL_DIG ( 10) #define DBL_DIG (10)
#define DBL_MIN_EXP (-324) #define DBL_MIN_EXP (-324)
#define DBL_MAX_EXP ( 308) #define DBL_MAX_EXP (308)
#define HUGE_VAL (1e37f) #define HUGE_VAL (1e37f)
#endif /* JERRY_LIBC_H */ #endif /* JERRY_LIBC_H */
+12 -12
View File
@@ -22,11 +22,11 @@
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_1( syscall_no, arg1, ret) \ #define SYSCALL_1(syscall_no, arg1, ret) \
__asm volatile ( "syscall" \ __asm volatile ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1) \ : "a" (syscall_no), "D" (arg1) \
: "rcx", "r11" ); : "rcx", "r11");
/* /*
* mov syscall_no -> %rax * mov syscall_no -> %rax
@@ -35,11 +35,11 @@
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_2( syscall_no, arg1, arg2, ret) \ #define SYSCALL_2(syscall_no, arg1, arg2, ret) \
__asm volatile ( "syscall" \ __asm volatile ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1), "S" (arg2) \ : "a" (syscall_no), "D" (arg1), "S" (arg2) \
: "rcx", "r11" ); : "rcx", "r11");
/* /*
* mov syscall_no -> %rax * mov syscall_no -> %rax
@@ -49,11 +49,11 @@
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_3( syscall_no, arg1, arg2, arg3, ret) \ #define SYSCALL_3(syscall_no, arg1, arg2, arg3, ret) \
__asm volatile ( "syscall" \ __asm volatile ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1), "S" (arg2), "d" (arg3) \ : "a" (syscall_no), "D" (arg1), "S" (arg2), "d" (arg3) \
: "rcx", "r11" ); : "rcx", "r11");
#define _START \ #define _START \
mov (%rsp), %rdi; \ mov (%rsp), %rdi; \
+13 -13
View File
@@ -16,7 +16,7 @@
#ifndef LINUX_X86_ASM_H #ifndef LINUX_X86_ASM_H
#define LINUX_X86_ASM_H #define LINUX_X86_ASM_H
FIXME( Implement x86 ABI ); FIXME(Implement x86 ABI);
#error "Not implemented" #error "Not implemented"
/* /*
@@ -25,11 +25,11 @@ FIXME( Implement x86 ABI );
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_1( syscall_no, arg1, ret) \ #define SYSCALL_1 (syscall_no, arg1, ret) \
__asm ( "syscall" \ __asm ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1) \ : "a" (syscall_no), "D" (arg1) \
: "rcx", "r11" ); : "rcx", "r11");
/* /*
* mov syscall_no -> %rax * mov syscall_no -> %rax
@@ -38,11 +38,11 @@ FIXME( Implement x86 ABI );
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_2( syscall_no, arg1, arg2, ret) \ #define SYSCALL_2 (syscall_no, arg1, arg2, ret) \
__asm ( "syscall" \ __asm ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1), "S" (arg2) \ : "a" (syscall_no), "D" (arg1), "S" (arg2) \
: "rcx", "r11" ); : "rcx", "r11");
/* /*
* mov syscall_no -> %rax * mov syscall_no -> %rax
@@ -52,11 +52,11 @@ FIXME( Implement x86 ABI );
* syscall * syscall
* mov %rax -> ret * mov %rax -> ret
*/ */
#define SYSCALL_3( syscall_no, arg1, arg2, arg3, ret) \ #define SYSCALL_3 (syscall_no, arg1, arg2, arg3, ret) \
__asm ( "syscall" \ __asm ("syscall" \
: "=a" ( ret ) \ : "=a" (ret) \
: "a" (syscall_no), "D" (arg1), "S" (arg2), "d" (arg3) \ : "a" (syscall_no), "D" (arg1), "S" (arg2), "d" (arg3) \
: "rcx", "r11" ); : "rcx", "r11");
#define _START \ #define _START \
mov (%rsp), %rdi; \ mov (%rsp), %rdi; \
+3 -3
View File
@@ -20,13 +20,13 @@
* Handle failed assertion * Handle failed assertion
*/ */
void __noreturn void __noreturn
jerry_assert_fail(const char *assertion, /**< assertion condition string */ jerry_assert_fail (const char *assertion, /**< assertion condition string */
const char *file, /**< file name */ const char *file, /**< file name */
const uint32_t line) /** line */ const uint32_t line) /** line */
{ {
__printf("Assertion '%s' failed at %s:%u\n", __printf ("Assertion '%s' failed at %s:%u\n",
assertion, file, line); assertion, file, line);
__exit( -ERR_GENERAL); __exit (-ERR_GENERAL);
} /* jerry_assert_fail */ } /* jerry_assert_fail */
+103 -75
View File
@@ -26,11 +26,11 @@
#ifdef __TARGET_HOST_x64 #ifdef __TARGET_HOST_x64
# include "asm_x64.h" # include "asm_x64.h"
#elif defined(__TARGET_HOST_x86) #elif defined (__TARGET_HOST_x86)
# include "asm_x86.h" # include "asm_x86.h"
#endif /* !__TARGET_HOST_x64 && TARGET_HOST_x86 */ #endif /* !__TARGET_HOST_x64 && TARGET_HOST_x86 */
FIXME( Rename __unused ) FIXME(Rename __unused)
#undef __unused #undef __unused
#include <unistd.h> #include <unistd.h>
@@ -42,15 +42,15 @@ FIXME( Rename __unused )
/** /**
* Exit program with ERR_SYSCALL if syscall_ret_val is negative * Exit program with ERR_SYSCALL if syscall_ret_val is negative
*/ */
#define LIBC_EXIT_ON_ERROR( syscall_ret_val) \ #define LIBC_EXIT_ON_ERROR(syscall_ret_val) \
if ( unlikely( ( syscall_ret_val ) < 0 ) ) \ if (unlikely ((syscall_ret_val) < 0)) \
{ \ { \
__exit( -ERR_SYSCALL); \ __exit (-ERR_SYSCALL); \
} }
static long int syscall_1( long int syscall_no, long int arg1); static long int syscall_1 (long int syscall_no, long int arg1);
static long int syscall_2( long int syscall_no, long int arg1, long int arg2); static long int syscall_2 (long int syscall_no, long int arg1, long int arg2);
static long int syscall_3( long int syscall_no, long int arg1, long int arg2, long int arg3); static long int syscall_3 (long int syscall_no, long int arg1, long int arg2, long int arg3);
/** /**
* System call with one argument. * System call with one argument.
@@ -58,14 +58,14 @@ static long int syscall_3( long int syscall_no, long int arg1, long int arg2, lo
* @return syscall's return value * @return syscall's return value
*/ */
static long int static long int
syscall_1( long int syscall_no, /**< syscall number */ syscall_1 (long int syscall_no, /**< syscall number */
long int arg1) /**< argument */ long int arg1) /**< argument */
{ {
long int ret; long int ret;
SYSCALL_1( syscall_no, arg1, ret); SYSCALL_1 (syscall_no, arg1, ret);
LIBC_EXIT_ON_ERROR( ret ); LIBC_EXIT_ON_ERROR(ret);
return ret; return ret;
} /* syscall_1 */ } /* syscall_1 */
@@ -76,15 +76,15 @@ syscall_1( long int syscall_no, /**< syscall number */
* @return syscall's return value * @return syscall's return value
*/ */
static long int static long int
syscall_2( long int syscall_no, /**< syscall number */ syscall_2 (long int syscall_no, /**< syscall number */
long int arg1, /**< first argument */ long int arg1, /**< first argument */
long int arg2) /**< second argument */ long int arg2) /**< second argument */
{ {
long int ret; long int ret;
SYSCALL_2( syscall_no, arg1, arg2, ret); SYSCALL_2 (syscall_no, arg1, arg2, ret);
LIBC_EXIT_ON_ERROR( ret ); LIBC_EXIT_ON_ERROR(ret);
return ret; return ret;
} /* syscall_2 */ } /* syscall_2 */
@@ -95,16 +95,16 @@ syscall_2( long int syscall_no, /**< syscall number */
* @return syscall's return value * @return syscall's return value
*/ */
static long int static long int
syscall_3( long int syscall_no, /**< syscall number */ syscall_3 (long int syscall_no, /**< syscall number */
long int arg1, /**< first argument */ long int arg1, /**< first argument */
long int arg2, /**< second argument */ long int arg2, /**< second argument */
long int arg3) /**< third argument */ long int arg3) /**< third argument */
{ {
long int ret; long int ret;
SYSCALL_3( syscall_no, arg1, arg2, arg3, ret); SYSCALL_3 (syscall_no, arg1, arg2, arg3, ret);
LIBC_EXIT_ON_ERROR( ret ); LIBC_EXIT_ON_ERROR(ret);
return ret; return ret;
} /* syscall_3 */ } /* syscall_3 */
@@ -113,7 +113,7 @@ syscall_3( long int syscall_no, /**< syscall number */
int int
__putchar (int c) __putchar (int c)
{ {
__fwrite( &c, 1, sizeof(char), LIBC_STDOUT); __fwrite (&c, 1, sizeof (char), LIBC_STDOUT);
return c; return c;
} /* __putchar */ } /* __putchar */
@@ -124,13 +124,13 @@ __putchar (int c)
void __noreturn void __noreturn
__exit (int status) /**< status code */ __exit (int status) /**< status code */
{ {
syscall_1( __NR_close, (long int)LIBC_STDIN); syscall_1 (__NR_close, (long int)LIBC_STDIN);
syscall_1( __NR_close, (long int)LIBC_STDOUT); syscall_1 (__NR_close, (long int)LIBC_STDOUT);
syscall_1( __NR_close, (long int)LIBC_STDERR); syscall_1 (__NR_close, (long int)LIBC_STDERR);
syscall_1( __NR_exit_group, status); syscall_1 (__NR_exit_group, status);
while ( true ) while (true)
{ {
/* unreachable */ /* unreachable */
} }
@@ -143,88 +143,96 @@ __exit (int status) /**< status code */
* NULL - otherwise * NULL - otherwise
*/ */
_FILE* _FILE*
__fopen(const char *path, /**< file path */ __fopen (const char *path, /**< file path */
const char *mode) /**< file open mode */ const char *mode) /**< file open mode */
{ {
bool may_read = false, bool may_read = false;
may_write = false, bool may_write = false;
truncate = false, bool truncate = false;
create_if_not_exist = false, bool create_if_not_exist = false;
position_at_end = false; bool position_at_end = false;
JERRY_ASSERT( path != NULL && mode != NULL ); JERRY_ASSERT(path != NULL && mode != NULL);
JERRY_ASSERT( mode[1] == '+' || mode[1] == '\0' ); JERRY_ASSERT(mode[1] == '+' || mode[1] == '\0');
switch( mode[0] ) switch (mode[0])
{ {
case 'r': case 'r':
{
may_read = true; may_read = true;
may_write = (mode[1] == '+'); may_write = (mode[1] == '+');
break; break;
}
case 'w': case 'w':
{
may_write = true; may_write = true;
truncate = true; truncate = true;
create_if_not_exist = true; create_if_not_exist = true;
may_read = (mode[1] == '+'); may_read = (mode[1] == '+');
break; break;
}
case 'a': case 'a':
{
may_write = true; may_write = true;
position_at_end = true; position_at_end = true;
create_if_not_exist = true; create_if_not_exist = true;
if ( mode[1] == '+' ) if (mode[1] == '+')
{ {
JERRY_UNIMPLEMENTED(); JERRY_UNIMPLEMENTED();
} }
break; break;
}
default: default:
{
JERRY_UNREACHABLE(); JERRY_UNREACHABLE();
} }
}
int flags = 0; int flags = 0;
int access = S_IRUSR | S_IWUSR; int access = S_IRUSR | S_IWUSR;
if ( may_read && !may_write ) if (may_read && !may_write)
{ {
flags = O_RDONLY; flags = O_RDONLY;
} }
else if ( !may_read && may_write ) else if (!may_read && may_write)
{ {
flags = O_WRONLY; flags = O_WRONLY;
} }
else else
{ {
JERRY_ASSERT( may_read && may_write ); JERRY_ASSERT(may_read && may_write);
flags = O_RDWR; flags = O_RDWR;
} }
if ( truncate ) if (truncate)
{ {
flags |= O_TRUNC; flags |= O_TRUNC;
} }
if ( create_if_not_exist ) if (create_if_not_exist)
{ {
flags |= O_CREAT; flags |= O_CREAT;
} }
if ( position_at_end ) if (position_at_end)
{ {
flags |= O_APPEND; flags |= O_APPEND;
} }
long int ret = syscall_3( __NR_open, (long int)path, flags, access); long int ret = syscall_3 (__NR_open, (long int) path, flags, access);
return (void*)(uintptr_t)(ret); return (void*) (uintptr_t) (ret);
} /* __fopen */ } /* __fopen */
/** /**
* The rewind() function sets the file position indicator * The rewind () function sets the file position indicator
* for the stream pointed to by STREAM to the beginning of the file. * for the stream pointed to by STREAM to the beginning of the file.
*/ */
void void
__rewind (_FILE *stream) /**< stream pointer */ __rewind (_FILE *stream) /**< stream pointer */
{ {
syscall_3( __NR_lseek, (long int)stream, 0, SEEK_SET); syscall_3 (__NR_lseek, (long int) stream, 0, SEEK_SET);
} /* __rewind */ } /* __rewind */
/** /**
@@ -234,9 +242,9 @@ __rewind (_FILE *stream) /**< stream pointer */
* non-zero value - otherwise. * non-zero value - otherwise.
*/ */
int int
__fclose(_FILE *fp) /**< stream pointer */ __fclose (_FILE *fp) /**< stream pointer */
{ {
syscall_2( __NR_close, (long int)fp, 0); syscall_2 (__NR_close, (long int)fp, 0);
return 0; return 0;
} /* __fclose */ } /* __fclose */
@@ -245,26 +253,32 @@ __fclose(_FILE *fp) /**< stream pointer */
* fseek * fseek
*/ */
int int
__fseek(_FILE * fp, /**< stream pointer */ __fseek (_FILE * fp, /**< stream pointer */
long offset, /**< offset */ long offset, /**< offset */
_whence_t whence) /**< specifies position type _whence_t whence) /**< specifies position type
to add offset to */ to add offset to */
{ {
int whence_real = SEEK_CUR; int whence_real = SEEK_CUR;
switch ( whence ) switch (whence)
{ {
case __SEEK_SET: case __SEEK_SET:
{
whence_real = SEEK_SET; whence_real = SEEK_SET;
break; break;
}
case __SEEK_CUR: case __SEEK_CUR:
{
whence_real = SEEK_CUR; whence_real = SEEK_CUR;
break; break;
}
case __SEEK_END: case __SEEK_END:
{
whence_real = SEEK_END; whence_real = SEEK_END;
break; break;
} }
}
syscall_3( __NR_lseek, (long int)fp, offset, whence_real); syscall_3 (__NR_lseek, (long int)fp, offset, whence_real);
return 0; return 0;
} /* __fseek */ } /* __fseek */
@@ -273,9 +287,9 @@ __fseek(_FILE * fp, /**< stream pointer */
* ftell * ftell
*/ */
long long
__ftell(_FILE * fp) /**< stream pointer */ __ftell (_FILE * fp) /**< stream pointer */
{ {
long int ret = syscall_3( __NR_lseek, (long int)fp, 0, SEEK_CUR); long int ret = syscall_3 (__NR_lseek, (long int)fp, 0, SEEK_CUR);
return ret; return ret;
} /* __ftell */ } /* __ftell */
@@ -286,7 +300,7 @@ __ftell(_FILE * fp) /**< stream pointer */
* @return number of bytes read * @return number of bytes read
*/ */
size_t size_t
__fread(void *ptr, /**< address of buffer to read to */ __fread (void *ptr, /**< address of buffer to read to */
size_t size, /**< size of elements to read */ size_t size, /**< size of elements to read */
size_t nmemb, /**< number of elements to read */ size_t nmemb, /**< number of elements to read */
_FILE *stream) /**< stream pointer */ _FILE *stream) /**< stream pointer */
@@ -296,10 +310,14 @@ __fread(void *ptr, /**< address of buffer to read to */
do do
{ {
ret = syscall_3( __NR_read, (long int)stream, (long int) ((uint8_t*)ptr + bytes_read), (long int) (size * nmemb - bytes_read)); ret = syscall_3 (__NR_read,
(long int) stream,
(long int) ((uint8_t*) ptr + bytes_read),
(long int) (size * nmemb - bytes_read));
bytes_read += (size_t)ret; bytes_read += (size_t)ret;
} while (bytes_read != size * nmemb && ret != 0); }
while (bytes_read != size * nmemb && ret != 0);
return bytes_read; return bytes_read;
} /* __fread */ } /* __fread */
@@ -310,7 +328,7 @@ __fread(void *ptr, /**< address of buffer to read to */
* @return number of bytes written * @return number of bytes written
*/ */
size_t size_t
__fwrite(const void *ptr, /**< data to write */ __fwrite (const void *ptr, /**< data to write */
size_t size, /**< size of elements to write */ size_t size, /**< size of elements to write */
size_t nmemb, /**< number of elements */ size_t nmemb, /**< number of elements */
_FILE *stream) /**< stream pointer */ _FILE *stream) /**< stream pointer */
@@ -319,15 +337,19 @@ __fwrite(const void *ptr, /**< data to write */
do do
{ {
long int ret = syscall_3( __NR_write, (long int)stream, (long int) ((uint8_t*)ptr + bytes_written), (long int) (size * nmemb - bytes_written)); long int ret = syscall_3 (__NR_write,
(long int) stream,
(long int) ((uint8_t*) ptr + bytes_written),
(long int) (size * nmemb - bytes_written));
bytes_written += (size_t)ret; bytes_written += (size_t)ret;
} while (bytes_written != size * nmemb); }
while (bytes_written != size * nmemb);
return bytes_written; return bytes_written;
} /* __fwrite */ } /* __fwrite */
#elif defined(LIBC_MUSL) #elif defined (LIBC_MUSL)
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -340,14 +362,14 @@ const _FILE **libc_stderr = (void*)&stderr;
int int
__putchar (int c) __putchar (int c)
{ {
return putchar( c); return putchar (c);
} /* __putchar */ } /* __putchar */
/** exit - cause normal process termination */ /** exit - cause normal process termination */
void __noreturn void __noreturn
__exit (int status) __exit (int status)
{ {
exit( status); exit (status);
} /* __exit */ } /* __exit */
/** /**
@@ -357,13 +379,13 @@ __exit (int status)
* NULL - otherwise * NULL - otherwise
*/ */
_FILE* _FILE*
__fopen(const char *path, /**< file path */ __fopen (const char *path, /**< file path */
const char *mode) /**< file open mode */ const char *mode) /**< file open mode */
{ {
return fopen( path, mode); return fopen (path, mode);
} /* __fopen */ } /* __fopen */
/** The rewind() function sets the file position /** The rewind () function sets the file position
indicator for the stream pointed to by STREAM to the beginning of the file. */ indicator for the stream pointed to by STREAM to the beginning of the file. */
void void
__rewind (_FILE *stream) __rewind (_FILE *stream)
@@ -378,44 +400,50 @@ __rewind (_FILE *stream)
* non-zero value - otherwise. * non-zero value - otherwise.
*/ */
int int
__fclose(_FILE *fp) /**< stream pointer */ __fclose (_FILE *fp) /**< stream pointer */
{ {
return fclose( fp); return fclose (fp);
} /* __fclose */ } /* __fclose */
/** /**
* fseek * fseek
*/ */
int int
__fseek(_FILE * fp, /**< stream pointer */ __fseek (_FILE * fp, /**< stream pointer */
long offset, /**< offset */ long offset, /**< offset */
_whence_t whence) /**< specifies position type _whence_t whence) /**< specifies position type
to add offset to */ to add offset to */
{ {
int whence_real = SEEK_CUR; int whence_real = SEEK_CUR;
switch ( whence ) switch (whence)
{ {
case __SEEK_SET: case __SEEK_SET:
{
whence_real = SEEK_SET; whence_real = SEEK_SET;
break; break;
}
case __SEEK_CUR: case __SEEK_CUR:
{
whence_real = SEEK_CUR; whence_real = SEEK_CUR;
break; break;
}
case __SEEK_END: case __SEEK_END:
{
whence_real = SEEK_END; whence_real = SEEK_END;
break; break;
} }
}
return fseek( fp, offset, whence_real); return fseek (fp, offset, whence_real);
} /* __fseek */ } /* __fseek */
/** /**
* ftell * ftell
*/ */
long long
__ftell(_FILE * fp) /**< stream pointer */ __ftell (_FILE * fp) /**< stream pointer */
{ {
return ftell( fp); return ftell (fp);
} /* __ftell */ } /* __ftell */
/** /**
@@ -424,12 +452,12 @@ __ftell(_FILE * fp) /**< stream pointer */
* @return number of bytes read * @return number of bytes read
*/ */
size_t size_t
__fread(void *ptr, /**< address of buffer to read to */ __fread (void *ptr, /**< address of buffer to read to */
size_t size, /**< size of elements to read */ size_t size, /**< size of elements to read */
size_t nmemb, /**< number of elements to read */ size_t nmemb, /**< number of elements to read */
_FILE *stream) /**< stream pointer */ _FILE *stream) /**< stream pointer */
{ {
return fread(ptr, size, nmemb, stream); return fread (ptr, size, nmemb, stream);
} /* __fread */ } /* __fread */
/** /**
@@ -438,12 +466,12 @@ __fread(void *ptr, /**< address of buffer to read to */
* @return number of bytes written * @return number of bytes written
*/ */
size_t size_t
__fwrite(const void *ptr, /**< data to write */ __fwrite (const void *ptr, /**< data to write */
size_t size, /**< size of elements to write */ size_t size, /**< size of elements to write */
size_t nmemb, /**< number of elements */ size_t nmemb, /**< number of elements */
_FILE *stream) /**< stream pointer */ _FILE *stream) /**< stream pointer */
{ {
return fwrite(ptr, size, nmemb, stream); return fwrite (ptr, size, nmemb, stream);
} /* __fwrite */ } /* __fwrite */
#else /* !LIBC_RAW && !LIBC_MUSL */ #else /* !LIBC_RAW && !LIBC_MUSL */
+1 -1
View File
@@ -1,6 +1,6 @@
#ifdef __TARGET_HOST_x64 #ifdef __TARGET_HOST_x64
# include "asm_x64.h" # include "asm_x64.h"
#elif defined(__TARGET_HOST_x86) #elif defined (__TARGET_HOST_x86)
# include "asm_x86.h" # include "asm_x86.h"
#else /* !__HOST && !__TARGET_HOST_x86 */ #else /* !__HOST && !__TARGET_HOST_x86 */
# error "!__HOST && !__TARGET_HOST_x86" # error "!__HOST && !__TARGET_HOST_x86"
+2 -2
View File
@@ -20,9 +20,9 @@
* Handle failed assertion * Handle failed assertion
*/ */
void __noreturn void __noreturn
jerry_assert_fail(const char *assertion __unused, /**< assertion condition string */ jerry_assert_fail (const char *assertion __unused, /**< assertion condition string */
const char *file __unused, /**< file name */ const char *file __unused, /**< file name */
const uint32_t line __unused) /** line */ const uint32_t line __unused) /** line */
{ {
__exit( -ERR_GENERAL); __exit (-ERR_GENERAL);
} /* jerry_assert_fail */ } /* jerry_assert_fail */
+4 -4
View File
@@ -21,7 +21,7 @@
#include <stdarg.h> #include <stdarg.h>
extern void __noreturn exit(int status); extern void __noreturn exit (int status);
/** Output of character. Writes the character c, cast to an unsigned char, to stdout. */ /** Output of character. Writes the character c, cast to an unsigned char, to stdout. */
int int
@@ -38,7 +38,7 @@ __exit (int status __unused)
* TODO: Blink LEDs? status -> binary -> LEDs? * TODO: Blink LEDs? status -> binary -> LEDs?
*/ */
while(true); while (true);
} /* __exit */ } /* __exit */
/** /**
@@ -47,11 +47,11 @@ __exit (int status __unused)
* @return number of bytes written * @return number of bytes written
*/ */
size_t size_t
__fwrite(const void *ptr, /**< data to write */ __fwrite (const void *ptr, /**< data to write */
size_t size, /**< size of elements to write */ size_t size, /**< size of elements to write */
size_t nmemb, /**< number of elements */ size_t nmemb, /**< number of elements */
_FILE *stream) /**< stream pointer */ _FILE *stream) /**< stream pointer */
{ {
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS( ptr, size, nmemb, stream); JERRY_UNIMPLEMENTED_REF_UNUSED_VARS(ptr, size, nmemb, stream);
} /* __fwrite */ } /* __fwrite */