Class: ToSource::Emitter
- Inherits:
-
Object
- Object
- ToSource::Emitter
- Includes:
- Adamantium::Flat
- Defined in:
- lib/to_source/emitter.rb,
lib/to_source/emitter/if.rb,
lib/to_source/emitter/case.rb,
lib/to_source/emitter/iter.rb,
lib/to_source/emitter/loop.rb,
lib/to_source/emitter/send.rb,
lib/to_source/emitter/util.rb,
lib/to_source/emitter/when.rb,
lib/to_source/emitter/alias.rb,
lib/to_source/emitter/begin.rb,
lib/to_source/emitter/block.rb,
lib/to_source/emitter/class.rb,
lib/to_source/emitter/scope.rb,
lib/to_source/emitter/splat.rb,
lib/to_source/emitter/super.rb,
lib/to_source/emitter/yield.rb,
lib/to_source/emitter/access.rb,
lib/to_source/emitter/define.rb,
lib/to_source/emitter/ensure.rb,
lib/to_source/emitter/match3.rb,
lib/to_source/emitter/module.rb,
lib/to_source/emitter/rescue.rb,
lib/to_source/emitter/static.rb,
lib/to_source/emitter/unless.rb,
lib/to_source/emitter/defined.rb,
lib/to_source/emitter/literal.rb,
lib/to_source/emitter/nth_ref.rb,
lib/to_source/emitter/z_super.rb,
lib/to_source/emitter/to_array.rb,
lib/to_source/emitter/toplevel.rb,
lib/to_source/emitter/to_string.rb,
lib/to_source/emitter/assignment.rb,
lib/to_source/emitter/block_pass.rb,
lib/to_source/emitter/empty_body.rb,
lib/to_source/emitter/op_assign1.rb,
lib/to_source/emitter/op_assign2.rb,
lib/to_source/emitter/scope_name.rb,
lib/to_source/emitter/splat_when.rb,
lib/to_source/emitter/ensure_body.rb,
lib/to_source/emitter/scoped_name.rb,
lib/to_source/emitter/keyword_value.rb,
lib/to_source/emitter/block_argument.rb,
lib/to_source/emitter/execute_string.rb,
lib/to_source/emitter/binary_operator.rb,
lib/to_source/emitter/literal/dynamic.rb,
lib/to_source/emitter/singleton_class.rb,
lib/to_source/emitter/actual_arguments.rb,
lib/to_source/emitter/concat_arguments.rb,
lib/to_source/emitter/formal_arguments.rb,
lib/to_source/emitter/rescue_condition.rb,
lib/to_source/emitter/default_arguments.rb,
lib/to_source/emitter/element_reference.rb,
lib/to_source/emitter/pattern_arguments.rb,
lib/to_source/emitter/element_assignment.rb,
lib/to_source/emitter/multiple_assignment.rb,
lib/to_source/emitter/send_with_arguments.rb,
lib/to_source/emitter/attribute_assignment.rb,
lib/to_source/emitter/unary_operator_method.rb,
lib/to_source/emitter/binary_operator_method.rb
Overview
Abstract base class for emitter
Direct Known Subclasses
Access, ActualArguments, Alias, Assignment, AssignmentOperator, AttributeAssignment, Begin, BinaryOperator, BinaryOperatorMethod, Block, BlockArgument, BlockPass, Case, Class, ConcatArguments, DefaultArguments, Define, DefineSingleton, Defined, ElementAssignment, ElementReference, EmptyBody, Ensure, EnsureBody, ExecuteString, FormalArguments, If, Iter, KeywordValue, Literal, Loop, Match3, Module, MultipleAssignment, NthRef, OpAssign1, OpAssign2, PatternArguments, Rescue, RescueCondition, Scope, ScopeName, ScopedName, Send, SingletonClass, Splat, SplatWhen, Static, Super, ToArray, ToString, Toplevel, Unless, Util, When, Yield, ZSuper
Defined Under Namespace
Classes: Access, ActualArguments, Alias, Assignment, AssignmentOperator, AttributeAssignment, Begin, BinaryOperator, BinaryOperatorMethod, Block, BlockArgument, BlockPass, Case, Class, ConcatArguments, DefaultArguments, Define, DefineSingleton, Defined, ElementAssignment, ElementReference, EmptyBody, Ensure, EnsureBody, ExecuteString, FormalArguments, If, Iter, KeywordValue, Literal, Loop, Match3, Module, MultipleAssignment, NthRef, OpAssign1, OpAssign2, PatternArguments, Rescue, RescueCondition, Scope, ScopeName, ScopedName, Send, SendWithArguments, SingletonClass, Splat, SplatWhen, Static, Super, ToArray, ToString, Toplevel, UnaryOperatorMethod, Unless, Util, When, Yield, ZSuper
Constant Summary collapse
- REGISTRY =
The emitter registry
{}
Instance Attribute Summary collapse
-
#buffer ⇒ Array<Command>
readonly
private
Return buffer.
-
#node ⇒ Rubinius::AST::Node
readonly
private
Return node.
Class Method Summary collapse
-
.build(node, buffer = []) ⇒ Emitter
private
Build emitter for node.
-
.define_predicate(name) ⇒ undefined
private
Define predicate.
-
.run(node) ⇒ String
private
Run emitter for node.
Instance Method Summary collapse
-
#initialize(node, buffer) ⇒ undefined
constructor
private
Initialize object.
-
#source ⇒ String
private
Return source.
Constructor Details
#initialize(node, buffer) ⇒ undefined
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initialize object
136 137 138 139 |
# File 'lib/to_source/emitter.rb', line 136 def initialize(node, buffer) @node, @buffer = node, buffer dispatch end |
Instance Attribute Details
#buffer ⇒ Array<Command> (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return buffer
117 118 119 |
# File 'lib/to_source/emitter.rb', line 117 def buffer @buffer end |
#node ⇒ Rubinius::AST::Node (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return node
125 126 127 |
# File 'lib/to_source/emitter.rb', line 125 def node @node end |
Class Method Details
.build(node, buffer = []) ⇒ Emitter
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Build emitter for node
18 19 20 |
# File 'lib/to_source/emitter.rb', line 18 def self.build(node, buffer = []) REGISTRY.fetch(node.class).new(node, buffer) end |
.define_predicate(name) ⇒ undefined
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Define predicate
101 102 103 104 105 106 107 |
# File 'lib/to_source/emitter.rb', line 101 def self.define_predicate(name) predicate = :"#{name}?" define_method(predicate) do !!send(name) end private(predicate) end |
.run(node) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Run emitter for node
30 31 32 |
# File 'lib/to_source/emitter.rb', line 30 def self.run(node) build(node).source end |
Instance Method Details
#source ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return source
147 148 149 150 151 |
# File 'lib/to_source/emitter.rb', line 147 def source buffer.each_with_object(State.new) do |command, state| state.execute(command) end.source end |