Class: ScopeManager
- Inherits:
-
Object
- Object
- ScopeManager
- Defined in:
- lib/nodes/scopemanager.rb
Class Method Summary collapse
- .add_func_to_global_scope(name, value, args) ⇒ Object
- .add_to_current_scope(name, value) ⇒ Object
- .decrement_scope_level ⇒ Object
- .false_value ⇒ Object
- .increment_scope_level ⇒ Object
- .lookup_func(name) ⇒ Object
- .lookup_var(name) ⇒ Object
- .scope_lvl ⇒ Object
- .scope_lvl=(value) ⇒ Object
- .true_value ⇒ Object
Instance Method Summary collapse
-
#initialize(true_value, false_value) ⇒ ScopeManager
constructor
A new instance of ScopeManager.
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_level ⇒ Object
46 47 48 49 |
# File 'lib/nodes/scopemanager.rb', line 46 def self.decrement_scope_level @@scope_lvl -= 1 @@scopes.pop end |
.false_value ⇒ Object
17 18 19 |
# File 'lib/nodes/scopemanager.rb', line 17 def self.false_value @@false_value end |
.increment_scope_level ⇒ Object
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
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
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_lvl ⇒ Object
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_value ⇒ Object
13 14 15 |
# File 'lib/nodes/scopemanager.rb', line 13 def self.true_value @@true_value end |