Module: RLSL::Prism::Emitters::BaseEmitter::ExpressionEmission
- Included in:
- RLSL::Prism::Emitters::BaseEmitter
- Defined in:
- lib/rlsl/prism/emitters/base_emitter/expression_emission.rb
Instance Method Summary collapse
- #emit_array_index(node) ⇒ Object
- #emit_assignment(node) ⇒ Object
- #emit_binary_op(node) ⇒ Object
- #emit_bool_literal(node) ⇒ Object
- #emit_constant(node) ⇒ Object
- #emit_field_access(node) ⇒ Object
- #emit_func_call(node) ⇒ Object
- #emit_literal(node) ⇒ Object
- #emit_parenthesized(node) ⇒ Object
- #emit_swizzle(node) ⇒ Object
- #emit_ternary(node) ⇒ Object
- #emit_unary_op(node) ⇒ Object
- #emit_var_decl(node) ⇒ Object
- #emit_var_ref(node) ⇒ Object
Instance Method Details
#emit_array_index(node) ⇒ Object
79 80 81 82 83 84 85 86 87 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 79 def emit_array_index(node) array = emit(node.array) index = if node.index.is_a?(IR::Literal) && node.index.value.to_i == node.index.value node.index.value.to_i.to_s else emit(node.index) end "#{array}[#{index}]" end |
#emit_assignment(node) ⇒ Object
60 61 62 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 60 def emit_assignment(node) "#{emit(node.target)} = #{emit(node.value)}" end |
#emit_binary_op(node) ⇒ Object
26 27 28 29 30 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 26 def emit_binary_op(node) left = emit_with_precedence(node.left, node.operator) right = emit_with_precedence(node.right, node.operator) "#{left} #{node.operator} #{right}" end |
#emit_bool_literal(node) ⇒ Object
22 23 24 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 22 def emit_bool_literal(node) node.value.to_s end |
#emit_constant(node) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 64 def emit_constant(node) case node.name when :PI "3.14159265358979323846" when :TAU "6.28318530717958647692" else node.name.to_s end end |
#emit_field_access(node) ⇒ Object
48 49 50 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 48 def emit_field_access(node) "#{emit(node.receiver)}.#{node.field}" end |
#emit_func_call(node) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 36 def emit_func_call(node) func_name = function_name(node.name) args = node.args.map { |arg| emit(arg) }.join(", ") if node.receiver receiver = emit(node.receiver) "#{func_name}(#{receiver}, #{args})" else "#{func_name}(#{args})" end end |
#emit_literal(node) ⇒ Object
18 19 20 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 18 def emit_literal(node) format_number(node.value) end |
#emit_parenthesized(node) ⇒ Object
75 76 77 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 75 def emit_parenthesized(node) "(#{emit(node.expression)})" end |
#emit_swizzle(node) ⇒ Object
52 53 54 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 52 def emit_swizzle(node) "#{emit(node.receiver)}.#{node.components}" end |
#emit_ternary(node) ⇒ Object
56 57 58 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 56 def emit_ternary(node) "(#{emit(node.condition)} ? #{emit(node.then_expr)} : #{emit(node.else_expr)})" end |
#emit_unary_op(node) ⇒ Object
32 33 34 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 32 def emit_unary_op(node) "#{node.operator}#{emit(node.operand)}" end |
#emit_var_decl(node) ⇒ Object
8 9 10 11 12 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 8 def emit_var_decl(node) type = type_name(node.type || :float) value = emit(node.initializer) "#{type} #{node.name} = #{value}" end |
#emit_var_ref(node) ⇒ Object
14 15 16 |
# File 'lib/rlsl/prism/emitters/base_emitter/expression_emission.rb', line 14 def emit_var_ref(node) node.name.to_s end |