Module: Ibex::Runtime::ASTData

Defined in:
lib/ibex/runtime/ast_data.rb

Overview

Builds Data classes on Ruby 3.2+ and an immutable Struct-compatible fallback on older supported Rubies.

Class Method Summary collapse

Class Method Details

.define(*members) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/ibex/runtime/ast_data.rb', line 10

def define(*members)
  return ::Data.define(*members) if defined?(::Data)

  immutable = Module.new
  immutable.send(:define_method, :initialize) do |*arguments, **keywords|
    super(*arguments, **keywords)
    freeze
  end
  Struct.new(*members, keyword_init: true).tap { |node| node.prepend(immutable) }
end