Class: RLSL::Prism::Emitters::BaseEmitter
- Inherits:
-
Object
- Object
- RLSL::Prism::Emitters::BaseEmitter
- 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
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
-
#indent_level ⇒ Object
readonly
Returns the value of attribute indent_level.
Instance Method Summary collapse
- #emit(node, needs_return: false) ⇒ Object
-
#initialize ⇒ BaseEmitter
constructor
A new instance of BaseEmitter.
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
#initialize ⇒ BaseEmitter
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_level ⇒ Object (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 |