myco 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/myco/bootstrap.my.rb +50 -14
- data/lib/myco/bootstrap/add_method.rb +5 -5
- data/lib/myco/bootstrap/meme.rb +2 -1
- data/lib/myco/code_tools/AST.my.rb +211 -43
- data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +92 -48
- data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +39 -27
- data/lib/myco/code_tools/AST/Block.my.rb +176 -112
- data/lib/myco/code_tools/AST/BlockArgument.my.rb +29 -17
- data/lib/myco/code_tools/AST/BlockLiteral.my.rb +37 -17
- data/lib/myco/code_tools/AST/BlockParameter.my.rb +25 -9
- data/lib/myco/code_tools/AST/BranchOperator.my.rb +95 -75
- data/lib/myco/code_tools/AST/ConstantAccess.my.rb +52 -32
- data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +52 -36
- data/lib/myco/code_tools/AST/ConstantDefine.my.rb +50 -26
- data/lib/myco/code_tools/AST/DeclareCategory.my.rb +38 -18
- data/lib/myco/code_tools/AST/DeclareExtension.my.rb +29 -13
- data/lib/myco/code_tools/AST/DeclareFile.my.rb +51 -31
- data/lib/myco/code_tools/AST/DeclareMeme.my.rb +96 -68
- data/lib/myco/code_tools/AST/DeclareObject.my.rb +66 -42
- data/lib/myco/code_tools/AST/DeclareString.my.rb +39 -19
- data/lib/myco/code_tools/AST/DeclaredScope.my.rb +92 -64
- data/lib/myco/code_tools/AST/Invoke.my +8 -4
- data/lib/myco/code_tools/AST/Invoke.my.rb +74 -31
- data/lib/myco/code_tools/AST/InvokeMethod.my.rb +34 -14
- data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +36 -24
- data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +28 -8
- data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +23 -7
- data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +23 -7
- data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +24 -12
- data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +30 -10
- data/lib/myco/code_tools/AST/Node.my.rb +234 -102
- data/lib/myco/code_tools/AST/NumericLiteral.my.rb +18 -6
- data/lib/myco/code_tools/AST/OptionalParameter.my.rb +33 -13
- data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +275 -211
- data/lib/myco/code_tools/AST/PipeOperator.my.rb +42 -18
- data/lib/myco/code_tools/AST/Quest.my.rb +65 -37
- data/lib/myco/code_tools/AST/RequiredParameter.my.rb +20 -4
- data/lib/myco/code_tools/AST/RestParameter.my.rb +20 -4
- data/lib/myco/code_tools/AST/Script.my.rb +51 -23
- data/lib/myco/code_tools/AST/Sequence.my.rb +22 -10
- data/lib/myco/code_tools/AST/SplatValue.my.rb +28 -16
- data/lib/myco/code_tools/AST/StringCompose.my.rb +23 -11
- data/lib/myco/code_tools/AST/StringLiteral.my.rb +19 -7
- data/lib/myco/code_tools/AST/SymbolCompose.my.rb +27 -15
- data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +18 -6
- data/lib/myco/code_tools/AST/ToRuby.my.rb +581 -341
- data/lib/myco/code_tools/AST/misc.my.rb +87 -35
- data/lib/myco/code_tools/Parser.my.rb +39 -12
- data/lib/myco/code_tools/parser/MycoBuilder.my.rb +106 -90
- data/lib/myco/code_tools/parser/MycoCharacterClasses.my.rb +98 -50
- data/lib/myco/code_tools/parser/MycoGrammar.my +1 -6
- data/lib/myco/code_tools/parser/MycoGrammar.my.rb +2124 -1710
- data/lib/myco/code_tools/parser/MycoTokens.my +0 -5
- data/lib/myco/code_tools/parser/MycoTokens.my.rb +387 -156
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces.my.rb +55 -11
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +321 -205
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Capture.my.rb +223 -127
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common.my.rb +188 -72
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my +48 -0
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my.rb +365 -189
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Composite.my.rb +313 -233
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +99 -55
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +493 -325
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream.my.rb +138 -114
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream/Parser.my.rb +56 -44
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String.my.rb +173 -93
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String/Parser.my.rb +90 -70
- data/lib/myco/command.my.rb +85 -25
- data/lib/myco/command/inoculate.my.rb +219 -127
- data/lib/myco/core.my.rb +20 -4
- data/lib/myco/core/BasicDecorators.my.rb +211 -119
- data/lib/myco/core/BasicObject.my.rb +108 -44
- data/lib/myco/core/Category.my.rb +37 -13
- data/lib/myco/core/Decorator.my.rb +35 -27
- data/lib/myco/core/FileToplevel.my.rb +55 -27
- data/lib/myco/core/Loop.my.rb +16 -8
- data/lib/myco/core/Object.my.rb +34 -14
- data/lib/myco/core/Ruby.my.rb +13 -5
- data/lib/myco/core/Switch.my.rb +79 -47
- data/lib/myco/tools/BasicCommand.my.rb +79 -47
- data/lib/myco/tools/mycompile.my.rb +153 -69
- data/lib/myco/version.rb +1 -1
- metadata +34 -52
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my +0 -144
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my.rb +0 -221
- data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my +0 -35
- data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my.rb +0 -35
- data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my +0 -10
- data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my.rb +0 -9
- data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my +0 -162
- data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my.rb +0 -353
- data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my +0 -10
- data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my.rb +0 -9
- data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my +0 -49
- data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my.rb +0 -119
- data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my +0 -131
- data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my.rb +0 -595
- data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my +0 -120
- data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my.rb +0 -350
- data/lib/myco/code_tools/parser/pegleromyces/spec/run.my +0 -14
- data/lib/myco/code_tools/parser/pegleromyces/spec/run.my.rb +0 -12
@@ -5,65 +5,109 @@
|
|
5
5
|
::Myco.find_constant(:Common)::Patterns::ShorthandMethods
|
6
6
|
], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
7
7
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
8
|
-
declare_meme(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
seen_keys.push(key)
|
27
|
-
)}
|
28
|
-
)}
|
29
|
-
)}
|
30
|
-
__category__(:decorators).component_eval {(
|
31
|
-
declare_meme(:token, [[:const, []]], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Decorator)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
32
|
-
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
33
|
-
declare_meme(:apply, [], nil, ::Myco.cscope.dup) { |meme| (
|
34
|
-
orig_meme = meme.dup
|
35
|
-
meme.__send__(
|
36
|
-
:body=,
|
37
|
-
::Object::Proc.new { || (orig_meme.result.token(:"t_#{meme.name}"))}
|
8
|
+
declare_meme(
|
9
|
+
:rule_table,
|
10
|
+
[:var],
|
11
|
+
::Object::Proc.new { |*| (::Object::Hash.new)}
|
12
|
+
)
|
13
|
+
declare_meme(
|
14
|
+
:construct_all_rules,
|
15
|
+
[],
|
16
|
+
::Object::Proc.new { |*| (
|
17
|
+
self.rules.memes.each { |name, meme| (::Myco.branch_op(:"&&", meme.name.to_s.__send__(
|
18
|
+
:include?,
|
19
|
+
"root"
|
20
|
+
)) {meme.result_for(self.rules).inner.construct})}
|
21
|
+
seen_keys = []
|
22
|
+
self.loop { |*| (
|
23
|
+
new_keys = self.rule_table.keys.__send__(
|
24
|
+
:-,
|
25
|
+
seen_keys
|
38
26
|
)
|
39
|
-
|
40
|
-
|
41
|
-
)}}.instance)}
|
42
|
-
declare_meme(:rule, [[:const, []]], nil, ::Myco.cscope.dup) { |*| (::Myco::Component.new([::Myco.find_constant(:Decorator)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
43
|
-
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
44
|
-
declare_meme(:apply, [], nil, ::Myco.cscope.dup) { |meme| (
|
45
|
-
name = meme.name
|
46
|
-
meme.target.declare_meme(
|
47
|
-
name,
|
48
|
-
[:memoize]
|
49
|
-
) { || (
|
50
|
-
outer_self = self
|
51
|
-
rule = ::Myco::Component.new([::Myco.find_constant(:Capture)::Patterns::RuleCall], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
52
|
-
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
53
|
-
declare_meme(:name, [], nil, ::Myco.cscope.dup) { |*| (name)}
|
54
|
-
declare_meme(:inner, [], nil, ::Myco.cscope.dup) { |*| (meme.result_for(outer_self))}
|
55
|
-
)}}.instance
|
27
|
+
::Myco.branch_op(:"&&", new_keys.__send__(:empty?)) {self.__send__(:break)}
|
28
|
+
new_keys.each { |key| (
|
56
29
|
self.rule_table.__send__(
|
57
|
-
:[]
|
58
|
-
|
59
|
-
|
60
|
-
)
|
61
|
-
rule
|
30
|
+
:[],
|
31
|
+
key
|
32
|
+
).inner.construct
|
33
|
+
seen_keys.push(key)
|
62
34
|
)}
|
63
35
|
)}
|
64
|
-
|
65
|
-
|
36
|
+
)}
|
37
|
+
)
|
38
|
+
__category__(:decorators).component_eval {(
|
39
|
+
declare_meme(
|
40
|
+
:token,
|
41
|
+
[:const],
|
42
|
+
::Object::Proc.new { |*| (::Myco::Component.new([::Myco.find_constant(:Decorator)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
43
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
44
|
+
declare_meme(
|
45
|
+
:apply,
|
46
|
+
[],
|
47
|
+
::Object::Proc.new { |meme| (
|
48
|
+
orig_meme = meme.dup
|
49
|
+
meme.__send__(
|
50
|
+
:body=,
|
51
|
+
::Object::Proc.new { |*| (orig_meme.result.token(:"t_#{meme.name}"))}
|
52
|
+
)
|
53
|
+
)}
|
54
|
+
)
|
55
|
+
__category__(:transforms).component_eval {(declare_meme(
|
56
|
+
:cache,
|
57
|
+
[],
|
58
|
+
::Object::Proc.new { |*| (true)}
|
59
|
+
))}
|
60
|
+
)}}.instance)}
|
61
|
+
)
|
62
|
+
declare_meme(
|
63
|
+
:rule,
|
64
|
+
[:const],
|
65
|
+
::Object::Proc.new { |*| (::Myco::Component.new([::Myco.find_constant(:Decorator)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
66
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
67
|
+
declare_meme(
|
68
|
+
:apply,
|
69
|
+
[],
|
70
|
+
::Object::Proc.new { |meme| (
|
71
|
+
name = meme.name
|
72
|
+
meme.target.declare_meme(
|
73
|
+
name,
|
74
|
+
[:memoize]
|
75
|
+
) { |*| (
|
76
|
+
outer_self = self
|
77
|
+
rule = ::Myco::Component.new([::Myco.find_constant(:Capture)::Patterns::RuleCall], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
78
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
79
|
+
declare_meme(
|
80
|
+
:name,
|
81
|
+
[],
|
82
|
+
::Object::Proc.new { |*| (name)}
|
83
|
+
)
|
84
|
+
declare_meme(
|
85
|
+
:inner,
|
86
|
+
[],
|
87
|
+
::Object::Proc.new { |*| (meme.result_for(outer_self))}
|
88
|
+
)
|
89
|
+
)}}.instance
|
90
|
+
self.rule_table.__send__(
|
91
|
+
:[]=,
|
92
|
+
name,
|
93
|
+
rule
|
94
|
+
)
|
95
|
+
rule
|
96
|
+
)}
|
97
|
+
)}
|
98
|
+
)
|
99
|
+
__category__(:transforms).component_eval {(declare_meme(
|
100
|
+
:expose,
|
101
|
+
[],
|
102
|
+
::Object::Proc.new { |*| (false)}
|
103
|
+
))}
|
104
|
+
)}}.instance)}
|
105
|
+
)
|
66
106
|
)}
|
67
|
-
__category__(:rules).component_eval {(declare_meme(
|
107
|
+
__category__(:rules).component_eval {(declare_meme(
|
108
|
+
:root,
|
109
|
+
[:rule],
|
110
|
+
::Object::Proc.new { |*| (::Myco.find_constant(:String)::Patterns::AnyCharacter.new.__send__(:*))}
|
111
|
+
))}
|
68
112
|
)}}
|
69
113
|
.tap { |__c__| __c__.__name__ = :Grammar })}}.instance
|
@@ -2,358 +2,526 @@
|
|
2
2
|
::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
3
3
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.cscope.for_method_definition::Processor = ::Myco::Component.new([::Myco.find_constant(:BasicObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
declare_meme(
|
6
|
+
:string,
|
7
|
+
[:var],
|
8
|
+
::Object::Proc.new { |*| ("")}
|
9
|
+
)
|
10
|
+
declare_meme(
|
11
|
+
:capture_items,
|
12
|
+
[:var],
|
13
|
+
::Object::Proc.new { |*| ([])}
|
14
|
+
)
|
15
|
+
declare_meme(
|
16
|
+
:builder,
|
17
|
+
[:var],
|
18
|
+
::Object::Proc.new { |*| (nil)}
|
19
|
+
)
|
20
|
+
declare_meme(
|
21
|
+
:process,
|
22
|
+
[],
|
23
|
+
::Object::Proc.new { |*| (
|
24
|
+
self.setup
|
25
|
+
self.process_each
|
26
|
+
self.validate_state
|
27
|
+
self.final_captures
|
28
|
+
)}
|
29
|
+
)
|
14
30
|
::Myco.cscope.for_method_definition::Token = ::Myco::Component.new([::Myco.find_constant(:BasicObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
15
31
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
16
|
-
declare_meme(
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
declare_meme(
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
declare_meme(
|
33
|
+
:type,
|
34
|
+
[:var],
|
35
|
+
::Object::Proc.new { |*| nil}
|
36
|
+
)
|
37
|
+
declare_meme(
|
38
|
+
:text,
|
39
|
+
[:var],
|
40
|
+
::Object::Proc.new { |*| nil}
|
41
|
+
)
|
42
|
+
declare_meme(
|
43
|
+
:row,
|
44
|
+
[:var],
|
45
|
+
::Object::Proc.new { |*| nil}
|
46
|
+
)
|
47
|
+
declare_meme(
|
48
|
+
:col,
|
49
|
+
[:var],
|
50
|
+
::Object::Proc.new { |*| nil}
|
51
|
+
)
|
52
|
+
declare_meme(
|
53
|
+
:inspect,
|
54
|
+
[],
|
55
|
+
::Object::Proc.new { |*| ([
|
56
|
+
self.type,
|
57
|
+
self.text,
|
58
|
+
self.row,
|
59
|
+
self.col
|
60
|
+
].inspect)}
|
61
|
+
)
|
62
|
+
declare_meme(
|
63
|
+
:to_s,
|
64
|
+
[],
|
65
|
+
::Object::Proc.new { |*| ([
|
66
|
+
self.type,
|
67
|
+
self.text,
|
68
|
+
self.row,
|
69
|
+
self.col
|
70
|
+
].inspect)}
|
71
|
+
)
|
72
|
+
declare_meme(
|
73
|
+
:line,
|
74
|
+
[],
|
75
|
+
::Object::Proc.new { |*| (self.row)}
|
76
|
+
)
|
77
|
+
declare_meme(
|
78
|
+
:sym,
|
79
|
+
[],
|
80
|
+
::Object::Proc.new { |*| (self.text.to_sym)}
|
81
|
+
)
|
82
|
+
declare_meme(
|
83
|
+
:float,
|
84
|
+
[],
|
85
|
+
::Object::Proc.new { |*| (self.text.to_f)}
|
86
|
+
)
|
87
|
+
declare_meme(
|
88
|
+
:integer,
|
89
|
+
[],
|
90
|
+
::Object::Proc.new { |base=0| (self.text.to_inum(
|
91
|
+
base,
|
92
|
+
true
|
93
|
+
))}
|
94
|
+
)
|
39
95
|
)}}
|
40
96
|
.tap { |__c__| __c__.__name__ = :Token }
|
41
|
-
declare_meme(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
value = ::Myco.find_constant(:Token).new({
|
47
|
-
:type => type,
|
48
|
-
:text => source.slice(
|
97
|
+
declare_meme(
|
98
|
+
:tokenizer,
|
99
|
+
[:var],
|
100
|
+
::Object::Proc.new { |*| (::Object::Proc.new { |type, source, start, stop| (
|
101
|
+
pos = self.position_of(
|
49
102
|
start,
|
50
|
-
|
51
|
-
|
52
|
-
|
103
|
+
source
|
104
|
+
)
|
105
|
+
value = ::Myco.find_constant(:Token).new({
|
106
|
+
:type => type,
|
107
|
+
:text => source.slice(
|
108
|
+
start,
|
109
|
+
stop.__send__(
|
110
|
+
:-,
|
111
|
+
start
|
112
|
+
)
|
113
|
+
),
|
114
|
+
:row => pos.first,
|
115
|
+
:col => pos.last
|
116
|
+
})
|
117
|
+
)})}
|
118
|
+
)
|
119
|
+
declare_meme(
|
120
|
+
:reduction_env,
|
121
|
+
[:var],
|
122
|
+
::Object::Proc.new { |*| (::Myco.find_constant(:Capture)::Patterns::Reduction::Environment.new)}
|
123
|
+
)
|
124
|
+
declare_meme(
|
125
|
+
:reduction_env_cscope,
|
126
|
+
[:var],
|
127
|
+
::Object::Proc.new { |*| (::Rubinius::ConstantScope.new(::Myco.find_constant(:Capture)::Patterns::Reduction::Environment))}
|
128
|
+
)
|
129
|
+
declare_meme(
|
130
|
+
:cidx_stack,
|
131
|
+
[:var],
|
132
|
+
::Object::Proc.new { |*| ([])}
|
133
|
+
)
|
134
|
+
declare_meme(
|
135
|
+
:sidx_stack,
|
136
|
+
[:var],
|
137
|
+
::Object::Proc.new { |*| ([])}
|
138
|
+
)
|
139
|
+
declare_meme(
|
140
|
+
:tidx_stack,
|
141
|
+
[:var],
|
142
|
+
::Object::Proc.new { |*| ([])}
|
143
|
+
)
|
144
|
+
declare_meme(
|
145
|
+
:midx_stack,
|
146
|
+
[:var],
|
147
|
+
::Object::Proc.new { |*| ([])}
|
148
|
+
)
|
149
|
+
declare_meme(
|
150
|
+
:ridx_stack,
|
151
|
+
[:var],
|
152
|
+
::Object::Proc.new { |*| ([])}
|
153
|
+
)
|
154
|
+
declare_meme(
|
155
|
+
:capt_stack,
|
156
|
+
[:var],
|
157
|
+
::Object::Proc.new { |*| ([])}
|
158
|
+
)
|
159
|
+
declare_meme(
|
160
|
+
:line_map_for,
|
161
|
+
[:memoize],
|
162
|
+
::Object::Proc.new { |string| (
|
163
|
+
idx_hash = ::Object::Hash.new
|
164
|
+
idx_hash.__send__(
|
165
|
+
:[]=,
|
166
|
+
0,
|
167
|
+
0
|
168
|
+
)
|
169
|
+
count = 0
|
170
|
+
idx = -1
|
171
|
+
self.loop { |*| (
|
172
|
+
idx = string.index(
|
173
|
+
"\n",
|
174
|
+
idx.__send__(
|
175
|
+
:+,
|
176
|
+
1
|
177
|
+
)
|
53
178
|
)
|
54
|
-
|
55
|
-
|
56
|
-
:col => pos.last
|
57
|
-
})
|
58
|
-
)})}
|
59
|
-
declare_meme(:reduction_env, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Capture)::Patterns::Reduction::Environment.new)}
|
60
|
-
declare_meme(:reduction_env_cscope, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (::Rubinius::ConstantScope.new(::Myco.find_constant(:Capture)::Patterns::Reduction::Environment))}
|
61
|
-
declare_meme(:cidx_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
62
|
-
declare_meme(:sidx_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
63
|
-
declare_meme(:tidx_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
64
|
-
declare_meme(:midx_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
65
|
-
declare_meme(:ridx_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
66
|
-
declare_meme(:capt_stack, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
|
67
|
-
declare_meme(:line_map_for, [[:memoize, []]], nil, ::Myco.cscope.dup) { |string| (
|
68
|
-
idx_hash = ::Object::Hash.new
|
69
|
-
idx_hash.__send__(
|
70
|
-
:[]=,
|
71
|
-
0,
|
72
|
-
0
|
73
|
-
)
|
74
|
-
count = 0
|
75
|
-
idx = -1
|
76
|
-
self.loop { || (
|
77
|
-
idx = string.index(
|
78
|
-
"\n",
|
79
|
-
idx.__send__(
|
179
|
+
::Myco.branch_op(:"||", idx) {self.__send__(:break)}
|
180
|
+
count = count.__send__(
|
80
181
|
:+,
|
81
182
|
1
|
82
183
|
)
|
83
|
-
|
84
|
-
|
85
|
-
|
184
|
+
idx_hash.__send__(
|
185
|
+
:[]=,
|
186
|
+
idx,
|
187
|
+
count
|
188
|
+
)
|
189
|
+
)}
|
190
|
+
idx_hash
|
191
|
+
)}
|
192
|
+
)
|
193
|
+
declare_meme(
|
194
|
+
:position_of,
|
195
|
+
[],
|
196
|
+
::Object::Proc.new { |idx, string| (
|
197
|
+
nl_idx = ::Myco.branch_op(:"||", string.rindex(
|
198
|
+
"\n",
|
199
|
+
idx
|
200
|
+
)) {0}
|
201
|
+
row = self.line_map_for(string).fetch(nl_idx).__send__(
|
86
202
|
:+,
|
87
203
|
1
|
88
204
|
)
|
89
|
-
|
90
|
-
|
205
|
+
col = idx.__send__(
|
206
|
+
:-,
|
207
|
+
nl_idx
|
208
|
+
)
|
209
|
+
[
|
210
|
+
row,
|
211
|
+
col
|
212
|
+
]
|
213
|
+
)}
|
214
|
+
)
|
215
|
+
declare_meme(
|
216
|
+
:push_layer,
|
217
|
+
[],
|
218
|
+
::Object::Proc.new { |*| (self.capt_stack.push(::Object::Hash.new))}
|
219
|
+
)
|
220
|
+
declare_meme(
|
221
|
+
:pop_layer,
|
222
|
+
[],
|
223
|
+
::Object::Proc.new { |*| (self.capt_stack.pop)}
|
224
|
+
)
|
225
|
+
declare_meme(
|
226
|
+
:setup,
|
227
|
+
[],
|
228
|
+
::Object::Proc.new { |*| (self.push_layer)}
|
229
|
+
)
|
230
|
+
declare_meme(
|
231
|
+
:final_captures,
|
232
|
+
[],
|
233
|
+
::Object::Proc.new { |*| (self.pop_layer.select { |k, v| (k.__send__(
|
234
|
+
:is_a?,
|
235
|
+
::Myco.find_constant(:Symbol)
|
236
|
+
))}.map { |k, v| ([
|
237
|
+
k,
|
238
|
+
v.last
|
239
|
+
])}.to_h)}
|
240
|
+
)
|
241
|
+
declare_meme(
|
242
|
+
:process_each,
|
243
|
+
[],
|
244
|
+
::Object::Proc.new { |*| (self.capture_items.each { |idx, metadata| (
|
245
|
+
type = metadata.__send__(
|
246
|
+
:[],
|
247
|
+
0
|
248
|
+
)
|
249
|
+
captargs = ::Myco.branch_op(:"||", metadata.__send__(
|
250
|
+
:[],
|
251
|
+
1
|
252
|
+
)) {[]}
|
253
|
+
self.send(
|
254
|
+
type,
|
91
255
|
idx,
|
92
|
-
|
256
|
+
*captargs
|
93
257
|
)
|
258
|
+
)})}
|
259
|
+
)
|
260
|
+
declare_meme(
|
261
|
+
:validate_state,
|
262
|
+
[],
|
263
|
+
::Object::Proc.new { |*| (
|
264
|
+
::Myco.branch_op(:"||", self.cidx_stack.__send__(:empty?)) {self.raise("unbalanced cidx_stack: #{self.cidx_stack}")}
|
265
|
+
::Myco.branch_op(:"||", self.sidx_stack.__send__(:empty?)) {self.raise("unbalanced sidx_stack: #{self.sidx_stack}")}
|
266
|
+
::Myco.branch_op(:"||", self.tidx_stack.__send__(:empty?)) {self.raise("unbalanced tidx_stack: #{self.tidx_stack}")}
|
267
|
+
::Myco.branch_op(:"||", self.midx_stack.__send__(:empty?)) {self.raise("unbalanced midx_stack: #{self.midx_stack}")}
|
268
|
+
::Myco.branch_op(:"||", self.ridx_stack.__send__(:empty?)) {self.raise("unbalanced ridx_stack: #{self.ridx_stack}")}
|
94
269
|
)}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
[
|
111
|
-
row,
|
112
|
-
col
|
113
|
-
]
|
114
|
-
)}
|
115
|
-
declare_meme(:push_layer, [], nil, ::Myco.cscope.dup) { |*| (self.capt_stack.push(::Object::Hash.new))}
|
116
|
-
declare_meme(:pop_layer, [], nil, ::Myco.cscope.dup) { |*| (self.capt_stack.pop)}
|
117
|
-
declare_meme(:setup, [], nil, ::Myco.cscope.dup) { |*| (self.push_layer)}
|
118
|
-
declare_meme(:final_captures, [], nil, ::Myco.cscope.dup) { |*| (self.pop_layer.select { |k, v| (k.__send__(
|
119
|
-
:is_a?,
|
120
|
-
::Myco.find_constant(:Symbol)
|
121
|
-
))}.map { |k, v| ([
|
122
|
-
k,
|
123
|
-
v.last
|
124
|
-
])}.to_h)}
|
125
|
-
declare_meme(:process_each, [], nil, ::Myco.cscope.dup) { |*| (self.capture_items.each { |idx, metadata| (
|
126
|
-
type = metadata.__send__(
|
127
|
-
:[],
|
128
|
-
0
|
129
|
-
)
|
130
|
-
captargs = ::Myco.branch_op(:"||", metadata.__send__(
|
131
|
-
:[],
|
132
|
-
1
|
133
|
-
)) {[]}
|
134
|
-
self.send(
|
135
|
-
type,
|
136
|
-
idx,
|
137
|
-
*captargs
|
138
|
-
)
|
139
|
-
)})}
|
140
|
-
declare_meme(:validate_state, [], nil, ::Myco.cscope.dup) { |*| (
|
141
|
-
::Myco.branch_op(:"||", self.cidx_stack.__send__(:empty?)) {self.raise("unbalanced cidx_stack: #{self.cidx_stack}")}
|
142
|
-
::Myco.branch_op(:"||", self.sidx_stack.__send__(:empty?)) {self.raise("unbalanced sidx_stack: #{self.sidx_stack}")}
|
143
|
-
::Myco.branch_op(:"||", self.tidx_stack.__send__(:empty?)) {self.raise("unbalanced tidx_stack: #{self.tidx_stack}")}
|
144
|
-
::Myco.branch_op(:"||", self.midx_stack.__send__(:empty?)) {self.raise("unbalanced midx_stack: #{self.midx_stack}")}
|
145
|
-
::Myco.branch_op(:"||", self.ridx_stack.__send__(:empty?)) {self.raise("unbalanced ridx_stack: #{self.ridx_stack}")}
|
146
|
-
)}
|
147
|
-
declare_meme(:c_start, [], nil, ::Myco.cscope.dup) { |idx| (self.cidx_stack.push(idx))}
|
148
|
-
declare_meme(:c_end, [], nil, ::Myco.cscope.dup) { |idx, name| (
|
149
|
-
captures = self.capt_stack.last
|
150
|
-
start_idx = self.cidx_stack.pop
|
151
|
-
use_reduction = false
|
152
|
-
value = captures.__send__(
|
153
|
-
:[],
|
154
|
-
idx
|
155
|
-
)
|
156
|
-
::Myco.branch_op(:"&?", value) {(
|
157
|
-
loc = value.first
|
158
|
-
value = value.last
|
159
|
-
::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", ::Myco.branch_op(:"&&", loc.first.__send__(
|
160
|
-
:>=,
|
161
|
-
start_idx
|
162
|
-
)) {loc.last.__send__(
|
163
|
-
:<=,
|
270
|
+
)
|
271
|
+
declare_meme(
|
272
|
+
:c_start,
|
273
|
+
[],
|
274
|
+
::Object::Proc.new { |idx| (self.cidx_stack.push(idx))}
|
275
|
+
)
|
276
|
+
declare_meme(
|
277
|
+
:c_end,
|
278
|
+
[],
|
279
|
+
::Object::Proc.new { |idx, name| (
|
280
|
+
captures = self.capt_stack.last
|
281
|
+
start_idx = self.cidx_stack.pop
|
282
|
+
use_reduction = false
|
283
|
+
value = captures.__send__(
|
284
|
+
:[],
|
164
285
|
idx
|
165
|
-
)}) {use_reduction = true}) {value = nil}
|
166
|
-
)}
|
167
|
-
::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", use_reduction.__send__(:!)) {start_idx.__send__(
|
168
|
-
:==,
|
169
|
-
idx
|
170
|
-
).__send__(:!)}) {(
|
171
|
-
size = idx.__send__(
|
172
|
-
:-,
|
173
|
-
start_idx
|
174
286
|
)
|
175
|
-
|
287
|
+
::Myco.branch_op(:"&?", value) {(
|
288
|
+
loc = value.first
|
289
|
+
value = value.last
|
290
|
+
::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", ::Myco.branch_op(:"&&", loc.first.__send__(
|
291
|
+
:>=,
|
292
|
+
start_idx
|
293
|
+
)) {loc.last.__send__(
|
294
|
+
:<=,
|
295
|
+
idx
|
296
|
+
)}) {use_reduction = true}) {value = nil}
|
297
|
+
)}
|
298
|
+
::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", use_reduction.__send__(:!)) {start_idx.__send__(
|
176
299
|
:==,
|
177
|
-
|
178
|
-
)) {
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
size
|
300
|
+
idx
|
301
|
+
).__send__(:!)}) {(
|
302
|
+
size = idx.__send__(
|
303
|
+
:-,
|
304
|
+
start_idx
|
305
|
+
)
|
306
|
+
value = ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", size.__send__(
|
307
|
+
:==,
|
308
|
+
1
|
309
|
+
)) {self.string.__send__(
|
310
|
+
:[],
|
311
|
+
start_idx
|
312
|
+
)}) {self.string.slice(
|
313
|
+
start_idx,
|
314
|
+
size
|
315
|
+
)}
|
184
316
|
)}
|
317
|
+
store_value = [
|
318
|
+
[
|
319
|
+
start_idx,
|
320
|
+
idx
|
321
|
+
],
|
322
|
+
value
|
323
|
+
]
|
324
|
+
captures.store(
|
325
|
+
idx,
|
326
|
+
store_value
|
327
|
+
)
|
328
|
+
captures.store(
|
329
|
+
name,
|
330
|
+
store_value
|
331
|
+
)
|
185
332
|
)}
|
186
|
-
|
187
|
-
|
333
|
+
)
|
334
|
+
declare_meme(
|
335
|
+
:s_start,
|
336
|
+
[],
|
337
|
+
::Object::Proc.new { |idx| (self.sidx_stack.push(idx))}
|
338
|
+
)
|
339
|
+
declare_meme(
|
340
|
+
:s_end,
|
341
|
+
[],
|
342
|
+
::Object::Proc.new { |idx, name| (
|
343
|
+
captures = self.capt_stack.last
|
344
|
+
start_idx = self.sidx_stack.pop
|
345
|
+
value = self.string.slice(
|
188
346
|
start_idx,
|
189
|
-
idx
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
captures.store(
|
194
|
-
idx,
|
195
|
-
store_value
|
196
|
-
)
|
197
|
-
captures.store(
|
198
|
-
name,
|
199
|
-
store_value
|
200
|
-
)
|
201
|
-
)}
|
202
|
-
declare_meme(:s_start, [], nil, ::Myco.cscope.dup) { |idx| (self.sidx_stack.push(idx))}
|
203
|
-
declare_meme(:s_end, [], nil, ::Myco.cscope.dup) { |idx, name| (
|
204
|
-
captures = self.capt_stack.last
|
205
|
-
start_idx = self.sidx_stack.pop
|
206
|
-
value = self.string.slice(
|
207
|
-
start_idx,
|
208
|
-
idx.__send__(
|
209
|
-
:-,
|
210
|
-
start_idx
|
347
|
+
idx.__send__(
|
348
|
+
:-,
|
349
|
+
start_idx
|
350
|
+
)
|
211
351
|
)
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
)
|
228
|
-
)
|
229
|
-
declare_meme(
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
352
|
+
store_value = [
|
353
|
+
[
|
354
|
+
start_idx,
|
355
|
+
idx
|
356
|
+
],
|
357
|
+
value
|
358
|
+
]
|
359
|
+
captures.store(
|
360
|
+
idx,
|
361
|
+
store_value
|
362
|
+
)
|
363
|
+
captures.store(
|
364
|
+
name,
|
365
|
+
store_value
|
366
|
+
)
|
367
|
+
)}
|
368
|
+
)
|
369
|
+
declare_meme(
|
370
|
+
:t_start,
|
371
|
+
[],
|
372
|
+
::Object::Proc.new { |idx| (self.tidx_stack.push(idx))}
|
373
|
+
)
|
374
|
+
declare_meme(
|
375
|
+
:t_end,
|
376
|
+
[],
|
377
|
+
::Object::Proc.new { |idx, name| (
|
378
|
+
captures = self.capt_stack.last
|
379
|
+
start_idx = self.tidx_stack.pop
|
380
|
+
value = self.tokenizer.call(
|
381
|
+
name,
|
382
|
+
self.string,
|
241
383
|
start_idx,
|
242
384
|
idx
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
)}
|
259
|
-
declare_meme(:m_split, [], nil, ::Myco.cscope.dup) { |idx, name| (
|
260
|
-
self.c_end(
|
261
|
-
idx,
|
262
|
-
name
|
263
|
-
)
|
264
|
-
self.c_start(idx)
|
265
|
-
)}
|
266
|
-
declare_meme(:m_end, [], nil, ::Myco.cscope.dup) { |idx, name| (
|
267
|
-
captures = self.capt_stack.last
|
268
|
-
start_idx = self.midx_stack.pop
|
269
|
-
self.cidx_stack.pop
|
270
|
-
value = []
|
271
|
-
captures.each { |k, v| (::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", k.__send__(
|
272
|
-
:is_a?,
|
273
|
-
::Myco.find_constant(:Fixnum)
|
274
|
-
)) {k.__send__(
|
275
|
-
:<=,
|
276
|
-
idx
|
277
|
-
)}) {k.__send__(
|
278
|
-
:>,
|
279
|
-
start_idx
|
280
|
-
)}) {(
|
281
|
-
loc = v.first
|
282
|
-
::Myco.branch_op(:"&&", loc.first.__send__(
|
283
|
-
:>=,
|
284
|
-
start_idx
|
285
|
-
)) {value.push(v.last)}
|
286
|
-
)})}
|
287
|
-
::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", value.__send__(:empty?)) {start_idx.__send__(
|
288
|
-
:==,
|
289
|
-
idx
|
290
|
-
).__send__(:!)}) {value = self.string.slice(
|
291
|
-
start_idx,
|
292
|
-
idx.__send__(
|
293
|
-
:-,
|
294
|
-
start_idx
|
385
|
+
)
|
386
|
+
store_value = [
|
387
|
+
[
|
388
|
+
start_idx,
|
389
|
+
idx
|
390
|
+
],
|
391
|
+
value
|
392
|
+
]
|
393
|
+
captures.store(
|
394
|
+
idx,
|
395
|
+
store_value
|
396
|
+
)
|
397
|
+
captures.store(
|
398
|
+
name,
|
399
|
+
store_value
|
295
400
|
)
|
296
401
|
)}
|
297
|
-
|
298
|
-
|
299
|
-
|
402
|
+
)
|
403
|
+
declare_meme(
|
404
|
+
:m_start,
|
405
|
+
[],
|
406
|
+
::Object::Proc.new { |idx| (
|
407
|
+
self.midx_stack.push(idx)
|
408
|
+
self.c_start(idx)
|
409
|
+
)}
|
410
|
+
)
|
411
|
+
declare_meme(
|
412
|
+
:m_split,
|
413
|
+
[],
|
414
|
+
::Object::Proc.new { |idx, name| (
|
415
|
+
self.c_end(
|
416
|
+
idx,
|
417
|
+
name
|
418
|
+
)
|
419
|
+
self.c_start(idx)
|
420
|
+
)}
|
421
|
+
)
|
422
|
+
declare_meme(
|
423
|
+
:m_end,
|
424
|
+
[],
|
425
|
+
::Object::Proc.new { |idx, name| (
|
426
|
+
captures = self.capt_stack.last
|
427
|
+
start_idx = self.midx_stack.pop
|
428
|
+
self.cidx_stack.pop
|
429
|
+
value = []
|
430
|
+
captures.each { |k, v| (::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", k.__send__(
|
431
|
+
:is_a?,
|
432
|
+
::Myco.find_constant(:Fixnum)
|
433
|
+
)) {k.__send__(
|
434
|
+
:<=,
|
300
435
|
idx
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
declare_meme(:r_start, [], nil, ::Myco.cscope.dup) { |idx| ((
|
314
|
-
self.push_layer
|
315
|
-
self.ridx_stack.push(idx)
|
316
|
-
))}
|
317
|
-
declare_meme(:r_end, [], nil, ::Myco.cscope.dup) { |idx, code, *args| (
|
318
|
-
captures = self.pop_layer
|
319
|
-
start_idx = self.ridx_stack.pop
|
320
|
-
captures_map = captures.map { |k, v| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", k.__send__(
|
321
|
-
:is_a?,
|
322
|
-
::Myco.find_constant(:Symbol)
|
323
|
-
)) {[
|
324
|
-
k,
|
325
|
-
v.last
|
326
|
-
]}) {nil})}.compact.to_h
|
327
|
-
code.__send__(
|
328
|
-
:scope=,
|
329
|
-
self.reduction_env_cscope
|
330
|
-
)
|
331
|
-
self.reduction_env.__send__(
|
332
|
-
:builder=,
|
333
|
-
self.builder
|
334
|
-
)
|
335
|
-
self.reduction_env.__send__(
|
336
|
-
:captures=,
|
337
|
-
captures_map
|
338
|
-
)
|
339
|
-
value = code.invoke(
|
340
|
-
code.name,
|
341
|
-
::Myco.find_constant(:Capture)::Patterns::Reduction::Environment,
|
342
|
-
self.reduction_env,
|
343
|
-
[],
|
344
|
-
nil
|
345
|
-
)
|
346
|
-
store_value = [
|
347
|
-
[
|
348
|
-
start_idx,
|
436
|
+
)}) {k.__send__(
|
437
|
+
:>,
|
438
|
+
start_idx
|
439
|
+
)}) {(
|
440
|
+
loc = v.first
|
441
|
+
::Myco.branch_op(:"&&", loc.first.__send__(
|
442
|
+
:>=,
|
443
|
+
start_idx
|
444
|
+
)) {value.push(v.last)}
|
445
|
+
)})}
|
446
|
+
::Myco.branch_op(:"&&", ::Myco.branch_op(:"&&", value.__send__(:empty?)) {start_idx.__send__(
|
447
|
+
:==,
|
349
448
|
idx
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
449
|
+
).__send__(:!)}) {value = self.string.slice(
|
450
|
+
start_idx,
|
451
|
+
idx.__send__(
|
452
|
+
:-,
|
453
|
+
start_idx
|
454
|
+
)
|
455
|
+
)}
|
456
|
+
store_value = [
|
457
|
+
[
|
458
|
+
start_idx,
|
459
|
+
idx
|
460
|
+
],
|
461
|
+
value
|
462
|
+
]
|
463
|
+
captures.store(
|
464
|
+
idx,
|
465
|
+
store_value
|
466
|
+
)
|
467
|
+
captures.store(
|
468
|
+
name,
|
469
|
+
store_value
|
470
|
+
)
|
471
|
+
)}
|
472
|
+
)
|
473
|
+
declare_meme(
|
474
|
+
:r_start,
|
475
|
+
[],
|
476
|
+
::Object::Proc.new { |idx| ((
|
477
|
+
self.push_layer
|
478
|
+
self.ridx_stack.push(idx)
|
479
|
+
))}
|
480
|
+
)
|
481
|
+
declare_meme(
|
482
|
+
:r_end,
|
483
|
+
[],
|
484
|
+
::Object::Proc.new { |idx, code, *args| (
|
485
|
+
captures = self.pop_layer
|
486
|
+
start_idx = self.ridx_stack.pop
|
487
|
+
captures_map = captures.map { |k, v| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", k.__send__(
|
488
|
+
:is_a?,
|
489
|
+
::Myco.find_constant(:Symbol)
|
490
|
+
)) {[
|
491
|
+
k,
|
492
|
+
v.last
|
493
|
+
]}) {nil})}.compact.to_h
|
494
|
+
code.__send__(
|
495
|
+
:scope=,
|
496
|
+
self.reduction_env_cscope
|
497
|
+
)
|
498
|
+
self.reduction_env.__send__(
|
499
|
+
:builder=,
|
500
|
+
self.builder
|
501
|
+
)
|
502
|
+
self.reduction_env.__send__(
|
503
|
+
:captures=,
|
504
|
+
captures_map
|
505
|
+
)
|
506
|
+
value = code.invoke(
|
507
|
+
code.name,
|
508
|
+
::Myco.find_constant(:Capture)::Patterns::Reduction::Environment,
|
509
|
+
self.reduction_env,
|
510
|
+
[],
|
511
|
+
nil
|
512
|
+
)
|
513
|
+
store_value = [
|
514
|
+
[
|
515
|
+
start_idx,
|
516
|
+
idx
|
517
|
+
],
|
518
|
+
value
|
519
|
+
]
|
520
|
+
self.capt_stack.last.store(
|
521
|
+
idx,
|
522
|
+
store_value
|
523
|
+
)
|
524
|
+
)}
|
525
|
+
)
|
358
526
|
)}}
|
359
527
|
.tap { |__c__| __c__.__name__ = :Processor })}}.instance
|