diff options
| author | Tomoyuki Sahara <[email protected]> | 2014-12-12 12:01:58 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2014-12-12 12:01:58 +0900 |
| commit | 669fe705cc490eedd2f4a09ed558f8186813d7a5 (patch) | |
| tree | d85018b11517f106cfe290a605f543efc8014c95 /src | |
| parent | 5b65ca3ebb3fb718138e1d23c4881a129b8606e2 (diff) | |
| download | mruby-669fe705cc490eedd2f4a09ed558f8186813d7a5.tar.gz mruby-669fe705cc490eedd2f4a09ed558f8186813d7a5.zip | |
"i" and "I".
Diffstat (limited to 'src')
| -rw-r--r-- | src/pack.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/pack.c b/src/pack.c index 69cf740ff..fa8b5ef66 100644 --- a/src/pack.c +++ b/src/pack.c @@ -650,6 +650,7 @@ read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, tlen = RSTRING_LEN(tmpl->str); t = tptr[tmpl->idx++]; +alias: switch (t) { case 'A': dir = PACK_DIR_STR; @@ -718,6 +719,24 @@ read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, type = PACK_TYPE_STRING; flags |= PACK_FLAG_COUNT2 | PACK_FLAG_LSB; break; + case 'I': + switch (sizeof(int)) { + case 2: t = 'S'; goto alias; + case 4: t = 'L'; goto alias; + case 8: t = 'Q'; goto alias; + default: + mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %S", mrb_fixnum_value(sizeof(int))); + } + break; + case 'i': + switch (sizeof(int)) { + case 2: t = 's'; goto alias; + case 4: t = 'l'; goto alias; + case 8: t = 'q'; goto alias; + default: + mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %S", mrb_fixnum_value(sizeof(int))); + } + break; case 'L': dir = PACK_DIR_LONG; type = PACK_TYPE_INTEGER; |
