Class: MilkTea::CompileTime::Evaluator

Inherits:
MilkTea::ConstEval::Evaluator show all
Defined in:
lib/milk_tea/core/compile_time.rb

Instance Method Summary collapse

Methods inherited from MilkTea::ConstEval::Evaluator

#evaluate, #evaluate_binary, #evaluate_unary, #initialize, #zero_numeric?

Constructor Details

This class inherits a constructor from MilkTea::ConstEval::Evaluator

Instance Method Details

#resolve_layout_type(type_ref) ⇒ Object



463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
# File 'lib/milk_tea/core/compile_time.rb', line 463

def resolve_layout_type(type_ref)
  result = begin
    super
  rescue SemanticError
    nil
  end
  return result if result
  return result if result

  return unless type_ref.respond_to?(:name) && type_ref.name.parts.length >= 1

  expression = ::MilkTea::AST.build_chain_from_parts(type_ref.name.parts)
  return unless expression

  value = evaluate(expression)
  return value if value.is_a?(Types::Struct) || value.is_a?(Types::Primitive) ||
    value.is_a?(Types::Union) || value.is_a?(Types::Nullable) ||
    value.is_a?(Types::StructInstance)

  nil
end