Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 3 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/mrblib/symbol.rb
r321 r439 3 3 4 4 alias intern to_sym 5 6 def to_proc7 ->(obj,*args,&block) do8 obj.__send__(self, *args, &block)9 end10 end11 5 12 6 ## … … 49 43 return nil unless other.kind_of?(Symbol) 50 44 lhs = self.to_s; lhs.upcase! 51 rhs = other.to_s ; rhs.upcase!45 rhs = other.to_s.upcase 52 46 lhs <=> rhs 47 end 48 49 ## 50 # call-seq: 51 # sym.casecmp?(other) -> true, false, or nil 52 # 53 # Returns true if sym and other_sym are equal after case folding, 54 # false if they are not equal, and nil if other_sym is not a string. 55 56 def casecmp?(sym) 57 c = self.casecmp(sym) 58 return nil if c.nil? 59 return c == 0 53 60 end 54 61 -
EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/src/symbol.c
r331 r439 2 2 #include <mruby/khash.h> 3 3 #include <mruby/array.h> 4 5 typedef struct symbol_name { 6 size_t len; 7 const char *name; 8 } symbol_name; 4 #include <mruby/string.h> 9 5 10 6 /* … … 23 19 * :wait2, :$>] 24 20 */ 21 #ifdef MRB_ENABLE_ALL_SYMBOLS 25 22 static mrb_value 26 23 mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) … … 30 27 31 28 for (i=1, lim=mrb->symidx+1; i<lim; i++) { 32 mrb_ary_push(mrb, ary, mrb_symbol_value(i)); 29 mrb_sym sym = i<<1; 30 mrb_ary_push(mrb, ary, mrb_symbol_value(sym)); 33 31 } 34 32 35 33 return ary; 36 34 } 35 #endif 37 36 38 37 /* … … 46 45 { 47 46 mrb_int len; 48 mrb_sym2name_len(mrb, mrb_symbol(self), &len); 47 #ifdef MRB_UTF8_STRING 48 mrb_int byte_len; 49 const char *name = mrb_sym_name_len(mrb, mrb_symbol(self), &byte_len); 50 len = mrb_utf8_strlen(name, byte_len); 51 #else 52 mrb_sym_name_len(mrb, mrb_symbol(self), &len); 53 #endif 49 54 return mrb_fixnum_value(len); 50 55 } … … 54 59 { 55 60 struct RClass *s = mrb->symbol_class; 61 #ifdef MRB_ENABLE_ALL_SYMBOLS 56 62 mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE()); 63 #endif 57 64 mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE()); 58 65 mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE()); -
EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/test/symbol.rb
r321 r439 1 # coding: utf-8 1 2 ## 2 3 # Symbol(Ext) Test 3 4 4 assert('Symbol#to_proc') do 5 assert_equal 5, :abs.to_proc[-5] 5 if Symbol.respond_to?(:all_symbols) 6 assert('Symbol.all_symbols') do 7 foo = [:__symbol_test_1, :__symbol_test_2, :__symbol_test_3].sort 8 symbols = Symbol.all_symbols.select{|sym|sym.to_s.include? '__symbol_test'}.sort 9 assert_equal foo, symbols 10 end 6 11 end 7 12 8 assert('Symbol.all_symbols') do 9 foo = [:__symbol_test_1, :__symbol_test_2, :__symbol_test_3].sort 10 symbols = Symbol.all_symbols.select{|sym|sym.to_s.include? '__symbol_test'}.sort 11 assert_equal foo, symbols 12 end 13 14 assert("Symbol#length") do 15 assert_equal 5, :hello.size 16 assert_equal 5, :mruby.length 13 %w[size length].each do |n| 14 assert("Symbol##{n}") do 15 assert_equal 5, :hello.__send__(n) 16 assert_equal 4, :"aA\0b".__send__(n) 17 if __ENCODING__ == "UTF-8" 18 assert_equal 8, :"こんにちは世界!".__send__(n) 19 assert_equal 4, :"aあ\0b".__send__(n) 20 else 21 assert_equal 22, :"こんにちは世界!".__send__(n) 22 assert_equal 6, :"aあ\0b".__send__(n) 23 end 24 end 17 25 end 18 26
Note:
See TracChangeset
for help on using the changeset viewer.