summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-08-20 18:49:55 +0900
committerKOBAYASHI Shuji <[email protected]>2019-08-20 18:49:55 +0900
commit8157672a29e50756b9709022e8f66da73cd92c2b (patch)
tree3fbec1e5e92d6c1a5fc3f28d9f649f2a17ea2fdc /src/string.c
parentb836fd05dd084ac9e61c918cf1757b425c4d271b (diff)
downloadmruby-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.c6
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 {