Class: RLSL::Prism::Emitters::BaseEmitter

Inherits:
Object
  • Object
show all
Includes:
ControlFlowEmission, DefinitionEmission, ExpressionEmission, StatementEmission
Defined in:
lib/rlsl/prism/emitters/base_emitter.rb,
lib/rlsl/prism/emitters/base_emitter/statement_emission.rb,
lib/rlsl/prism/emitters/base_emitter/definition_emission.rb,
lib/rlsl/prism/emitters/base_emitter/expression_emission.rb,
lib/rlsl/prism/emitters/base_emitter/control_flow_emission.rb

Direct Known Subclasses

TargetEmitter

Defined Under Namespace

Modules: ControlFlowEmission, DefinitionEmission, ExpressionEmission, StatementEmission

Constant Summary collapse

PRECEDENCE =
{
  "||" => 1,
  "&&" => 2,
  "==" => 3, "!=" => 3,
  "<" => 4, ">" => 4, "<=" => 4, ">=" => 4,
  "+" => 5, "-" => 5,
  "*" => 6, "/" => 6, "%" => 6
}.freeze
MULTILINE_NODES =
[
  IR::IfStatement,
  IR::ForLoop,
  IR::WhileLoop,
  IR::FunctionDefinition
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StatementEmission

#emit_block, #emit_branch, #emit_indented_block, #emit_statement, #emit_statements, #emit_terminal_statement

Methods included from DefinitionEmission

#current_return_struct_name, #emit_array_literal, #emit_for_static_init, #emit_function_definition, #emit_global_decl, #emit_multiple_assignment, #emit_result_struct

Methods included from ExpressionEmission

#emit_array_index, #emit_assignment, #emit_binary_op, #emit_bool_literal, #emit_constant, #emit_field_access, #emit_func_call, #emit_literal, #emit_parenthesized, #emit_swizzle, #emit_ternary, #emit_unary_op, #emit_var_decl, #emit_var_ref

Methods included from ControlFlowEmission

#elsif_node?, #emit_break, #emit_conditional, #emit_elsif, #emit_for_loop, #emit_if_statement, #emit_return, #emit_tuple_return, #emit_while_loop

Constructor Details

#initializeBaseEmitter

Returns a new instance of BaseEmitter.



66
67
68
69
# File 'lib/rlsl/prism/emitters/base_emitter.rb', line 66

def initialize
  @indent_level = 0
  @return_context_stack = [false]
end

Instance Attribute Details

#indent_levelObject (readonly)

Returns the value of attribute indent_level.



64
65
66
# File 'lib/rlsl/prism/emitters/base_emitter.rb', line 64

def indent_level
  @indent_level
end

Instance Method Details

#emit(node, needs_return: false) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/rlsl/prism/emitters/base_emitter.rb', line 71

def emit(node, needs_return: false)
  with_return_context(needs_return) do
    return node.accept(self) if node.respond_to?(:accept)

    raise "Unknown IR node: #{node.class}"
  end
end