myco 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/lib/myco/bootstrap/component.rb +2 -0
  3. data/lib/myco/bootstrap/evaluator.rb +58 -0
  4. data/lib/myco/bootstrap/instance.rb +1 -1
  5. data/lib/myco/bootstrap/meme.rb +4 -9
  6. data/lib/myco/bootstrap.my +1 -1
  7. data/lib/myco/bootstrap.my.rb +1 -1
  8. data/lib/myco/code_loader.rb +6 -1
  9. data/lib/myco/code_tools/AST/ArgumentAssembly.my +8 -12
  10. data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +12 -9
  11. data/lib/myco/code_tools/AST/ArrayAssembly.my +2 -3
  12. data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +2 -5
  13. data/lib/myco/code_tools/AST/Block.my +4 -4
  14. data/lib/myco/code_tools/AST/Block.my.rb +3 -7
  15. data/lib/myco/code_tools/AST/BlockArgument.my +4 -5
  16. data/lib/myco/code_tools/AST/BlockArgument.my.rb +2 -5
  17. data/lib/myco/code_tools/AST/BlockLiteral.my +3 -4
  18. data/lib/myco/code_tools/AST/BlockLiteral.my.rb +6 -6
  19. data/lib/myco/code_tools/AST/BlockParameter.my +4 -11
  20. data/lib/myco/code_tools/AST/BlockParameter.my.rb +4 -13
  21. data/lib/myco/code_tools/AST/BranchOperator.my +2 -3
  22. data/lib/myco/code_tools/AST/BranchOperator.my.rb +4 -9
  23. data/lib/myco/code_tools/AST/ConstantAccess.my +11 -8
  24. data/lib/myco/code_tools/AST/ConstantAccess.my.rb +16 -12
  25. data/lib/myco/code_tools/AST/ConstantAssignment.my +13 -5
  26. data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +16 -11
  27. data/lib/myco/code_tools/AST/ConstantDefine.my +2 -3
  28. data/lib/myco/code_tools/AST/ConstantDefine.my.rb +3 -7
  29. data/lib/myco/code_tools/AST/DeclareCategory.my +4 -14
  30. data/lib/myco/code_tools/AST/DeclareCategory.my.rb +20 -36
  31. data/lib/myco/code_tools/AST/DeclareDecorator.my +2 -3
  32. data/lib/myco/code_tools/AST/DeclareDecorator.my.rb +3 -7
  33. data/lib/myco/code_tools/AST/DeclareExtension.my +22 -0
  34. data/lib/myco/code_tools/AST/DeclareExtension.my.rb +19 -0
  35. data/lib/myco/code_tools/AST/DeclareFile.my +4 -15
  36. data/lib/myco/code_tools/AST/DeclareFile.my.rb +34 -50
  37. data/lib/myco/code_tools/AST/DeclareMeme.my +5 -7
  38. data/lib/myco/code_tools/AST/DeclareMeme.my.rb +8 -17
  39. data/lib/myco/code_tools/AST/DeclareObject.my +6 -18
  40. data/lib/myco/code_tools/AST/DeclareObject.my.rb +41 -59
  41. data/lib/myco/code_tools/AST/DeclareString.my +2 -3
  42. data/lib/myco/code_tools/AST/DeclareString.my.rb +3 -7
  43. data/lib/myco/code_tools/AST/{MycoModuleScope.my → DeclaredScope.my} +15 -16
  44. data/lib/myco/code_tools/AST/{MycoModuleScope.my.rb → DeclaredScope.my.rb} +15 -20
  45. data/lib/myco/code_tools/AST/Invoke.my +8 -8
  46. data/lib/myco/code_tools/AST/Invoke.my.rb +13 -21
  47. data/lib/myco/code_tools/AST/InvokeMethod.my +2 -3
  48. data/lib/myco/code_tools/AST/InvokeMethod.my.rb +4 -9
  49. data/lib/myco/code_tools/AST/KeywordAssembly.my +3 -4
  50. data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +2 -5
  51. data/lib/myco/code_tools/AST/KeywordOptionalParameter.my +16 -0
  52. data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +14 -0
  53. data/lib/myco/code_tools/AST/KeywordRequiredParameter.my +16 -0
  54. data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +13 -0
  55. data/lib/myco/code_tools/AST/KeywordRestParameter.my +16 -0
  56. data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +13 -0
  57. data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my +2 -3
  58. data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +2 -5
  59. data/lib/myco/code_tools/AST/LocalVariableAssignment.my +3 -3
  60. data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +3 -7
  61. data/lib/myco/code_tools/AST/Node.my +32 -2
  62. data/lib/myco/code_tools/AST/Node.my.rb +34 -1
  63. data/lib/myco/code_tools/AST/NumericLiteral.my +15 -0
  64. data/lib/myco/code_tools/AST/NumericLiteral.my.rb +12 -0
  65. data/lib/myco/code_tools/AST/OptionalParameter.my +24 -0
  66. data/lib/myco/code_tools/AST/OptionalParameter.my.rb +19 -0
  67. data/lib/myco/code_tools/AST/ParameterAssembly.my +60 -103
  68. data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +60 -121
  69. data/lib/myco/code_tools/AST/PipeOperator.my +2 -3
  70. data/lib/myco/code_tools/AST/PipeOperator.my.rb +3 -7
  71. data/lib/myco/code_tools/AST/Quest.my +8 -10
  72. data/lib/myco/code_tools/AST/Quest.my.rb +9 -13
  73. data/lib/myco/code_tools/AST/RequiredParameter.my +12 -0
  74. data/lib/myco/code_tools/AST/RequiredParameter.my.rb +10 -0
  75. data/lib/myco/code_tools/AST/RestParameter.my +12 -0
  76. data/lib/myco/code_tools/AST/RestParameter.my.rb +10 -0
  77. data/lib/myco/code_tools/AST/Script.my +4 -4
  78. data/lib/myco/code_tools/AST/Script.my.rb +3 -7
  79. data/lib/myco/code_tools/AST/Sequence.my +2 -3
  80. data/lib/myco/code_tools/AST/Sequence.my.rb +2 -5
  81. data/lib/myco/code_tools/AST/SplatValue.my +3 -4
  82. data/lib/myco/code_tools/AST/SplatValue.my.rb +2 -5
  83. data/lib/myco/code_tools/AST/{DynamicString.my → StringCompose.my} +3 -4
  84. data/lib/myco/code_tools/AST/{DynamicString.my.rb → StringCompose.my.rb} +4 -7
  85. data/lib/myco/code_tools/AST/StringLiteral.my +2 -3
  86. data/lib/myco/code_tools/AST/StringLiteral.my.rb +2 -5
  87. data/lib/myco/code_tools/AST/{DynamicSymbol.my → SymbolCompose.my} +3 -4
  88. data/lib/myco/code_tools/AST/{DynamicSymbol.my.rb → SymbolCompose.my.rb} +4 -7
  89. data/lib/myco/code_tools/AST/SymbolLiteral.my +2 -3
  90. data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +2 -5
  91. data/lib/myco/code_tools/AST/ToRuby.my +40 -57
  92. data/lib/myco/code_tools/AST/ToRuby.my.rb +43 -52
  93. data/lib/myco/code_tools/AST/misc.my +19 -24
  94. data/lib/myco/code_tools/AST/misc.my.rb +18 -23
  95. data/lib/myco/code_tools/AST.my +17 -8
  96. data/lib/myco/code_tools/AST.my.rb +14 -7
  97. data/lib/myco/code_tools/Parser.my +1 -1
  98. data/lib/myco/code_tools/parser/MycoBuilder.my +3 -3
  99. data/lib/myco/code_tools/parser/MycoBuilder.my.rb +3 -3
  100. data/lib/myco/code_tools/parser/MycoGrammar.my +67 -74
  101. data/lib/myco/code_tools/parser/MycoGrammar.my.rb +211 -316
  102. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my +3 -3
  103. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +2 -2
  104. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my +9 -9
  105. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my.rb +9 -9
  106. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my +2 -2
  107. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my.rb +4 -1
  108. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my +2 -3
  109. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +2 -3
  110. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my +1 -1
  111. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my.rb +1 -1
  112. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my +5 -5
  113. data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +5 -5
  114. data/lib/myco/command.my +1 -1
  115. data/lib/myco/command.my.rb +1 -1
  116. data/lib/myco/core/BasicDecorators.my +10 -8
  117. data/lib/myco/core/BasicDecorators.my.rb +7 -7
  118. data/lib/myco/core/BasicObject.my +38 -7
  119. data/lib/myco/core/BasicObject.my.rb +23 -4
  120. data/lib/myco/tools/BasicCommand.my +1 -1
  121. data/lib/myco/tools/BasicCommand.my.rb +1 -1
  122. data/lib/myco/version.rb +1 -1
  123. data/lib/myco.rb +3 -0
  124. metadata +41 -26
  125. data/lib/myco/code_tools/AST/ConstantReopen.my +0 -29
  126. data/lib/myco/code_tools/AST/ConstantReopen.my.rb +0 -35
@@ -91,12 +91,13 @@
91
91
  ::Myco.find_constant(:VoidLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("::Myco::Void"))})}
92
92
  ::Myco.find_constant(:TrueLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("true"))})}
93
93
  ::Myco.find_constant(:FalseLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("false"))})}
94
+ ::Myco.find_constant(:NumericLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add(self.value.inspect))})}
94
95
  ::Myco.find_constant(:StringLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add(self.value.inspect))})}
95
96
  ::Myco.find_constant(:SymbolLiteral).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add(self.value.inspect))})}
96
- ::Myco.find_constant(:DynamicString).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
97
+ ::Myco.find_constant(:StringCompose).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
97
98
  g.add("\"")
98
99
  self.body.each_slice(2) { |string, to_string| (
99
- g.add(string.value.to_s.inspect.slice(::Range.new(
100
+ g.add(string.value.to_s.inspect.slice(::Myco.find_constant(:Range).new(
100
101
  1,
101
102
  -2
102
103
  )))
@@ -108,10 +109,10 @@
108
109
  )}
109
110
  g.add("\"")
110
111
  )})}
111
- ::Myco.find_constant(:DynamicSymbol).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
112
+ ::Myco.find_constant(:SymbolCompose).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
112
113
  g.add(":\"")
113
114
  self.body.each_slice(2) { |string, to_string| (
114
- g.add(string.value.to_s.inspect.slice(::Range.new(
115
+ g.add(string.value.to_s.inspect.slice(::Myco.find_constant(:Range).new(
115
116
  1,
116
117
  -2
117
118
  )))
@@ -148,14 +149,32 @@
148
149
  ::Myco.find_constant(:ConstantAccess).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
149
150
  name_list = self.names.map(&:to_sym)
150
151
  first_name = name_list.shift
151
- ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.toplevel) {g.add("::#{first_name}")}) {g.add("::Myco.find_constant(#{first_name.inspect})")}
152
+ ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.toplevel) {self.case(
153
+ first_name,
154
+ :Myco,
155
+ ::Proc.new { || (g.add("::Myco"))},
156
+ :Ruby,
157
+ ::Proc.new { || (g.add("::Object"))},
158
+ :Rubinius,
159
+ ::Proc.new { || (g.add("::Rubinius"))},
160
+ ::Proc.new { || (g.add("::Myco::#{first_name}"))}
161
+ )}) {g.add("::Myco.find_constant(#{first_name.inspect})")}
152
162
  name_list.each { |name| (g.add("::#{name}"))}
153
163
  )})}
154
164
  ::Myco.find_constant(:ConstantAssignment).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
155
165
  name_list = self.constant.names.map(&:to_sym)
156
166
  last_name = name_list.pop
157
167
  first_name = ::Myco.branch_op(:"&&", name_list.__send__(:any?)) {name_list.shift}
158
- ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.constant.toplevel) {::Myco.branch_op(:"&&", first_name) {g.add("::#{first_name}")}}) {::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", first_name) {g.add("::Myco.find_constant(#{first_name.inspect})")}) {g.add("::Myco.cscope.for_method_definition")}}
168
+ ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.constant.toplevel) {::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", first_name) {self.case(
169
+ first_name,
170
+ :Myco,
171
+ ::Proc.new { || (g.add("::Myco"))},
172
+ :Ruby,
173
+ ::Proc.new { || (g.add("::Object"))},
174
+ :Rubinius,
175
+ ::Proc.new { || (g.add("::Rubinius"))},
176
+ ::Proc.new { || (g.add("::Myco::#{first_name}"))}
177
+ )}) {g.add("::Myco")}}) {::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", first_name) {g.add("::Myco.find_constant(#{first_name.inspect})")}) {g.add("::Myco.cscope.for_method_definition")}}
159
178
  name_list.each { |name| (g.add("::#{name}"))}
160
179
  g.add("::#{last_name} = ")
161
180
  g.add(self.value)
@@ -166,13 +185,13 @@
166
185
  g.add(self.constant.names.last.inspect)
167
186
  g.add(" }")
168
187
  )})}
169
- ::Myco.find_constant(:ConstantReopen).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
188
+ ::Myco.find_constant(:DeclareExtension).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
170
189
  g.add(self.constant)
171
190
  g.add(".component_eval {")
172
191
  g.add(self.body)
173
192
  g.add("}")
174
193
  )})}
175
- ::Myco.find_constant(:MycoModuleScope).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.with_nested_var_scope(self) { || (g.add(self.body))})})}
194
+ ::Myco.find_constant(:DeclaredScope).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.with_nested_var_scope(self) { || (g.add(self.body))})})}
176
195
  ::Myco.find_constant(:Script).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add(self.body))})}
177
196
  ::Myco.find_constant(:DeclareFile).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
178
197
  g.line
@@ -216,54 +235,25 @@
216
235
  )
217
236
  g.add("]]")
218
237
  )})}
238
+ ::Myco.find_constant(:RequiredParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("#{self.name}"))})}
239
+ ::Myco.find_constant(:OptionalParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
240
+ g.add("#{self.name}=")
241
+ g.add(self.value)
242
+ )})}
243
+ ::Myco.find_constant(:RestParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("*#{self.name}"))})}
244
+ ::Myco.find_constant(:KeywordRequiredParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("#{self.name}:"))})}
245
+ ::Myco.find_constant(:KeywordOptionalParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
246
+ g.add("#{self.name}:")
247
+ g.add(self.value)
248
+ )})}
249
+ ::Myco.find_constant(:KeywordRestParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("**#{self.name}"))})}
219
250
  ::Myco.find_constant(:BlockParameter).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (g.add("&#{self.name}"))})}
220
251
  ::Myco.find_constant(:ParameterAssembly).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
221
- list = []
222
- list_add = ::Myco.find_constant(:Proc).new { |&blk| (list.push(::Myco.find_constant(:Proc).new(&blk)))}
223
- self.required.each { |item| (list_add.call { || (g.add(item.to_s))})}
224
- self.optional.each { |asgn| (
225
- name = asgn.name
226
- value = asgn.value
227
- list_add.call { || (
228
- g.add("#{name}=")
229
- ::Myco.branch_op(:"||", ::Myco.branch_op(:"&&", value.__send__(
230
- :is_a?,
231
- ::Myco.find_constant(:SymbolLiteral)
232
- )) {value.value.__send__(
233
- :==,
234
- :*
235
- )}) {g.add(value)}
236
- )}
237
- )}
238
- ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.splat.__send__(
239
- :==,
240
- true
241
- )) {list_add.call { || (g.add("*"))}}) {::Myco.branch_op(:"&?", self.splat) {list_add.call { || (g.add("*#{self.splat}"))}}}
242
- self.post.each { |item| (list_add.call { || (g.add(item.to_s))})}
243
- self.kwargs.each { |asgn| (
244
- name = asgn.name
245
- value = asgn.value
246
- list_add.call { || (
247
- g.add("#{name}:")
248
- ::Myco.branch_op(:"||", ::Myco.branch_op(:"&&", value.__send__(
249
- :is_a?,
250
- ::Myco.find_constant(:SymbolLiteral)
251
- )) {value.value.__send__(
252
- :==,
253
- :*
254
- )}) {g.add(value)}
255
- )}
256
- )}
257
- ::Myco.branch_op(:"??", ::Myco.branch_op(:"&?", self.kwrest.__send__(
258
- :==,
259
- true
260
- )) {list_add.call { || (g.add("**"))}}) {::Myco.branch_op(:"&?", self.kwrest) {list_add.call { || (g.add("**#{self.kwrest}"))}}}
261
- ::Myco.branch_op(:"&&", self.block) {list_add.call { || (g.add(self.block))}}
262
252
  g.add("|")
263
253
  g.list(
264
- list,
254
+ self.all_params,
265
255
  ", "
266
- ) { |proc| (proc.call)}
256
+ )
267
257
  g.add("|")
268
258
  )})}
269
259
  ::Myco.find_constant(:Sequence).component_eval {(declare_meme(:to_ruby, [], nil, ::Myco.cscope.dup) { |g| (
@@ -358,8 +348,9 @@
358
348
  self.receiver
359
349
  )
360
350
  g.add("(")
351
+ g.add("Rubinius::Type.object_respond_to?(")
361
352
  g.add(self.receiver)
362
- g.add(".respond_to?(#{self.questable.name.inspect}).false?")
353
+ g.add(", #{self.questable.name.inspect}).false?")
363
354
  g.add(" ? ::Myco::Void : ")
364
355
  g.add(associated_questable)
365
356
  g.add(")")
@@ -2,55 +2,50 @@
2
2
  CodeTools::AST << {
3
3
 
4
4
  # Helper methods for bytecode generation
5
- ::CodeTools::Generator << {
6
- push_myco: push_cpath_top; find_const(:"Myco")
7
- push_void: push_myco; find_const(:"Void")
5
+ CodeTools::Generator << {
6
+ push_myco: push_cpath_top; find_const(:Myco)
7
+ push_void: push_myco; find_const(:Void)
8
8
  push_null: push_nil
9
9
  }
10
10
 
11
11
  Self < Node {
12
- Form: [:self]
12
+ node_type self
13
13
  bytecode: |g| pos(g); g.push_self
14
14
  }
15
15
 
16
16
  NullLiteral < Node {
17
- Form: [:null]
17
+ node_type null
18
18
  bytecode: |g| pos(g); g.push_null
19
19
  }
20
20
 
21
21
  VoidLiteral < Node {
22
- Form: [:void]
22
+ node_type void
23
23
  bytecode: |g| pos(g); g.push_void
24
24
  }
25
25
 
26
26
  TrueLiteral < Node {
27
- Form: [:true]
27
+ node_type true
28
28
  bytecode: |g| pos(g); g.push_true
29
29
  }
30
30
 
31
31
  FalseLiteral < Node {
32
- Form: [:false]
32
+ node_type false
33
33
  bytecode: |g| pos(g); g.push_false
34
34
  }
35
35
 
36
36
  # TODO: use some other way to be eager
37
- EVALUATE_NOW: ::CodeTools::AST.component_eval {
37
+ EVALUATE_NOW: CodeTools::AST.component_eval {
38
38
  constants.select |const_name| {
39
- const_get(const_name).constants.include?(:"Form")
40
- }.each |const_name| {
41
- component = const_get(const_name)
42
- form = component.const_get(:"Form").dup
43
- form_name = form.shift
44
-
45
- BuilderMethods.declare_meme(form_name) |*args| {
46
- inst = component.new
47
- loc = args.shift
48
- inst.line = loc.line
49
- form.zip(args).each |key, value| {
50
- inst.send(:""key"=", value)
51
- }
52
- inst
53
- }
39
+ const_get(const_name).?node_type ?? null
40
+ }.each |const_name| {
41
+ component = const_get(const_name)
42
+ node_type = component.node_type
43
+ fields = component.fields
44
+
45
+ BuilderMethods.declare_meme(node_type) |*args| {
46
+ loc = args.shift
47
+ kw = [:line, *fields].zip([loc.line, *args])
48
+ component.new(kw.to_h)
54
49
  }
55
50
  }
56
51
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
  ::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
3
3
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(
4
- ::CodeTools::Generator.component_eval {(
4
+ ::Myco.find_constant(:CodeTools)::Generator.component_eval {(
5
5
  declare_meme(:push_myco, [], nil, ::Myco.cscope.dup) { |*| (
6
6
  self.push_cpath_top
7
7
  self.find_const(:Myco)
@@ -14,7 +14,7 @@
14
14
  )}
15
15
  ::Myco.cscope.for_method_definition::Self = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
16
16
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
17
- ::Myco.cscope.for_method_definition::Form = ([:self])
17
+ declare_meme(:self, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
18
18
  declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
19
19
  self.pos(g)
20
20
  g.push_self
@@ -23,7 +23,7 @@
23
23
  .tap { |__c__| __c__.__name__ = :Self }
24
24
  ::Myco.cscope.for_method_definition::NullLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
25
25
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
26
- ::Myco.cscope.for_method_definition::Form = ([:null])
26
+ declare_meme(:null, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
27
27
  declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
28
28
  self.pos(g)
29
29
  g.push_null
@@ -32,7 +32,7 @@
32
32
  .tap { |__c__| __c__.__name__ = :NullLiteral }
33
33
  ::Myco.cscope.for_method_definition::VoidLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
34
34
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
35
- ::Myco.cscope.for_method_definition::Form = ([:void])
35
+ declare_meme(:void, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
36
36
  declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
37
37
  self.pos(g)
38
38
  g.push_void
@@ -41,7 +41,7 @@
41
41
  .tap { |__c__| __c__.__name__ = :VoidLiteral }
42
42
  ::Myco.cscope.for_method_definition::TrueLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
43
43
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
44
- ::Myco.cscope.for_method_definition::Form = ([:true])
44
+ declare_meme(:true, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
45
45
  declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
46
46
  self.pos(g)
47
47
  g.push_true
@@ -50,32 +50,27 @@
50
50
  .tap { |__c__| __c__.__name__ = :TrueLiteral }
51
51
  ::Myco.cscope.for_method_definition::FalseLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
52
52
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
53
- ::Myco.cscope.for_method_definition::Form = ([:false])
53
+ declare_meme(:false, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
54
54
  declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
55
55
  self.pos(g)
56
56
  g.push_false
57
57
  )}
58
58
  )}}
59
59
  .tap { |__c__| __c__.__name__ = :FalseLiteral }
60
- ::Myco.cscope.for_method_definition::EVALUATE_NOW = (::CodeTools::AST.component_eval { || (self.constants.select { |const_name| (self.const_get(const_name).constants.__send__(
61
- :include?,
62
- :Form
63
- ))}.each { |const_name| (
60
+ ::Myco.cscope.for_method_definition::EVALUATE_NOW = (::Myco.find_constant(:CodeTools)::AST.component_eval { || (self.constants.select { |const_name| (::Myco.branch_op(:"??", (self.const_get(const_name).respond_to?(:node_type).false? ? ::Myco::Void : self.const_get(const_name).node_type)) {nil})}.each { |const_name| (
64
61
  component = self.const_get(const_name)
65
- form = component.const_get(:Form).dup
66
- form_name = form.shift
67
- ::Myco.find_constant(:BuilderMethods).declare_meme(form_name) { |*args| (
68
- inst = component.new
62
+ node_type = component.node_type
63
+ fields = component.fields
64
+ ::Myco.find_constant(:BuilderMethods).declare_meme(node_type) { |*args| (
69
65
  loc = args.shift
70
- inst.__send__(
71
- :line=,
72
- loc.line
73
- )
74
- form.zip(args).each { |key, value| (inst.send(
75
- :"#{key}=",
76
- value
77
- ))}
78
- inst
66
+ kw = [
67
+ :line,
68
+ *fields
69
+ ].zip([
70
+ loc.line,
71
+ *args
72
+ ])
73
+ component.new(kw.to_h)
79
74
  )}
80
75
  )})})
81
76
  )})}}.instance
@@ -8,10 +8,12 @@ import 'AST/Node.my'
8
8
 
9
9
  import 'AST/Script.my'
10
10
 
11
+ import 'AST/NumericLiteral.my'
11
12
  import 'AST/StringLiteral.my'
12
13
  import 'AST/SymbolLiteral.my'
13
- import 'AST/DynamicString.my'
14
- import 'AST/DynamicSymbol.my'
14
+
15
+ import 'AST/StringCompose.my'
16
+ import 'AST/SymbolCompose.my'
15
17
 
16
18
  import 'AST/Sequence.my'
17
19
 
@@ -22,23 +24,30 @@ import 'AST/ArgumentAssembly.my'
22
24
  import 'AST/BlockArgument.my'
23
25
  import 'AST/Block.my'
24
26
 
27
+ import 'AST/RequiredParameter.my'
28
+ import 'AST/OptionalParameter.my'
29
+ import 'AST/RestParameter.my'
30
+ import 'AST/KeywordRequiredParameter.my'
31
+ import 'AST/KeywordOptionalParameter.my'
32
+ import 'AST/KeywordRestParameter.my'
25
33
  import 'AST/BlockParameter.my'
26
34
  import 'AST/ParameterAssembly.my'
27
35
 
28
36
  import 'AST/BlockLiteral.my'
29
37
 
30
- import 'AST/MycoModuleScope.my'
31
-
32
38
  import 'AST/ConstantAccess.my'
33
39
  import 'AST/ConstantAssignment.my'
34
40
  import 'AST/ConstantDefine.my'
35
- import 'AST/ConstantReopen.my'
41
+
42
+ import 'AST/DeclaredScope.my'
43
+ import 'AST/DeclareObject.my'
44
+ import 'AST/DeclareString.my'
45
+ import 'AST/DeclareFile.my'
46
+ import 'AST/DeclareExtension.my'
36
47
  import 'AST/DeclareCategory.my'
48
+
37
49
  import 'AST/DeclareDecorator.my'
38
- import 'AST/DeclareFile.my'
39
50
  import 'AST/DeclareMeme.my'
40
- import 'AST/DeclareObject.my'
41
- import 'AST/DeclareString.my'
42
51
 
43
52
  import 'AST/Invoke.my'
44
53
  import 'AST/InvokeMethod.my'
@@ -12,10 +12,11 @@
12
12
  )}
13
13
  declare_meme(:"AST/Node.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
14
14
  declare_meme(:"AST/Script.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
15
+ declare_meme(:"AST/NumericLiteral.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
15
16
  declare_meme(:"AST/StringLiteral.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
16
17
  declare_meme(:"AST/SymbolLiteral.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
17
- declare_meme(:"AST/DynamicString.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
18
- declare_meme(:"AST/DynamicSymbol.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
18
+ declare_meme(:"AST/StringCompose.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
19
+ declare_meme(:"AST/SymbolCompose.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
19
20
  declare_meme(:"AST/Sequence.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
20
21
  declare_meme(:"AST/SplatValue.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
21
22
  declare_meme(:"AST/ArrayAssembly.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
@@ -23,20 +24,26 @@
23
24
  declare_meme(:"AST/ArgumentAssembly.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
24
25
  declare_meme(:"AST/BlockArgument.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
25
26
  declare_meme(:"AST/Block.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
27
+ declare_meme(:"AST/RequiredParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
28
+ declare_meme(:"AST/OptionalParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
29
+ declare_meme(:"AST/RestParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
30
+ declare_meme(:"AST/KeywordRequiredParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
31
+ declare_meme(:"AST/KeywordOptionalParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
32
+ declare_meme(:"AST/KeywordRestParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
26
33
  declare_meme(:"AST/BlockParameter.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
27
34
  declare_meme(:"AST/ParameterAssembly.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
28
35
  declare_meme(:"AST/BlockLiteral.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
29
- declare_meme(:"AST/MycoModuleScope.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
30
36
  declare_meme(:"AST/ConstantAccess.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
31
37
  declare_meme(:"AST/ConstantAssignment.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
32
38
  declare_meme(:"AST/ConstantDefine.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
33
- declare_meme(:"AST/ConstantReopen.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
39
+ declare_meme(:"AST/DeclaredScope.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
40
+ declare_meme(:"AST/DeclareObject.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
41
+ declare_meme(:"AST/DeclareString.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
42
+ declare_meme(:"AST/DeclareFile.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
43
+ declare_meme(:"AST/DeclareExtension.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
34
44
  declare_meme(:"AST/DeclareCategory.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
35
45
  declare_meme(:"AST/DeclareDecorator.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
36
- declare_meme(:"AST/DeclareFile.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
37
46
  declare_meme(:"AST/DeclareMeme.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
38
- declare_meme(:"AST/DeclareObject.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
39
- declare_meme(:"AST/DeclareString.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
40
47
  declare_meme(:"AST/Invoke.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
41
48
  declare_meme(:"AST/InvokeMethod.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
42
49
  declare_meme(:"AST/LocalVariableAccessAmbiguous.my", [[:import, []]], nil, ::Myco.cscope.dup) { |*| nil}
@@ -1,6 +1,6 @@
1
1
 
2
2
  # TODO: include Pegleromyces library in a better way than clone into subdir
3
- import as(:"Pegleromyces") 'parser/pegleromyces/lib/pegleromyces.my'
3
+ import as(:Pegleromyces) 'parser/pegleromyces/lib/pegleromyces.my'
4
4
 
5
5
  # TODO: remove this hack
6
6
  ::Myco::Pegleromyces: Pegleromyces
@@ -1,11 +1,11 @@
1
1
 
2
2
  BasicObject {
3
3
  # TODO: be more clever here
4
- ASTBuilder: ::CodeTools::AST::Builder.new
4
+ ASTBuilder: CodeTools::AST::Builder.new
5
5
  var ast: ASTBuilder
6
6
 
7
7
  var escape_encodings: {
8
- hash = Hash.new
8
+ hash = ::Ruby::Hash.new
9
9
  hash["\\a"] = 7.chr # \a 0x07 Bell or alert
10
10
  hash["\\b"] = 8.chr # \b 0x08 Backspace
11
11
  # TODO: # \cx Control-x
@@ -51,7 +51,7 @@ BasicObject {
51
51
 
52
52
  result = block
53
53
  &? block.call(n0,op,n1)
54
- ?? ast.invoke(op, n0, op.sym, ast.argass(n1, [n1]))
54
+ ?? ast.invoke(op, n0, op.sym, ast.args(n1, [n1]))
55
55
  input.unshift(result)
56
56
  ) ?? (
57
57
  output.push(n0)
@@ -2,10 +2,10 @@
2
2
  ::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
3
3
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco::Component.new([::Myco.find_constant(:BasicObject)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
4
4
  .tap { |__c__| __c__.__last__ = __c__.component_eval {(
5
- ::Myco.cscope.for_method_definition::ASTBuilder = (::CodeTools::AST::Builder.new)
5
+ ::Myco.cscope.for_method_definition::ASTBuilder = (::Myco.find_constant(:CodeTools)::AST::Builder.new)
6
6
  declare_meme(:ast, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (::Myco.find_constant(:ASTBuilder))}
7
7
  declare_meme(:escape_encodings, [[:var, []]], nil, ::Myco.cscope.dup) { |*| (
8
- hash = ::Myco.find_constant(:Hash).new
8
+ hash = ::Ruby::Hash.new
9
9
  hash.__send__(
10
10
  :[]=,
11
11
  "\\a",
@@ -82,7 +82,7 @@
82
82
  op,
83
83
  n0,
84
84
  op.sym,
85
- self.ast.argass(
85
+ self.ast.args(
86
86
  n1,
87
87
  [n1]
88
88
  )