# Copyright (c) 2023 Yuki Kimoto
# MIT License

class Native::Compiler : pointer {
  use Native::Runtime;
  use Native::ModuleFile;
  
  # Fields
  
  has runtime : Native::Runtime;
  
  # Class Methods
  native static method new : Native::Compiler ();
  
  # Instance Methods
  native method compile : int ($basic_type_name : string);
  
  native method get_runtime : Native::Runtime ();
  
  native method set_start_file : void ($start_file : string);
  
  native method set_start_line : void ($start_line : int);
  
  native method add_include_dir : void ($include_dir : string);
  
  native method get_error_messages : string[] ();
  
  native method get_module_file : Native::ModuleFile ($module_name : string);
  
}