123456789_123456789_123456789_123456789_123456789_

Class: Prism::DesugarCompiler

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Prism::MutationCompiler
Defined in: lib/prism/desugar_compiler.rb

Overview

DesugarCompiler is a compiler that desugars Ruby code into a more primitive form. This is useful for consumers that want to deal with fewer node types.

Instance Method Summary

MutationCompiler - Inherited

#visit_alias_global_variable_node
#visit_alias_method_node

Copy a AliasMethodNode node.

#visit_alternation_pattern_node
#visit_and_node

Copy a AndNode node.

#visit_arguments_node

Copy a ArgumentsNode node.

#visit_array_node

Copy a ArrayNode node.

#visit_array_pattern_node

Copy a ArrayPatternNode node.

#visit_assoc_node

Copy a AssocNode node.

#visit_assoc_splat_node

Copy a AssocSplatNode node.

#visit_back_reference_read_node
#visit_begin_node

Copy a BeginNode node.

#visit_block_argument_node

Copy a BlockArgumentNode node.

#visit_block_local_variable_node
#visit_block_node

Copy a BlockNode node.

#visit_block_parameter_node

Copy a BlockParameterNode node.

#visit_block_parameters_node

Copy a BlockParametersNode node.

#visit_break_node

Copy a BreakNode node.

#visit_call_and_write_node

Copy a CallAndWriteNode node.

#visit_call_node

Copy a CallNode node.

#visit_call_operator_write_node
#visit_call_or_write_node

Copy a CallOrWriteNode node.

#visit_call_target_node

Copy a CallTargetNode node.

#visit_capture_pattern_node

Copy a CapturePatternNode node.

#visit_case_match_node

Copy a CaseMatchNode node.

#visit_case_node

Copy a CaseNode node.

#visit_class_node

Copy a ClassNode node.

#visit_class_variable_and_write_node
#visit_class_variable_operator_write_node
#visit_class_variable_or_write_node
#visit_class_variable_read_node
#visit_class_variable_target_node
#visit_class_variable_write_node
#visit_constant_and_write_node
#visit_constant_operator_write_node
#visit_constant_or_write_node

Copy a ConstantOrWriteNode node.

#visit_constant_path_and_write_node
#visit_constant_path_node

Copy a ConstantPathNode node.

#visit_constant_path_operator_write_node
#visit_constant_path_or_write_node
#visit_constant_path_target_node
#visit_constant_path_write_node
#visit_constant_read_node

Copy a ConstantReadNode node.

#visit_constant_target_node

Copy a ConstantTargetNode node.

#visit_constant_write_node

Copy a ConstantWriteNode node.

#visit_def_node

Copy a DefNode node.

#visit_defined_node

Copy a DefinedNode node.

#visit_else_node

Copy a ElseNode node.

#visit_embedded_statements_node
#visit_embedded_variable_node
#visit_ensure_node

Copy a EnsureNode node.

#visit_false_node

Copy a FalseNode node.

#visit_find_pattern_node

Copy a FindPatternNode node.

#visit_flip_flop_node

Copy a FlipFlopNode node.

#visit_float_node

Copy a FloatNode node.

#visit_for_node

Copy a ForNode node.

#visit_forwarding_arguments_node
#visit_forwarding_parameter_node
#visit_forwarding_super_node

Copy a ForwardingSuperNode node.

#visit_global_variable_and_write_node
#visit_global_variable_operator_write_node
#visit_global_variable_or_write_node
#visit_global_variable_read_node
#visit_global_variable_target_node
#visit_global_variable_write_node
#visit_hash_node

Copy a HashNode node.

#visit_hash_pattern_node

Copy a HashPatternNode node.

#visit_if_node

Copy a IfNode node.

#visit_imaginary_node

Copy a ImaginaryNode node.

#visit_implicit_node

Copy a ImplicitNode node.

#visit_implicit_rest_node

Copy a ImplicitRestNode node.

#visit_in_node

Copy a InNode node.

#visit_index_and_write_node

Copy a IndexAndWriteNode node.

#visit_index_operator_write_node
#visit_index_or_write_node

Copy a IndexOrWriteNode node.

#visit_index_target_node

Copy a IndexTargetNode node.

#visit_instance_variable_and_write_node
#visit_instance_variable_operator_write_node
#visit_instance_variable_or_write_node
#visit_instance_variable_read_node
#visit_instance_variable_target_node
#visit_instance_variable_write_node
#visit_integer_node

Copy a IntegerNode node.

#visit_interpolated_match_last_line_node
#visit_interpolated_regular_expression_node
#visit_interpolated_string_node
#visit_interpolated_symbol_node
#visit_interpolated_x_string_node
#visit_keyword_hash_node

Copy a KeywordHashNode node.

#visit_keyword_rest_parameter_node
#visit_lambda_node

Copy a LambdaNode node.

#visit_local_variable_and_write_node
#visit_local_variable_operator_write_node
#visit_local_variable_or_write_node
#visit_local_variable_read_node
#visit_local_variable_target_node
#visit_local_variable_write_node
#visit_match_last_line_node

Copy a MatchLastLineNode node.

#visit_match_predicate_node

Copy a MatchPredicateNode node.

#visit_match_required_node

Copy a MatchRequiredNode node.

#visit_match_write_node

Copy a MatchWriteNode node.

#visit_missing_node

Copy a MissingNode node.

#visit_module_node

Copy a ModuleNode node.

#visit_multi_target_node

Copy a MultiTargetNode node.

#visit_multi_write_node

Copy a MultiWriteNode node.

#visit_next_node

Copy a NextNode node.

#visit_nil_node

Copy a NilNode node.

#visit_no_keywords_parameter_node
#visit_numbered_parameters_node
#visit_numbered_reference_read_node
#visit_optional_keyword_parameter_node
#visit_optional_parameter_node
#visit_or_node

Copy a OrNode node.

#visit_parameters_node

Copy a ParametersNode node.

#visit_parentheses_node

Copy a ParenthesesNode node.

#visit_pinned_expression_node
#visit_pinned_variable_node

Copy a PinnedVariableNode node.

#visit_post_execution_node

Copy a PostExecutionNode node.

#visit_pre_execution_node

Copy a PreExecutionNode node.

#visit_program_node

Copy a ProgramNode node.

#visit_range_node

Copy a RangeNode node.

#visit_rational_node

Copy a RationalNode node.

#visit_redo_node

Copy a RedoNode node.

#visit_regular_expression_node
#visit_required_keyword_parameter_node
#visit_required_parameter_node
#visit_rescue_modifier_node

Copy a RescueModifierNode node.

#visit_rescue_node

Copy a RescueNode node.

#visit_rest_parameter_node

Copy a RestParameterNode node.

#visit_retry_node

Copy a RetryNode node.

#visit_return_node

Copy a ReturnNode node.

#visit_self_node

Copy a SelfNode node.

#visit_singleton_class_node

Copy a SingletonClassNode node.

#visit_source_encoding_node

Copy a SourceEncodingNode node.

#visit_source_file_node

Copy a SourceFileNode node.

#visit_source_line_node

Copy a SourceLineNode node.

#visit_splat_node

Copy a SplatNode node.

#visit_statements_node

Copy a StatementsNode node.

#visit_string_node

Copy a StringNode node.

#visit_super_node

Copy a SuperNode node.

#visit_symbol_node

Copy a SymbolNode node.

#visit_true_node

Copy a TrueNode node.

#visit_undef_node

Copy a UndefNode node.

#visit_unless_node

Copy a UnlessNode node.

#visit_until_node

Copy a UntilNode node.

#visit_when_node

Copy a WhenNode node.

#visit_while_node

Copy a WhileNode node.

#visit_x_string_node

Copy a XStringNode node.

#visit_yield_node

Copy a YieldNode node.

Compiler - Inherited

#visit

Visit an individual node.

#visit_alias_global_variable_node
#visit_alias_method_node
#visit_all

Visit a list of nodes.

#visit_alternation_pattern_node
#visit_and_node
#visit_arguments_node
#visit_array_node
#visit_array_pattern_node
#visit_assoc_node
#visit_assoc_splat_node
#visit_back_reference_read_node
#visit_begin_node
#visit_block_argument_node
#visit_block_local_variable_node
#visit_block_node
#visit_block_parameter_node
#visit_block_parameters_node
#visit_break_node
#visit_call_and_write_node
#visit_call_node
#visit_call_operator_write_node
#visit_call_or_write_node
#visit_call_target_node
#visit_capture_pattern_node
#visit_case_match_node
#visit_case_node
#visit_child_nodes

Visit the child nodes of the given node.

#visit_class_node
#visit_class_variable_and_write_node
#visit_class_variable_operator_write_node
#visit_class_variable_or_write_node
#visit_class_variable_read_node
#visit_class_variable_target_node
#visit_class_variable_write_node
#visit_constant_and_write_node
#visit_constant_operator_write_node
#visit_constant_or_write_node
#visit_constant_path_and_write_node
#visit_constant_path_node
#visit_constant_path_operator_write_node
#visit_constant_path_or_write_node
#visit_constant_path_target_node
#visit_constant_path_write_node
#visit_constant_read_node
#visit_constant_target_node
#visit_constant_write_node
#visit_def_node
#visit_defined_node
#visit_else_node
#visit_embedded_statements_node
#visit_embedded_variable_node
#visit_ensure_node
#visit_false_node
#visit_find_pattern_node
#visit_flip_flop_node
#visit_float_node
#visit_for_node
#visit_forwarding_arguments_node
#visit_forwarding_parameter_node
#visit_forwarding_super_node
#visit_global_variable_and_write_node
#visit_global_variable_operator_write_node
#visit_global_variable_or_write_node
#visit_global_variable_read_node
#visit_global_variable_target_node
#visit_global_variable_write_node
#visit_hash_node
#visit_hash_pattern_node
#visit_if_node
#visit_imaginary_node
#visit_implicit_node
#visit_implicit_rest_node
#visit_in_node
#visit_index_and_write_node
#visit_index_operator_write_node
#visit_index_or_write_node
#visit_index_target_node
#visit_instance_variable_and_write_node
#visit_instance_variable_operator_write_node
#visit_instance_variable_or_write_node
#visit_instance_variable_read_node
#visit_instance_variable_target_node
#visit_instance_variable_write_node
#visit_integer_node
#visit_interpolated_match_last_line_node
#visit_interpolated_regular_expression_node
#visit_interpolated_string_node
#visit_interpolated_symbol_node
#visit_interpolated_x_string_node
#visit_keyword_hash_node
#visit_keyword_rest_parameter_node
#visit_lambda_node
#visit_local_variable_and_write_node
#visit_local_variable_operator_write_node
#visit_local_variable_or_write_node
#visit_local_variable_read_node
#visit_local_variable_target_node
#visit_local_variable_write_node
#visit_match_last_line_node
#visit_match_predicate_node
#visit_match_required_node
#visit_match_write_node
#visit_missing_node
#visit_module_node
#visit_multi_target_node
#visit_multi_write_node
#visit_next_node
#visit_nil_node
#visit_no_keywords_parameter_node
#visit_numbered_parameters_node
#visit_numbered_reference_read_node
#visit_optional_keyword_parameter_node
#visit_optional_parameter_node
#visit_or_node
#visit_parameters_node
#visit_parentheses_node
#visit_pinned_expression_node
#visit_pinned_variable_node
#visit_post_execution_node
#visit_pre_execution_node
#visit_program_node
#visit_range_node
#visit_rational_node
#visit_redo_node
#visit_regular_expression_node
#visit_required_keyword_parameter_node
#visit_required_parameter_node
#visit_rescue_modifier_node
#visit_rescue_node
#visit_rest_parameter_node
#visit_retry_node
#visit_return_node
#visit_self_node
#visit_singleton_class_node
#visit_source_encoding_node
#visit_source_file_node
#visit_source_line_node
#visit_splat_node
#visit_statements_node
#visit_string_node
#visit_super_node
#visit_symbol_node
#visit_true_node
#visit_undef_node
#visit_unless_node
#visit_until_node
#visit_when_node
#visit_while_node
#visit_x_string_node
#visit_yield_node

Instance Method Details

#visit_class_variable_and_write_node(node)

@@foo &&= bar

becomes

@@foo && @@foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 224

def visit_class_variable_and_write_node(node)
  node.desugar
end

#visit_class_variable_operator_write_node(node)

@@foo += bar

becomes

@@foo = @@foo + bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 242

def visit_class_variable_operator_write_node(node)
  node.desugar
end

#visit_class_variable_or_write_node(node)

@@foo ||= bar

becomes

defined?(@@foo) ? @@foo : @@foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 233

def visit_class_variable_or_write_node(node)
  node.desugar
end

#visit_constant_and_write_node(node)

Foo &&= bar

becomes

Foo && Foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 251

def visit_constant_and_write_node(node)
  node.desugar
end

#visit_constant_operator_write_node(node)

Foo += bar

becomes

Foo = Foo + bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 269

def visit_constant_operator_write_node(node)
  node.desugar
end

#visit_constant_or_write_node(node)

Foo ||= bar

becomes

defined?(Foo) ? Foo : Foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 260

def visit_constant_or_write_node(node)
  node.desugar
end

#visit_global_variable_and_write_node(node)

$foo &&= bar

becomes

$foo && $foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 278

def visit_global_variable_and_write_node(node)
  node.desugar
end

#visit_global_variable_operator_write_node(node)

$foo += bar

becomes

$foo = $foo + bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 296

def visit_global_variable_operator_write_node(node)
  node.desugar
end

#visit_global_variable_or_write_node(node)

$foo ||= bar

becomes

defined?($foo) ? $foo : $foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 287

def visit_global_variable_or_write_node(node)
  node.desugar
end

#visit_instance_variable_and_write_node(node)

becomes

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 305

def visit_instance_variable_and_write_node(node)
  node.desugar
end

#visit_instance_variable_operator_write_node(node)

becomes

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 323

def visit_instance_variable_operator_write_node(node)
  node.desugar
end

#visit_instance_variable_or_write_node(node)

becomes

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 314

def visit_instance_variable_or_write_node(node)
  node.desugar
end

#visit_local_variable_and_write_node(node)

foo &&= bar

becomes

foo && foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 332

def visit_local_variable_and_write_node(node)
  node.desugar
end

#visit_local_variable_operator_write_node(node)

foo += bar

becomes

foo = foo + bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 350

def visit_local_variable_operator_write_node(node)
  node.desugar
end

#visit_local_variable_or_write_node(node)

foo ||= bar

becomes

foo || foo = bar

[ GitHub ]

  
# File 'lib/prism/desugar_compiler.rb', line 341

def visit_local_variable_or_write_node(node)
  node.desugar
end