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
@@ -2,9 +2,8 @@
|
|
2
2
|
CodeTools::AST << {
|
3
3
|
|
4
4
|
Quest < Node {
|
5
|
-
|
6
|
-
|
7
|
-
Form: [:quest, :receiver, :questable]
|
5
|
+
node_type quest
|
6
|
+
field receiver, field questable
|
8
7
|
|
9
8
|
setter questable: |given| {
|
10
9
|
given.receiver = FakeReceiver.new(line: self.line)
|
@@ -15,7 +14,7 @@ CodeTools::AST << {
|
|
15
14
|
pos(g)
|
16
15
|
|
17
16
|
##
|
18
|
-
# unless
|
17
|
+
# unless Rubinius::Type.object_respond_to?(self.receiver, self.questable.name).false?
|
19
18
|
# execute_statement self.questable
|
20
19
|
# else
|
21
20
|
# return void
|
@@ -25,9 +24,10 @@ CodeTools::AST << {
|
|
25
24
|
end_label = g.new_label
|
26
25
|
|
27
26
|
self.receiver.bytecode(g)
|
28
|
-
|
27
|
+
g.dup_top # dup the receiver to save it for later
|
28
|
+
g.push_type; g.swap
|
29
29
|
g.push_literal(self.questable.name)
|
30
|
-
g.send(:"
|
30
|
+
g.send(:"object_respond_to?", 2)
|
31
31
|
g.send(:"false?", 0)
|
32
32
|
g.goto_if_true(else_label)
|
33
33
|
|
@@ -39,16 +39,14 @@ CodeTools::AST << {
|
|
39
39
|
|
40
40
|
else_label.set!
|
41
41
|
g.pop # pop the duped receiver - it won't be used after all
|
42
|
-
g.
|
43
|
-
g.find_const(:"Myco")
|
44
|
-
g.find_const(:"Void")
|
42
|
+
g.push_void
|
45
43
|
|
46
44
|
end_label.set!
|
47
45
|
}
|
48
46
|
|
49
47
|
|
50
48
|
FakeReceiver < Node {
|
51
|
-
|
49
|
+
node_type qrcvr
|
52
50
|
|
53
51
|
# Do nothing here - this would normally be ill-advised,
|
54
52
|
# because Nodes are expected to push an item onto the stack,
|
@@ -2,13 +2,9 @@
|
|
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 {(::Myco.cscope.for_method_definition::Quest = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
declare_meme(:
|
7
|
-
::Myco.cscope.
|
8
|
-
:quest,
|
9
|
-
:receiver,
|
10
|
-
:questable
|
11
|
-
])
|
5
|
+
declare_meme(:quest, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:receiver, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
7
|
+
declare_meme(:questable, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
12
8
|
declare_meme(:questable, [[:setter, []]], nil, ::Myco.cscope.dup) { |given| (
|
13
9
|
given.__send__(
|
14
10
|
:receiver=,
|
@@ -22,10 +18,12 @@
|
|
22
18
|
end_label = g.new_label
|
23
19
|
self.receiver.bytecode(g)
|
24
20
|
g.dup_top
|
21
|
+
g.push_type
|
22
|
+
g.swap
|
25
23
|
g.push_literal(self.questable.name)
|
26
24
|
g.send(
|
27
|
-
:
|
28
|
-
|
25
|
+
:object_respond_to?,
|
26
|
+
2
|
29
27
|
)
|
30
28
|
g.send(
|
31
29
|
:false?,
|
@@ -36,14 +34,12 @@
|
|
36
34
|
g.goto(end_label)
|
37
35
|
else_label.__send__(:set!)
|
38
36
|
g.pop
|
39
|
-
g.
|
40
|
-
g.find_const(:Myco)
|
41
|
-
g.find_const(:Void)
|
37
|
+
g.push_void
|
42
38
|
end_label.__send__(:set!)
|
43
39
|
)}
|
44
40
|
::Myco.cscope.for_method_definition::FakeReceiver = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
45
41
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
46
|
-
::Myco.cscope.
|
42
|
+
declare_meme(:qrcvr, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
47
43
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (self.pos(g))}
|
48
44
|
)}}
|
49
45
|
.tap { |__c__| __c__.__name__ = :FakeReceiver }
|
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
3
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::RequiredParameter = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
+
declare_meme(:reqprm, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:name, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
7
|
+
declare_meme(:map_local, [], nil, ::Myco.cscope.dup) { |scope| (scope.new_local(self.name))}
|
8
|
+
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| nil}
|
9
|
+
)}}
|
10
|
+
.tap { |__c__| __c__.__name__ = :RequiredParameter })})}}.instance
|
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
3
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::RestParameter = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
+
declare_meme(:restprm, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:name, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
7
|
+
declare_meme(:map_local, [], nil, ::Myco.cscope.dup) { |scope| (scope.new_local(::Myco.branch_op(:"||", self.name) {:*}))}
|
8
|
+
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| nil}
|
9
|
+
)}}
|
10
|
+
.tap { |__c__| __c__.__name__ = :RestParameter })})}}.instance
|
@@ -3,16 +3,16 @@ CodeTools::AST << {
|
|
3
3
|
|
4
4
|
# TODO: consider moving out of the AST namespace - or maybe collapse into FileToplevel
|
5
5
|
Script < Node {
|
6
|
-
|
7
|
-
|
6
|
+
node_type script
|
7
|
+
field file, field body
|
8
8
|
|
9
|
-
|
9
|
+
var variable_scope # TODO: remove?
|
10
10
|
|
11
11
|
nest_scope: |scope| scope.parent = self
|
12
12
|
search_local: null # TODO: revisit and possibly implement for nested evals
|
13
13
|
|
14
14
|
bytecode: |g| {
|
15
|
-
g.name = :
|
15
|
+
g.name = :__script__
|
16
16
|
g.file = self.file.to_sym
|
17
17
|
|
18
18
|
g.push_state(self)
|
@@ -2,14 +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.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::Script = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
declare_meme(:
|
5
|
+
declare_meme(:script, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:file, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
7
|
+
declare_meme(:body, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
7
8
|
declare_meme(:variable_scope, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
8
|
-
::Myco.cscope.for_method_definition::Form = ([
|
9
|
-
:script,
|
10
|
-
:file,
|
11
|
-
:body
|
12
|
-
])
|
13
9
|
declare_meme(:nest_scope, [], nil, ::Myco.cscope.dup) { |scope| (scope.__send__(
|
14
10
|
:parent=,
|
15
11
|
self
|
@@ -2,11 +2,8 @@
|
|
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 {(::Myco.cscope.for_method_definition::Sequence = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:sequence,
|
8
|
-
:array
|
9
|
-
])
|
5
|
+
declare_meme(:sequence, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:array, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
ary = self.array.dup
|
12
9
|
last = ary.pop
|
@@ -2,9 +2,8 @@
|
|
2
2
|
CodeTools::AST << {
|
3
3
|
|
4
4
|
SplatValue < Node {
|
5
|
-
|
6
|
-
|
7
|
-
Form: [:splat, :value]
|
5
|
+
node_type splat
|
6
|
+
field value
|
8
7
|
|
9
8
|
bytecode: |g| {
|
10
9
|
self.value.bytecode(g)
|
@@ -12,7 +11,7 @@ CodeTools::AST << {
|
|
12
11
|
# TODO: determine if coercion from other types is necessary here
|
13
12
|
g.dup
|
14
13
|
g.push_rubinius
|
15
|
-
g.find_const(:
|
14
|
+
g.find_const(:Runtime)
|
16
15
|
g.swap
|
17
16
|
g.send(:dup_as_array, 1, true)
|
18
17
|
|
@@ -2,11 +2,8 @@
|
|
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 {(::Myco.cscope.for_method_definition::SplatValue = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:splat,
|
8
|
-
:value
|
9
|
-
])
|
5
|
+
declare_meme(:splat, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:value, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
self.value.bytecode(g)
|
12
9
|
g.dup
|
@@ -1,12 +1,9 @@
|
|
1
1
|
|
2
2
|
::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
3
|
-
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::
|
3
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::StringCompose = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:dstr,
|
8
|
-
:body
|
9
|
-
])
|
5
|
+
declare_meme(:string_compose, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:body, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
self.pos(g)
|
12
9
|
self.body.each_slice(2) { |string, other| (
|
@@ -19,4 +16,4 @@
|
|
19
16
|
g.string_build(self.body.size)
|
20
17
|
)}
|
21
18
|
)}}
|
22
|
-
.tap { |__c__| __c__.__name__ = :
|
19
|
+
.tap { |__c__| __c__.__name__ = :StringCompose })})}}.instance
|
@@ -2,11 +2,8 @@
|
|
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 {(::Myco.cscope.for_method_definition::StringLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:str,
|
8
|
-
:value
|
9
|
-
])
|
5
|
+
declare_meme(:str, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:value, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
self.pos(g)
|
12
9
|
g.push_literal(self.value)
|
@@ -1,12 +1,9 @@
|
|
1
1
|
|
2
2
|
::Myco::Component.new([::Myco::FileToplevel], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
3
|
-
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::
|
3
|
+
.tap { |__c__| __c__.__last__ = __c__.component_eval {(::Myco.find_constant(:CodeTools)::AST.component_eval {(::Myco.cscope.for_method_definition::SymbolCompose = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:dsym,
|
8
|
-
:body
|
9
|
-
])
|
5
|
+
declare_meme(:symbol_compose, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:body, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
self.pos(g)
|
12
9
|
self.body.each_slice(2) { |string, other| (
|
@@ -23,4 +20,4 @@
|
|
23
20
|
)
|
24
21
|
)}
|
25
22
|
)}}
|
26
|
-
.tap { |__c__| __c__.__name__ = :
|
23
|
+
.tap { |__c__| __c__.__name__ = :SymbolCompose })})}}.instance
|
@@ -2,11 +2,8 @@
|
|
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 {(::Myco.cscope.for_method_definition::SymbolLiteral = ::Myco::Component.new([::Myco.find_constant(:Node)], ::Myco.cscope.for_method_definition, __FILE__, __LINE__)
|
4
4
|
.tap { |__c__| __c__.__last__ = __c__.component_eval {(
|
5
|
-
declare_meme(:
|
6
|
-
::Myco.cscope.
|
7
|
-
:lit,
|
8
|
-
:value
|
9
|
-
])
|
5
|
+
declare_meme(:symbol, [[:node_type, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
6
|
+
declare_meme(:value, [[:field, []]], nil, ::Myco.cscope.dup) { |*| nil}
|
10
7
|
declare_meme(:bytecode, [], nil, ::Myco.cscope.dup) { |g| (
|
11
8
|
self.pos(g)
|
12
9
|
g.push_literal(self.value)
|
@@ -104,25 +104,26 @@ CodeTools::AST << {
|
|
104
104
|
TrueLiteral << { to_ruby: |g| g.add("true") }
|
105
105
|
FalseLiteral << { to_ruby: |g| g.add("false") }
|
106
106
|
|
107
|
-
|
108
|
-
|
107
|
+
NumericLiteral << { to_ruby: |g| g.add(self.value.inspect) }
|
108
|
+
StringLiteral << { to_ruby: |g| g.add(self.value.inspect) }
|
109
|
+
SymbolLiteral << { to_ruby: |g| g.add(self.value.inspect) }
|
109
110
|
|
110
|
-
|
111
|
+
StringCompose << {
|
111
112
|
to_ruby: |g| {
|
112
113
|
g.add('"')
|
113
114
|
self.body.each_slice(2) |string, to_string| {
|
114
|
-
g.add(string.value.to_s.inspect.slice(
|
115
|
+
g.add(string.value.to_s.inspect.slice(Range.new(1, -2)))
|
115
116
|
to_string && (g.add('#{'); g.add(to_string); g.add('}'))
|
116
117
|
}
|
117
118
|
g.add('"')
|
118
119
|
}
|
119
120
|
}
|
120
121
|
|
121
|
-
|
122
|
+
SymbolCompose << {
|
122
123
|
to_ruby: |g| {
|
123
124
|
g.add(':"')
|
124
125
|
self.body.each_slice(2) |string, to_string| {
|
125
|
-
g.add(string.value.to_s.inspect.slice(
|
126
|
+
g.add(string.value.to_s.inspect.slice(Range.new(1, -2)))
|
126
127
|
to_string && (g.add('#{'); g.add(to_string); g.add('}'))
|
127
128
|
}
|
128
129
|
g.add('"')
|
@@ -150,7 +151,12 @@ CodeTools::AST << {
|
|
150
151
|
first_name = name_list.shift
|
151
152
|
|
152
153
|
self.toplevel &? (
|
153
|
-
|
154
|
+
first_name case(
|
155
|
+
:Myco, &{ g.add("::Myco") },
|
156
|
+
:Ruby, &{ g.add("::Object") },
|
157
|
+
:Rubinius, &{ g.add("::Rubinius") },
|
158
|
+
&{ g.add("::Myco::"first_name"") }
|
159
|
+
)
|
154
160
|
) ?? (
|
155
161
|
g.add("::Myco.find_constant("first_name.inspect")")
|
156
162
|
)
|
@@ -165,7 +171,16 @@ CodeTools::AST << {
|
|
165
171
|
first_name = name_list.any? && name_list.shift
|
166
172
|
|
167
173
|
self.constant.toplevel &? (
|
168
|
-
first_name
|
174
|
+
first_name &? (
|
175
|
+
first_name case(
|
176
|
+
:Myco, &{ g.add("::Myco") },
|
177
|
+
:Ruby, &{ g.add("::Object") },
|
178
|
+
:Rubinius, &{ g.add("::Rubinius") },
|
179
|
+
&{ g.add("::Myco::"first_name"") }
|
180
|
+
)
|
181
|
+
) ?? (
|
182
|
+
g.add("::Myco")
|
183
|
+
)
|
169
184
|
) ?? (
|
170
185
|
first_name &? (
|
171
186
|
g.add("::Myco.find_constant("first_name.inspect")")
|
@@ -189,14 +204,14 @@ CodeTools::AST << {
|
|
189
204
|
}
|
190
205
|
}
|
191
206
|
|
192
|
-
|
207
|
+
DeclareExtension << {
|
193
208
|
to_ruby: |g| {
|
194
209
|
g.add(self.constant); g.add(".component_eval {")
|
195
210
|
g.add(self.body); g.add("}")
|
196
211
|
}
|
197
212
|
}
|
198
213
|
|
199
|
-
|
214
|
+
DeclaredScope << {
|
200
215
|
to_ruby: |g|
|
201
216
|
g.with_nested_var_scope(self) { g.add(self.body) }
|
202
217
|
}
|
@@ -245,53 +260,19 @@ CodeTools::AST << {
|
|
245
260
|
}
|
246
261
|
}
|
247
262
|
|
248
|
-
|
249
|
-
|
250
|
-
}
|
263
|
+
RequiredParameter << { to_ruby: |g| g.add(""self.name"") }
|
264
|
+
OptionalParameter << { to_ruby: |g| g.add(""self.name"="); g.add(self.value) }
|
265
|
+
RestParameter << { to_ruby: |g| g.add("*"self.name"") }
|
266
|
+
|
267
|
+
KeywordRequiredParameter << { to_ruby: |g| g.add(""self.name":") }
|
268
|
+
KeywordOptionalParameter << { to_ruby: |g| g.add(""self.name":"); g.add(self.value) }
|
269
|
+
KeywordRestParameter << { to_ruby: |g| g.add("**"self.name"") }
|
270
|
+
|
271
|
+
BlockParameter << { to_ruby: |g| g.add("&"self.name"") }
|
251
272
|
|
252
273
|
ParameterAssembly << {
|
253
|
-
to_ruby: |g|
|
254
|
-
list
|
255
|
-
list_add = Proc.new |&blk| { list.push(Proc.new(&blk)) }
|
256
|
-
|
257
|
-
self.required.each |item| { list_add.call { g.add(item.to_s) } }
|
258
|
-
|
259
|
-
self.optional.each |asgn| {
|
260
|
-
name = asgn.name
|
261
|
-
value = asgn.value
|
262
|
-
list_add.call {
|
263
|
-
g.add(""name"=")
|
264
|
-
(value.is_a?(SymbolLiteral) && value.value==:"*") || g.add(value)
|
265
|
-
}
|
266
|
-
}
|
267
|
-
|
268
|
-
(self.splat == true) &? (
|
269
|
-
list_add.call { g.add("*") }
|
270
|
-
) ?? (self.splat &? ( # TODO: make prettier elsif alternative
|
271
|
-
list_add.call { g.add("*"self.splat"") }
|
272
|
-
))
|
273
|
-
|
274
|
-
self.post.each |item| { list_add.call { g.add(item.to_s) } }
|
275
|
-
|
276
|
-
self.kwargs.each |asgn| {
|
277
|
-
name = asgn.name
|
278
|
-
value = asgn.value
|
279
|
-
list_add.call {
|
280
|
-
g.add(""name":")
|
281
|
-
(value.is_a?(SymbolLiteral) && value.value==:"*") || g.add(value)
|
282
|
-
}
|
283
|
-
}
|
284
|
-
|
285
|
-
(self.kwrest == true) &? (
|
286
|
-
list_add.call { g.add("**") }
|
287
|
-
) ?? (self.kwrest &? ( # TODO: make prettier elsif alternative
|
288
|
-
list_add.call { g.add("**"self.kwrest"") }
|
289
|
-
))
|
290
|
-
|
291
|
-
self.block && list_add.call { g.add(self.block) }
|
292
|
-
|
293
|
-
g.add("|"); g.list(list, ", ") |proc| { proc.call }; g.add("|")
|
294
|
-
}
|
274
|
+
to_ruby: |g|
|
275
|
+
g.add("|"); g.list(self.all_params, ", "); g.add("|")
|
295
276
|
}
|
296
277
|
|
297
278
|
Sequence << {
|
@@ -381,12 +362,14 @@ CodeTools::AST << {
|
|
381
362
|
|
382
363
|
Quest << {
|
383
364
|
to_ruby: |g| {
|
365
|
+
# TODO: make this output more verbose, but more correct, and without duping the questable
|
384
366
|
associated_questable = self.questable.dup
|
385
367
|
associated_questable.receiver = self.receiver
|
386
368
|
|
387
369
|
g.add("(")
|
388
|
-
g.add(
|
389
|
-
g.add(
|
370
|
+
g.add("Rubinius::Type.object_respond_to?(")
|
371
|
+
g.add(self.receiver)
|
372
|
+
g.add(", "self.questable.name.inspect").false?")
|
390
373
|
g.add(" ? ::Myco::Void : ")
|
391
374
|
g.add(associated_questable)
|
392
375
|
g.add(")")
|