# Copyright (c) 2023 Yuki Kimoto
# MIT License
class Native::Runtime : pointer {
use Native::Compiler;
use Native::Env;
use Native::Stack;
use Native::BasicType;
use Native::Method;
use Native::Arg;
use Native::ClassVar;
use Native::Field;
use StringList;
use Fn;
# Fields
has compiler : Native::Compiler;
# Instance Methods
native method get_basic_types_length : int ();
native method get_basic_type_by_id : Native::BasicType ($id : int);
native method get_basic_type_by_name : Native::BasicType ($name : string);
native method build_precompile_module_source : string ($basic_type : Native::BasicType);
native method build_precompile_method_source : string ($method : Native::Method);
# Private Instance Methods - Only used in core.
method _get_user_defined_basic_type_names : string[] () {
my $basic_types_length = $self->get_basic_types_length;
my $user_defined_basic_type_names_list = StringList->new;
for (my $basic_type_id = 0; $basic_type_id < $basic_types_length; $basic_type_id++) {
my $basic_type = $self->get_basic_type_by_id($basic_type_id);
my $basic_type_name = $basic_type->get_name;
if (($basic_type_name->[0] >= 'A' && $basic_type_name->[0] <= 'Z') && !Fn->contains($basic_type_name, "::anon::")) {
$user_defined_basic_type_names_list->push($basic_type->get_name);
}
}
my $user_defined_basic_type_names = $user_defined_basic_type_names_list->to_array;
return $user_defined_basic_type_names;
}
}