Class: ScopeManager

Inherits:
Object
  • Object
show all
Defined in:
lib/nodes/scopemanager.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(true_value, false_value) ⇒ ScopeManager

Returns a new instance of ScopeManager.



6
7
8
9
10
11
# File 'lib/nodes/scopemanager.rb', line 6

def initialize(true_value, false_value)
  @@true_value = true_value
  @@false_value = false_value
  @@scopes = [{}]
  @@scope_lvl = 0
end

Class Method Details

.add_func_to_global_scope(name, value, args) ⇒ Object



64
65
66
# File 'lib/nodes/scopemanager.rb', line 64

def self.add_func_to_global_scope(name, value, args)
  @@scopes[0][name.name] = [value, args]
end

.add_to_current_scope(name, value) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/nodes/scopemanager.rb', line 56

def self.add_to_current_scope(name, value)
  if name.is_a?(String)
    @@scopes[@@scope_lvl][name] = value.evaluate
  else
    @@scopes[@@scope_lvl][name.name] = value.evaluate
  end
end

.decrement_scope_levelObject



46
47
48
49
# File 'lib/nodes/scopemanager.rb', line 46

def self.decrement_scope_level
  @@scope_lvl -= 1
  @@scopes.pop
end

.false_valueObject



17
18
19
# File 'lib/nodes/scopemanager.rb', line 17

def self.false_value
  @@false_value
end

.increment_scope_levelObject



41
42
43
44
# File 'lib/nodes/scopemanager.rb', line 41

def self.increment_scope_level
  @@scope_lvl += 1
  @@scopes.push({})
end

.lookup_func(name) ⇒ Object

Raises:

  • (SyntaxError)


51
52
53
54
# File 'lib/nodes/scopemanager.rb', line 51

def self.lookup_func(name)
  raise SyntaxError, "Function '#{name}' is not defined" if @@scopes[0][name].is_a?(NilClass)
  return @@scopes[0][name]
end

.lookup_var(name) ⇒ Object

Raises:

  • (SyntaxError)


29
30
31
32
33
34
35
36
37
38
39
# File 'lib/nodes/scopemanager.rb', line 29

def self.lookup_var(name)
  temp_scope_lvl = @@scope_lvl
  while temp_scope_lvl >= 0
    if !@@scopes[temp_scope_lvl].key?(name)
      temp_scope_lvl -= 1
    else
      return @@scopes[temp_scope_lvl][name]
    end
  end
  raise SyntaxError, "Variable '#{name}' is not defined" unless @value
end

.scope_lvlObject



21
22
23
# File 'lib/nodes/scopemanager.rb', line 21

def self.scope_lvl
  @@scope_lvl
end

.scope_lvl=(value) ⇒ Object



25
26
27
# File 'lib/nodes/scopemanager.rb', line 25

def self.scope_lvl=(value)
  @@scope_lvl = value
end

.true_valueObject



13
14
15
# File 'lib/nodes/scopemanager.rb', line 13

def self.true_value
  @@true_value
end