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/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

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

Class Method Summary collapse

Instance Method Summary collapse

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

Parameters:

  • node (Rubinius::AST::Node)
  • buffer (Array<Command>)


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

#bufferArray<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

Returns:



117
118
119
# File 'lib/to_source/emitter.rb', line 117

def buffer
  @buffer
end

#nodeRubinius::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

Returns:

  • (Rubinius::AST::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

Parameters:

  • node (Rubinius::AST::Node)
  • buffer (Array) (defaults to: [])

Returns:



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

Parameters:

  • name (Symbol)

Returns:

  • (undefined)


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

Parameters:

  • node (Rubinius::AST::Node)

Returns:

  • (String)


30
31
32
# File 'lib/to_source/emitter.rb', line 30

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

Instance Method Details

#sourceString

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

Returns:

  • (String)


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