fancy 0.9.0 → 0.10.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.
- data/bin/fancy +1 -1
- data/bin/fspec +1 -1
- data/bin/ifancy +1 -0
- data/boot/compiler/parser/ext/fancy_parser.bundle +0 -0
- data/boot/fancy_ext/array.rb +0 -1
- data/boot/fancy_ext/object.rb +10 -0
- data/boot/rbx-compiler/parser/Makefile +207 -0
- data/boot/rbx-compiler/parser/fancy_parser.bundle +0 -0
- data/boot/rbx-compiler/parser/lexer.c +2314 -0
- data/boot/rbx-compiler/parser/lexer.h +316 -0
- data/boot/rbx-compiler/parser/parser.c +3133 -0
- data/boot/rbx-compiler/parser/parser.h +131 -0
- data/doc/api/fancy.jsonp +1 -1
- data/examples/echo.fy +1 -1
- data/examples/stupid_quicksort.fy +1 -1
- data/lib/array.fy +4 -0
- data/lib/block.fy +11 -8
- data/lib/class.fy +21 -0
- data/lib/compiler/ast.fy +1 -0
- data/lib/compiler/ast/identifier.fy +1 -3
- data/lib/compiler/ast/method_spec.fy +6 -0
- data/lib/contracts.fy +2 -2
- data/lib/documentation.fy +25 -24
- data/lib/enumerable.fy +38 -21
- data/lib/fancy_spec.fy +24 -17
- data/lib/fdoc.fy +32 -16
- data/lib/future.fy +26 -1
- data/lib/object.fy +4 -1
- data/lib/parser/ext/Makefile +207 -0
- data/lib/parser/ext/fancy_parser.bundle +0 -0
- data/lib/parser/ext/lexer.c +2442 -0
- data/lib/parser/ext/lexer.h +316 -0
- data/lib/parser/ext/lexer.lex +4 -4
- data/lib/parser/ext/parser.c +3400 -0
- data/lib/parser/ext/parser.h +135 -0
- data/lib/parser/ext/parser.y +52 -74
- data/lib/parser/methods.fy +20 -8
- data/lib/parser/parse_error.fy +2 -2
- data/lib/range.fy +1 -1
- data/lib/rbx.fy +1 -0
- data/lib/rbx/block.fy +0 -12
- data/lib/rbx/class.fy +1 -1
- data/lib/rbx/compiled_method.fy +4 -0
- data/lib/{eval.fy → rbx/eval.fy} +3 -3
- data/lib/rbx/hash.fy +13 -3
- data/lib/rbx/method.fy +1 -0
- data/lib/rbx/object.fy +5 -1
- data/lib/rbx/range.fy +1 -1
- data/lib/rbx/scopes.fy +15 -0
- data/lib/rbx/symbol.fy +4 -0
- data/lib/rbx/thread.fy +1 -1
- data/lib/set.fy +11 -0
- data/lib/string.fy +17 -17
- data/lib/symbol.fy +7 -3
- data/lib/tuple.fy +3 -8
- data/lib/version.fy +1 -1
- data/ruby_lib/fancy +1 -1
- data/ruby_lib/fancy.rb +6 -19
- data/ruby_lib/interactive/hilight.rb +5 -5
- data/tests/block.fy +36 -13
- data/tests/class.fy +124 -120
- data/tests/contracts.fy +9 -8
- data/tests/future.fy +29 -10
- data/tests/method.fy +5 -0
- data/tests/range.fy +8 -0
- data/tests/set.fy +16 -6
- data/tests/struct.fy +4 -4
- metadata +60 -55
- data/lib/queue.fy +0 -7
- data/tests/future_proxy.fy +0 -8
@@ -0,0 +1,135 @@
|
|
1
|
+
/* A Bison parser, made by GNU Bison 2.7. */
|
2
|
+
|
3
|
+
/* Bison interface for Yacc-like parsers in C
|
4
|
+
|
5
|
+
Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
|
6
|
+
|
7
|
+
This program is free software: you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU General Public License as published by
|
9
|
+
the Free Software Foundation, either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
This program is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU General Public License
|
18
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
19
|
+
|
20
|
+
/* As a special exception, you may create a larger work that contains
|
21
|
+
part or all of the Bison parser skeleton and distribute that work
|
22
|
+
under terms of your choice, so long as that work isn't itself a
|
23
|
+
parser generator using the skeleton or a modified version thereof
|
24
|
+
as a parser skeleton. Alternatively, if you modify or redistribute
|
25
|
+
the parser skeleton itself, you may (at your option) remove this
|
26
|
+
special exception, which will cause the skeleton and the resulting
|
27
|
+
Bison output files to be licensed under the GNU General Public
|
28
|
+
License without this special exception.
|
29
|
+
|
30
|
+
This special exception was added by the Free Software Foundation in
|
31
|
+
version 2.2 of Bison. */
|
32
|
+
|
33
|
+
#ifndef YY_YY_USERS_BAKKDOOR_PROJECTS_FANCY_FANCY_LIB_PARSER_EXT_PARSER_H_INCLUDED
|
34
|
+
# define YY_YY_USERS_BAKKDOOR_PROJECTS_FANCY_FANCY_LIB_PARSER_EXT_PARSER_H_INCLUDED
|
35
|
+
/* Enabling traces. */
|
36
|
+
#ifndef YYDEBUG
|
37
|
+
# define YYDEBUG 0
|
38
|
+
#endif
|
39
|
+
#if YYDEBUG
|
40
|
+
extern int yydebug;
|
41
|
+
#endif
|
42
|
+
|
43
|
+
/* Tokens. */
|
44
|
+
#ifndef YYTOKENTYPE
|
45
|
+
# define YYTOKENTYPE
|
46
|
+
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
47
|
+
know about them. */
|
48
|
+
enum yytokentype {
|
49
|
+
LPAREN = 258,
|
50
|
+
RPAREN = 259,
|
51
|
+
FUTURE_SEND = 260,
|
52
|
+
ASYNC_SEND = 261,
|
53
|
+
AT_LCURLY = 262,
|
54
|
+
LCURLY = 263,
|
55
|
+
RCURLY = 264,
|
56
|
+
LBRACKET = 265,
|
57
|
+
RBRACKET = 266,
|
58
|
+
LEFTHASH = 267,
|
59
|
+
RIGHTHASH = 268,
|
60
|
+
STAB = 269,
|
61
|
+
ARROW = 270,
|
62
|
+
THIN_ARROW = 271,
|
63
|
+
COMMA = 272,
|
64
|
+
SEMI = 273,
|
65
|
+
NL = 274,
|
66
|
+
COLON = 275,
|
67
|
+
RETURN_LOCAL = 276,
|
68
|
+
RETURN = 277,
|
69
|
+
TRY = 278,
|
70
|
+
CATCH = 279,
|
71
|
+
FINALLY = 280,
|
72
|
+
RETRY = 281,
|
73
|
+
SUPER = 282,
|
74
|
+
CLASS = 283,
|
75
|
+
DEF = 284,
|
76
|
+
DOT = 285,
|
77
|
+
DOLLAR = 286,
|
78
|
+
EQUALS = 287,
|
79
|
+
MATCH = 288,
|
80
|
+
CASE = 289,
|
81
|
+
IDENTIFIER = 290,
|
82
|
+
SELECTOR = 291,
|
83
|
+
RUBY_SEND_OPEN = 292,
|
84
|
+
RUBY_OPER_OPEN = 293,
|
85
|
+
CONSTANT = 294,
|
86
|
+
INTEGER_LITERAL = 295,
|
87
|
+
HEX_LITERAL = 296,
|
88
|
+
OCT_LITERAL = 297,
|
89
|
+
BIN_LITERAL = 298,
|
90
|
+
DOUBLE_LITERAL = 299,
|
91
|
+
STRING_LITERAL = 300,
|
92
|
+
MULTI_STRING_LITERAL = 301,
|
93
|
+
SYMBOL_LITERAL = 302,
|
94
|
+
REGEX_LITERAL = 303,
|
95
|
+
OPERATOR = 304,
|
96
|
+
BACKTICK_LITERAL = 305
|
97
|
+
};
|
98
|
+
#endif
|
99
|
+
|
100
|
+
|
101
|
+
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
102
|
+
typedef union YYSTYPE
|
103
|
+
{
|
104
|
+
/* Line 2065 of yacc.c */
|
105
|
+
#line 18 "/Users/bakkdoor/projects/fancy/fancy/lib/parser/ext/parser.y"
|
106
|
+
|
107
|
+
VALUE object;
|
108
|
+
ID symbol;
|
109
|
+
|
110
|
+
|
111
|
+
/* Line 2065 of yacc.c */
|
112
|
+
#line 113 "/Users/bakkdoor/projects/fancy/fancy/lib/parser/ext/parser.h"
|
113
|
+
} YYSTYPE;
|
114
|
+
# define YYSTYPE_IS_TRIVIAL 1
|
115
|
+
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
116
|
+
# define YYSTYPE_IS_DECLARED 1
|
117
|
+
#endif
|
118
|
+
|
119
|
+
extern YYSTYPE yylval;
|
120
|
+
|
121
|
+
#ifdef YYPARSE_PARAM
|
122
|
+
#if defined __STDC__ || defined __cplusplus
|
123
|
+
int yyparse (void *YYPARSE_PARAM);
|
124
|
+
#else
|
125
|
+
int yyparse ();
|
126
|
+
#endif
|
127
|
+
#else /* ! YYPARSE_PARAM */
|
128
|
+
#if defined __STDC__ || defined __cplusplus
|
129
|
+
int yyparse (VALUE self);
|
130
|
+
#else
|
131
|
+
int yyparse ();
|
132
|
+
#endif
|
133
|
+
#endif /* ! YYPARSE_PARAM */
|
134
|
+
|
135
|
+
#endif /* !YY_YY_USERS_BAKKDOOR_PROJECTS_FANCY_FANCY_LIB_PARSER_EXT_PARSER_H_INCLUDED */
|
data/lib/parser/ext/parser.y
CHANGED
@@ -86,6 +86,8 @@ extern char *yytext;
|
|
86
86
|
%type <object> operator
|
87
87
|
%type <object> selector
|
88
88
|
|
89
|
+
%type <object> def
|
90
|
+
|
89
91
|
|
90
92
|
%type <object> identifier
|
91
93
|
%type <object> any_identifier
|
@@ -116,14 +118,10 @@ extern char *yytext;
|
|
116
118
|
%type <object> return_local_statement
|
117
119
|
%type <object> return_statement
|
118
120
|
|
119
|
-
%type <object> def
|
120
|
-
|
121
121
|
%type <object> const_identifier
|
122
122
|
%type <object> class_def
|
123
123
|
%type <object> class_no_super
|
124
124
|
%type <object> class_super
|
125
|
-
%type <object> class_method_w_args
|
126
|
-
%type <object> class_method_no_args
|
127
125
|
|
128
126
|
%type <object> method_def
|
129
127
|
%type <object> method_args
|
@@ -132,8 +130,8 @@ extern char *yytext;
|
|
132
130
|
%type <object> method_arg_default
|
133
131
|
%type <object> method_w_args
|
134
132
|
%type <object> method_no_args
|
135
|
-
%type <object>
|
136
|
-
%type <object>
|
133
|
+
%type <object> method_spec
|
134
|
+
%type <object> operator_spec
|
137
135
|
|
138
136
|
%type <object> message_send
|
139
137
|
%type <object> unary_send
|
@@ -321,9 +319,6 @@ const_identifier: constant {
|
|
321
319
|
}
|
322
320
|
;
|
323
321
|
|
324
|
-
def: DEF { $$ = rb_intern("public"); }
|
325
|
-
;
|
326
|
-
|
327
322
|
class_no_super: CLASS const_identifier expression_block {
|
328
323
|
$$ = rb_funcall(self, rb_intern("ast:class:parent:body:"), 4, INT2NUM(yylineno), $2, Qnil, $3);
|
329
324
|
}
|
@@ -340,103 +335,86 @@ class_super: CLASS const_identifier COLON const_identifier expression_block {
|
|
340
335
|
}
|
341
336
|
;
|
342
337
|
|
343
|
-
|
344
|
-
|
345
|
-
| class_method_w_args
|
346
|
-
| class_method_no_args
|
347
|
-
| operator_def
|
348
|
-
| class_operator_def
|
349
|
-
;
|
350
|
-
|
351
|
-
method_arg: selector identifier {
|
352
|
-
$$ = rb_funcall(self, rb_intern("ast:param:var:"), 3, INT2NUM(yylineno), $1, $2);
|
338
|
+
def: DEF {
|
339
|
+
$$ = rb_intern("def:");
|
353
340
|
}
|
354
341
|
;
|
355
342
|
|
356
|
-
|
357
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
358
|
-
}
|
359
|
-
| method_args method_arg {
|
360
|
-
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $2, $1);
|
361
|
-
}
|
362
|
-
| method_args method_args_default {
|
363
|
-
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $2, $1);
|
364
|
-
}
|
365
|
-
| method_args_default {
|
366
|
-
$$ = rb_funcall(self, rb_intern("ast:concat:"), 2, INT2NUM(yylineno), $1);
|
343
|
+
method_def: def method_spec {
|
344
|
+
$$ = rb_funcall(self, rb_intern("ast:define:method:on:"), 4, INT2NUM(yylineno), $1, $2, Qnil);
|
367
345
|
}
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
346
|
+
| def any_identifier method_spec {
|
347
|
+
$$ = rb_funcall(self, rb_intern("ast:define:method:on:"), 4, INT2NUM(yylineno), $1, $3, $2);
|
348
|
+
}
|
349
|
+
| any_identifier def method_spec {
|
350
|
+
$$ = rb_funcall(self, rb_intern("ast:define:method:on:"), 4, INT2NUM(yylineno), $2, $3, $1);
|
372
351
|
}
|
373
352
|
;
|
374
353
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
| method_args_default space method_arg_default {
|
379
|
-
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $3, $1);
|
380
|
-
}
|
354
|
+
method_spec: operator_spec
|
355
|
+
| method_w_args
|
356
|
+
| method_no_args
|
381
357
|
;
|
382
358
|
|
383
|
-
method_w_args:
|
384
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
359
|
+
method_w_args: method_args expression_block {
|
360
|
+
$$ = rb_funcall(self, rb_intern("ast:method_spec:expand:"), 3, INT2NUM(yylineno), $1, $2);
|
385
361
|
}
|
386
|
-
|
|
387
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
362
|
+
| method_args {
|
363
|
+
$$ = rb_funcall(self, rb_intern("ast:method_spec:expand:"), 3, INT2NUM(yylineno), $1, Qnil);
|
388
364
|
}
|
389
365
|
;
|
390
366
|
|
391
367
|
|
392
|
-
method_no_args:
|
393
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
368
|
+
method_no_args: identifier expression_block {
|
369
|
+
$$ = rb_funcall(self, rb_intern("ast:method_spec:body:"), 3, INT2NUM(yylineno), $1, $2);
|
394
370
|
}
|
395
|
-
|
|
396
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
371
|
+
| identifier {
|
372
|
+
$$ = rb_funcall(self, rb_intern("ast:method_spec:body:"), 3, INT2NUM(yylineno), $1, Qnil);
|
397
373
|
}
|
398
374
|
;
|
399
375
|
|
400
|
-
|
401
|
-
|
402
|
-
|
376
|
+
operator_spec: operator identifier expression_block {
|
377
|
+
$$ = rb_funcall(self, rb_intern("ast:oper:arg:body:"), 4, INT2NUM(yylineno), $1, $2, $3);
|
378
|
+
}
|
379
|
+
| LBRACKET identifier RBRACKET expression_block {
|
380
|
+
$$ = rb_funcall(self, rb_intern("ast:oper:arg:body:"), 4,
|
381
|
+
INT2NUM(yylineno), fy_terminal_node_from(self, "ast:identifier:", "[]"), $2, $4);
|
403
382
|
}
|
404
|
-
|
|
405
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
383
|
+
| LBRACKET identifier RBRACKET COLON identifier expression_block {
|
384
|
+
$$ = rb_funcall(self, rb_intern("ast:oper:arg:arg:body:"), 5,
|
385
|
+
INT2NUM(yylineno), fy_terminal_node_from(self, "ast:identifier:", "[]:"), $2, $5, $6);
|
406
386
|
}
|
407
387
|
;
|
408
388
|
|
409
|
-
|
410
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
411
|
-
}
|
412
|
-
| def any_identifier identifier {
|
413
|
-
$$ = rb_funcall(self, rb_intern("ast:method:body:access:owner:"), 5, INT2NUM(yylineno), $3, Qnil, $1, $2);
|
389
|
+
method_arg: selector identifier {
|
390
|
+
$$ = rb_funcall(self, rb_intern("ast:param:var:"), 3, INT2NUM(yylineno), $1, $2);
|
414
391
|
}
|
415
392
|
;
|
416
393
|
|
417
|
-
|
418
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
394
|
+
method_args: method_arg {
|
395
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:"), 2, INT2NUM(yylineno), $1);
|
419
396
|
}
|
420
|
-
|
|
421
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
422
|
-
INT2NUM(yylineno), fy_terminal_node_from(self, "ast:identifier:", "[]"), $3, $5, $1);
|
397
|
+
| method_args method_arg {
|
398
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $2, $1);
|
423
399
|
}
|
424
|
-
|
|
425
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
426
|
-
|
400
|
+
| method_args method_args_default {
|
401
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $2, $1);
|
402
|
+
}
|
403
|
+
| method_args_default {
|
404
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:"), 2, INT2NUM(yylineno), $1);
|
427
405
|
}
|
428
406
|
;
|
429
407
|
|
430
|
-
|
431
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
408
|
+
method_arg_default: selector identifier LPAREN space exp space RPAREN {
|
409
|
+
$$ = rb_funcall(self, rb_intern("ast:param:var:default:"), 4, INT2NUM(yylineno), $1, $2, $5);
|
432
410
|
}
|
433
|
-
|
434
|
-
|
435
|
-
|
411
|
+
;
|
412
|
+
|
413
|
+
method_args_default: method_arg_default {
|
414
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:"), 2, INT2NUM(yylineno), $1);
|
436
415
|
}
|
437
|
-
|
|
438
|
-
$$ = rb_funcall(self, rb_intern("ast:
|
439
|
-
INT2NUM(yylineno), fy_terminal_node_from(self, "ast:identifier:", "[]:"), $4, $7, $8, $1, $2);
|
416
|
+
| method_args_default space method_arg_default {
|
417
|
+
$$ = rb_funcall(self, rb_intern("ast:concat:into:"), 3, INT2NUM(yylineno), $3, $1);
|
440
418
|
}
|
441
419
|
;
|
442
420
|
|
data/lib/parser/methods.fy
CHANGED
@@ -250,14 +250,22 @@ class Fancy {
|
|
250
250
|
}
|
251
251
|
}
|
252
252
|
|
253
|
-
def ast: line oper: op arg: arg body: body
|
253
|
+
def ast: line oper: op arg: arg body: body {
|
254
254
|
margs = [ast: line param: op var: arg]
|
255
|
-
ast: line
|
255
|
+
ast: line method_spec: margs body: body
|
256
256
|
}
|
257
257
|
|
258
|
-
def ast: line oper: op arg: arg1 arg: arg2 body: body
|
258
|
+
def ast: line oper: op arg: arg1 arg: arg2 body: body {
|
259
259
|
margs = [SelectorVarDefault new(op, arg1, nil), SelectorVarDefault new(ast: line identifier: "", arg2, nil)]
|
260
|
-
ast: line
|
260
|
+
ast: line method_spec: margs body: body
|
261
|
+
}
|
262
|
+
|
263
|
+
def ast: line define: define method: spec on: receiver {
|
264
|
+
ary = []
|
265
|
+
Array(spec) each: |spec| {
|
266
|
+
ary << $ ast: (spec line) method: (spec margs) body: (spec body) access: 'public owner: receiver
|
267
|
+
}
|
268
|
+
AST ExpressionList new: line list: ary
|
261
269
|
}
|
262
270
|
|
263
271
|
def ast: line method: margs body: body access: access ('public) owner: owner (nil) {
|
@@ -283,13 +291,17 @@ class Fancy {
|
|
283
291
|
}
|
284
292
|
}
|
285
293
|
|
286
|
-
def ast: line
|
294
|
+
def ast: line method_spec: margs expand: body {
|
287
295
|
defs = []
|
288
296
|
method: margs delegators: |sel fwd| {
|
289
|
-
defs << $ ast: line
|
297
|
+
defs << $ ast: line method_spec: sel body: fwd
|
290
298
|
}
|
291
|
-
defs << $ ast: line
|
292
|
-
|
299
|
+
defs << $ ast: line method_spec: margs body: body
|
300
|
+
defs
|
301
|
+
}
|
302
|
+
|
303
|
+
def ast: line method_spec: margs body: body {
|
304
|
+
AST MethodSpec new: line margs: margs body: body
|
293
305
|
}
|
294
306
|
|
295
307
|
def ast: line block: body {
|
data/lib/parser/parse_error.fy
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
class Fancy {
|
2
2
|
class Parser {
|
3
3
|
class ParseError : StdError {
|
4
|
-
read_slots: ['line, 'filename]
|
4
|
+
read_slots: ['line, 'filename, 'message]
|
5
5
|
def initialize: @line message: @message filename: @filename {
|
6
6
|
initialize: $ "Parse error near '" ++ @message ++ "' at line " ++ @line ++ " in " ++ @filename
|
7
7
|
}
|
8
8
|
}
|
9
9
|
}
|
10
|
-
}
|
10
|
+
}
|
data/lib/range.fy
CHANGED
data/lib/rbx.fy
CHANGED
data/lib/rbx/block.fy
CHANGED
data/lib/rbx/class.fy
CHANGED
data/lib/rbx/compiled_method.fy
CHANGED
data/lib/{eval.fy → rbx/eval.fy}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
require: "compiler"
|
1
|
+
require: "../compiler"
|
2
2
|
|
3
3
|
def Fancy eval: code binding: binding (nil) file: file ("(fancy-eval)") line: line (1) {
|
4
4
|
"""
|
@@ -10,8 +10,8 @@ def Fancy eval: code binding: binding (nil) file: file ("(fancy-eval)") line: li
|
|
10
10
|
|
11
11
|
binding if_nil: {
|
12
12
|
binding = Binding setup(Rubinius VariableScope of_sender(),
|
13
|
-
|
14
|
-
|
13
|
+
Rubinius CompiledMethod of_sender(),
|
14
|
+
Rubinius StaticScope of_sender())
|
15
15
|
}
|
16
16
|
|
17
17
|
# The compiled method
|