summaryrefslogtreecommitdiff
path: root/jni/ruby/template/id.h.tmpl
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/template/id.h.tmpl
Fresh start
Diffstat (limited to 'jni/ruby/template/id.h.tmpl')
-rw-r--r--jni/ruby/template/id.h.tmpl118
1 files changed, 118 insertions, 0 deletions
diff --git a/jni/ruby/template/id.h.tmpl b/jni/ruby/template/id.h.tmpl
new file mode 100644
index 0000000..1c645ca
--- /dev/null
+++ b/jni/ruby/template/id.h.tmpl
@@ -0,0 +1,118 @@
+%# -*- c -*-
+/* DO NOT EDIT THIS FILE DIRECTLY */
+/**********************************************************************
+
+ id.h -
+
+ $Author: nobu $
+ created at: Sun Oct 19 21:12:51 2008
+
+ Copyright (C) 2007 Koichi Sasada
+
+**********************************************************************/
+<%
+require 'optparse'
+
+op_id_offset = 128
+
+token_op_ids = %w[
+ tDOT2 tDOT3 tUPLUS tUMINUS tPOW tDSTAR tCMP tLSHFT tRSHFT
+ tLEQ tGEQ tEQ tEQQ tNEQ tMATCH tNMATCH tAREF tASET
+ tCOLON2 tCOLON3 tANDOP tOROP
+]
+
+defs = File.join(File.dirname(File.dirname(erb.filename)), "defs/id.def")
+ids = eval(File.read(defs), binding, defs)
+types = ids.keys.grep(/^[A-Z]/)
+%>
+#ifndef RUBY_ID_H
+#define RUBY_ID_H
+
+enum ruby_id_types {
+ RUBY_ID_STATIC_SYM = 0x01,
+ RUBY_ID_LOCAL = 0x00,
+ RUBY_ID_INSTANCE = (0x01<<1),
+ RUBY_ID_GLOBAL = (0x03<<1),
+ RUBY_ID_ATTRSET = (0x04<<1),
+ RUBY_ID_CONST = (0x05<<1),
+ RUBY_ID_CLASS = (0x06<<1),
+ RUBY_ID_JUNK = (0x07<<1),
+ RUBY_ID_INTERNAL = RUBY_ID_JUNK,
+ RUBY_ID_SCOPE_SHIFT = 4,
+ RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
+};
+
+#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
+#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
+#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
+#define ID_LOCAL RUBY_ID_LOCAL
+#define ID_INSTANCE RUBY_ID_INSTANCE
+#define ID_GLOBAL RUBY_ID_GLOBAL
+#define ID_ATTRSET RUBY_ID_ATTRSET
+#define ID_CONST RUBY_ID_CONST
+#define ID_CLASS RUBY_ID_CLASS
+#define ID_JUNK RUBY_ID_JUNK
+#define ID_INTERNAL RUBY_ID_INTERNAL
+
+#define ID2ATTRSET(id) (((id)&~ID_SCOPE_MASK)|ID_ATTRSET)
+
+#define symIFUNC ID2SYM(idIFUNC)
+#define symCFUNC ID2SYM(idCFUNC)
+
+% token_op_ids.each_with_index do |token, index|
+#define RUBY_TOKEN_<%=token[/\At(.+)\z/, 1]%> <%=op_id_offset + index%>
+% end
+#define RUBY_TOKEN(t) RUBY_TOKEN_##t
+
+enum ruby_method_ids {
+ idDot2 = RUBY_TOKEN(DOT2),
+ idDot3 = RUBY_TOKEN(DOT3),
+ idUPlus = RUBY_TOKEN(UPLUS),
+ idUMinus = RUBY_TOKEN(UMINUS),
+ idPow = RUBY_TOKEN(POW),
+ idCmp = RUBY_TOKEN(CMP),
+ idPLUS = '+',
+ idMINUS = '-',
+ idMULT = '*',
+ idDIV = '/',
+ idMOD = '%',
+ idLT = '<',
+ idLTLT = RUBY_TOKEN(LSHFT),
+ idLE = RUBY_TOKEN(LEQ),
+ idGT = '>',
+ idGTGT = RUBY_TOKEN(RSHFT),
+ idGE = RUBY_TOKEN(GEQ),
+ idEq = RUBY_TOKEN(EQ),
+ idEqq = RUBY_TOKEN(EQQ),
+ idNeq = RUBY_TOKEN(NEQ),
+ idNot = '!',
+ idBackquote = '`',
+ idEqTilde = RUBY_TOKEN(MATCH),
+ idNeqTilde = RUBY_TOKEN(NMATCH),
+ idAREF = RUBY_TOKEN(AREF),
+ idASET = RUBY_TOKEN(ASET),
+ idCOLON2 = RUBY_TOKEN(COLON2),
+ idANDOP = RUBY_TOKEN(ANDOP),
+ idOROP = RUBY_TOKEN(OROP),
+ tPRESERVED_ID_BEGIN = <%=op_id_offset + token_op_ids.size - 1%>,
+% ids[:preserved].each do |token|
+ id<%=token%>,
+% end
+ tPRESERVED_ID_END,
+% ids.values_at(*types).flatten.each do |token|
+ t<%=token%>,
+% end
+ tNEXT_ID,
+% types.each do |type|
+% types = ids[type] or next
+% types.empty? and next
+#define TOKEN2<%=type%>ID(n) id##n = ((t##n<<ID_SCOPE_SHIFT)|ID_<%=type%>|ID_STATIC_SYM)
+% types.each do |token|
+ TOKEN2<%=type%>ID(<%=token%>),
+% end
+% end
+ tLAST_OP_ID = tPRESERVED_ID_END-1,
+ idLAST_OP_ID = tLAST_OP_ID >> ID_SCOPE_SHIFT
+};
+
+#endif /* RUBY_ID_H */