irb 1.1.0.pre.3 → 1.1.0.pre.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,267 +0,0 @@
1
- # frozen_string_literal: false
2
- #
3
- # irb/ruby-token.rb - ruby tokens
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
- # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
- #
8
- # --
9
- #
10
- #
11
- #
12
- # :stopdoc:
13
- module RubyToken
14
- EXPR_BEG = :EXPR_BEG
15
- EXPR_MID = :EXPR_MID
16
- EXPR_END = :EXPR_END
17
- EXPR_ARG = :EXPR_ARG
18
- EXPR_FNAME = :EXPR_FNAME
19
- EXPR_DOT = :EXPR_DOT
20
- EXPR_CLASS = :EXPR_CLASS
21
-
22
- class Token
23
- def initialize(seek, line_no, char_no)
24
- @seek = seek
25
- @line_no = line_no
26
- @char_no = char_no
27
- end
28
- attr_reader :seek, :line_no, :char_no
29
- end
30
-
31
- class TkNode < Token
32
- def initialize(seek, line_no, char_no)
33
- super
34
- end
35
- attr_reader :node
36
- end
37
-
38
- class TkId < Token
39
- def initialize(seek, line_no, char_no, name)
40
- super(seek, line_no, char_no)
41
- @name = name
42
- end
43
- attr_reader :name
44
- end
45
-
46
- class TkVal < Token
47
- def initialize(seek, line_no, char_no, value = nil)
48
- super(seek, line_no, char_no)
49
- @value = value
50
- end
51
- attr_reader :value
52
- end
53
-
54
- class TkOp < Token
55
- attr_accessor :name
56
- end
57
-
58
- class TkOPASGN < TkOp
59
- def initialize(seek, line_no, char_no, op)
60
- super(seek, line_no, char_no)
61
- op = TkReading2Token[op][0] unless op.kind_of?(Symbol)
62
- @op = op
63
- end
64
- attr_reader :op
65
- end
66
-
67
- class TkUnknownChar < Token
68
- def initialize(seek, line_no, char_no, id)
69
- super(seek, line_no, char_no)
70
- @name = name
71
- end
72
- attr_reader :name
73
- end
74
-
75
- class TkError < Token
76
- end
77
-
78
- def Token(token, value = nil)
79
- case token
80
- when String
81
- if (tk = TkReading2Token[token]).nil?
82
- IRB.fail TkReading2TokenNoKey, token
83
- end
84
- tk = Token(tk[0], value)
85
- if tk.kind_of?(TkOp)
86
- tk.name = token
87
- end
88
- return tk
89
- when Symbol
90
- if (tk = TkSymbol2Token[token]).nil?
91
- IRB.fail TkSymbol2TokenNoKey, token
92
- end
93
- return Token(tk[0], value)
94
- else
95
- if (token.ancestors & [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?
96
- token.new(@prev_seek, @prev_line_no, @prev_char_no)
97
- else
98
- token.new(@prev_seek, @prev_line_no, @prev_char_no, value)
99
- end
100
- end
101
- end
102
-
103
- TokenDefinitions = [
104
- [:TkCLASS, TkId, "class", EXPR_CLASS],
105
- [:TkMODULE, TkId, "module", EXPR_BEG],
106
- [:TkDEF, TkId, "def", EXPR_FNAME],
107
- [:TkUNDEF, TkId, "undef", EXPR_FNAME],
108
- [:TkBEGIN, TkId, "begin", EXPR_BEG],
109
- [:TkRESCUE, TkId, "rescue", EXPR_MID],
110
- [:TkENSURE, TkId, "ensure", EXPR_BEG],
111
- [:TkEND, TkId, "end", EXPR_END],
112
- [:TkIF, TkId, "if", EXPR_BEG, :TkIF_MOD],
113
- [:TkUNLESS, TkId, "unless", EXPR_BEG, :TkUNLESS_MOD],
114
- [:TkTHEN, TkId, "then", EXPR_BEG],
115
- [:TkELSIF, TkId, "elsif", EXPR_BEG],
116
- [:TkELSE, TkId, "else", EXPR_BEG],
117
- [:TkCASE, TkId, "case", EXPR_BEG],
118
- [:TkWHEN, TkId, "when", EXPR_BEG],
119
- [:TkWHILE, TkId, "while", EXPR_BEG, :TkWHILE_MOD],
120
- [:TkUNTIL, TkId, "until", EXPR_BEG, :TkUNTIL_MOD],
121
- [:TkFOR, TkId, "for", EXPR_BEG],
122
- [:TkBREAK, TkId, "break", EXPR_END],
123
- [:TkNEXT, TkId, "next", EXPR_END],
124
- [:TkREDO, TkId, "redo", EXPR_END],
125
- [:TkRETRY, TkId, "retry", EXPR_END],
126
- [:TkIN, TkId, "in", EXPR_BEG],
127
- [:TkDO, TkId, "do", EXPR_BEG],
128
- [:TkRETURN, TkId, "return", EXPR_MID],
129
- [:TkYIELD, TkId, "yield", EXPR_END],
130
- [:TkSUPER, TkId, "super", EXPR_END],
131
- [:TkSELF, TkId, "self", EXPR_END],
132
- [:TkNIL, TkId, "nil", EXPR_END],
133
- [:TkTRUE, TkId, "true", EXPR_END],
134
- [:TkFALSE, TkId, "false", EXPR_END],
135
- [:TkAND, TkId, "and", EXPR_BEG],
136
- [:TkOR, TkId, "or", EXPR_BEG],
137
- [:TkNOT, TkId, "not", EXPR_BEG],
138
- [:TkIF_MOD, TkId],
139
- [:TkUNLESS_MOD, TkId],
140
- [:TkWHILE_MOD, TkId],
141
- [:TkUNTIL_MOD, TkId],
142
- [:TkALIAS, TkId, "alias", EXPR_FNAME],
143
- [:TkDEFINED, TkId, "defined?", EXPR_END],
144
- [:TklBEGIN, TkId, "BEGIN", EXPR_END],
145
- [:TklEND, TkId, "END", EXPR_END],
146
- [:Tk__LINE__, TkId, "__LINE__", EXPR_END],
147
- [:Tk__FILE__, TkId, "__FILE__", EXPR_END],
148
-
149
- [:TkIDENTIFIER, TkId],
150
- [:TkFID, TkId],
151
- [:TkGVAR, TkId],
152
- [:TkCVAR, TkId],
153
- [:TkIVAR, TkId],
154
- [:TkCONSTANT, TkId],
155
-
156
- [:TkINTEGER, TkVal],
157
- [:TkFLOAT, TkVal],
158
- [:TkSTRING, TkVal],
159
- [:TkXSTRING, TkVal],
160
- [:TkREGEXP, TkVal],
161
- [:TkSYMBOL, TkVal],
162
-
163
- [:TkDSTRING, TkNode],
164
- [:TkDXSTRING, TkNode],
165
- [:TkDREGEXP, TkNode],
166
- [:TkNTH_REF, TkNode],
167
- [:TkBACK_REF, TkNode],
168
-
169
- [:TkUPLUS, TkOp, "+@"],
170
- [:TkUMINUS, TkOp, "-@"],
171
- [:TkPOW, TkOp, "**"],
172
- [:TkCMP, TkOp, "<=>"],
173
- [:TkEQ, TkOp, "=="],
174
- [:TkEQQ, TkOp, "==="],
175
- [:TkNEQ, TkOp, "!="],
176
- [:TkGEQ, TkOp, ">="],
177
- [:TkLEQ, TkOp, "<="],
178
- [:TkANDOP, TkOp, "&&"],
179
- [:TkOROP, TkOp, "||"],
180
- [:TkMATCH, TkOp, "=~"],
181
- [:TkNMATCH, TkOp, "!~"],
182
- [:TkDOT2, TkOp, ".."],
183
- [:TkDOT3, TkOp, "..."],
184
- [:TkAREF, TkOp, "[]"],
185
- [:TkASET, TkOp, "[]="],
186
- [:TkLSHFT, TkOp, "<<"],
187
- [:TkRSHFT, TkOp, ">>"],
188
- [:TkCOLON2, TkOp],
189
- [:TkCOLON3, TkOp],
190
- [:TkASSOC, TkOp, "=>"],
191
- [:TkQUESTION, TkOp, "?"], #?
192
- [:TkCOLON, TkOp, ":"], #:
193
-
194
- [:TkfLPAREN], # func( #
195
- [:TkfLBRACK], # func[ #
196
- [:TkfLBRACE], # func{ #
197
- [:TkSTAR], # *arg
198
- [:TkAMPER], # &arg #
199
- [:TkSYMBEG], # :SYMBOL
200
-
201
- [:TkGT, TkOp, ">"],
202
- [:TkLT, TkOp, "<"],
203
- [:TkPLUS, TkOp, "+"],
204
- [:TkMINUS, TkOp, "-"],
205
- [:TkMULT, TkOp, "*"],
206
- [:TkDIV, TkOp, "/"],
207
- [:TkMOD, TkOp, "%"],
208
- [:TkBITOR, TkOp, "|"],
209
- [:TkBITXOR, TkOp, "^"],
210
- [:TkBITAND, TkOp, "&"],
211
- [:TkBITNOT, TkOp, "~"],
212
- [:TkNOTOP, TkOp, "!"],
213
-
214
- [:TkBACKQUOTE, TkOp, "`"],
215
-
216
- [:TkASSIGN, Token, "="],
217
- [:TkDOT, Token, "."],
218
- [:TkLPAREN, Token, "("], #(exp)
219
- [:TkLBRACK, Token, "["], #[arry]
220
- [:TkLBRACE, Token, "{"], #{hash}
221
- [:TkRPAREN, Token, ")"],
222
- [:TkRBRACK, Token, "]"],
223
- [:TkRBRACE, Token, "}"],
224
- [:TkCOMMA, Token, ","],
225
- [:TkSEMICOLON, Token, ";"],
226
-
227
- [:TkCOMMENT],
228
- [:TkRD_COMMENT],
229
- [:TkSPACE],
230
- [:TkNL],
231
- [:TkEND_OF_SCRIPT],
232
-
233
- [:TkBACKSLASH, TkUnknownChar, "\\"],
234
- [:TkAT, TkUnknownChar, "@"],
235
- [:TkDOLLAR, TkUnknownChar, "$"],
236
- ]
237
-
238
- # {reading => token_class}
239
- # {reading => [token_class, *opt]}
240
- TkReading2Token = {}
241
- TkSymbol2Token = {}
242
-
243
- def RubyToken.def_token(token_n, super_token = Token, reading = nil, *opts)
244
- token_n = token_n.id2name if token_n.kind_of?(Symbol)
245
- if RubyToken.const_defined?(token_n)
246
- IRB.fail AlreadyDefinedToken, token_n
247
- end
248
- token_c = eval("class #{token_n} < #{super_token}; end; #{token_n}")
249
-
250
- if reading
251
- if TkReading2Token[reading]
252
- IRB.fail TkReading2TokenDuplicateError, token_n, reading
253
- end
254
- if opts.empty?
255
- TkReading2Token[reading] = [token_c]
256
- else
257
- TkReading2Token[reading] = [token_c].concat(opts)
258
- end
259
- end
260
- TkSymbol2Token[token_n.intern] = token_c
261
- end
262
-
263
- for defs in TokenDefinitions
264
- def_token(*defs)
265
- end
266
- end
267
- # :startdoc: