diff options
| author | Drahflow <drahflow@gmx.de> | 2015-07-01 12:13:53 +0200 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2015-07-01 12:13:53 +0200 |
| commit | b875e47f6540fa5ca8f9e0fa1a870014ab5c3953 (patch) | |
| tree | 3df89cc81c37aca950d55b97cc4ac27d228d2a90 /interpreter | |
| parent | 247f385388c312c1b9b4947f3689b1094ec94ff5 (diff) | |
FreeBSD support in master
Diffstat (limited to 'interpreter')
| -rw-r--r-- | interpreter/ElymasGlobal.pm | 17 | ||||
| -rw-r--r-- | interpreter/ElymasSys.pm | 14 |
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 { |
