[#81999] [Ruby trunk Bug#13737] "can't modify frozen String" when installing bundled gems — ko1@...
Issue #13737 has been updated by ko1 (Koichi Sasada).
4 messages
2017/07/11
[#82005] [Ruby trunk Bug#13737] "can't modify frozen String" when installing bundled gems — nobu@...
Issue #13737 has been updated by nobu (Nobuyoshi Nakada).
3 messages
2017/07/12
[#82102] Re: register_fstring_tainted:FL_TEST_RAW(str, RSTRING_FSTR) — Eric Wong <normalperson@...>
Koichi Sasada <ko1@atdot.net> wrote:
4 messages
2017/07/18
[#82151] [Ruby trunk Feature#13637] [PATCH] tool/runruby.rb: test with smallest possible machine stack — Rei.Odaira@...
Issue #13637 has been updated by ReiOdaira (Rei Odaira).
3 messages
2017/07/24
[ruby-core:82216] [Ruby trunk Bug#13770] Can't create valid Cyrillic-named class/module
From:
nobu@...
Date:
2017-07-31 11:18:12 UTC
List:
ruby-core #82216
Issue #13770 has been updated by nobu (Nobuyoshi Nakada).
I'm uncertain about the usage of `mbc_case_fold`.
```diff
diff --git i/parse.y w/parse.y
index 02d9412a2c..96f25d893e 100644
--- i/parse.y
+++ w/parse.y
@@ -7790,6 +7790,8 @@ parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
return result;
}
+int rb_enc_const_id_char_p(const char *name, const char *end, rb_encoding *enc);
+
static enum yytokentype
parse_ident(struct parser_params *parser, int c, int cmd_state)
{
@@ -7827,7 +7829,9 @@ parse_ident(struct parser_params *parser, int c, int cmd_state)
pushback(c);
}
}
- if (result == 0 && ISUPPER(tok()[0])) {
+ if (result == 0 &&
+ (ISUPPER(tok()[0]) ||
+ rb_enc_const_id_char_p(tok(), tok()+toklen(), current_enc))) {
result = tCONSTANT;
}
else {
diff --git i/symbol.c w/symbol.c
index f4516ebbe4..490cae0127 100644
--- i/symbol.c
+++ w/symbol.c
@@ -198,6 +198,28 @@ rb_enc_symname_p(const char *name, rb_encoding *enc)
return rb_enc_symname2_p(name, strlen(name), enc);
}
+int
+rb_enc_const_id_char_p(const char *name, const char *end, rb_encoding *enc)
+{
+ int c, len;
+
+ if (end <= name) return FALSE;
+ if (ISASCII(*name)) return ISUPPER(*name);
+ c = rb_enc_codepoint_len(name, end, &len, enc);
+ if (c < 0) return FALSE;
+ if (rb_enc_isupper(c, enc)) return TRUE;
+ {
+ OnigUChar fold[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
+ const OnigUChar *beg = (const OnigUChar *)name;
+ int r = enc->mbc_case_fold(ONIGENC_CASE_FOLD,
+ &beg, (const OnigUChar *)end,
+ fold, enc);
+ if (r > 0 && (r != len || memcmp(fold, name, r)))
+ return TRUE;
+ }
+ return FALSE;
+}
+
#define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
#define IDSET_ATTRSET_FOR_INTERN (~(~0U<<(1<<ID_SCOPE_SHIFT)) & ~(1U<<ID_ATTRSET))
@@ -278,7 +300,7 @@ rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int a
break;
default:
- type = ISUPPER(*m) ? ID_CONST : ID_LOCAL;
+ type = rb_enc_const_id_char_p(m, e, enc) ? ID_CONST : ID_LOCAL;
id:
if (m >= e || (*m != '_' && !ISALPHA(*m) && ISASCII(*m))) {
if (len > 1 && *(e-1) == '=') {
```
----------------------------------------
Bug #13770: Can't create valid Cyrillic-named class/module
https://bugs.ruby-lang.org/issues/13770#change-65983
* Author: sb (Sergey Borodanov)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
Can't create a valid Cyrillic-named class. If I have a file **мир.rb**:
~~~ ruby
# Content of мир.rb:
class Мир
def приветствовать
"Привет, Мир!"
end
end
~~~
and do in **bash**:
~~~
ruby мир.rb
~~~
I get the error (**SyntaxError**):
~~~
мир.rb:1: class/module name must be CONSTANT
~~~
Same error with module creating and same behavior in **irb** (please, see attachment). At the same time Cyrillic-named constants and methods work fine.
It is expected that creating Cyrillic-named class/modules should work without error.
---Files--------------------------------
Screenshot from 2017-07-26 19-08-14.png (64.2 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>