aboutsummaryrefslogtreecommitdiff
path: root/interpreter/ElymasGlobal.pm
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-01-14 12:53:09 +0100
committerDrahflow <drahflow@gmx.de>2013-01-14 12:53:09 +0100
commitfe0d09cfceff89d3215f3fa3f148ac3130d9b91a (patch)
treebdb8b4f74ee17bf862cbc5045c9e8fb450b5ed16 /interpreter/ElymasGlobal.pm
parent347a635d04df610e1a5a56a46eddf071533a13ac (diff)
I heard you like JIT, so I put some JIT in your JIT
Diffstat (limited to 'interpreter/ElymasGlobal.pm')
-rw-r--r--interpreter/ElymasGlobal.pm57
1 files changed, 43 insertions, 14 deletions
diff --git a/interpreter/ElymasGlobal.pm b/interpreter/ElymasGlobal.pm
index 5384cb5..a93760d 100644
--- a/interpreter/ElymasGlobal.pm
+++ b/interpreter/ElymasGlobal.pm
@@ -51,23 +51,52 @@ our $global = {
die "unexpanded token in quoted code" if grep { $_->[1] eq 'tok' } @code;
- if($quoted) {
- push @$data, [sub {
- my ($data, $refScope) = @_;
- my $scope = $$refScope;
+ # if($quoted) {
+ # push @$data, [sub {
+ # my ($data, $refScope) = @_;
+ # my $scope = $$refScope;
+
+ # push @$data, [sub {
+ # my ($data) = @_;
+ # my $lscope = \{ ' parent' => $scope };
+ # interpretCode(\@code, $data, $lscope);
+ # }, ['func', 'Dumper(\@code)']];
+ # }, ['func', 'func-quoted'], \@code];
+ # } else {
+ # push @$data, [sub {
+ # my ($data) = @_;
+ # my $lscope = \{ ' parent' => $scope };
+ # interpretCode(\@code, $data, $lscope);
+ # }, ['func', 'Dumper(\@code)']];
+ # }
- push @$data, [sub {
+ if($quoted) {
+ my $sub = <<'EOPERL' .
+ sub {
+ my ($data, $refScope) = @_;
+ my $scope = $$refScope;
+ my $s = sub {
+ my ($data) = @_;
+ my $lscope = \{ ' parent' => $scope };
+EOPERL
+ compileCode(\@code) . <<'EOPERL';
+ };
+ push @$data, [$s, ['func', 'compiled sub (1)']];
+ }
+EOPERL
+ $sub = eval($sub);
+ push @$data, [$sub, ['func', 'func-quoted'], \@code];
+ } else {
+ my $sub = <<'EOPERL' .
+ sub {
my ($data) = @_;
my $lscope = \{ ' parent' => $scope };
- interpretCode(\@code, $data, $lscope);
- }, ['func', 'Dumper(\@code)']];
- }, ['func', 'func-quoted'], \@code];
- } else {
- push @$data, [sub {
- my ($data) = @_;
- my $lscope = \{ ' parent' => $scope };
- interpretCode(\@code, $data, $lscope);
- }, ['func', 'Dumper(\@code)']];
+EOPERL
+ compileCode(\@code) . <<'EOPERL';
+ };
+EOPERL
+ $sub = eval($sub);
+ push @$data, [$sub, ['func', 'compiled sub (2)']];
}
}, ['func', '}'], 'quote'],
"}'" => [sub {