mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
resolve conflict
This commit is contained in:
+2
-21
@@ -30,34 +30,15 @@ extern const char mrb_digitmap[];
|
||||
struct RString {
|
||||
MRUBY_OBJECT_HEADER;
|
||||
int len;
|
||||
union {
|
||||
int capa;
|
||||
struct RString *shared;
|
||||
} aux;
|
||||
int capa;
|
||||
char *buf;
|
||||
};
|
||||
|
||||
extern struct SCOPE {
|
||||
struct RBasic super;
|
||||
mrb_sym *local_tbl;
|
||||
mrb_value *local_vars;
|
||||
int flags;
|
||||
} *ruby_scope;
|
||||
|
||||
struct RVarmap {
|
||||
struct RBasic super;
|
||||
mrb_sym id;
|
||||
mrb_value val;
|
||||
struct RVarmap *next;
|
||||
};
|
||||
extern struct RVarmap *ruby_dyna_vars;
|
||||
|
||||
#define mrb_str_ptr(s) ((struct RString*)((s).value.p))
|
||||
#define RSTRING(s) ((struct RString*)((s).value.p))
|
||||
#define RSTRING_PTR(s) (RSTRING(s)->buf)
|
||||
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
||||
#define RSTRING_CAPA(s) (RSTRING(s)->aux.capa)
|
||||
#define RSTRING_SHARED(s) (RSTRING(s)->aux.shared)
|
||||
#define RSTRING_CAPA(s) (RSTRING(s)->capa)
|
||||
#define RSTRING_END(s) (RSTRING(s)->buf + RSTRING(s)->len)
|
||||
|
||||
#define MRB_STR_SHARED 256
|
||||
|
||||
+1
-7
@@ -17,12 +17,6 @@
|
||||
|
||||
#include "mruby/khash.h"
|
||||
|
||||
#ifdef INCLUDE_REGEXP
|
||||
#define mrb_usascii_str_new2 mrb_usascii_str_new_cstr
|
||||
#else
|
||||
#define mrb_usascii_str_new2 mrb_str_new_cstr
|
||||
#endif
|
||||
|
||||
KHASH_MAP_INIT_INT(mt, struct RProc*);
|
||||
KHASH_MAP_INIT_INT(iv, mrb_value);
|
||||
|
||||
@@ -1052,7 +1046,7 @@ mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
|
||||
{
|
||||
//if (FL_TEST(klass, FL_SINGLETON)) {
|
||||
if (mrb_type(klass) == MRB_TT_SCLASS) {
|
||||
mrb_value s = mrb_usascii_str_new2(mrb, "#<");
|
||||
mrb_value s = mrb_str_new_cstr(mrb, "#<");
|
||||
mrb_value v = mrb_iv_get(mrb, klass, mrb_intern(mrb, "__attached__"));
|
||||
|
||||
mrb_str_cat2(mrb, s, "Class:");
|
||||
|
||||
-1685
File diff suppressed because it is too large
Load Diff
+1
-8
@@ -174,11 +174,7 @@ int mrb_enc_codelen(mrb_state *mrb, int code, mrb_encoding *enc);
|
||||
#endif //INCLUDE_ENCODING
|
||||
|
||||
/* code,ptr,encoding -> write buf */
|
||||
#ifdef INCLUDE_ENCODING
|
||||
#define mrb_enc_mbcput(c,buf,enc) ONIGENC_CODE_TO_MBC(enc,c,(UChar*)(buf))
|
||||
#else
|
||||
#define mrb_enc_mbcput(c,buf,enc) *(buf) = (char)(c)
|
||||
#endif //INCLUDE_ENCODING
|
||||
#define mrb_enc_mbcput(c,buf,enc) ((*(buf) = (char)(c)),1)
|
||||
|
||||
/* start, ptr, end, encoding -> prev_char */
|
||||
#define mrb_enc_prev_char(s,p,e,enc) (char *)onigenc_get_prev_char_head(enc,(UChar*)(s),(UChar*)(p),(UChar*)(e))
|
||||
@@ -232,9 +228,6 @@ mrb_value mrb_enc_default_internal(mrb_state *mrb);
|
||||
void mrb_enc_set_default_external(mrb_state *mrb, mrb_value encoding);
|
||||
void mrb_enc_set_default_internal(mrb_state *mrb, mrb_value encoding);
|
||||
mrb_value mrb_locale_charmap(mrb_state *mrb, mrb_value klass);
|
||||
#ifdef INCLUDE_ENCODING
|
||||
int mrb_memsearch(mrb_state *mrb, const void*,int,const void*,int,mrb_encoding*);
|
||||
#endif //INCLUDE_ENCODING
|
||||
mrb_value mrb_usascii_str_new_cstr(mrb_state *mrb, const char *ptr);
|
||||
int mrb_str_buf_cat_escaped_char(mrb_state *mrb, mrb_value result, unsigned int c, int unicode_p);
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls)
|
||||
mrb->live++;
|
||||
if (mrb->arena_idx > MRB_ARENA_SIZE) {
|
||||
/* arena overflow error */
|
||||
mrb->arena_idx = MRB_ARENA_SIZE - 2; /* force room in arena */
|
||||
mrb->arena_idx = MRB_ARENA_SIZE - 4; /* force room in arena */
|
||||
mrb_raise(mrb, mrb->eRuntimeError_class, "arena overflow error");
|
||||
}
|
||||
mrb->arena[mrb->arena_idx++] = p;
|
||||
@@ -360,12 +360,14 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj)
|
||||
|
||||
case MRB_TT_STRING:
|
||||
{
|
||||
#if 0
|
||||
struct RString *s = (struct RString*)obj;
|
||||
|
||||
while (s->flags & MRB_STR_SHARED) {
|
||||
s = s->aux.shared;
|
||||
if (!s) break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ void mrb_init_proc(mrb_state*);
|
||||
void mrb_init_range(mrb_state*);
|
||||
void mrb_init_string(mrb_state*);
|
||||
void mrb_init_regexp(mrb_state*);
|
||||
void mrb_init_encoding(mrb_state*);
|
||||
void mrb_init_exception(mrb_state*);
|
||||
void mrb_init_time(mrb_state*);
|
||||
void mrb_init_io(mrb_state*);
|
||||
@@ -54,7 +53,6 @@ mrb_init_core(mrb_state *mrb)
|
||||
mrb_init_gc(mrb);
|
||||
#ifdef INCLUDE_REGEXP
|
||||
mrb_init_regexp(mrb);
|
||||
mrb_init_encoding(mrb);
|
||||
#endif
|
||||
mrb_init_exception(mrb);
|
||||
mrb_init_print(mrb);
|
||||
|
||||
+3
-10
@@ -11,13 +11,6 @@
|
||||
#include "mruby/class.h"
|
||||
#include "mruby/numeric.h"
|
||||
|
||||
#ifdef INCLUDE_REGEXP
|
||||
#define mrb_usascii_str_new2 mrb_usascii_str_new_cstr
|
||||
#else
|
||||
#define mrb_usascii_str_new2 mrb_str_new_cstr
|
||||
#define mrb_usascii_str_new mrb_str_new
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
@@ -106,7 +99,7 @@ mrb_true(mrb_state *mrb, mrb_value obj)
|
||||
static mrb_value
|
||||
nil_to_s(mrb_state *mrb, mrb_value obj)
|
||||
{
|
||||
return mrb_usascii_str_new(mrb, 0, 0);
|
||||
return mrb_str_new(mrb, 0, 0);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -166,7 +159,7 @@ true_xor(mrb_state *mrb, mrb_value obj)
|
||||
static mrb_value
|
||||
true_to_s(mrb_state *mrb, mrb_value obj)
|
||||
{
|
||||
return mrb_usascii_str_new2(mrb, "true");
|
||||
return mrb_str_new_cstr(mrb, "true");
|
||||
}
|
||||
|
||||
/* 15.2.5.3.4 */
|
||||
@@ -279,7 +272,7 @@ false_or(mrb_state *mrb, mrb_value obj)
|
||||
static mrb_value
|
||||
false_to_s(mrb_state *mrb, mrb_value obj)
|
||||
{
|
||||
return mrb_usascii_str_new2(mrb, "false");
|
||||
return mrb_str_new_cstr(mrb, "false");
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+5
-28
@@ -668,44 +668,37 @@ retry:
|
||||
mrb_value tmp;
|
||||
unsigned int c;
|
||||
int n;
|
||||
#ifdef INCLUDE_ENCODING
|
||||
mrb_encoding *enc = mrb_enc_get(mrb, fmt);
|
||||
#endif //INCLUDE_ENCODING
|
||||
|
||||
tmp = mrb_check_string_type(mrb, val);
|
||||
if (!mrb_nil_p(tmp)) {
|
||||
if (RSTRING_LEN(tmp) != 1 ) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "%%c requires a character");
|
||||
}
|
||||
#ifdef INCLUDE_ENCODING
|
||||
c = mrb_enc_codepoint_len(mrb, RSTRING_PTR(tmp), RSTRING_END(tmp), &n, enc);
|
||||
#else
|
||||
c = RSTRING_PTR(tmp)[0];
|
||||
n = 1;
|
||||
#endif //INCLUDE_ENCODING
|
||||
}
|
||||
else {
|
||||
c = mrb_fixnum(val);
|
||||
n = mrb_enc_codelen(mrb, c, enc);
|
||||
n = 1;
|
||||
}
|
||||
if (n <= 0) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid character");
|
||||
}
|
||||
if (!(flags & FWIDTH)) {
|
||||
CHECK(n);
|
||||
mrb_enc_mbcput(c, &buf[blen], enc);
|
||||
buf[blen] = c;
|
||||
blen += n;
|
||||
}
|
||||
else if ((flags & FMINUS)) {
|
||||
CHECK(n);
|
||||
mrb_enc_mbcput(c, &buf[blen], enc);
|
||||
buf[blen] = c;
|
||||
blen += n;
|
||||
FILL(' ', width-1);
|
||||
}
|
||||
else {
|
||||
FILL(' ', width-1);
|
||||
CHECK(n);
|
||||
mrb_enc_mbcput(c, &buf[blen], enc);
|
||||
buf[blen] = c;
|
||||
blen += n;
|
||||
}
|
||||
}
|
||||
@@ -717,25 +710,18 @@ format_s:
|
||||
{
|
||||
mrb_value arg = GETARG();
|
||||
long len, slen;
|
||||
#ifdef INCLUDE_ENCODING
|
||||
mrb_encoding *enc = mrb_enc_get(mrb, fmt);
|
||||
#endif //INCLUDE_ENCODING
|
||||
|
||||
if (*p == 'p') arg = mrb_inspect(mrb, arg);
|
||||
str = mrb_obj_as_string(mrb, arg);
|
||||
len = RSTRING_LEN(str);
|
||||
mrb_str_set_len(mrb, result, blen);
|
||||
RSTRING_LEN(result) = blen;
|
||||
if (flags&(FPREC|FWIDTH)) {
|
||||
slen = RSTRING_LEN(str);
|
||||
if (slen < 0) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid mbstring sequence");
|
||||
}
|
||||
if ((flags&FPREC) && (prec < slen)) {
|
||||
#ifdef INCLUDE_ENCODING
|
||||
char *p = mrb_enc_nth(mrb, RSTRING_PTR(str), RSTRING_END(str),prec, enc);
|
||||
#else
|
||||
char *p = RSTRING_PTR(str) + prec;
|
||||
#endif //INCLUDE_ENCODING
|
||||
slen = prec;
|
||||
len = p - RSTRING_PTR(str);
|
||||
}
|
||||
@@ -757,12 +743,10 @@ format_s:
|
||||
buf[blen++] = ' ';
|
||||
}
|
||||
}
|
||||
mrb_enc_associate(mrb, result, enc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
PUSH(RSTRING_PTR(str), len);
|
||||
mrb_enc_associate(mrb, result, enc);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -915,15 +899,8 @@ bin_retry:
|
||||
if (*p == 'X') {
|
||||
char *pp = s;
|
||||
int c;
|
||||
#ifdef INCLUDE_ENCODING
|
||||
mrb_encoding *enc = mrb_enc_get(mrb, fmt);
|
||||
#endif //INCLUDE_ENCODING
|
||||
while ((c = (int)(unsigned char)*pp) != 0) {
|
||||
#ifdef INCLUDE_ENCODING
|
||||
*pp = mrb_enc_toupper(c, enc);
|
||||
#else
|
||||
*pp = toupper(c);
|
||||
#endif //INCLUDE_ENCODING
|
||||
pp++;
|
||||
}
|
||||
}
|
||||
|
||||
+138
-2259
File diff suppressed because it is too large
Load Diff
+106
-42
@@ -149,13 +149,7 @@ mrb_sym_to_s(mrb_state *mrb, mrb_value sym)
|
||||
{
|
||||
mrb_sym id = SYM2ID(sym);
|
||||
|
||||
#ifdef INCLUDE_REGEXP
|
||||
//return str_new3(mrb_cString, mrb_id2str(id));
|
||||
return str_new3(mrb, mrb_obj_class(mrb, sym), mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id)));
|
||||
#else
|
||||
return mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id)); //mrb_str_new2(mrb_id2name(SYM2ID(sym)));
|
||||
#endif
|
||||
|
||||
return mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id));
|
||||
}
|
||||
|
||||
/* 15.2.11.3.4 */
|
||||
@@ -185,42 +179,113 @@ sym_to_sym(mrb_state *mrb, mrb_value sym)
|
||||
* :fred.inspect #=> ":fred"
|
||||
*/
|
||||
|
||||
#if __STDC__
|
||||
# define SIGN_EXTEND_CHAR(c) ((signed char)(c))
|
||||
#else /* not __STDC__ */
|
||||
/* As in Harbison and Steele. */
|
||||
# define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
|
||||
#endif
|
||||
#define is_identchar(c) (SIGN_EXTEND_CHAR(c)!=-1&&(ISALNUM(c) || (c) == '_'))
|
||||
|
||||
static int
|
||||
is_special_global_name(m)
|
||||
const char *m;
|
||||
{
|
||||
switch (*m) {
|
||||
case '~': case '*': case '$': case '?': case '!': case '@':
|
||||
case '/': case '\\': case ';': case ',': case '.': case '=':
|
||||
case ':': case '<': case '>': case '\"':
|
||||
case '&': case '`': case '\'': case '+':
|
||||
case '0':
|
||||
++m;
|
||||
break;
|
||||
case '-':
|
||||
++m;
|
||||
if (is_identchar(*m)) m += 1;
|
||||
break;
|
||||
default:
|
||||
if (!ISDIGIT(*m)) return 0;
|
||||
do ++m; while (ISDIGIT(*m));
|
||||
}
|
||||
return !*m;
|
||||
}
|
||||
|
||||
static int
|
||||
symname_p(const char *name)
|
||||
{
|
||||
const char *m = name;
|
||||
int localid = FALSE;
|
||||
|
||||
if (!m) return FALSE;
|
||||
switch (*m) {
|
||||
case '\0':
|
||||
return FALSE;
|
||||
|
||||
case '$':
|
||||
if (is_special_global_name(++m)) return TRUE;
|
||||
goto id;
|
||||
|
||||
case '@':
|
||||
if (*++m == '@') ++m;
|
||||
goto id;
|
||||
|
||||
case '<':
|
||||
switch (*++m) {
|
||||
case '<': ++m; break;
|
||||
case '=': if (*++m == '>') ++m; break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>':
|
||||
switch (*++m) {
|
||||
case '>': case '=': ++m; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
switch (*++m) {
|
||||
case '~': ++m; break;
|
||||
case '=': if (*++m == '=') ++m; break;
|
||||
default: return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case '*':
|
||||
if (*++m == '*') ++m;
|
||||
break;
|
||||
|
||||
case '+': case '-':
|
||||
if (*++m == '@') ++m;
|
||||
break;
|
||||
|
||||
case '|': case '^': case '&': case '/': case '%': case '~': case '`':
|
||||
++m;
|
||||
break;
|
||||
|
||||
case '[':
|
||||
if (*++m != ']') return FALSE;
|
||||
if (*++m == '=') ++m;
|
||||
break;
|
||||
|
||||
default:
|
||||
localid = !ISUPPER(*m);
|
||||
id:
|
||||
if (*m != '_' && !ISALPHA(*m)) return FALSE;
|
||||
while (is_identchar(*m)) m += 1;
|
||||
if (localid) {
|
||||
switch (*m) {
|
||||
case '!': case '?': case '=': ++m;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return *m ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
sym_inspect(mrb_state *mrb, mrb_value sym)
|
||||
{
|
||||
#ifdef INCLUDE_ENCODING
|
||||
#define STR_ENC_GET(mrb, str) mrb_enc_from_index(mrb, ENCODING_GET(mrb, str))
|
||||
mrb_value str;
|
||||
mrb_sym id = SYM2ID(sym);
|
||||
mrb_encoding *enc;
|
||||
const char *ptr;
|
||||
long len;
|
||||
char *dest;
|
||||
mrb_encoding *resenc = mrb_default_internal_encoding(mrb);
|
||||
|
||||
if (resenc == NULL) resenc = mrb_default_external_encoding(mrb);
|
||||
sym = mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id));//mrb_id2str(id);
|
||||
enc = STR_ENC_GET(mrb, sym);
|
||||
ptr = RSTRING_PTR(sym);
|
||||
len = RSTRING_LEN(sym);
|
||||
if ((resenc != enc && !mrb_str_is_ascii_only_p(mrb, sym)) || len != (long)strlen(ptr) ||
|
||||
!mrb_enc_symname_p(ptr, enc) || !sym_printable(mrb, ptr, ptr + len, enc)) {
|
||||
str = mrb_str_inspect(mrb, sym);
|
||||
len = RSTRING_LEN(str);
|
||||
mrb_str_resize(mrb, str, len + 1);
|
||||
dest = RSTRING_PTR(str);
|
||||
memmove(dest + 1, dest, len);
|
||||
dest[0] = ':';
|
||||
}
|
||||
else {
|
||||
char *dest;
|
||||
str = mrb_enc_str_new(mrb, 0, len + 1, enc);
|
||||
dest = RSTRING_PTR(str);
|
||||
dest[0] = ':';
|
||||
memcpy(dest + 1, ptr, len);
|
||||
}
|
||||
return str;
|
||||
#else
|
||||
mrb_value str;
|
||||
const char *name;
|
||||
mrb_sym id = SYM2ID(sym);
|
||||
@@ -229,12 +294,11 @@ sym_inspect(mrb_state *mrb, mrb_value sym)
|
||||
str = mrb_str_new(mrb, 0, strlen(name)+1);
|
||||
RSTRING(str)->buf[0] = ':';
|
||||
strcpy(RSTRING(str)->buf+1, name);
|
||||
if (!mrb_symname_p(name)) {
|
||||
if (!symname_p(name)) {
|
||||
str = mrb_str_dump(mrb, str);
|
||||
strncpy(RSTRING(str)->buf, ":\"", 2);
|
||||
}
|
||||
return str;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user