From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001
From: Jari Vetoniemi <jari.vetoniemi@indooratlas.com>
Date: Mon, 16 Mar 2020 18:49:26 +0900
Subject: Fresh start

---
 jni/ruby/defs/id.def | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 122 insertions(+)
 create mode 100644 jni/ruby/defs/id.def

(limited to 'jni/ruby/defs/id.def')

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,
+}
-- 
cgit v1.2.3

