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