Class: Peruby::Op::GlobalDeclare
Overview
Package variable declaration through our.
Instance Method Summary collapse
-
#initialize(sigil, name, initializer) ⇒ GlobalDeclare
constructor
A new instance of GlobalDeclare.
- #run(env, context) ⇒ Object
Methods inherited from Base
#argument_cells, #local_slot, #lvalue, #run_subroutine, #to_callable, #warning_directive?
Constructor Details
#initialize(sigil, name, initializer) ⇒ GlobalDeclare
Returns a new instance of GlobalDeclare.
488 489 490 491 492 |
# File 'lib/peruby/op/variable.rb', line 488 def initialize(sigil, name, initializer) @sigil = sigil @name = name @initializer = initializer end |
Instance Method Details
#run(env, context) ⇒ Object
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 |
# File 'lib/peruby/op/variable.rb', line 494 def run(env, context) target = env.fetch(@sigil, @name) bind_alias(env, target) return target.get unless @initializer values = @initializer.run(env, @sigil == :scalar ? :scalar : :list) if target.is_a?(Scalar) target.set(values) elsif target.is_a?(PerlArray) target.cells.replace(values.map(&:copy)) else target.cells.clear values.each_slice(2) { |key, value| target.slot(Conv.to_str(key&.get)).set(value&.get) } end context == :list && target.respond_to?(:list) ? target.list : values end |