class NScript::CallNode

Public Class Methods

new(variable, arguments=[]) click to toggle source
# File lib/nscript/parser/nodes.rb, line 203
def initialize(variable, arguments=[])
  @variable, @arguments = variable, arguments
  @prefix = ''
end

Public Instance Methods

<<(argument) click to toggle source
# File lib/nscript/parser/nodes.rb, line 213
def <<(argument)
  @arguments << argument
  self
end
compile_node(o) click to toggle source
# File lib/nscript/parser/nodes.rb, line 218
def compile_node(o)
  return write(compile_splat(o)) if @arguments.any? {|a| a.is_a?(SplatNode) }
  args = @arguments.map{|a| a.compile(o) }.join(', ')
  return write(compile_super(args, o)) if @variable == 'super'
  write("#{@prefix}#{@variable.compile(o)}(#{args})")
end
compile_reference(o) click to toggle source
# File lib/nscript/parser/nodes.rb, line 245
def compile_reference(o)
  reference = o[:scope].free_variable
  call = ParentheticalNode.new(AssignNode.new(reference, self))
  return call, reference
end
compile_splat(o) click to toggle source
# File lib/nscript/parser/nodes.rb, line 234
def compile_splat(o)
  meth = @variable.compile(o)
  obj  = @variable.source || 'this'
  args = @arguments.map do |arg|
    code = arg.compile(o)
    code = arg.is_a?(SplatNode) ? code : "[#{code}]"
    arg.equal?(@arguments.first) ? code : ".concat(#{code})"
  end
  "#{@prefix}#{meth}.apply(#{obj}, #{args.join('')})"
end
compile_super(args, o) click to toggle source
# File lib/nscript/parser/nodes.rb, line 225
def compile_super(args, o)
  methname = o[:scope].function.name
  arg_part = args.empty? ? '' : ", #{args}"
  meth     = o[:scope].function.proto ?
                "#{o[:scope].function.proto}.__superClass__.#{methname}" :
                "#{methname}.__superClass__.constructor"
  "#{meth}.call(this#{arg_part})"
end
new_instance() click to toggle source
# File lib/nscript/parser/nodes.rb, line 208
def new_instance
  @prefix = "new "
  self
end