class CodeTools::Melbourne
TODO: This will change to: class Processor
Constants
- REGEXP_OPTION_PEG
Public Instance Methods
method_missing(sym, *args)
click to toggle source
TODO: remove when all processors are defined
# File lib/rubinius/code/processor/processor.rb, line 22 def method_missing(sym, *args) puts "#{self.class}#method_missing: #{sym} #{args.map { |x| x.inspect}.join(", ")}" end
process_alias(line, to, from)
click to toggle source
Processing methods
# File lib/rubinius/code/processor/processor.rb, line 29 def process_alias(line, to, from) AST::Alias.new line, to, from end
process_and(line, left, right)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 33 def process_and(line, left, right) AST::And.new line, left, right end
process_andattrasgn(line, receiver, name, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 37 def process_andattrasgn(line, receiver, name, arguments) AST::AndAttributeAssignment.new line, receiver, name, arguments end
process_args(line, required, optional, splat, post, kwargs, kwrest, block)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 41 def process_args(line, required, optional, splat, post, kwargs, kwrest, block) AST::Parameters.new line, required, optional, splat, post, kwargs, kwrest, block end
process_argscat(line, array, rest)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 45 def process_argscat(line, array, rest) AST::ConcatArgs.new line, array, rest end
process_argspush(line, arguments, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 49 def process_argspush(line, arguments, value) AST::PushArgs.new line, arguments, value end
process_array(line, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 53 def process_array(line, array) AST::ArrayLiteral.new line, array end
process_attrasgn(line, receiver, name, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 57 def process_attrasgn(line, receiver, name, arguments) if name == :[]= AST::ElementAssignment.new line, receiver, arguments else AST::AttributeAssignment.new line, receiver, name, arguments end end
process_back_ref(line, ref)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 65 def process_back_ref(line, ref) AST::BackRef.new line, ref end
process_begin(line, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 69 def process_begin(line, body) AST::Begin.new line, body end
process_block(line, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 73 def process_block(line, array) AST::Block.new line, array end
process_block_arg(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 77 def process_block_arg(line, name) AST::BlockArgument.new line, name end
process_block_pass(line, arguments, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 81 def process_block_pass(line, arguments, body) AST::BlockPass19.new line, arguments, body end
process_break(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 85 def process_break(line, value) AST::Break.new line, value end
process_call(line, receiver, name, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 89 def process_call(line, receiver, name, arguments) if arguments.kind_of? AST::BlockPass block = arguments arguments = block.arguments block.arguments = nil else block = nil end if node = process_transforms(line, receiver, name, arguments) node.block = block if block return node end if arguments node = AST::SendWithArguments.new line, receiver, name, arguments else node = AST::Send.new line, receiver, name end node.block = block node end
process_case(line, receiver, whens, else_body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 137 def process_case(line, receiver, whens, else_body) if receiver AST::ReceiverCase.new line, receiver, whens, else_body else AST::Case.new line, whens, else_body end end
process_cdecl(line, expr, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 145 def process_cdecl(line, expr, value) AST::ConstantAssignment.new line, expr, value end
process_class(line, name, superclass, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 149 def process_class(line, name, superclass, body) AST::Class.new line, name, superclass, body end
process_colon2(line, outer, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 153 def process_colon2(line, outer, name) if outer if outer.kind_of? AST::ConstantAccess and outer.name == :Rubinius case name when :Type AST::TypeConstant.new line when :Mirror AST::MirrorConstant.new line else AST::ScopedConstant.new line, outer, name end else AST::ScopedConstant.new line, outer, name end else AST::ConstantAccess.new line, name end end
process_colon3(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 173 def process_colon3(line, name) AST::ToplevelConstant.new line, name end
process_const(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 177 def process_const(line, name) AST::ConstantAccess.new line, name end
process_cvar(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 181 def process_cvar(line, name) AST::ClassVariableAccess.new line, name end
process_cvasgn(line, name, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 185 def process_cvasgn(line, name, value) AST::ClassVariableAssignment.new line, name, value end
process_cvdecl(line, name, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 189 def process_cvdecl(line, name, value) AST::ClassVariableDeclaration.new line, name, value end
process_dangling_node()
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 10 def process_dangling_node puts "Processing called but node was NULL" # TODO: output info about the current AST node end
process_defined(line, expr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 193 def process_defined(line, expr) AST::Defined.new line, expr end
process_defn(line, name, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 197 def process_defn(line, name, body) AST::Define.new line, name, body end
process_defs(line, receiver, name, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 201 def process_defs(line, receiver, name, body) AST::DefineSingleton.new line, receiver, name, body end
process_dot2(line, start, finish)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 205 def process_dot2(line, start, finish) AST::Range.new line, start, finish end
process_dot3(line, start, finish)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 209 def process_dot3(line, start, finish) AST::RangeExclude.new line, start, finish end
process_dregx(line, str, array, flags)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 213 def process_dregx(line, str, array, flags) AST::DynamicRegex.new line, str, array, flags end
process_dregx_once(line, str, array, flags)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 217 def process_dregx_once(line, str, array, flags) AST::DynamicOnceRegex.new line, str, array, flags end
process_dstr(line, str, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 221 def process_dstr(line, str, array) AST::DynamicString.new line, str, array end
process_dsym(line, str, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 225 def process_dsym(line, str, array) AST::DynamicSymbol.new line, str, array end
process_dxstr(line, str, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 229 def process_dxstr(line, str, array) AST::DynamicExecuteString.new line, str, array end
process_encoding(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 233 def process_encoding(line, name) AST::Encoding.new line, name end
process_ensure(line, body, ensr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 237 def process_ensure(line, body, ensr) AST::Ensure.new line, body, ensr end
process_evstr(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 241 def process_evstr(line, value) if value AST::ToString.new line, value else AST::StringLiteral.new line, "" end end
process_false(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 249 def process_false(line) AST::FalseLiteral.new line end
process_fcall(line, name, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 253 def process_fcall(line, name, arguments) receiver = AST::Self.new line if arguments.kind_of? AST::BlockPass block = arguments arguments = block.arguments block.arguments = nil else block = nil end if node = process_transforms(line, receiver, name, arguments, true) node.block = block if block return node end if arguments node = AST::SendWithArguments.new line, receiver, name, arguments, true else node = AST::Send.new line, receiver, name, true end node.block = block node end
process_file(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 279 def process_file(line) AST::File.new line end
process_fixnum(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 283 def process_fixnum(line, value) AST::FixnumLiteral.new line, value end
process_flip2(line, start, finish)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 287 def process_flip2(line, start, finish) AST::Flip2.new line, start, finish end
process_flip3(line, start, finish)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 291 def process_flip3(line, start, finish) AST::Flip3.new line, start, finish end
process_float(line, str)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 295 def process_float(line, str) AST::FloatLiteral.new line, str end
process_for(line, iter, arguments, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 299 def process_for(line, iter, arguments, body) send = AST::Send.new line, iter, :each send.block = AST::For.new line, arguments, body send end
process_fun(line, name, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 305 def process_fun(line, name, body) AST::DefineFunction.new line, name, body end
process_gasgn(line, name, expr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 309 def process_gasgn(line, name, expr) AST::GlobalVariableAssignment.new line, name, expr end
process_gvar(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 313 def process_gvar(line, name) AST::GlobalVariableAccess.for_name line, name end
process_hash(line, array)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 317 def process_hash(line, array) AST::HashLiteral.new line, array end
process_iasgn(line, name, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 321 def process_iasgn(line, name, value) AST::InstanceVariableAssignment.new line, name, value end
process_if(line, cond, body, else_body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 325 def process_if(line, cond, body, else_body) AST::If.new line, cond, body, else_body end
process_imaginary(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 329 def process_imaginary(line, value) AST::ImaginaryLiteral.new line, value end
process_iter(line, method_send, scope)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 333 def process_iter(line, method_send, scope) ary = scope && scope.array || [] arguments = nil if ary.first.kind_of? AST::Parameters arguments = scope.array.shift end unless arguments arguments = AST::Parameters.new line end case ary.size when 0 body = nil when 1 if scope.locals body = scope else body = scope.array.shift end else body = scope end method_send.block = AST::Iter.new line, arguments, body method_send end
process_ivar(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 362 def process_ivar(line, name) AST::InstanceVariableAccess.new line, name end
process_kw_arg(line, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 366 def process_kw_arg(line, arguments) AST::Block.new line, arguments end
process_lambda(line, scope)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 370 def process_lambda(line, scope) arguments = scope.array.shift if scope.array.size == 1 body = scope.array.shift else body = scope end AST::Lambda.new line, arguments, body end
process_lasgn(line, name, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 382 def process_lasgn(line, name, value) AST::LocalVariableAssignment.new line, name, value end
process_lit(line, sym)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 386 def process_lit(line, sym) AST::SymbolLiteral.new line, sym end
process_lvar(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 390 def process_lvar(line, name) AST::LocalVariableAccess.new line, name end
process_masgn(line, left, right, splat)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 394 def process_masgn(line, left, right, splat) AST::MultipleAssignment.new line, left, right, splat end
process_match(line, pattern, flags)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 398 def process_match(line, pattern, flags) AST::Match.new line, pattern, flags end
process_match2(line, pattern, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 402 def process_match2(line, pattern, value) AST::Match2.new line, pattern, value end
process_match3(line, pattern, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 406 def process_match3(line, pattern, value) AST::Match3.new line, pattern, value end
process_missing_node(line, node_name, node_type)
click to toggle source
This method is analogous to method_missing
. It is called if there is no processing method defined for a node.
# File lib/rubinius/code/processor/processor.rb, line 17 def process_missing_node(line, node_name, node_type) puts "Unhandled node #{node_name} (#{node_type})" end
process_module(line, name, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 410 def process_module(line, name, body) AST::Module.new line, name, body end
process_negate(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 414 def process_negate(line, value) AST::Negate.new line, value end
process_next(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 418 def process_next(line, value) AST::Next.new line, value end
process_nil(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 422 def process_nil(line) AST::NilLiteral.new line end
process_not(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 426 def process_not(line, value) AST::Not.new line, value end
process_nth_ref(line, ref)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 430 def process_nth_ref(line, ref) AST::NthRef.new line, ref end
process_number(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 434 def process_number(line, value) case value when Fixnum AST::FixnumLiteral.new line, value when Bignum AST::NumberLiteral.new line, value end end
process_op_asgn1(line, receiver, index, op, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 443 def process_op_asgn1(line, receiver, index, op, value) AST::OpAssignElement.new line, receiver, index, op, value end
process_op_asgn2(line, receiver, anddot, name, op, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 447 def process_op_asgn2(line, receiver, anddot, name, op, value) if anddot AST::AndOpAssignAttribute.new line, receiver, name, op, value else AST::OpAssignAttribute.new line, receiver, name, op, value end end
process_op_asgn_and(line, var, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 455 def process_op_asgn_and(line, var, value) AST::OpAssignAnd.new line, var, value end
process_op_asgn_or(line, var, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 459 def process_op_asgn_or(line, var, value) AST::OpAssignOr.new line, var, value end
process_op_cdecl(line, var, value, op)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 463 def process_op_cdecl(line, var, value, op) op_value = case op when :and AST::And.new line, var, value when :or AST::Or.new line, var, value else args = AST::ArrayLiteral.new line, [value] AST::SendWithArguments.new line, var, op, args end AST::ConstantAssignment.new line, var, op_value end
process_opt_arg(line, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 476 def process_opt_arg(line, arguments) AST::Block.new line, arguments end
process_or(line, left, right)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 480 def process_or(line, left, right) AST::Or.new line, left, right end
process_parse_error(message, column, line, source)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 5 def process_parse_error(message, column, line, source) msg = "#{message}: #{@name}:#{line}:#{column}" @syntax_errors << SyntaxError.from(msg, column, line, source, @name) end
process_postarg(line, into, rest)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 484 def process_postarg(line, into, rest) AST::PostArg.new line, into, rest end
process_postexe(line, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 488 def process_postexe(line, body) node = AST::Send.new line, AST::Self.new(line), :at_exit, true node.block = AST::Iter.new line, nil, body node end
process_preexe(line, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 494 def process_preexe(line, body) node = AST::PreExe19.new line node.block = AST::Iter.new line, nil, body add_pre_exe node node end
process_qcall(line, receiver, name, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 113 def process_qcall(line, receiver, name, arguments) if arguments.kind_of? AST::BlockPass block = arguments arguments = block.arguments block.arguments = nil else block = nil end if node = process_transforms(line, receiver, name, arguments) node.block = block if block return node end if arguments node = AST::AndSendWithArguments.new line, receiver, name, arguments else node = AST::AndSend.new line, receiver, name end node.block = block node end
process_rational(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 501 def process_rational(line, value) AST::RationalLiteral.new line, value end
process_redo(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 505 def process_redo(line) AST::Redo.new line end
process_regex(line, str, flags)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 511 def process_regex(line, str, flags) if flags == REGEXP_OPTION_PEG AST::PEGLiteral.new line, str else AST::RegexLiteral.new line, str, flags end end
process_resbody(line, conditions, body, nxt)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 519 def process_resbody(line, conditions, body, nxt) AST::RescueCondition.new line, conditions, body, nxt end
process_rescue(line, body, rescue_body, else_body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 523 def process_rescue(line, body, rescue_body, else_body) AST::Rescue.new line, body, rescue_body, else_body end
process_retry(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 527 def process_retry(line) AST::Retry.new line end
process_return(line, value)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 531 def process_return(line, value) AST::Return.new line, value end
process_sclass(line, receiver, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 535 def process_sclass(line, receiver, body) AST::SClass.new line, receiver, body end
process_scope(line, arguments, body, locals)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 539 def process_scope(line, arguments, body, locals) case body when AST::Begin if body.rescue.kind_of? AST::NilLiteral return nil unless arguments end body = AST::Block.new line, [body.rescue] when AST::Block ary = body.array if ary.size > 1 and ary.first.kind_of?(AST::Begin) and ary.first.rescue.kind_of?(AST::NilLiteral) ary.shift end when nil # Nothing else body = AST::Block.new line, [body] end if arguments and body body.array.unshift arguments end body.locals = locals if locals body end
process_self(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 568 def process_self(line) AST::Self.new line end
process_splat(line, expr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 572 def process_splat(line, expr) AST::SplatValue.new line, expr end
process_str(line, str)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 576 def process_str(line, str) AST::StringLiteral.new line, str end
process_super(line, arguments)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 580 def process_super(line, arguments) if arguments.kind_of? AST::BlockPass block = arguments arguments = block.arguments block.arguments = nil else block = nil end node = AST::Super.new line, arguments node.block = block node end
process_svalue(line, expr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 594 def process_svalue(line, expr) AST::SValue.new line, expr end
process_to_ary(line, expr)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 598 def process_to_ary(line, expr) AST::ToArray.new line, expr end
process_true(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 602 def process_true(line) AST::TrueLiteral.new line end
process_undef(line, sym)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 606 def process_undef(line, sym) AST::Undef.new line, sym end
process_until(line, cond, body, check_first)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 610 def process_until(line, cond, body, check_first) AST::Until.new line, cond, body, check_first end
process_valias(line, to, from)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 624 def process_valias(line, to, from) AST::VAlias.new line, to, from end
process_values(line, first, rest)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 628 def process_values(line, first, rest) rest.body.unshift first rest end
process_vcall(line, name)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 614 def process_vcall(line, name) receiver = AST::Self.new line if node = process_transforms(line, receiver, name, nil, true) return node end AST::Send.new line, receiver, name, true, true end
process_when(line, conditions, body)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 633 def process_when(line, conditions, body) AST::When.new line, conditions, body end
process_while(line, cond, body, check_first)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 637 def process_while(line, cond, body, check_first) AST::While.new line, cond, body, check_first end
process_xstr(line, str)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 641 def process_xstr(line, str) AST::ExecuteString.new line, str end
process_yield(line, arguments, unwrap)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 645 def process_yield(line, arguments, unwrap) AST::Yield.new line, arguments, unwrap end
process_zarray(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 649 def process_zarray(line) AST::EmptyArray.new line end
process_zsuper(line)
click to toggle source
# File lib/rubinius/code/processor/processor.rb, line 653 def process_zsuper(line) AST::ZSuper.new line end