Class: ToSource::Emitter

Inherits:
Object
  • Object
show all
Includes:
Adamantium::Flat
Defined in:
lib/to_source/emitter.rb,
lib/to_source/emitter/if.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/receiver_case.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

Defined Under Namespace

Classes: Access, ActualArguments, Alias, Assignment, AssignmentOperator, AttributeAssignment, Begin, BinaryOperator, BinaryOperatorMethod, Block, BlockArgument, BlockPass, 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, ReceiverCase, 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 =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#nodeObject (readonly)

Returns the value of attribute node.



28
29
30
# File 'lib/to_source/emitter.rb', line 28

def node
  @node
end

Class Method Details

.build(node, buffer = []) ⇒ Object



11
12
13
# File 'lib/to_source/emitter.rb', line 11

def self.build(node, buffer = [])
  REGISTRY.fetch(node.class).new(node, buffer)
end

.handle(node_class) ⇒ Object



7
8
9
# File 'lib/to_source/emitter.rb', line 7

def self.handle(node_class)
  REGISTRY[node_class]=self
end

.run(node) ⇒ Object



15
16
17
# File 'lib/to_source/emitter.rb', line 15

def self.run(node)
  build(node).source
end

Instance Method Details

#sourceObject



20
21
22
23
24
25
26
# File 'lib/to_source/emitter.rb', line 20

def source
  state = State.new
  buffer.each do |command|
    state.execute(command)
  end
  state.source
end