sub
get_runtime {
shift
->{runtime} }
sub
pointer {
my
$self
=
shift
;
if
(
@_
) {
$self
->{pointer} =
$_
[0];
return
$self
;
}
else
{
return
$self
->{pointer};
}
}
sub
boot_env {
my
$self
=
shift
;
if
(
@_
) {
$self
->{boot_env} =
$_
[0];
return
$self
;
}
else
{
return
$self
->{boot_env};
}
}
sub
get_formatted_error_messages {
my
(
$self
,
$fh
) =
@_
;
my
$formatted_error_messages
= [];
my
$error_messages
=
$self
->get_error_messages;
for
my
$error_message
(
@$error_messages
) {
push
@$formatted_error_messages
,
"[Compilation Error]$error_message\n"
;
}
return
$formatted_error_messages
;
}
sub
new {
my
$class
=
shift
;
my
$self
= {
@_
};
bless
$self
,
$class
;
my
$boot_env
= SPVM::Builder::Native::Env->new;
$self
->boot_env(
$boot_env
);
$self
->create_native_compiler;
my
$runtime
=
$self
->get_runtime;
$runtime
->{compiler} =
$self
;
weaken
$runtime
->{compiler};
return
$self
;
}
sub
compile_with_exit {
my
(
$self
,
$class_name
,
$file
,
$line
) =
@_
;
$self
->set_start_file(
$file
);
$self
->set_start_line(
$line
);
eval
{
$self
->compile(
$class_name
); };
if
($@) {
Carp::confess(
join
(
"\n"
, @{
$self
->get_formatted_error_messages}));
}
}
sub
compile_anon_class_with_exit {
my
(
$self
,
$source
,
$file
,
$line
) =
@_
;
$self
->set_start_file(
$file
);
$self
->set_start_line(
$line
);
my
$anon_class_name
;
eval
{
$anon_class_name
=
$self
->compile_anon_class(
$source
); };
if
($@) {
Carp::confess(
join
(
"\n"
, @{
$self
->get_formatted_error_messages}));
}
return
$anon_class_name
;
}
1;
=head1 Name
SPVM::Builder::Native::Compiler - Compiler Native APIs
=head1 Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License