mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
a25fbe3b3e
* parse.y: encoding aware parsing. * parse.y (pragma_encoding): encoding specification pragma. * parse.y (rb_intern3): encoding specified symbols. * string.c (rb_str_length): length based on characters. for older behavior, bytesize method added. * string.c (rb_str_index_m): index based on characters. rindex as well. * string.c (succ_char): encoding aware succeeding string. * string.c (rb_str_reverse): reverse based on characters. * string.c (rb_str_inspect): encoding aware string description. * string.c (rb_str_upcase_bang): encoding aware case conversion. downcase, capitalize, swapcase as well. * string.c (rb_str_tr_bang): tr based on characters. delete, squeeze, tr_s, count as well. * string.c (rb_str_split_m): split based on characters. * string.c (rb_str_each_line): encoding aware each_line. * string.c (rb_str_each_char): added. iteration based on characters. * string.c (rb_str_strip_bang): encoding aware whitespace stripping. lstrip, rstrip as well. * string.c (rb_str_justify): encoding aware justifying (ljust, rjust, center). * string.c (str_encoding): get encoding attribute from a string. * re.c (rb_reg_initialize): encoding aware regular expression * sprintf.c (rb_str_format): formatting (i.e. length count) based on characters. * io.c (rb_io_getc): getc to return one-character string. for older behavior, getbyte method added. * ext/stringio/stringio.c (strio_getc): ditto. * io.c (rb_io_ungetc): allow pushing arbitrary string at the current reading point. * ext/stringio/stringio.c (strio_ungetc): ditto. * ext/strscan/strscan.c: encoding support. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
93 lines
2.2 KiB
C
93 lines
2.2 KiB
C
/**********************************************************************
|
|
|
|
rubysig.h -
|
|
|
|
$Author$
|
|
$Date$
|
|
created at: Wed Aug 16 01:15:38 JST 1995
|
|
|
|
Copyright (C) 1993-2007 Yukihiro Matsumoto
|
|
|
|
**********************************************************************/
|
|
|
|
#ifndef RUBYSIG_H
|
|
#define RUBYSIG_H 1
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#if 0
|
|
} /* satisfy cc-mode */
|
|
#endif
|
|
#endif
|
|
|
|
#include <errno.h>
|
|
|
|
#ifdef _WIN32
|
|
typedef LONG rb_atomic_t;
|
|
|
|
# define ATOMIC_TEST(var) InterlockedExchange(&(var), 0)
|
|
# define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val))
|
|
# define ATOMIC_INC(var) InterlockedIncrement(&(var))
|
|
# define ATOMIC_DEC(var) InterlockedDecrement(&(var))
|
|
|
|
/* Windows doesn't allow interrupt while system calls */
|
|
# define TRAP_BEG do {\
|
|
rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 1)
|
|
|
|
# define TRAP_END\
|
|
ATOMIC_SET(rb_trap_immediate, trap_immediate);\
|
|
} while (0)
|
|
|
|
# define RUBY_CRITICAL(statements) do {\
|
|
rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 0);\
|
|
statements;\
|
|
ATOMIC_SET(rb_trap_immediate, trap_immediate);\
|
|
} while (0)
|
|
#else
|
|
typedef int rb_atomic_t;
|
|
|
|
# define ATOMIC_TEST(var) ((var) ? ((var) = 0, 1) : 0)
|
|
# define ATOMIC_SET(var, val) ((var) = (val))
|
|
# define ATOMIC_INC(var) (++(var))
|
|
# define ATOMIC_DEC(var) (--(var))
|
|
|
|
# define TRAP_BEG do {\
|
|
int trap_immediate = rb_trap_immediate;\
|
|
rb_trap_immediate = 1
|
|
|
|
# define TRAP_END \
|
|
rb_trap_immediate = trap_immediate;\
|
|
} while (0)
|
|
|
|
# define RUBY_CRITICAL(statements) do {\
|
|
int trap_immediate = rb_trap_immediate;\
|
|
rb_trap_immediate = 0;\
|
|
statements;\
|
|
rb_trap_immediate = trap_immediate;\
|
|
} while (0)
|
|
#endif
|
|
RUBY_EXTERN rb_atomic_t rb_trap_immediate;
|
|
|
|
RUBY_EXTERN int rb_prohibit_interrupt;
|
|
#define DEFER_INTS (rb_prohibit_interrupt++)
|
|
#define ALLOW_INTS do {\
|
|
rb_prohibit_interrupt--;\
|
|
} while (0)
|
|
#define ENABLE_INTS (rb_prohibit_interrupt--)
|
|
|
|
VALUE rb_with_disable_interrupt(VALUE(*)(ANYARGS),VALUE);
|
|
|
|
RUBY_EXTERN rb_atomic_t rb_trap_pending;
|
|
void rb_trap_restore_mask(void);
|
|
|
|
RUBY_EXTERN int rb_thread_critical;
|
|
void rb_thread_schedule(void);
|
|
|
|
#if defined(__cplusplus)
|
|
#if 0
|
|
{ /* satisfy cc-mode */
|
|
#endif
|
|
} /* extern "C" { */
|
|
#endif
|
|
|
|
#endif /* RUBYSIG_H */
|