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
@@ -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(:rule_table, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (::Object::Hash.new)}
9
- declare_meme(:construct_all_rules, [], nil, ::Myco.cscope.dup) { |*| (
10
- self.rules.memes.each { |name, meme| (::Myco.branch_op(:"&&", meme.name.to_s.__send__(
11
- :include?,
12
- "root"
13
- )) {meme.result_for(self.rules).inner.construct})}
14
- seen_keys = []
15
- self.loop { || (
16
- new_keys = self.rule_table.keys.__send__(
17
- :-,
18
- seen_keys
19
- )
20
- ::Myco.branch_op(:"&&", new_keys.__send__(:empty?)) {self.__send__(:break)}
21
- new_keys.each { |key| (
22
- self.rule_table.__send__(
23
- :[],
24
- key
25
- ).inner.construct
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
- __category__(:transforms).component_eval {(declare_meme(:cache, [], nil, ::Myco.cscope.dup) { |*| (true)})}
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
- name,
59
- rule
60
- )
61
- rule
30
+ :[],
31
+ key
32
+ ).inner.construct
33
+ seen_keys.push(key)
62
34
  )}
63
35
  )}
64
- __category__(:transforms).component_eval {(declare_meme(:expose, [], nil, ::Myco.cscope.dup) { |*| (false)})}
65
- )}}.instance)}
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(:root, [[:rule, []]], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:String)::Patterns::AnyCharacter.new.__send__(:*))})}
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(:string, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ("")}
6
- declare_meme(:capture_items, [[:var, []]], nil, ::Myco.cscope.dup) { |*| ([])}
7
- declare_meme(:builder, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (nil)}
8
- declare_meme(:process, [], nil, ::Myco.cscope.dup) { |*| (
9
- self.setup
10
- self.process_each
11
- self.validate_state
12
- self.final_captures
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(:type, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
17
- declare_meme(:text, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
18
- declare_meme(:row, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
19
- declare_meme(:col, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
20
- declare_meme(:inspect, [], nil, ::Myco.cscope.dup) { |*| ([
21
- self.type,
22
- self.text,
23
- self.row,
24
- self.col
25
- ].inspect)}
26
- declare_meme(:to_s, [], nil, ::Myco.cscope.dup) { |*| ([
27
- self.type,
28
- self.text,
29
- self.row,
30
- self.col
31
- ].inspect)}
32
- declare_meme(:line, [], nil, ::Myco.cscope.dup) { |*| (self.row)}
33
- declare_meme(:sym, [], nil, ::Myco.cscope.dup) { |*| (self.text.to_sym)}
34
- declare_meme(:float, [], nil, ::Myco.cscope.dup) { |*| (self.text.to_f)}
35
- declare_meme(:integer, [], nil, ::Myco.cscope.dup) { |base=0| (self.text.to_inum(
36
- base,
37
- true
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(:tokenizer, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (::Object::Proc.new { |type, source, start, stop| (
42
- pos = self.position_of(
43
- start,
44
- source
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
- stop.__send__(
51
- :-,
52
- start
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
- :row => pos.first,
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
- ::Myco.branch_op(:"||", idx) {self.__send__(:break)}
85
- count = count.__send__(
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
- idx_hash.__send__(
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
- count
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
- idx_hash
96
- )}
97
- declare_meme(:position_of, [], nil, ::Myco.cscope.dup) { |idx, string| (
98
- nl_idx = ::Myco.branch_op(:"||", string.rindex(
99
- "\n",
100
- idx
101
- )) {0}
102
- row = self.line_map_for(string).fetch(nl_idx).__send__(
103
- :+,
104
- 1
105
- )
106
- col = idx.__send__(
107
- :-,
108
- nl_idx
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
- value = ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", size.__send__(
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
- 1
178
- )) {self.string.__send__(
179
- :[],
180
- start_idx
181
- )}) {self.string.slice(
182
- start_idx,
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
- store_value = [
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
- value
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
- store_value = [
214
- [
215
- start_idx,
216
- idx
217
- ],
218
- value
219
- ]
220
- captures.store(
221
- idx,
222
- store_value
223
- )
224
- captures.store(
225
- name,
226
- store_value
227
- )
228
- )}
229
- declare_meme(:t_start, [], nil, ::Myco.cscope.dup) { |idx| (self.tidx_stack.push(idx))}
230
- declare_meme(:t_end, [], nil, ::Myco.cscope.dup) { |idx, name| (
231
- captures = self.capt_stack.last
232
- start_idx = self.tidx_stack.pop
233
- value = self.tokenizer.call(
234
- name,
235
- self.string,
236
- start_idx,
237
- idx
238
- )
239
- store_value = [
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
- value
245
- ]
246
- captures.store(
247
- idx,
248
- store_value
249
- )
250
- captures.store(
251
- name,
252
- store_value
253
- )
254
- )}
255
- declare_meme(:m_start, [], nil, ::Myco.cscope.dup) { |idx| (
256
- self.midx_stack.push(idx)
257
- self.c_start(idx)
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
- store_value = [
298
- [
299
- start_idx,
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
- value
303
- ]
304
- captures.store(
305
- idx,
306
- store_value
307
- )
308
- captures.store(
309
- name,
310
- store_value
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
- value
352
- ]
353
- self.capt_stack.last.store(
354
- idx,
355
- store_value
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