diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-08-20 18:49:55 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-08-20 18:49:55 +0900 |
| commit | 8157672a29e50756b9709022e8f66da73cd92c2b (patch) | |
| tree | 3fbec1e5e92d6c1a5fc3f28d9f649f2a17ea2fdc /src/string.c | |
| parent | b836fd05dd084ac9e61c918cf1757b425c4d271b (diff) | |
| download | mruby-8157672a29e50756b9709022e8f66da73cd92c2b.tar.gz mruby-8157672a29e50756b9709022e8f66da73cd92c2b.zip | |
Use `RBasic` padding for embedded string on 64-bit CPU
On 64-bit CPU, there is padding in `RBasic`, so reorder the fields and use
it as buffer of embedded string. This change allows 4 more bytes to be
embedded on 64-bit CPU.
However, an incompatibility will occur if `RString::as::ary` is accessed
directly because `RString` structure has changed.
Diffstat (limited to 'src/string.c')
| -rw-r--r-- | src/string.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/string.c b/src/string.c index 72e14ede9..cacf48821 100644 --- a/src/string.c +++ b/src/string.c @@ -54,8 +54,8 @@ str_init_normal(mrb_state *mrb, struct RString *s, const char *p, size_t len) static void str_init_embed(struct RString *s, const char *p, size_t len) { - if (p) memcpy(s->as.ary, p, len); - s->as.ary[len] = '\0'; + if (p) memcpy(RSTR_EMBED_PTR(s), p, len); + RSTR_EMBED_PTR(s)[len] = '\0'; RSTR_SET_TYPE_FLAG(s, EMBED); RSTR_SET_EMBED_LEN(s, len); } @@ -188,7 +188,7 @@ resize_capa(mrb_state *mrb, struct RString *s, size_t capacity) #endif if (RSTR_EMBED_P(s)) { if (!RSTR_EMBEDDABLE_P(capacity)) { - str_init_normal_capa(mrb, s, s->as.ary, RSTR_EMBED_LEN(s), capacity); + str_init_normal_capa(mrb, s, RSTR_EMBED_PTR(s), RSTR_EMBED_LEN(s), capacity); } } else { |
