diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-10-17 10:46:23 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-10-17 10:46:23 +0000 |
commit | b025ce46786ced077d67c2a2bbe53af3f819f9d7 (patch) | |
tree | 242aef5fa2be80f10e11f4f52598f299fc66a118 /template | |
parent | 6e738bf2b19fdb8c15a00e08b417596e00452ea0 (diff) | |
download | ruby-b025ce46786ced077d67c2a2bbe53af3f819f9d7.tar.gz |
* common.mk (ID_H_TARGET): phony target to update id.h.
* tool/ifchange, win32/ifchange.bat: --timestamp option added.
* tool/generic_erb.rb: --timestamp, --output and --if-change options
added.
* template/id.h.tmpl: moved from id.h.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'template')
-rw-r--r-- | template/id.h.tmpl | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/template/id.h.tmpl b/template/id.h.tmpl new file mode 100644 index 0000000000..597f2702d3 --- /dev/null +++ b/template/id.h.tmpl @@ -0,0 +1,115 @@ +%# -*- c -*- +/* DO NOT EDIT THIS FILE DIRECTLY */ +/********************************************************************** + + id.h - + + $Author: ko1 $ + created at: Thu Jul 12 04:38:07 2007 + + Copyright (C) 2007 Koichi Sasada + +**********************************************************************/ +<% +require 'optparse' +vpath = ["."] +input = nil +opt = OptionParser.new do |o| + o.on('-v', '--vpath=DIR') {|dirs| vpath.concat dirs.split(File::PATH_SEPARATOR)} + input, = o.order!(ARGV) +end or abort opt.opt_s + +tokens = nil +vpath.find do |dir| + begin + if line = File.read(File.join(dir, input))[/^\s*enum\s+yytokentype\s*\{([^{}]*)\s*\};/m, 1] + tokens = line.scan(/\b(t(?:LAST_TOKEN|U(?:PLUS|MINUS)|POW|CMP|EQQ?|[NGL]EQ|(?:AND|OR)OP|N?MATCH|DOT\d|AREF|ASET|[LR]SHFT|LAMBDA)|id\w+)\s*=\s*(\d+),?/m) + end + rescue Errno::ENOENT + nil + else + true + end +end +%> +#ifndef RUBY_ID_H +#define RUBY_ID_H + +#define ID_SCOPE_SHIFT 3 +#define ID_SCOPE_MASK 0x07 +#define ID_LOCAL 0x00 +#define ID_INSTANCE 0x01 +#define ID_GLOBAL 0x03 +#define ID_ATTRSET 0x04 +#define ID_CONST 0x05 +#define ID_CLASS 0x06 +#define ID_JUNK 0x07 +#define ID_INTERNAL ID_JUNK + +#ifdef USE_PARSE_H +#include "parse.h" +#endif + +#define symIFUNC ID2SYM(idIFUNC) +#define symCFUNC ID2SYM(idCFUNC) + +enum ruby_method_ids { +#ifndef tLAST_TOKEN +% tokens.each do |token, value| + <%=token%> = <%=value%>, +% end +#elif <%= tokens.map {|token, value|"#{token} != #{value}"}.join(" || \\\n ") %> +#error id.h is out of date. +#endif + idPLUS = '+', + idMINUS = '-', + idMULT = '*', + idDIV = '/', + idMOD = '%', + idLT = '<', + idLTLT = tLSHFT, + idLE = tLEQ, + idGT = '>', + idGE = tGEQ, + idEq = tEQ, + idEqq = tEQQ, + idNeq = tNEQ, + idNot = '!', + idBackquote = '`', + idEqTilde = tMATCH, + idAREF = tAREF, + idASET = tASET, + idLAST_TOKEN = tLAST_TOKEN >> ID_SCOPE_SHIFT, + tIntern, + tMethodMissing, + tLength, + tGets, + tSucc, + tEach, + tLambda, + tSend, + t__send__, + tInitialize, +#if SUPPORT_JOKE + tBitblt, + tAnswer, +#endif + tLAST_ID, +#define TOKEN2ID(n) id##n = ((t##n<<ID_SCOPE_SHIFT)|ID_LOCAL) + TOKEN2ID(Intern), + TOKEN2ID(MethodMissing), + TOKEN2ID(Length), + TOKEN2ID(Gets), + TOKEN2ID(Succ), + TOKEN2ID(Each), + TOKEN2ID(Lambda), + TOKEN2ID(Send), + TOKEN2ID(__send__), + TOKEN2ID(Initialize), +#if SUPPORT_JOKE + TOKEN2ID(Bitblt), + TOKEN2ID(Answer), +#endif +}; + +#endif /* RUBY_ID_H */ |