summaryrefslogtreecommitdiffhomepage
path: root/src/transcode.c
diff options
context:
space:
mode:
authorMitchell Blank Jr <[email protected]>2012-05-20 00:06:49 -0700
committerMitchell Blank Jr <[email protected]>2012-05-20 00:06:49 -0700
commit42c6b324db6141d05726beec531ae19bd83e85f0 (patch)
tree9d7fb4d8fe22721e1ccf53eca956895f141176ed /src/transcode.c
parent8c752c73e21d9be1934a8440caa0481c35deb8ad (diff)
downloadmruby-42c6b324db6141d05726beec531ae19bd83e85f0.tar.gz
mruby-42c6b324db6141d05726beec531ae19bd83e85f0.zip
C++ compilability -- don't jump across variable initialization
C++ is picker than C about when you can "goto" across a variable being defined. The fix is to just minimize the variable's scope inside an extra set of brackets. Without this change, g++ has the following errors: transcode.c:590: error: jump to label 'resume_label3' transcode.c:514: error: from here transcode.c:582: error: crosses initialization of 'const unsigned char* p' transcode.c:2124: error: jump to label 'set_encs' transcode.c:2184: error: from here transcode.c:2088: error: skips initialization of 'const char* err' transcode.c:2089: error: skips initialization of 'size_t error_len' transcode.c:2090: error: skips initialization of 'mrb_value bytes' transcode.c:2091: error: skips initialization of 'mrb_value dumped' transcode.c:2092: error: skips initialization of 'size_t readagain_len' transcode.c:2093: error: skips initialization of 'mrb_value bytes2'
Diffstat (limited to 'src/transcode.c')
-rw-r--r--src/transcode.c93
1 files changed, 49 insertions, 44 deletions
diff --git a/src/transcode.c b/src/transcode.c
index ae78f20d4..e9d9b01ef 100644
--- a/src/transcode.c
+++ b/src/transcode.c
@@ -579,10 +579,12 @@ transcode_restartable0(mrb_state *mrb,
switch (mrb_fixnum(next_info) & 0x1F) {
case NOMAP:
{
- const unsigned char *p = inchar_start;
- writebuf_off = 0;
- while (p < in_p) {
- TRANSCODING_WRITEBUF(tc)[writebuf_off++] = (unsigned char)*p++;
+ {
+ const unsigned char *p = inchar_start;
+ writebuf_off = 0;
+ while (p < in_p) {
+ TRANSCODING_WRITEBUF(tc)[writebuf_off++] = (unsigned char)*p++;
+ }
}
writebuf_len = writebuf_off;
writebuf_off = 0;
@@ -2085,51 +2087,54 @@ make_econv_exception(mrb_state *mrb, mrb_econv_t *ec)
mrb_value mesg, exc;
if (ec->last_error.result == econv_invalid_byte_sequence ||
ec->last_error.result == econv_incomplete_input) {
- const char *err = (const char *)ec->last_error.error_bytes_start;
- size_t error_len = ec->last_error.error_bytes_len;
- mrb_value bytes = mrb_str_new(mrb, err, error_len);
- mrb_value dumped = mrb_str_dump(mrb, bytes);
- size_t readagain_len = ec->last_error.readagain_len;
- mrb_value bytes2 = mrb_nil_value();
- mrb_value dumped2;
- int idx;
- if (ec->last_error.result == econv_incomplete_input) {
- mesg = mrb_sprintf(mrb, "incomplete %s on %s",
- //StringValueCStr(dumped),
- mrb_string_value_cstr(mrb, &dumped),
- ec->last_error.source_encoding);
- }
- else if (readagain_len) {
- bytes2 = mrb_str_new(mrb, err+error_len, readagain_len);
- dumped2 = mrb_str_dump(mrb, bytes2);
- mesg = mrb_sprintf(mrb, "%s followed by %s on %s",
- //StringValueCStr(dumped),
- mrb_string_value_cstr(mrb, &dumped),
- //StringValueCStr(dumped2),
- mrb_string_value_cstr(mrb, &dumped2),
- ec->last_error.source_encoding);
- }
- else {
- mesg = mrb_sprintf(mrb, "%s on %s",
- //StringValueCStr(dumped),
- mrb_string_value_cstr(mrb, &dumped),
- ec->last_error.source_encoding);
+ {
+ const char *err = (const char *)ec->last_error.error_bytes_start;
+ size_t error_len = ec->last_error.error_bytes_len;
+ mrb_value bytes = mrb_str_new(mrb, err, error_len);
+ mrb_value dumped = mrb_str_dump(mrb, bytes);
+ size_t readagain_len = ec->last_error.readagain_len;
+ mrb_value bytes2 = mrb_nil_value();
+ mrb_value dumped2;
+ if (ec->last_error.result == econv_incomplete_input) {
+ mesg = mrb_sprintf(mrb, "incomplete %s on %s",
+ //StringValueCStr(dumped),
+ mrb_string_value_cstr(mrb, &dumped),
+ ec->last_error.source_encoding);
+ }
+ else if (readagain_len) {
+ bytes2 = mrb_str_new(mrb, err+error_len, readagain_len);
+ dumped2 = mrb_str_dump(mrb, bytes2);
+ mesg = mrb_sprintf(mrb, "%s followed by %s on %s",
+ //StringValueCStr(dumped),
+ mrb_string_value_cstr(mrb, &dumped),
+ //StringValueCStr(dumped2),
+ mrb_string_value_cstr(mrb, &dumped2),
+ ec->last_error.source_encoding);
+ }
+ else {
+ mesg = mrb_sprintf(mrb, "%s on %s",
+ //StringValueCStr(dumped),
+ mrb_string_value_cstr(mrb, &dumped),
+ ec->last_error.source_encoding);
+ }
+
+ exc = mrb_exc_new3(mrb, E_INVALIDBYTESEQUENCE_ERROR, mesg);
+ mrb_iv_set(mrb, exc, mrb_intern(mrb, "error_bytes"), bytes);
+ mrb_iv_set(mrb, exc, mrb_intern(mrb, "readagain_bytes"), bytes2);
+ mrb_iv_set(mrb, exc, mrb_intern(mrb, "incomplete_input"), ec->last_error.result == econv_incomplete_input ? mrb_true_value() : mrb_false_value());
}
- exc = mrb_exc_new3(mrb, E_INVALIDBYTESEQUENCE_ERROR, mesg);
- mrb_iv_set(mrb, exc, mrb_intern(mrb, "error_bytes"), bytes);
- mrb_iv_set(mrb, exc, mrb_intern(mrb, "readagain_bytes"), bytes2);
- mrb_iv_set(mrb, exc, mrb_intern(mrb, "incomplete_input"), ec->last_error.result == econv_incomplete_input ? mrb_true_value() : mrb_false_value());
-
set_encs:
mrb_iv_set(mrb, exc, mrb_intern(mrb, "source_encoding_name"), mrb_str_new2(mrb, ec->last_error.source_encoding));
mrb_iv_set(mrb, exc, mrb_intern(mrb, "destination_encoding_name"), mrb_str_new2(mrb, ec->last_error.destination_encoding));
- idx = mrb_enc_find_index(mrb, ec->last_error.source_encoding);
- if (0 <= idx)
- mrb_iv_set(mrb, exc, mrb_intern(mrb, "source_encoding"), mrb_enc_from_encoding(mrb, mrb_enc_from_index(mrb, idx)));
- idx = mrb_enc_find_index(mrb, ec->last_error.destination_encoding);
- if (0 <= idx)
- mrb_iv_set(mrb, exc, mrb_intern(mrb, "destination_encoding"), mrb_enc_from_encoding(mrb, mrb_enc_from_index(mrb, idx)));
+ {
+ int idx = mrb_enc_find_index(mrb, ec->last_error.source_encoding);
+ if (0 <= idx)
+ mrb_iv_set(mrb, exc, mrb_intern(mrb, "source_encoding"), mrb_enc_from_encoding(mrb, mrb_enc_from_index(mrb, idx)));
+ idx = mrb_enc_find_index(mrb, ec->last_error.destination_encoding);
+ if (0 <= idx)
+ mrb_iv_set(mrb, exc, mrb_intern(mrb, "destination_encoding"), mrb_enc_from_encoding(mrb, mrb_enc_from_index(mrb, idx)));
+ }
return exc;
}
if (ec->last_error.result == econv_undefined_conversion) {