Class: Nydp::FunctionInvocation

Inherits:
Object
  • Object
show all
Extended by:
Helper
Defined in:
lib/nydp/function_invocation.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper

cons, list, literal?, pair?, sig, sym, sym?

Methods included from Converter

#n2r, #r2n

Constructor Details

#initialize(function_instruction, argument_instructions, source, sig = nil) ⇒ FunctionInvocation

Returns a new instance of FunctionInvocation.



327
328
329
330
# File 'lib/nydp/function_invocation.rb', line 327

def initialize function_instruction, argument_instructions, source, sig=nil
  @function_instruction, @argument_instructions, @source = function_instruction, argument_instructions, source
  @sig = sig
end

Instance Attribute Details

#argument_instructionsObject

Returns the value of attribute argument_instructions.



293
294
295
# File 'lib/nydp/function_invocation.rb', line 293

def argument_instructions
  @argument_instructions
end

#function_instructionObject

Returns the value of attribute function_instruction.



293
294
295
# File 'lib/nydp/function_invocation.rb', line 293

def function_instruction
  @function_instruction
end

Class Method Details

.build(expression, bindings) ⇒ Object



299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/nydp/function_invocation.rb', line 299

def self.build expression, bindings
  compiled   = Compiler.compile_each(expression, bindings)
  invocation_sig = compiled.map { |x| sig x }.join("_")

  cname  = "Invocation_#{invocation_sig}"

  # puts expression.inspect if cname == "Invocation_SYM_LEX_LIT_LEX"

  exists = Invocation::SIGS.include? "Nydp::Invocation::#{cname}"
  if exists
    return Nydp::Invocation.const_get(cname).new(compiled, expression)
  end

  invocation = cons case expression.size
                    when 1
                      Invocation::Invocation_1.new(compiled, expression)
                    when 2
                      Invocation::Invocation_2.new(compiled, expression)
                    when 3
                      Invocation::Invocation_3.new(compiled, expression)
                    when 4
                      Invocation::Invocation_4.new(compiled, expression)
                    else
                      Invocation::Invocation_N.new(expression.size, compiled, expression)
                    end
  new invocation, compiled, expression, cname
end

Instance Method Details

#execute(vm) ⇒ Object



332
333
334
335
336
# File 'lib/nydp/function_invocation.rb', line 332

def execute vm
##      Invocation.sig @sig
  vm.push_ctx_instructions function_instruction
  vm.push_ctx_instructions argument_instructions
end

#inspectObject



338
# File 'lib/nydp/function_invocation.rb', line 338

def inspect ; @function_instruction.inspect ; end

#lexical_reach(n) ⇒ Object



295
296
297
# File 'lib/nydp/function_invocation.rb', line 295

def lexical_reach n
  function_instruction.car.lexical_reach(n)
end

#to_sObject



339
# File 'lib/nydp/function_invocation.rb', line 339

def to_s    ; @source.to_s                  ; end