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
@@ -2,9 +2,8 @@
2
2
  CodeTools::AST << {
3
3
 
4
4
  Quest < Node {
5
- var receiver, var questable
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 self.receiver.respond_to?(self.questable.name).false?
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
- g.dup_top # dup the receiver to save it for later
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(:"respond_to?", 1)
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.push_cpath_top
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
- Form: [:qrcvr]
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(:receiver, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- declare_meme(:questable, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
7
- ::Myco.cscope.for_method_definition::Form = ([
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
- :respond_to?,
28
- 1
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.push_cpath_top
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.for_method_definition::Form = ([:qrcvr])
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,12 @@
1
+
2
+ CodeTools::AST << {
3
+
4
+ RequiredParameter < Node {
5
+ node_type reqprm
6
+ field name
7
+
8
+ map_local: |scope| scope.new_local(self.name)
9
+ bytecode: |g| { }
10
+ }
11
+
12
+ }
@@ -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,12 @@
1
+
2
+ CodeTools::AST << {
3
+
4
+ RestParameter < Node {
5
+ node_type restprm
6
+ field name
7
+
8
+ map_local: |scope| scope.new_local(self.name || :"*")
9
+ bytecode: |g| { }
10
+ }
11
+
12
+ }
@@ -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
- var file, var body
7
- var variable_scope # TODO: remove?
6
+ node_type script
7
+ field file, field body
8
8
 
9
- Form: [:script, :file, :body]
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 = :"__script__"
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(:file, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- declare_meme(:body, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
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,9 +2,8 @@
2
2
  CodeTools::AST << {
3
3
 
4
4
  Sequence < Node {
5
- var array
6
-
7
- Form: [:sequence, :array]
5
+ node_type sequence
6
+ field array
8
7
 
9
8
  bytecode: |g| {
10
9
  ary = self.array.dup
@@ -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(:array, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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
- var value
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(:"Runtime")
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(:value, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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,10 +1,9 @@
1
1
 
2
2
  CodeTools::AST << {
3
3
 
4
- DynamicString < Node {
5
- var body
6
-
7
- Form: [:dstr, :body]
4
+ StringCompose < Node {
5
+ node_type string_compose
6
+ field body
8
7
 
9
8
  bytecode: |g| {
10
9
  pos(g)
@@ -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::DynamicString = ::Myco::Component.new([::Myco.find_constant(:Node)], ::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::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(:body, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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__ = :DynamicString })})}}.instance
19
+ .tap { |__c__| __c__.__name__ = :StringCompose })})}}.instance
@@ -2,9 +2,8 @@
2
2
  CodeTools::AST << {
3
3
 
4
4
  StringLiteral < Node {
5
- var value
6
-
7
- Form: [:str, :value]
5
+ node_type str
6
+ field value
8
7
 
9
8
  bytecode: |g| {
10
9
  pos(g)
@@ -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(:value, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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,10 +1,9 @@
1
1
 
2
2
  CodeTools::AST << {
3
3
 
4
- DynamicSymbol < Node {
5
- var body
6
-
7
- Form: [:dsym, :body]
4
+ SymbolCompose < Node {
5
+ node_type symbol_compose
6
+ field body
8
7
 
9
8
  bytecode: |g| {
10
9
  pos(g)
@@ -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::DynamicSymbol = ::Myco::Component.new([::Myco.find_constant(:Node)], ::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::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(:body, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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__ = :DynamicSymbol })})}}.instance
23
+ .tap { |__c__| __c__.__name__ = :SymbolCompose })})}}.instance
@@ -2,9 +2,8 @@
2
2
  CodeTools::AST << {
3
3
 
4
4
  SymbolLiteral < Node {
5
- var value
6
-
7
- Form: [:lit, :value]
5
+ node_type symbol
6
+ field value
8
7
 
9
8
  bytecode: |g| {
10
9
  pos(g)
@@ -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(:value, [[:var, []]], nil, ::Myco.cscope.dup) { |*| nil}
6
- ::Myco.cscope.for_method_definition::Form = ([
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
- StringLiteral << { to_ruby: |g| g.add(self.value.inspect) }
108
- SymbolLiteral << { to_ruby: |g| g.add(self.value.inspect) }
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
- DynamicString << {
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(::Range.new(1, -2)))
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
- DynamicSymbol << {
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(::Range.new(1, -2)))
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
- g.add("::"first_name"")
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 && g.add("::"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
- ConstantReopen << {
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
- MycoModuleScope << {
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
- BlockParameter << {
249
- to_ruby: |g| g.add("&"self.name"")
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(self.receiver)
389
- g.add(".respond_to?("self.questable.name.inspect").false?")
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(")")