rubinius-melbourne 2.1.0.0 → 2.2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,17 +32,12 @@ VALUE MELBOURNE_FILE_TO_AST(VALUE self, VALUE fname, VALUE start) {
32
32
  }
33
33
 
34
34
  void Init_melbourne(void) {
35
- VALUE rb_cMelbourne, rb_mToolSets, rb_mToolSet;
35
+ VALUE rb_mCodeTools, rb_cMelbourne;
36
36
 
37
37
  MELBOURNE::init_symbols();
38
38
 
39
- #ifndef RUBINIUS
40
- VALUE rb_mRubinius = rb_const_get(rb_cObject, rb_intern("Rubinius"));
41
- #endif
42
-
43
- rb_mToolSets = rb_const_get(rb_mRubinius, rb_intern("ToolSets"));
44
- rb_mToolSet = rb_funcall(rb_mToolSets, rb_intern("current"), 0);
45
- rb_cMelbourne = rb_define_class_under(rb_mToolSet, "Melbourne", rb_cObject);
39
+ rb_mCodeTools = rb_const_get(rb_cObject, rb_intern("CodeTools"));
40
+ rb_cMelbourne = rb_define_class_under(rb_mCodeTools, "Melbourne", rb_cObject);
46
41
  rb_define_method(rb_cMelbourne, "string_to_ast",
47
42
  RUBY_METHOD_FUNC(MELBOURNE_STRING_TO_AST), 3);
48
43
  rb_define_method(rb_cMelbourne, "file_to_ast",
@@ -37,11 +37,30 @@ namespace MELBOURNE {
37
37
  struct RNode *node;
38
38
  ID id;
39
39
  long state;
40
+ struct rb_args_info *args;
40
41
  long cnt;
41
42
  VALUE value;
42
43
  } u3;
43
44
  } NODE;
44
45
 
46
+ struct rb_args_info {
47
+ NODE *pre_init;
48
+ NODE *post_init;
49
+
50
+ int pre_args_num; /* count of mandatory pre-arguments */
51
+ int post_args_num; /* count of mandatory post-arguments */
52
+
53
+ ID first_post_arg;
54
+
55
+ ID rest_arg;
56
+ ID block_arg;
57
+
58
+ NODE *kw_args;
59
+ NODE *kw_rest_arg;
60
+
61
+ NODE *opt_args;
62
+ };
63
+
45
64
  #define RNODE(obj) ((NODE*)(obj))
46
65
 
47
66
  /* 0..4:T_TYPES, 5:FL_MARK, 6:reserved, 7:NODE_FL_NEWLINE */
@@ -105,6 +124,7 @@ namespace MELBOURNE {
105
124
  #define nd_recv u1.node
106
125
  #define nd_mid u2.id
107
126
  #define nd_args u3.node
127
+ #define nd_ainfo u3.args
108
128
 
109
129
  #define nd_noex u3.id
110
130
  #define nd_defn u3.node
@@ -162,7 +182,7 @@ namespace MELBOURNE {
162
182
  #define NEW_UNTIL(c,b,n) NEW_NODE(NODE_UNTIL,c,b,n)
163
183
  #define NEW_FOR(v,i,b) NEW_NODE(NODE_FOR,v,b,i)
164
184
  #define NEW_ITER(a,b) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b),0)
165
- #define NEW_LAMBDA(a) NEW_NODE(NODE_LAMBDA,a,0,0)
185
+ #define NEW_LAMBDA(a,b) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b),0)
166
186
  #define NEW_BREAK(s) NEW_NODE(NODE_BREAK,s,0,0)
167
187
  #define NEW_NEXT(s) NEW_NODE(NODE_NEXT,s,0,0)
168
188
  #define NEW_REDO() NEW_NODE(NODE_REDO,0,0,0)
@@ -192,6 +212,7 @@ namespace MELBOURNE {
192
212
  #define NEW_OP_ASGN22(i,o) NEW_NODE(NODE_OP_ASGN2,i,o,rb_id_attrset(i))
193
213
  #define NEW_OP_ASGN_OR(i,val) NEW_NODE(NODE_OP_ASGN_OR,i,val,0)
194
214
  #define NEW_OP_ASGN_AND(i,val) NEW_NODE(NODE_OP_ASGN_AND,i,val,0)
215
+ #define NEW_OP_CDECL(v,op,val) NEW_NODE(NODE_OP_CDECL,v,val,op)
195
216
  #define NEW_GVAR(v) NEW_NODE(NODE_GVAR,v,0,0)
196
217
  #define NEW_LVAR(v) NEW_NODE(NODE_LVAR,v,0,0)
197
218
  #define NEW_DVAR(v) NEW_NODE(NODE_DVAR,v,0,0)
@@ -218,6 +239,7 @@ namespace MELBOURNE {
218
239
  #define NEW_ARGS(m,o) NEW_NODE(NODE_ARGS,o,m,0)
219
240
  #define NEW_ARGS_AUX(r,b) NEW_NODE(NODE_ARGS_AUX,r,b,0)
220
241
  #define NEW_OPT_ARG(i,v) NEW_NODE(NODE_OPT_ARG,i,v,0)
242
+ #define NEW_KW_ARG(i,v) NEW_NODE(NODE_KW_ARG,i,v,0)
221
243
  #define NEW_POSTARG(i,v) NEW_NODE(NODE_POSTARG,i,v,0)
222
244
  #define NEW_ARGSCAT(a,b) NEW_NODE(NODE_ARGSCAT,a,b,0)
223
245
  #define NEW_ARGSPUSH(a,b) NEW_NODE(NODE_ARGSPUSH,a,b,0)
@@ -251,6 +273,8 @@ namespace MELBOURNE {
251
273
  #define NEW_FILE() NEW_NODE(NODE_FILE,0,0,0)
252
274
  #define NEW_NUMBER(l) NEW_NODE(NODE_NUMBER,REF(l),0,0)
253
275
  #define NEW_FLOAT(l) NEW_NODE(NODE_FLOAT,REF(l),0,0)
276
+ #define NEW_RATIONAL(l) NEW_NODE(NODE_RATIONAL,REF(l),0,0)
277
+ #define NEW_IMAGINARY(l) NEW_NODE(NODE_IMAGINARY,REF(l),0,0)
254
278
  #define NEW_ENCODING(n) NEW_NODE(NODE_ENCODING,REF(n),0,0)
255
279
 
256
280
  #define NOEX_PUBLIC 0x00,
@@ -41,6 +41,7 @@ namespace MELBOURNE {
41
41
  "op_asgn2\0"
42
42
  "op_asgn_and\0"
43
43
  "op_asgn_or\0"
44
+ "op_cdecl\0"
44
45
  "call\0"
45
46
  "fcall\0"
46
47
  "vcall\0"
@@ -74,6 +75,7 @@ namespace MELBOURNE {
74
75
  "args\0"
75
76
  "args_aux\0"
76
77
  "opt_arg\0"
78
+ "kw_arg\0"
77
79
  "postarg\0"
78
80
  "argscat\0"
79
81
  "argspush\0"
@@ -118,6 +120,8 @@ namespace MELBOURNE {
118
120
  "float\0"
119
121
  "encoding\0"
120
122
  "preexe\0"
123
+ "rational\0"
124
+ "imaginary\0"
121
125
  };
122
126
 
123
127
  static const unsigned short node_types_offsets[] = {
@@ -156,87 +160,91 @@ namespace MELBOURNE {
156
160
  195,
157
161
  207,
158
162
  218,
159
- 223,
160
- 229,
161
- 235,
162
- 241,
163
- 248,
164
- 254,
165
- 261,
166
- 268,
167
- 273,
168
- 280,
169
- 286,
170
- 291,
171
- 296,
172
- 301,
173
- 306,
174
- 312,
175
- 317,
176
- 325,
163
+ 227,
164
+ 232,
165
+ 238,
166
+ 244,
167
+ 250,
168
+ 257,
169
+ 263,
170
+ 270,
171
+ 277,
172
+ 282,
173
+ 289,
174
+ 295,
175
+ 300,
176
+ 305,
177
+ 310,
178
+ 315,
179
+ 321,
180
+ 326,
177
181
  334,
178
- 340,
179
- 347,
180
- 354,
181
- 358,
182
- 362,
182
+ 343,
183
+ 349,
184
+ 356,
185
+ 363,
183
186
  367,
184
- 372,
185
- 378,
186
- 384,
187
- 390,
188
- 401,
189
- 406,
187
+ 371,
188
+ 376,
189
+ 381,
190
+ 387,
191
+ 393,
192
+ 399,
193
+ 410,
190
194
  415,
191
- 423,
192
- 431,
195
+ 424,
196
+ 432,
193
197
  439,
194
- 448,
195
- 454,
196
- 461,
197
- 471,
198
- 482,
198
+ 447,
199
+ 455,
200
+ 464,
201
+ 470,
202
+ 477,
199
203
  487,
200
- 492,
201
204
  498,
202
- 505,
203
- 511,
204
- 517,
205
- 524,
206
- 531,
207
- 538,
208
- 545,
209
- 550,
210
- 555,
205
+ 503,
206
+ 508,
207
+ 514,
208
+ 521,
209
+ 527,
210
+ 533,
211
+ 540,
212
+ 547,
213
+ 554,
211
214
  561,
212
- 567,
213
- 572,
214
- 576,
215
- 581,
216
- 587,
217
- 595,
215
+ 566,
216
+ 571,
217
+ 577,
218
+ 583,
219
+ 588,
220
+ 592,
221
+ 597,
218
222
  603,
219
223
  611,
220
- 618,
221
- 626,
222
- 631,
223
- 637,
224
+ 619,
225
+ 627,
226
+ 634,
224
227
  642,
225
- 651,
226
- 659,
227
- 666,
228
+ 647,
229
+ 653,
230
+ 658,
231
+ 667,
228
232
  675,
229
- 680,
230
- 685,
233
+ 682,
231
234
  691,
232
- 698,
233
- 704,
234
- 713,
235
- 720
235
+ 696,
236
+ 701,
237
+ 707,
238
+ 714,
239
+ 720,
240
+ 729,
241
+ 736,
242
+ 745,
243
+ 755
236
244
  };
237
245
 
238
246
  const char *get_node_type_string(enum node_type node) {
239
- if(node < 111) {
247
+ if(node < 115) {
240
248
  return node_types + node_types_offsets[node];
241
249
  } else {
242
250
  #define NODE_STRING_MESSAGE_LEN 20
@@ -38,6 +38,7 @@ namespace MELBOURNE {
38
38
  NODE_OP_ASGN2,
39
39
  NODE_OP_ASGN_AND,
40
40
  NODE_OP_ASGN_OR,
41
+ NODE_OP_CDECL,
41
42
  NODE_CALL,
42
43
  NODE_FCALL,
43
44
  NODE_VCALL,
@@ -71,6 +72,7 @@ namespace MELBOURNE {
71
72
  NODE_ARGS,
72
73
  NODE_ARGS_AUX,
73
74
  NODE_OPT_ARG,
75
+ NODE_KW_ARG,
74
76
  NODE_POSTARG,
75
77
  NODE_ARGSCAT,
76
78
  NODE_ARGSPUSH,
@@ -114,7 +116,9 @@ namespace MELBOURNE {
114
116
  NODE_NUMBER,
115
117
  NODE_FLOAT,
116
118
  NODE_ENCODING,
117
- NODE_PREEXE
119
+ NODE_PREEXE,
120
+ NODE_RATIONAL,
121
+ NODE_IMAGINARY
118
122
  };
119
123
 
120
124
  const char *get_node_type_string(enum node_type nt);
@@ -33,6 +33,7 @@ node_types = %w[
33
33
  op_asgn2
34
34
  op_asgn_and
35
35
  op_asgn_or
36
+ op_cdecl
36
37
  call
37
38
  fcall
38
39
  vcall
@@ -66,6 +67,7 @@ node_types = %w[
66
67
  args
67
68
  args_aux
68
69
  opt_arg
70
+ kw_arg
69
71
  postarg
70
72
  argscat
71
73
  argspush
@@ -110,6 +112,8 @@ node_types = %w[
110
112
  float
111
113
  encoding
112
114
  preexe
115
+ rational
116
+ imaginary
113
117
  ]
114
118
 
115
119
  def write_node_types(list)
@@ -117,6 +121,7 @@ def write_node_types(list)
117
121
  f.puts <<EOF
118
122
  /* This file is generated by node_types.rb. Do not edit. */
119
123
 
124
+ #include "namespace.h"
120
125
  #include "node_types.hpp"
121
126
 
122
127
  #include <stdio.h>
@@ -12,21 +12,42 @@
12
12
 
13
13
  namespace MELBOURNE {
14
14
 
15
- enum lex_state_e {
16
- EXPR_BEG, /* ignore newline, +/- is a sign. */
17
- EXPR_END, /* newline significant, +/- is an operator. */
18
- EXPR_ENDARG, /* ditto, and unbound braces. */
19
- EXPR_ENDFN, /* ditto, and unbound braces. */
20
- EXPR_ARG, /* newline significant, +/- is an operator. */
21
- EXPR_CMDARG, /* newline significant, +/- is an operator. */
22
- EXPR_MID, /* newline significant, +/- is an operator. */
23
- EXPR_FNAME, /* ignore newline, no reserved words. */
24
- EXPR_DOT, /* right after `.' or `::', no reserved words. */
25
- EXPR_CLASS, /* immediate after `class', no here document. */
26
- EXPR_VALUE, /* like EXPR_BEG but label is disallowed. */
15
+ enum lex_state_bits {
16
+ EXPR_BEG_BIT = 0, /* ignore newline, +/- is a sign. */
17
+ EXPR_END_BIT, /* newline significant, +/- is an operator. */
18
+ EXPR_ENDARG_BIT, /* ditto, and unbound braces. */
19
+ EXPR_ENDFN_BIT, /* ditto, and unbound braces. */
20
+ EXPR_ARG_BIT, /* newline significant, +/- is an operator. */
21
+ EXPR_CMDARG_BIT, /* newline significant, +/- is an operator. */
22
+ EXPR_MID_BIT, /* newline significant, +/- is an operator. */
23
+ EXPR_FNAME_BIT, /* ignore newline, no reserved words. */
24
+ EXPR_DOT_BIT, /* right after `.' or `::', no reserved words. */
25
+ EXPR_CLASS_BIT, /* immediate after `class', no here document. */
26
+ EXPR_VALUE_BIT, /* like EXPR_BEG but label is disallowed. */
27
27
  EXPR_MAX_STATE
28
28
  };
29
29
 
30
+ enum lex_state_e {
31
+ #define EXPR(e) EXPR_##e = (1 << EXPR_##e##_BIT)
32
+ EXPR(BEG),
33
+ EXPR(END),
34
+ EXPR(ENDARG),
35
+ EXPR(ENDFN),
36
+ EXPR(ARG),
37
+ EXPR(CMDARG),
38
+ EXPR(MID),
39
+ EXPR(FNAME),
40
+ EXPR(DOT),
41
+ EXPR(CLASS),
42
+ EXPR(VALUE),
43
+ EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS),
44
+ EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
45
+ EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
46
+ };
47
+
48
+ #define lex_state_of_p(x, s) ((x) & (s))
49
+ #define lex_state_p(s) lex_state_of_p(lex_state, s)
50
+
30
51
  typedef VALUE stack_type;
31
52
 
32
53
  struct StartPosition {
@@ -50,11 +71,13 @@ typedef VALUE stack_type;
50
71
  int class_nest;
51
72
  int in_single;
52
73
  int in_def;
74
+ int brace_nest;
53
75
  int compile_for_eval;
54
76
  ID cur_mid;
55
77
  char *token_buffer;
56
78
  int tokidx;
57
79
  int toksiz;
80
+ int tokline;
58
81
  int emit_warnings;
59
82
  /* Mirror'ing the 1.8 parser, There are 2 input methods,
60
83
  from IO and directly from a string. */
@@ -77,9 +100,9 @@ typedef VALUE stack_type;
77
100
  VALUE lex_lastline;
78
101
  VALUE lex_nextline;
79
102
 
80
- char *lex_pbeg;
81
- char *lex_p;
82
- char *lex_pend;
103
+ const char *lex_pbeg;
104
+ const char *lex_p;
105
+ const char *lex_pend;
83
106
  int lex_str_used;
84
107
 
85
108
  enum lex_state_e lex_state;
@@ -143,11 +166,13 @@ typedef VALUE stack_type;
143
166
  #define class_nest PARSER_VAR(class_nest)
144
167
  #define in_single PARSER_VAR(in_single)
145
168
  #define in_def PARSER_VAR(in_def)
169
+ #define brace_nest PARSER_VAR(brace_nest)
146
170
  #define compile_for_eval PARSER_VAR(compile_for_eval)
147
171
  #define cur_mid PARSER_VAR(cur_mid)
148
172
  #define tokenbuf PARSER_VAR(token_buffer)
149
173
  #define tokidx PARSER_VAR(tokidx)
150
174
  #define toksiz PARSER_VAR(toksiz)
175
+ #define tokline PARSER_VAR(tokline)
151
176
  #define emit_warnings PARSER_VAR(emit_warnings)
152
177
  #define lex_gets PARSER_VAR(lex_gets)
153
178
  #define line_buffer PARSER_VAR(line_buffer)
@@ -57,8 +57,10 @@ namespace MELBOURNE {
57
57
  ID rb_sHash;
58
58
  ID rb_sIAsgn;
59
59
  ID rb_sIf;
60
+ ID rb_sImaginary;
60
61
  ID rb_sIter;
61
62
  ID rb_sIVar;
63
+ ID rb_sKwArg;
62
64
  ID rb_sLAsgn;
63
65
  ID rb_sLambda;
64
66
  ID rb_sLit;
@@ -83,6 +85,7 @@ namespace MELBOURNE {
83
85
  ID rb_sPostExe;
84
86
  ID rb_sPostArg;
85
87
  ID rb_sPreExe;
88
+ ID rb_sRational;
86
89
  ID rb_sRedo;
87
90
  ID rb_sRegex;
88
91
  ID rb_sResbody;
@@ -169,8 +172,10 @@ namespace MELBOURNE {
169
172
  rb_sHash = rb_intern("process_hash");
170
173
  rb_sIAsgn = rb_intern("process_iasgn");
171
174
  rb_sIf = rb_intern("process_if");
175
+ rb_sImaginary = rb_intern("process_imaginary");
172
176
  rb_sIter = rb_intern("process_iter");
173
177
  rb_sIVar = rb_intern("process_ivar");
178
+ rb_sKwArg = rb_intern("process_kw_arg");
174
179
  rb_sLAsgn = rb_intern("process_lasgn");
175
180
  rb_sLambda = rb_intern("process_lambda");
176
181
  rb_sLit = rb_intern("process_lit");
@@ -195,6 +200,7 @@ namespace MELBOURNE {
195
200
  rb_sPostExe = rb_intern("process_postexe");
196
201
  rb_sPostArg = rb_intern("process_postarg");
197
202
  rb_sPreExe = rb_intern("process_preexe");
203
+ rb_sRational = rb_intern("process_rational");
198
204
  rb_sRedo = rb_intern("process_redo");
199
205
  rb_sRegex = rb_intern("process_regex");
200
206
  rb_sResbody = rb_intern("process_resbody");