Class: ZunScript::ZBlock

Inherits:
ZValue
  • Object
show all
Defined in:
lib/zunscript/block.rb

Direct Known Subclasses

ZExternBlock

Instance Method Summary collapse

Methods inherited from ZValue

#inspect

Constructor Details

#initialize(statements, parameters, parentscope, env) ⇒ ZBlock

Returns a new instance of ZBlock.



3
4
5
6
7
8
# File 'lib/zunscript/block.rb', line 3

def initialize statements, parameters, parentscope, env
  super env
  @body = statements
  @parameters = parameters
  @scope = parentscope
end

Instance Method Details

#bind(args) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/zunscript/block.rb', line 23

def bind args
  scope = ZScope.new @scope
  i = 0
  args.each do |a|
    scope.set_local @parameters[i].text, a
    i += 1
  end

  return ZBlock.new @body, @parameters[i..-1], scope, @env
end

#call(args) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/zunscript/block.rb', line 10

def call args
  scope = ZScope.new @scope
  @parameters.each do |p|
    scope.set_local p.text, args.shift
  end
  
  result = nil
  @body.each do |node|
    result = @env.resolve node, scope
  end
  return result
end