Class: Peruby::Op::Declare
Overview
Lexical variable declaration.
Instance Method Summary collapse
-
#initialize(sigil, name, initializer, predeclared = nil) ⇒ Declare
constructor
A new instance of Declare.
- #lvalue(env, _context) ⇒ Object
- #run(env, context) ⇒ Object
- #to_callable ⇒ Object
Methods inherited from Base
#argument_cells, #local_slot, #run_subroutine, #warning_directive?
Constructor Details
#initialize(sigil, name, initializer, predeclared = nil) ⇒ Declare
Returns a new instance of Declare.
278 279 280 281 282 283 |
# File 'lib/peruby/op/variable.rb', line 278 def initialize(sigil, name, initializer, predeclared = nil) @sigil = sigil @name = name @initializer = initializer @predeclared = predeclared end |
Instance Method Details
#lvalue(env, _context) ⇒ Object
311 312 313 |
# File 'lib/peruby/op/variable.rb', line 311 def lvalue(env, _context) env.fetch(@sigil, @name) end |
#run(env, context) ⇒ Object
285 286 287 288 289 290 291 292 |
# File 'lib/peruby/op/variable.rb', line 285 def run(env, context) values = @initializer&.run(env, @sigil == :scalar ? :scalar : :list) target = declaration_target(env) assign(target, values) if @initializer return Array(target.respond_to?(:cells) ? target.cells : target) if context == :list declaration_value(target) end |
#to_callable ⇒ Object
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 |
# File 'lib/peruby/op/variable.rb', line 294 def to_callable initializer = @initializer&.to_callable scalar_initializer = @initializer.scalar_callable if @initializer.respond_to?(:scalar_callable) lambda do |env, context| values = if @sigil == :scalar && scalar_initializer scalar_initializer.call(env) else initializer&.call(env, @sigil == :scalar ? :scalar : :list) end target = declaration_target(env) assign(target, values) if initializer next Array(target.respond_to?(:cells) ? target.cells : target) if context == :list declaration_value(target) end end |