Module: RLSL::Prism::Emitters::BaseEmitter::StatementEmission
- Included in:
- RLSL::Prism::Emitters::BaseEmitter
- Defined in:
- lib/rlsl/prism/emitters/base_emitter/statement_emission.rb
Instance Method Summary collapse
- #emit_block(node, needs_return = nil) ⇒ Object
- #emit_branch(node, needs_return:) ⇒ Object
- #emit_indented_block(node, needs_return: false) ⇒ Object
- #emit_statement(node, needs_return: false) ⇒ Object
- #emit_statements(statements, returning:) ⇒ Object
- #emit_terminal_statement(node) ⇒ Object
Instance Method Details
#emit_block(node, needs_return = nil) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 8 def emit_block(node, needs_return = nil) statements = node.statements return "" if statements.empty? emit_statements(statements, returning: needs_return.nil? ? return_context? : needs_return) end |
#emit_branch(node, needs_return:) ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 36 def emit_branch(node, needs_return:) with_indent do if node.is_a?(IR::Block) emit(node, needs_return: needs_return) else emit_statement(node, needs_return: needs_return) end end end |
#emit_indented_block(node, needs_return: false) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 46 def emit_indented_block(node, needs_return: false) with_indent do if node.is_a?(IR::Block) emit(node, needs_return: needs_return) else emit_statement(node, needs_return: needs_return) end end end |
#emit_statement(node, needs_return: false) ⇒ Object
22 23 24 25 26 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 22 def emit_statement(node, needs_return: false) return emit_terminal_statement(node) if needs_return "#{indent}#{emit(node)}#{statement_terminator(node)}" end |
#emit_statements(statements, returning:) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 15 def emit_statements(statements, returning:) return statements.map { |statement| emit_statement(statement) }.join unless returning leading = statements[0...-1].map { |statement| emit_statement(statement) }.join leading + emit_terminal_statement(statements.last) end |
#emit_terminal_statement(node) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/rlsl/prism/emitters/base_emitter/statement_emission.rb', line 28 def emit_terminal_statement(node) return emit(node, needs_return: true) if node.is_a?(IR::IfStatement) return emit_statement(node) if terminal_passthrough_node?(node) return emit_tuple_return(node) if node.is_a?(IR::ArrayLiteral) "#{indent}return #{emit(node)};\n" end |