# Copyright (c) 2023 Yuki Kimoto
# MIT License

class Native {
  version_from SPVM;

  use Native::Env;
  use Native::Stack;
  use Native::Runtime;
  use Native::Compiler;
  
  # Class methods
  native static method get_current_env : Native::Env ();
  
  native static method get_current_stack : Native::Stack ();
  
  static method get_current_runtime : Native::Runtime () {
    
    my $current_env = Native->get_current_env;
    
    my $current_stack = Native->get_current_stack;
    
    my $current_runtime = $current_env->runtime;
    
    return $current_runtime;
  }
  
  static method get_current_compiler : Native::Compiler () {
    
    my $current_runtime = &get_current_runtime;
    
    my $current_compiler = $current_runtime->get_compiler;
    
    return $current_compiler;
  }
  
  native static method check_bootstrap_method : void ($basic_type_name : string);
  
}