myco 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/myco/bootstrap.my.rb +50 -14
  3. data/lib/myco/bootstrap/add_method.rb +5 -5
  4. data/lib/myco/bootstrap/meme.rb +2 -1
  5. data/lib/myco/code_tools/AST.my.rb +211 -43
  6. data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +92 -48
  7. data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +39 -27
  8. data/lib/myco/code_tools/AST/Block.my.rb +176 -112
  9. data/lib/myco/code_tools/AST/BlockArgument.my.rb +29 -17
  10. data/lib/myco/code_tools/AST/BlockLiteral.my.rb +37 -17
  11. data/lib/myco/code_tools/AST/BlockParameter.my.rb +25 -9
  12. data/lib/myco/code_tools/AST/BranchOperator.my.rb +95 -75
  13. data/lib/myco/code_tools/AST/ConstantAccess.my.rb +52 -32
  14. data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +52 -36
  15. data/lib/myco/code_tools/AST/ConstantDefine.my.rb +50 -26
  16. data/lib/myco/code_tools/AST/DeclareCategory.my.rb +38 -18
  17. data/lib/myco/code_tools/AST/DeclareExtension.my.rb +29 -13
  18. data/lib/myco/code_tools/AST/DeclareFile.my.rb +51 -31
  19. data/lib/myco/code_tools/AST/DeclareMeme.my.rb +96 -68
  20. data/lib/myco/code_tools/AST/DeclareObject.my.rb +66 -42
  21. data/lib/myco/code_tools/AST/DeclareString.my.rb +39 -19
  22. data/lib/myco/code_tools/AST/DeclaredScope.my.rb +92 -64
  23. data/lib/myco/code_tools/AST/Invoke.my +8 -4
  24. data/lib/myco/code_tools/AST/Invoke.my.rb +74 -31
  25. data/lib/myco/code_tools/AST/InvokeMethod.my.rb +34 -14
  26. data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +36 -24
  27. data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +28 -8
  28. data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +23 -7
  29. data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +23 -7
  30. data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +24 -12
  31. data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +30 -10
  32. data/lib/myco/code_tools/AST/Node.my.rb +234 -102
  33. data/lib/myco/code_tools/AST/NumericLiteral.my.rb +18 -6
  34. data/lib/myco/code_tools/AST/OptionalParameter.my.rb +33 -13
  35. data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +275 -211
  36. data/lib/myco/code_tools/AST/PipeOperator.my.rb +42 -18
  37. data/lib/myco/code_tools/AST/Quest.my.rb +65 -37
  38. data/lib/myco/code_tools/AST/RequiredParameter.my.rb +20 -4
  39. data/lib/myco/code_tools/AST/RestParameter.my.rb +20 -4
  40. data/lib/myco/code_tools/AST/Script.my.rb +51 -23
  41. data/lib/myco/code_tools/AST/Sequence.my.rb +22 -10
  42. data/lib/myco/code_tools/AST/SplatValue.my.rb +28 -16
  43. data/lib/myco/code_tools/AST/StringCompose.my.rb +23 -11
  44. data/lib/myco/code_tools/AST/StringLiteral.my.rb +19 -7
  45. data/lib/myco/code_tools/AST/SymbolCompose.my.rb +27 -15
  46. data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +18 -6
  47. data/lib/myco/code_tools/AST/ToRuby.my.rb +581 -341
  48. data/lib/myco/code_tools/AST/misc.my.rb +87 -35
  49. data/lib/myco/code_tools/Parser.my.rb +39 -12
  50. data/lib/myco/code_tools/parser/MycoBuilder.my.rb +106 -90
  51. data/lib/myco/code_tools/parser/MycoCharacterClasses.my.rb +98 -50
  52. data/lib/myco/code_tools/parser/MycoGrammar.my +1 -6
  53. data/lib/myco/code_tools/parser/MycoGrammar.my.rb +2124 -1710
  54. data/lib/myco/code_tools/parser/MycoTokens.my +0 -5
  55. data/lib/myco/code_tools/parser/MycoTokens.my.rb +387 -156
  56. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces.my.rb +55 -11
  57. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +321 -205
  58. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Capture.my.rb +223 -127
  59. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common.my.rb +188 -72
  60. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my +48 -0
  61. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Common/Parser.my.rb +365 -189
  62. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Composite.my.rb +313 -233
  63. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +99 -55
  64. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +493 -325
  65. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream.my.rb +138 -114
  66. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Stream/Parser.my.rb +56 -44
  67. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String.my.rb +173 -93
  68. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/String/Parser.my.rb +90 -70
  69. data/lib/myco/command.my.rb +85 -25
  70. data/lib/myco/command/inoculate.my.rb +219 -127
  71. data/lib/myco/core.my.rb +20 -4
  72. data/lib/myco/core/BasicDecorators.my.rb +211 -119
  73. data/lib/myco/core/BasicObject.my.rb +108 -44
  74. data/lib/myco/core/Category.my.rb +37 -13
  75. data/lib/myco/core/Decorator.my.rb +35 -27
  76. data/lib/myco/core/FileToplevel.my.rb +55 -27
  77. data/lib/myco/core/Loop.my.rb +16 -8
  78. data/lib/myco/core/Object.my.rb +34 -14
  79. data/lib/myco/core/Ruby.my.rb +13 -5
  80. data/lib/myco/core/Switch.my.rb +79 -47
  81. data/lib/myco/tools/BasicCommand.my.rb +79 -47
  82. data/lib/myco/tools/mycompile.my.rb +153 -69
  83. data/lib/myco/version.rb +1 -1
  84. metadata +34 -52
  85. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my +0 -144
  86. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Parser.my.rb +0 -221
  87. data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my +0 -35
  88. data/lib/myco/code_tools/parser/pegleromyces/spec/BasicSpec.my.rb +0 -35
  89. data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my +0 -10
  90. data/lib/myco/code_tools/parser/pegleromyces/spec/Grammar.test.my.rb +0 -9
  91. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my +0 -162
  92. data/lib/myco/code_tools/parser/pegleromyces/spec/Patterns.test.my.rb +0 -353
  93. data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my +0 -10
  94. data/lib/myco/code_tools/parser/pegleromyces/spec/Processor.test.my.rb +0 -9
  95. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my +0 -49
  96. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Parser.test.my.rb +0 -119
  97. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my +0 -131
  98. data/lib/myco/code_tools/parser/pegleromyces/spec/Stream/Patterns.test.my.rb +0 -595
  99. data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my +0 -120
  100. data/lib/myco/code_tools/parser/pegleromyces/spec/String/Parser.test.my.rb +0 -350
  101. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my +0 -14
  102. data/lib/myco/code_tools/parser/pegleromyces/spec/run.my.rb +0 -12
@@ -8,40 +8,72 @@
8
8
  .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}
9
9
  .tap { |__c__| __c__.__name__ = :UnaryBase }
10
10
  ::Myco.cscope.for_method_definition::NamedCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
11
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Constructions)::NamedCapture.new({
12
- :inner => self.inner.construct,
13
- :captargs => [self.name]
14
- }))})}}
11
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
12
+ :construct,
13
+ [],
14
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Constructions)::NamedCapture.new({
15
+ :inner => self.inner.construct,
16
+ :captargs => [self.name]
17
+ }))}
18
+ ))}}
15
19
  .tap { |__c__| __c__.__name__ = :NamedCapture }
16
20
  ::Myco.cscope.for_method_definition::NamedTextCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
17
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Constructions)::NamedTextCapture.new({
18
- :inner => self.inner.construct,
19
- :captargs => [self.name]
20
- }))})}}
21
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
22
+ :construct,
23
+ [],
24
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Constructions)::NamedTextCapture.new({
25
+ :inner => self.inner.construct,
26
+ :captargs => [self.name]
27
+ }))}
28
+ ))}}
21
29
  .tap { |__c__| __c__.__name__ = :NamedTextCapture }
22
30
  ::Myco.cscope.for_method_definition::NamedTokenCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
23
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Constructions)::NamedTokenCapture.new({
24
- :inner => self.inner.construct,
25
- :captargs => [self.name]
26
- }))})}}
31
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
32
+ :construct,
33
+ [],
34
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Constructions)::NamedTokenCapture.new({
35
+ :inner => self.inner.construct,
36
+ :captargs => [self.name]
37
+ }))}
38
+ ))}}
27
39
  .tap { |__c__| __c__.__name__ = :NamedTokenCapture }
28
40
  ::Myco.cscope.for_method_definition::Reduction = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
29
41
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
30
- declare_meme(:block, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
31
- declare_meme(:args, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
32
- declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Constructions)::Reduction.new({
33
- :inner => self.inner.construct,
34
- :captargs => [
35
- self.code,
36
- *self.args
37
- ]
38
- }))}
42
+ declare_meme(
43
+ :block,
44
+ [:var],
45
+ ::Object::Proc.new { |*| nil}
46
+ )
47
+ declare_meme(
48
+ :args,
49
+ [:var],
50
+ ::Object::Proc.new { |*| ([])}
51
+ )
52
+ declare_meme(
53
+ :construct,
54
+ [],
55
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Constructions)::Reduction.new({
56
+ :inner => self.inner.construct,
57
+ :captargs => [
58
+ self.code,
59
+ *self.args
60
+ ]
61
+ }))}
62
+ )
39
63
  )}}
40
64
  .tap { |__c__| __c__.__name__ = :Reduction }
41
65
  ::Myco.cscope.for_method_definition::RuleCall = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
42
66
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
43
- declare_meme(:name, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
44
- declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Constructions)::RuleCall.new({:name => self.name}))}
67
+ declare_meme(
68
+ :name,
69
+ [:var],
70
+ ::Object::Proc.new { |*| nil}
71
+ )
72
+ declare_meme(
73
+ :construct,
74
+ [],
75
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Constructions)::RuleCall.new({:name => self.name}))}
76
+ )
45
77
  )}}
46
78
  .tap { |__c__| __c__.__name__ = :RuleCall }
47
79
  )}}
@@ -52,19 +84,39 @@
52
84
  .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}
53
85
  .tap { |__c__| __c__.__name__ = :UnaryBase }
54
86
  ::Myco.cscope.for_method_definition::NamedCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
55
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:captargs, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
87
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
88
+ :captargs,
89
+ [:var],
90
+ ::Object::Proc.new { |*| nil}
91
+ ))}}
56
92
  .tap { |__c__| __c__.__name__ = :NamedCapture }
57
93
  ::Myco.cscope.for_method_definition::NamedTextCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
58
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:captargs, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
94
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
95
+ :captargs,
96
+ [:var],
97
+ ::Object::Proc.new { |*| nil}
98
+ ))}}
59
99
  .tap { |__c__| __c__.__name__ = :NamedTextCapture }
60
100
  ::Myco.cscope.for_method_definition::NamedTokenCapture = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
61
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:captargs, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
101
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
102
+ :captargs,
103
+ [:var],
104
+ ::Object::Proc.new { |*| nil}
105
+ ))}}
62
106
  .tap { |__c__| __c__.__name__ = :NamedTokenCapture }
63
107
  ::Myco.cscope.for_method_definition::Reduction = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
64
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:captargs, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
108
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
109
+ :captargs,
110
+ [:var],
111
+ ::Object::Proc.new { |*| nil}
112
+ ))}}
65
113
  .tap { |__c__| __c__.__name__ = :Reduction }
66
114
  ::Myco.cscope.for_method_definition::RuleCall = ::Myco::Component.new([::Myco.find_constant(:UnaryBase)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
67
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:name, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
115
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
116
+ :name,
117
+ [:var],
118
+ ::Object::Proc.new { |*| nil}
119
+ ))}}
68
120
  .tap { |__c__| __c__.__name__ = :RuleCall }
69
121
  )}}
70
122
  .tap { |__c__| __c__.__name__ = :Constructions }
@@ -74,116 +126,160 @@
74
126
  ::Myco.find_constant(:BasicDecorators)
75
127
  ], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
76
128
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
77
- declare_meme(:captures, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
78
- declare_meme(:builder, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
79
- declare_meme(:method_missing, [], nil, ::Myco.cscope.dup) { |name, *args, &block| (self.captures.fetch(name) { || (self.builder.__send__(
80
- name,
81
- *args,
82
- &block
83
- ))})}
84
- declare_meme(:!, [], nil, ::Myco.cscope.dup) { |*| (nil)}
129
+ declare_meme(
130
+ :captures,
131
+ [:var],
132
+ ::Object::Proc.new { |*| nil}
133
+ )
134
+ declare_meme(
135
+ :builder,
136
+ [:var],
137
+ ::Object::Proc.new { |*| nil}
138
+ )
139
+ declare_meme(
140
+ :method_missing,
141
+ [],
142
+ ::Object::Proc.new { |name, *args, &block| (self.captures.fetch(name) { |*| (self.builder.__send__(
143
+ name,
144
+ *args,
145
+ &block
146
+ ))})}
147
+ )
148
+ declare_meme(
149
+ :!,
150
+ [],
151
+ ::Object::Proc.new { |*| (nil)}
152
+ )
85
153
  )}}
86
154
  .tap { |__c__| __c__.__name__ = :Environment }
87
- declare_meme(:code, [], nil, ::Myco.cscope.dup) { |*| (self.block.block.compiled_code)}
155
+ declare_meme(
156
+ :code,
157
+ [],
158
+ ::Object::Proc.new { |*| (self.block.block.compiled_code)}
159
+ )
88
160
  )})}
89
161
  ::Myco.find_constant(:Constructions).component_eval {(
90
- ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(:bytecode_can_capture?, [[:const, []]], nil, ::Myco.cscope.dup) { |*| (true)})}
91
- ::Myco.find_constant(:NamedCapture).component_eval {(declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", ::Myco.find_constant(:Rubinius)::Type.__send__(
92
- :object_respond_to?,
93
- self.inner,
94
- :inlaid
95
- )) {(
96
- self.inner.__send__(
97
- :inlaid=,
98
- ::Object::Proc.new { || (g.capture(
99
- :m_split,
162
+ ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(
163
+ :bytecode_can_capture?,
164
+ [:const],
165
+ ::Object::Proc.new { |*| (true)}
166
+ ))}
167
+ ::Myco.find_constant(:NamedCapture).component_eval {(declare_meme(
168
+ :bytecode,
169
+ [],
170
+ ::Object::Proc.new { |g| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", ::Myco.find_constant(:Rubinius)::Type.__send__(
171
+ :object_respond_to?,
172
+ self.inner,
173
+ :inlaid
174
+ )) {(
175
+ self.inner.__send__(
176
+ :inlaid=,
177
+ ::Object::Proc.new { |*| (g.capture(
178
+ :m_split,
179
+ self.captargs
180
+ ))}
181
+ )
182
+ g.capture(:m_start)
183
+ self.inner.bytecode(g)
184
+ g.capture(
185
+ :m_end,
186
+ self.captargs
187
+ )
188
+ )}) {(
189
+ g.capture(:c_start)
190
+ self.inner.bytecode(g)
191
+ g.capture(
192
+ :c_end,
193
+ self.captargs
194
+ )
195
+ )})}
196
+ ))}
197
+ ::Myco.find_constant(:NamedTextCapture).component_eval {(declare_meme(
198
+ :bytecode,
199
+ [],
200
+ ::Object::Proc.new { |g| (
201
+ g.capture(:s_start)
202
+ self.inner.bytecode(g)
203
+ g.capture(
204
+ :s_end,
100
205
  self.captargs
101
- ))}
102
- )
103
- g.capture(:m_start)
104
- self.inner.bytecode(g)
105
- g.capture(
106
- :m_end,
107
- self.captargs
108
- )
109
- )}) {(
110
- g.capture(:c_start)
111
- self.inner.bytecode(g)
112
- g.capture(
113
- :c_end,
114
- self.captargs
115
- )
116
- )})})}
117
- ::Myco.find_constant(:NamedTextCapture).component_eval {(declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
118
- g.capture(:s_start)
119
- self.inner.bytecode(g)
120
- g.capture(
121
- :s_end,
122
- self.captargs
123
- )
124
- )})}
125
- ::Myco.find_constant(:NamedTokenCapture).component_eval {(declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
126
- g.capture(:t_start)
127
- self.inner.bytecode(g)
128
- g.capture(
129
- :t_end,
130
- self.captargs
131
- )
132
- )})}
133
- ::Myco.find_constant(:Reduction).component_eval {(declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
134
- g.capture(:r_start)
135
- self.inner.bytecode(g)
136
- g.capture(
137
- :r_end,
138
- self.captargs
139
- )
140
- )})}
141
- ::Myco.find_constant(:RuleCall).component_eval {(declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
142
- memoize = true
143
- result_check = g.new_label
144
- memo_result_check = g.new_label
145
- local_success = g.new_label
146
- local_fail = g.new_label
147
- g.push_temp_captures
148
- self.__send__(
149
- :if,
150
- memoize
151
- ) { || (
152
- g.memo_or_eq_new_hash(self.name)
153
- g.goto_if_memo_for_idx(
154
- self.name,
155
- memo_result_check
156
206
  )
157
207
  )}
158
- g.push_self
159
- g.push_subject
160
- g.push_idx
161
- g.send(
162
- self.name,
163
- 2
164
- )
165
- result_check.__send__(:set!)
166
- g.copy_result_to_memo(self.name)
167
- g.dup_top
168
- g.goto_if_true(local_success)
169
- g.goto(local_fail)
170
- self.__send__(
171
- :if,
172
- memoize
173
- ) { || (
174
- memo_result_check.__send__(:set!)
208
+ ))}
209
+ ::Myco.find_constant(:NamedTokenCapture).component_eval {(declare_meme(
210
+ :bytecode,
211
+ [],
212
+ ::Object::Proc.new { |g| (
213
+ g.capture(:t_start)
214
+ self.inner.bytecode(g)
215
+ g.capture(
216
+ :t_end,
217
+ self.captargs
218
+ )
219
+ )}
220
+ ))}
221
+ ::Myco.find_constant(:Reduction).component_eval {(declare_meme(
222
+ :bytecode,
223
+ [],
224
+ ::Object::Proc.new { |g| (
225
+ g.capture(:r_start)
226
+ self.inner.bytecode(g)
227
+ g.capture(
228
+ :r_end,
229
+ self.captargs
230
+ )
231
+ )}
232
+ ))}
233
+ ::Myco.find_constant(:RuleCall).component_eval {(declare_meme(
234
+ :bytecode,
235
+ [],
236
+ ::Object::Proc.new { |g| (
237
+ memoize = true
238
+ result_check = g.new_label
239
+ memo_result_check = g.new_label
240
+ local_success = g.new_label
241
+ local_fail = g.new_label
242
+ g.push_temp_captures
243
+ self.__send__(
244
+ :if,
245
+ memoize
246
+ ) { |*| (
247
+ g.memo_or_eq_new_hash(self.name)
248
+ g.goto_if_memo_for_idx(
249
+ self.name,
250
+ memo_result_check
251
+ )
252
+ )}
253
+ g.push_self
254
+ g.push_subject
255
+ g.push_idx
256
+ g.send(
257
+ self.name,
258
+ 2
259
+ )
260
+ result_check.__send__(:set!)
261
+ g.copy_result_to_memo(self.name)
175
262
  g.dup_top
176
263
  g.goto_if_true(local_success)
177
264
  g.goto(local_fail)
265
+ self.__send__(
266
+ :if,
267
+ memoize
268
+ ) { |*| (
269
+ memo_result_check.__send__(:set!)
270
+ g.dup_top
271
+ g.goto_if_true(local_success)
272
+ g.goto(local_fail)
273
+ )}
274
+ local_fail.__send__(:set!)
275
+ g.pop
276
+ g.pop_to_reject_captures
277
+ g.goto(g.overall_fail)
278
+ local_success.__send__(:set!)
279
+ g.pop_to_set_idx
280
+ g.pop_to_accept_captures
178
281
  )}
179
- local_fail.__send__(:set!)
180
- g.pop
181
- g.pop_to_reject_captures
182
- g.goto(g.overall_fail)
183
- local_success.__send__(:set!)
184
- g.pop_to_set_idx
185
- g.pop_to_accept_captures
186
- )})}
282
+ ))}
187
283
  )}
188
284
  )}}
189
285
  .tap { |__c__| __c__.__name__ = :Capture })}}.instance
@@ -5,22 +5,46 @@
5
5
  ::Myco.cscope.for_method_definition::Patterns = ::Myco::Component.new([::Myco.find_constant(:EmptyObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
6
6
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
7
7
  ::Myco.cscope.for_method_definition::Base = ::Myco::Component.new([::Myco.find_constant(:BasicObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
8
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:name, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (self.parent_meme.name)})}}
8
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
9
+ :name,
10
+ [:var],
11
+ ::Object::Proc.new { |*| (self.parent_meme.name)}
12
+ ))}}
9
13
  .tap { |__c__| __c__.__name__ = :Base }
10
14
  ::Myco.cscope.for_method_definition::UnaryBase = ::Myco::Component.new([::Myco.find_constant(:Base)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
11
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:inner, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
15
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
16
+ :inner,
17
+ [:var],
18
+ ::Object::Proc.new { |*| nil}
19
+ ))}}
12
20
  .tap { |__c__| __c__.__name__ = :UnaryBase }
13
21
  ::Myco.cscope.for_method_definition::BinaryBase = ::Myco::Component.new([::Myco.find_constant(:Base)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
14
22
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
15
- declare_meme(:first, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
16
- declare_meme(:second, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
23
+ declare_meme(
24
+ :first,
25
+ [:var],
26
+ ::Object::Proc.new { |*| nil}
27
+ )
28
+ declare_meme(
29
+ :second,
30
+ [:var],
31
+ ::Object::Proc.new { |*| nil}
32
+ )
17
33
  )}}
18
34
  .tap { |__c__| __c__.__name__ = :BinaryBase }
19
- ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (self.construct_type.new({:inner => self.inner.construct}))})}
20
- ::Myco.find_constant(:BinaryBase).component_eval {(declare_meme(:construct, [], nil, ::Myco.cscope.dup) { |*| (self.construct_type.new({
21
- :first => self.first.construct,
22
- :second => self.second.construct
23
- }))})}
35
+ ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(
36
+ :construct,
37
+ [],
38
+ ::Object::Proc.new { |*| (self.construct_type.new({:inner => self.inner.construct}))}
39
+ ))}
40
+ ::Myco.find_constant(:BinaryBase).component_eval {(declare_meme(
41
+ :construct,
42
+ [],
43
+ ::Object::Proc.new { |*| (self.construct_type.new({
44
+ :first => self.first.construct,
45
+ :second => self.second.construct
46
+ }))}
47
+ ))}
24
48
  )}}
25
49
  .tap { |__c__| __c__.__name__ = :Patterns }
26
50
  ::Myco.cscope.for_method_definition::Constructions = ::Myco::Component.new([::Myco.find_constant(:EmptyObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
@@ -29,85 +53,177 @@
29
53
  .tap { |__c__| __c__.__last__ = __c__.component_eval {nil}}
30
54
  .tap { |__c__| __c__.__name__ = :Base }
31
55
  ::Myco.cscope.for_method_definition::UnaryBase = ::Myco::Component.new([::Myco.find_constant(:Base)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
32
- .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(:inner, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil})}}
56
+ .tap { |__c__| __c__.__last__ = __c__.component_eval {(declare_meme(
57
+ :inner,
58
+ [:var],
59
+ ::Object::Proc.new { |*| nil}
60
+ ))}}
33
61
  .tap { |__c__| __c__.__name__ = :UnaryBase }
34
62
  ::Myco.cscope.for_method_definition::BinaryBase = ::Myco::Component.new([::Myco.find_constant(:Base)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
35
63
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
36
- declare_meme(:first, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
37
- declare_meme(:second, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
64
+ declare_meme(
65
+ :first,
66
+ [:var],
67
+ ::Object::Proc.new { |*| nil}
68
+ )
69
+ declare_meme(
70
+ :second,
71
+ [:var],
72
+ ::Object::Proc.new { |*| nil}
73
+ )
38
74
  )}}
39
75
  .tap { |__c__| __c__.__name__ = :BinaryBase }
40
76
  )}}
41
77
  .tap { |__c__| __c__.__name__ = :Constructions }
42
78
  ::Myco.find_constant(:Constructions).component_eval {(
43
- ::Myco.find_constant(:Base).component_eval {(declare_meme(:bytecode_can_capture?, [[:const, []]], nil, ::Myco.cscope.dup) { |*| (false)})}
44
- ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(:bytecode_can_capture?, [], nil, ::Myco.cscope.dup) { |*| (self.inner.__send__(:bytecode_can_capture?))})}
45
- ::Myco.find_constant(:BinaryBase).component_eval {(declare_meme(:bytecode_can_capture?, [], nil, ::Myco.cscope.dup) { |*| (::Myco.branch_op(:"||", self.first.__send__(:bytecode_can_capture?)) {self.second.__send__(:bytecode_can_capture?)})})}
79
+ ::Myco.find_constant(:Base).component_eval {(declare_meme(
80
+ :bytecode_can_capture?,
81
+ [:const],
82
+ ::Object::Proc.new { |*| (false)}
83
+ ))}
84
+ ::Myco.find_constant(:UnaryBase).component_eval {(declare_meme(
85
+ :bytecode_can_capture?,
86
+ [],
87
+ ::Object::Proc.new { |*| (self.inner.__send__(:bytecode_can_capture?))}
88
+ ))}
89
+ ::Myco.find_constant(:BinaryBase).component_eval {(declare_meme(
90
+ :bytecode_can_capture?,
91
+ [],
92
+ ::Object::Proc.new { |*| (::Myco.branch_op(:"||", self.first.__send__(:bytecode_can_capture?)) {self.second.__send__(:bytecode_can_capture?)})}
93
+ ))}
46
94
  )}
47
95
  ::Myco.find_constant(:Patterns).component_eval {(
48
96
  ::Myco.cscope.for_method_definition::ShorthandMethods = ::Myco::Component.new([::Myco.find_constant(:EmptyObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
49
97
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
50
- declare_meme(:any, [], nil, ::Myco.cscope.dup) { || (::Myco.find_constant(:String)::Patterns::AnyCharacter.new)}
51
- declare_meme(:char, [], nil, ::Myco.cscope.dup) { |character| (::Myco.find_constant(:String)::Patterns::Character.new({:code => character.ord}))}
52
- declare_meme(:str, [], nil, ::Myco.cscope.dup) { |string| (::Myco.find_constant(:String)::Patterns::CharacterString.new({:codes => string.each_char.map(&:ord)}))}
53
- declare_meme(:set, [], nil, ::Myco.cscope.dup) { |string| (::Myco.find_constant(:String)::Patterns::CharacterSet.new({:codes => string.each_char.map(&:ord)}))}
54
- declare_meme(:range, [], nil, ::Myco.cscope.dup) { |start, stop| (::Myco.find_constant(:String)::Patterns::CharacterRange.new({
55
- :start => start.ord,
56
- :stop => stop.ord
57
- }))}
58
- declare_meme(:r, [], nil, ::Myco.cscope.dup) { |pattern, &block| (::Myco.find_constant(:Capture)::Patterns::Reduction.new({
59
- :inner => pattern,
60
- :block => block
61
- }))}
62
- declare_meme(:si, [], nil, ::Myco.cscope.dup) { |*checks| (::Myco.find_constant(:Stream)::Patterns::Item.new({:checks => checks}))}
63
- declare_meme(:esi, [], nil, ::Myco.cscope.dup) { || (::Myco.find_constant(:Stream)::Patterns::End.new)}
98
+ declare_meme(
99
+ :any,
100
+ [],
101
+ ::Object::Proc.new { || (::Myco.find_constant(:String)::Patterns::AnyCharacter.new)}
102
+ )
103
+ declare_meme(
104
+ :char,
105
+ [],
106
+ ::Object::Proc.new { |character| (::Myco.find_constant(:String)::Patterns::Character.new({:code => character.ord}))}
107
+ )
108
+ declare_meme(
109
+ :str,
110
+ [],
111
+ ::Object::Proc.new { |string| (::Myco.find_constant(:String)::Patterns::CharacterString.new({:codes => string.each_char.map(&:ord)}))}
112
+ )
113
+ declare_meme(
114
+ :set,
115
+ [],
116
+ ::Object::Proc.new { |string| (::Myco.find_constant(:String)::Patterns::CharacterSet.new({:codes => string.each_char.map(&:ord)}))}
117
+ )
118
+ declare_meme(
119
+ :range,
120
+ [],
121
+ ::Object::Proc.new { |start, stop| (::Myco.find_constant(:String)::Patterns::CharacterRange.new({
122
+ :start => start.ord,
123
+ :stop => stop.ord
124
+ }))}
125
+ )
126
+ declare_meme(
127
+ :r,
128
+ [],
129
+ ::Object::Proc.new { |pattern, &block| (::Myco.find_constant(:Capture)::Patterns::Reduction.new({
130
+ :inner => pattern,
131
+ :block => block
132
+ }))}
133
+ )
134
+ declare_meme(
135
+ :si,
136
+ [],
137
+ ::Object::Proc.new { |*checks| (::Myco.find_constant(:Stream)::Patterns::Item.new({:checks => checks}))}
138
+ )
139
+ declare_meme(
140
+ :esi,
141
+ [],
142
+ ::Object::Proc.new { || (::Myco.find_constant(:Stream)::Patterns::End.new)}
143
+ )
64
144
  )}}
65
145
  .tap { |__c__| __c__.__name__ = :ShorthandMethods }
66
146
  ::Myco.find_constant(:Base).component_eval {(
67
- declare_meme(:!, [], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:Composite)::Patterns::NegativePredicate.new({:inner => self}))}
68
- declare_meme(:/, [], nil, ::Myco.cscope.dup) { |other| (::Myco.find_constant(:Composite)::Patterns::OrderedChoice.new({
69
- :first => self,
70
- :second => other
71
- }))}
72
- declare_meme(:+, [], nil, ::Myco.cscope.dup) { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {::Myco.find_constant(:Composite)::Patterns::Concatenation.new({
73
- :first => self,
74
- :second => other
75
- })}) {::Myco.find_constant(:Composite)::Patterns::OneOrMore.new({:inner => self})})}
76
- declare_meme(:-, [], nil, ::Myco.cscope.dup) { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {self.raise("binary '-' operator not implemented")}) {::Myco.find_constant(:Composite)::Patterns::ZeroOrOne.new({:inner => self})})}
77
- declare_meme(:*, [], nil, ::Myco.cscope.dup) { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {self.raise("binary '*' operator not implemented")}) {::Myco.find_constant(:Composite)::Patterns::ZeroOrMore.new({:inner => self})})}
78
- declare_meme(:[], [], nil, ::Myco.cscope.dup) { |name| (::Myco.find_constant(:Capture)::Patterns::NamedCapture.new({
79
- :inner => self,
80
- :name => name
81
- }))}
82
- declare_meme(:text, [], nil, ::Myco.cscope.dup) { |name=:text| (::Myco.find_constant(:Capture)::Patterns::NamedTextCapture.new({
83
- :inner => self,
84
- :name => name
85
- }))}
86
- declare_meme(:token, [], nil, ::Myco.cscope.dup) { |name| (::Myco.find_constant(:Capture)::Patterns::NamedTokenCapture.new({
87
- :inner => self,
88
- :name => name
89
- }))}
90
- __category__(:private).component_eval {(declare_meme(:binary_right_assoc, [], nil, ::Myco.cscope.dup) { |orig, other, type| (
91
- cursor = orig
92
- self.loop { || (
93
- self.__send__(
94
- :unless,
95
- cursor.second.__send__(
96
- :is_a?,
97
- type
98
- )
99
- ) { || (self.__send__(:break))}
100
- cursor = cursor.second
147
+ declare_meme(
148
+ :!,
149
+ [],
150
+ ::Object::Proc.new { |*| (::Myco.find_constant(:Composite)::Patterns::NegativePredicate.new({:inner => self}))}
151
+ )
152
+ declare_meme(
153
+ :/,
154
+ [],
155
+ ::Object::Proc.new { |other| (::Myco.find_constant(:Composite)::Patterns::OrderedChoice.new({
156
+ :first => self,
157
+ :second => other
158
+ }))}
159
+ )
160
+ declare_meme(
161
+ :+,
162
+ [],
163
+ ::Object::Proc.new { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {::Myco.find_constant(:Composite)::Patterns::Concatenation.new({
164
+ :first => self,
165
+ :second => other
166
+ })}) {::Myco.find_constant(:Composite)::Patterns::OneOrMore.new({:inner => self})})}
167
+ )
168
+ declare_meme(
169
+ :-,
170
+ [],
171
+ ::Object::Proc.new { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {self.raise("binary '-' operator not implemented")}) {::Myco.find_constant(:Composite)::Patterns::ZeroOrOne.new({:inner => self})})}
172
+ )
173
+ declare_meme(
174
+ :*,
175
+ [],
176
+ ::Object::Proc.new { |other=false| (::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", other) {self.raise("binary '*' operator not implemented")}) {::Myco.find_constant(:Composite)::Patterns::ZeroOrMore.new({:inner => self})})}
177
+ )
178
+ declare_meme(
179
+ :[],
180
+ [],
181
+ ::Object::Proc.new { |name| (::Myco.find_constant(:Capture)::Patterns::NamedCapture.new({
182
+ :inner => self,
183
+ :name => name
184
+ }))}
185
+ )
186
+ declare_meme(
187
+ :text,
188
+ [],
189
+ ::Object::Proc.new { |name=:text| (::Myco.find_constant(:Capture)::Patterns::NamedTextCapture.new({
190
+ :inner => self,
191
+ :name => name
192
+ }))}
193
+ )
194
+ declare_meme(
195
+ :token,
196
+ [],
197
+ ::Object::Proc.new { |name| (::Myco.find_constant(:Capture)::Patterns::NamedTokenCapture.new({
198
+ :inner => self,
199
+ :name => name
200
+ }))}
201
+ )
202
+ __category__(:private).component_eval {(declare_meme(
203
+ :binary_right_assoc,
204
+ [],
205
+ ::Object::Proc.new { |orig, other, type| (
206
+ cursor = orig
207
+ self.loop { |*| (
208
+ self.__send__(
209
+ :unless,
210
+ cursor.second.__send__(
211
+ :is_a?,
212
+ type
213
+ )
214
+ ) { |*| (self.__send__(:break))}
215
+ cursor = cursor.second
216
+ )}
217
+ cursor.__send__(
218
+ :second=,
219
+ type.new({
220
+ :first => cursor.second,
221
+ :second => other
222
+ })
223
+ )
224
+ orig
101
225
  )}
102
- cursor.__send__(
103
- :second=,
104
- type.new({
105
- :first => cursor.second,
106
- :second => other
107
- })
108
- )
109
- orig
110
- )})}
226
+ ))}
111
227
  )}
112
228
  )}
113
229
  )}}