diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/defs/id.def |
Fresh start
Diffstat (limited to 'jni/ruby/defs/id.def')
-rw-r--r-- | jni/ruby/defs/id.def | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/jni/ruby/defs/id.def b/jni/ruby/defs/id.def new file mode 100644 index 0000000..d4cd5e7 --- /dev/null +++ b/jni/ruby/defs/id.def @@ -0,0 +1,122 @@ +# -*- mode: ruby; coding: us-ascii -*- +firstline, predefined = __LINE__+1, %[\ + freeze + inspect + intern + object_id + const_missing + method_missing MethodMissing + method_added + singleton_method_added + method_removed + singleton_method_removed + method_undefined + singleton_method_undefined + length + size + gets + succ + each + proc + lambda + send + __send__ + __attached__ + initialize + initialize_copy + initialize_clone + initialize_dup + to_int + to_ary + to_str + to_sym + to_hash + to_proc + to_io + to_a + to_s + to_i + bt + bt_locations + call + mesg + exception + + _ UScore + "/*NULL*/" NULL + empty? + eql? + respond_to? Respond_to + respond_to_missing? Respond_to_missing + <IFUNC> + <CFUNC> + core#set_method_alias + core#set_variable_alias + core#undef_method + core#define_method + core#define_singleton_method + core#set_postexe + core#hash_from_ary + core#hash_merge_ary + core#hash_merge_ptr + core#hash_merge_kwd +] + +class KeywordError < RuntimeError + def self.raise(mesg, line) + super(self, mesg, ["#{__FILE__}:#{line}", *caller]) + end +end + +predefined_ids = {} +preserved_ids = [] +local_ids = [] +instance_ids = [] +global_ids = [] +const_ids = [] +class_ids = [] +attrset_ids = [] +names = {} +predefined.split(/^/).each_with_index do |line, num| + next if /^#/ =~ line + line.sub!(/\s+#.*/, '') + name, token = line.split + next unless name + token ||= name + if /#/ =~ token + token = "_#{token.gsub(/\W+/, '_')}" + else + token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase} + token.sub!(/\A\$/, "_G_") + token.sub!(/\A@@/, "_C_") + token.sub!(/\A@/, "_I_") + token.gsub!(/\W+/, "") + end + if prev = names[name] + KeywordError.raise("#{name} is already registered at line #{prev+firstline}", firstline+num) + end + if prev = predefined_ids[token] + KeywordError.raise("#{token} is already used for #{prev} at line #{names[prev]+firstline}", firstline+num) + end + names[name] = num + case name + when /\A[A-Z]\w*\z/; const_ids + when /\A(?!\d)\w+\z/; local_ids + when /\A\$(?:\d+|(?!\d)\w+)\z/; global_ids + when /\A@@(?!\d)\w+\z/; class_ids + when /\A@(?!\d)\w+\z/; instance_ids + when /\A((?!\d)\w+)=\z/; attrset_ids + else preserved_ids + end << token + predefined_ids[token] = name +end +{ + "LOCAL" => local_ids, + "INSTANCE" => instance_ids, + "GLOBAL" => global_ids, + "CONST" => const_ids, + "CLASS" => class_ids, + "ATTRSET" => attrset_ids, + :preserved => preserved_ids, + :predefined => predefined_ids, +} |