myco 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/myco/bootstrap/component.rb +2 -0
- data/lib/myco/bootstrap/evaluator.rb +58 -0
- data/lib/myco/bootstrap/instance.rb +1 -1
- data/lib/myco/bootstrap/meme.rb +4 -9
- data/lib/myco/bootstrap.my +1 -1
- data/lib/myco/bootstrap.my.rb +1 -1
- data/lib/myco/code_loader.rb +6 -1
- data/lib/myco/code_tools/AST/ArgumentAssembly.my +8 -12
- data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +12 -9
- data/lib/myco/code_tools/AST/ArrayAssembly.my +2 -3
- data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +2 -5
- data/lib/myco/code_tools/AST/Block.my +4 -4
- data/lib/myco/code_tools/AST/Block.my.rb +3 -7
- data/lib/myco/code_tools/AST/BlockArgument.my +4 -5
- data/lib/myco/code_tools/AST/BlockArgument.my.rb +2 -5
- data/lib/myco/code_tools/AST/BlockLiteral.my +3 -4
- data/lib/myco/code_tools/AST/BlockLiteral.my.rb +6 -6
- data/lib/myco/code_tools/AST/BlockParameter.my +4 -11
- data/lib/myco/code_tools/AST/BlockParameter.my.rb +4 -13
- data/lib/myco/code_tools/AST/BranchOperator.my +2 -3
- data/lib/myco/code_tools/AST/BranchOperator.my.rb +4 -9
- data/lib/myco/code_tools/AST/ConstantAccess.my +11 -8
- data/lib/myco/code_tools/AST/ConstantAccess.my.rb +16 -12
- data/lib/myco/code_tools/AST/ConstantAssignment.my +13 -5
- data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +16 -11
- data/lib/myco/code_tools/AST/ConstantDefine.my +2 -3
- data/lib/myco/code_tools/AST/ConstantDefine.my.rb +3 -7
- data/lib/myco/code_tools/AST/DeclareCategory.my +4 -14
- data/lib/myco/code_tools/AST/DeclareCategory.my.rb +20 -36
- data/lib/myco/code_tools/AST/DeclareDecorator.my +2 -3
- data/lib/myco/code_tools/AST/DeclareDecorator.my.rb +3 -7
- data/lib/myco/code_tools/AST/DeclareExtension.my +22 -0
- data/lib/myco/code_tools/AST/DeclareExtension.my.rb +19 -0
- data/lib/myco/code_tools/AST/DeclareFile.my +4 -15
- data/lib/myco/code_tools/AST/DeclareFile.my.rb +34 -50
- data/lib/myco/code_tools/AST/DeclareMeme.my +5 -7
- data/lib/myco/code_tools/AST/DeclareMeme.my.rb +8 -17
- data/lib/myco/code_tools/AST/DeclareObject.my +6 -18
- data/lib/myco/code_tools/AST/DeclareObject.my.rb +41 -59
- data/lib/myco/code_tools/AST/DeclareString.my +2 -3
- data/lib/myco/code_tools/AST/DeclareString.my.rb +3 -7
- data/lib/myco/code_tools/AST/{MycoModuleScope.my → DeclaredScope.my} +15 -16
- data/lib/myco/code_tools/AST/{MycoModuleScope.my.rb → DeclaredScope.my.rb} +15 -20
- data/lib/myco/code_tools/AST/Invoke.my +8 -8
- data/lib/myco/code_tools/AST/Invoke.my.rb +13 -21
- data/lib/myco/code_tools/AST/InvokeMethod.my +2 -3
- data/lib/myco/code_tools/AST/InvokeMethod.my.rb +4 -9
- data/lib/myco/code_tools/AST/KeywordAssembly.my +3 -4
- data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +2 -5
- data/lib/myco/code_tools/AST/KeywordOptionalParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +14 -0
- data/lib/myco/code_tools/AST/KeywordRequiredParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +13 -0
- data/lib/myco/code_tools/AST/KeywordRestParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +13 -0
- data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my +2 -3
- data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +2 -5
- data/lib/myco/code_tools/AST/LocalVariableAssignment.my +3 -3
- data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +3 -7
- data/lib/myco/code_tools/AST/Node.my +32 -2
- data/lib/myco/code_tools/AST/Node.my.rb +34 -1
- data/lib/myco/code_tools/AST/NumericLiteral.my +15 -0
- data/lib/myco/code_tools/AST/NumericLiteral.my.rb +12 -0
- data/lib/myco/code_tools/AST/OptionalParameter.my +24 -0
- data/lib/myco/code_tools/AST/OptionalParameter.my.rb +19 -0
- data/lib/myco/code_tools/AST/ParameterAssembly.my +60 -103
- data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +60 -121
- data/lib/myco/code_tools/AST/PipeOperator.my +2 -3
- data/lib/myco/code_tools/AST/PipeOperator.my.rb +3 -7
- data/lib/myco/code_tools/AST/Quest.my +8 -10
- data/lib/myco/code_tools/AST/Quest.my.rb +9 -13
- data/lib/myco/code_tools/AST/RequiredParameter.my +12 -0
- data/lib/myco/code_tools/AST/RequiredParameter.my.rb +10 -0
- data/lib/myco/code_tools/AST/RestParameter.my +12 -0
- data/lib/myco/code_tools/AST/RestParameter.my.rb +10 -0
- data/lib/myco/code_tools/AST/Script.my +4 -4
- data/lib/myco/code_tools/AST/Script.my.rb +3 -7
- data/lib/myco/code_tools/AST/Sequence.my +2 -3
- data/lib/myco/code_tools/AST/Sequence.my.rb +2 -5
- data/lib/myco/code_tools/AST/SplatValue.my +3 -4
- data/lib/myco/code_tools/AST/SplatValue.my.rb +2 -5
- data/lib/myco/code_tools/AST/{DynamicString.my → StringCompose.my} +3 -4
- data/lib/myco/code_tools/AST/{DynamicString.my.rb → StringCompose.my.rb} +4 -7
- data/lib/myco/code_tools/AST/StringLiteral.my +2 -3
- data/lib/myco/code_tools/AST/StringLiteral.my.rb +2 -5
- data/lib/myco/code_tools/AST/{DynamicSymbol.my → SymbolCompose.my} +3 -4
- data/lib/myco/code_tools/AST/{DynamicSymbol.my.rb → SymbolCompose.my.rb} +4 -7
- data/lib/myco/code_tools/AST/SymbolLiteral.my +2 -3
- data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +2 -5
- data/lib/myco/code_tools/AST/ToRuby.my +40 -57
- data/lib/myco/code_tools/AST/ToRuby.my.rb +43 -52
- data/lib/myco/code_tools/AST/misc.my +19 -24
- data/lib/myco/code_tools/AST/misc.my.rb +18 -23
- data/lib/myco/code_tools/AST.my +17 -8
- data/lib/myco/code_tools/AST.my.rb +14 -7
- data/lib/myco/code_tools/Parser.my +1 -1
- data/lib/myco/code_tools/parser/MycoBuilder.my +3 -3
- data/lib/myco/code_tools/parser/MycoBuilder.my.rb +3 -3
- data/lib/myco/code_tools/parser/MycoGrammar.my +67 -74
- data/lib/myco/code_tools/parser/MycoGrammar.my.rb +211 -316
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my +3 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +2 -2
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my +9 -9
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my.rb +9 -9
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my +2 -2
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my.rb +4 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my +2 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +2 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my +1 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my.rb +1 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my +5 -5
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +5 -5
- data/lib/myco/command.my +1 -1
- data/lib/myco/command.my.rb +1 -1
- data/lib/myco/core/BasicDecorators.my +10 -8
- data/lib/myco/core/BasicDecorators.my.rb +7 -7
- data/lib/myco/core/BasicObject.my +38 -7
- data/lib/myco/core/BasicObject.my.rb +23 -4
- data/lib/myco/tools/BasicCommand.my +1 -1
- data/lib/myco/tools/BasicCommand.my.rb +1 -1
- data/lib/myco/version.rb +1 -1
- data/lib/myco.rb +3 -0
- metadata +41 -26
- data/lib/myco/code_tools/AST/ConstantReopen.my +0 -29
- 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(:
|
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(:
|
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) {
|
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(:"
|
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(:
|
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(:
|
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
|
-
|
254
|
+
self.all_params,
|
265
255
|
", "
|
266
|
-
)
|
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("
|
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
|
-
|
6
|
-
push_myco: push_cpath_top; find_const(:
|
7
|
-
push_void: push_myco; find_const(:
|
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
|
-
|
12
|
+
node_type self
|
13
13
|
bytecode: |g| pos(g); g.push_self
|
14
14
|
}
|
15
15
|
|
16
16
|
NullLiteral < Node {
|
17
|
-
|
17
|
+
node_type null
|
18
18
|
bytecode: |g| pos(g); g.push_null
|
19
19
|
}
|
20
20
|
|
21
21
|
VoidLiteral < Node {
|
22
|
-
|
22
|
+
node_type void
|
23
23
|
bytecode: |g| pos(g); g.push_void
|
24
24
|
}
|
25
25
|
|
26
26
|
TrueLiteral < Node {
|
27
|
-
|
27
|
+
node_type true
|
28
28
|
bytecode: |g| pos(g); g.push_true
|
29
29
|
}
|
30
30
|
|
31
31
|
FalseLiteral < Node {
|
32
|
-
|
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:
|
37
|
+
EVALUATE_NOW: CodeTools::AST.component_eval {
|
38
38
|
constants.select |const_name| {
|
39
|
-
const_get(const_name)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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).
|
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
|
-
|
66
|
-
|
67
|
-
::Myco.find_constant(:BuilderMethods).declare_meme(
|
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
|
-
|
71
|
-
:line
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
data/lib/myco/code_tools/AST.my
CHANGED
@@ -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
|
-
|
14
|
-
import 'AST/
|
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
|
-
|
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/
|
18
|
-
declare_meme(:"AST/
|
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/
|
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(:
|
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:
|
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.
|
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 = ::
|
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.
|
85
|
+
self.ast.args(
|
86
86
|
n1,
|
87
87
|
[n1]
|
88
88
|
)
|