aboutsummaryrefslogtreecommitdiff
path: root/interpreter
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2015-07-01 12:13:53 +0200
committerDrahflow <drahflow@gmx.de>2015-07-01 12:13:53 +0200
commitb875e47f6540fa5ca8f9e0fa1a870014ab5c3953 (patch)
tree3df89cc81c37aca950d55b97cc4ac27d228d2a90 /interpreter
parent247f385388c312c1b9b4947f3689b1094ec94ff5 (diff)
FreeBSD support in master
Diffstat (limited to 'interpreter')
-rw-r--r--interpreter/ElymasGlobal.pm17
-rw-r--r--interpreter/ElymasSys.pm14
2 files changed, 31 insertions, 0 deletions
diff --git a/interpreter/ElymasGlobal.pm b/interpreter/ElymasGlobal.pm
index 4080661..d7f22dc 100644
--- a/interpreter/ElymasGlobal.pm
+++ b/interpreter/ElymasGlobal.pm
@@ -196,6 +196,7 @@ EOPERL
my ($data) = @_;
my $s = sub {
my ($data, $lscope) = @_;
+ my $scope = $$lscope;
EOPERL
compileCode(\@code) . <<'EOPERL';
};
@@ -210,6 +211,7 @@ EOPERL
my $sub = <<'EOPERL' .
sub {
my ($data, $lscope) = @_;
+ my $scope = $$lscope;
EOPERL
compileCode(\@code) . <<'EOPERL';
};
@@ -348,6 +350,21 @@ EOPERL
push @$data, $struct->[0]->{$member};
}, ['func', '.|'], 'active'],
+ '.?' => [sub {
+ my ($data, $scope) = @_;
+
+ my $member = pop @$data;
+ my $struct = pop @$data;
+ $member = $member->[0];
+
+ die "not a struct during member dereference in " . Dumper($struct) unless ref($struct->[1]) eq 'ARRAY' and $struct->[1]->[0] eq 'struct';
+
+ if(exists $struct->[0]->{$member}) {
+ push @$data, [1, 'int'],
+ } else {
+ push @$data, [0, 'int'],
+ }
+ }, ['func', '.?'], 'active'],
'deff' => [sub {
my ($data, $scope) = @_;
diff --git a/interpreter/ElymasSys.pm b/interpreter/ElymasSys.pm
index ad79b02..a5219c6 100644
--- a/interpreter/ElymasSys.pm
+++ b/interpreter/ElymasSys.pm
@@ -9,6 +9,19 @@ use POSIX;
my $rwmask = &POSIX::O_RDONLY | &POSIX::O_WRONLY | &POSIX::O_RDWR;
+sub osType {
+ my $uname = qx(uname);
+ chomp $uname;
+
+ if($uname eq 'Linux') {
+ return 'linux';
+ } elsif($uname eq 'FreeBSD') {
+ return 'freebsd';
+ } else {
+ die "Unknown uname output '$uname', cannot decide what ABI to use.";
+ }
+}
+
our $sys = {
'file' => [sub {
my ($data, $scope) = @_;
@@ -21,6 +34,7 @@ our $sys = {
'err' => [createFile(2, &POSIX::O_WRONLY), ['struct'], 'passive'],
'argv' => [[map { [$_, 'string'] } @ARGV[1 .. $#ARGV]], ['array', 'sys .argv', ['range', 0, $#ARGV - 1], ['string']], 'passive'],
'asm' => [$ElymasAsm::asm, ['struct'], 'passive'],
+ osType() => [{ }, ['struct'], 'passive'],
};
sub createFile {