Perl x Open Food Facts Hackathon: Paris, France - May 24-25 Learn more

use strict;
### Fields
sub get_runtime { shift->{runtime} }
sub env_api {
my $self = shift;
if (@_) {
$self->{env_api} = $_[0];
return $self;
}
else {
return $self->{env_api};
}
}
sub pointer {
my $self = shift;
if (@_) {
$self->{pointer} = $_[0];
return $self;
}
else {
return $self->{pointer};
}
}
sub include_dirs {
my $self = shift;
if (@_) {
$self->{include_dirs} = $_[0];
return $self;
}
else {
return $self->{include_dirs};
}
}
sub print_error_messages {
my ($self, $fh) = @_;
my $error_messages = $self->get_error_messages;
for my $error_message (@$error_messages) {
printf $fh "[CompileError]$error_message\n";
}
}
sub new {
my $class = shift;
my $self = {@_};
bless $self, $class;
my $env_api = SPVM::Builder::Env->new;
$self->env_api($env_api);
$self->create_native_compiler;
my $runtime = $self->get_runtime;
$runtime->env_api($env_api);
return $self;
}
sub compile_with_exit {
my ($self, $basic_type_name, $file, $line) = @_;
my $success = $self->compile($basic_type_name, __FILE__, __LINE__);
unless ($success) {
$self->print_error_messages(*STDERR);
exit(255);
}
}
1;
=head1 Name
SPVM::Builder::Compiler - SPVM Builder Compiler
=head1 Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License