class IDL::AST::Const
def initialize(_name, _enclosure, params)
def initialize(_name, _enclosure, params) super(_name, _enclosure) @idltype = params[:type] @expression = params[:expression] @value = nil unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam) raise "Anonymous type definitions are not allowed!" if @idltype.is_anonymous? raise "Incomplete type #{@idltype.typename} not allowed here!" unless @idltype.is_complete? unless @expression.is_a?(IDL::Expression::ScopedName) && @expression.is_node?(IDL::AST::TemplateParam) @value = @idltype.narrow(@expression.value) end end end
def instantiate(instantiation_context, _enclosure)
def instantiate(instantiation_context, _enclosure) _params = { type: @idltype.instantiate(instantiation_context), expression: @expression.instantiate(instantiation_context) } super(instantiation_context, _enclosure, _params) end
def marshal_dump
def marshal_dump super() << @idltype << @expression end
def marshal_load(vars)
def marshal_load(vars) @expression = vars.pop @idltype = vars.pop super(vars) unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam) unless @expression.is_a?(IDL::Expression::ScopedName) && @expression.is_node?(IDL::AST::TemplateParam) @value = @idltype.narrow(@expression.value) end end end