aboutsummaryrefslogtreecommitdiff
path: root/interpreter/Elymas.pm
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2012-12-14 12:15:40 +0100
committerDrahflow <drahflow@gmx.de>2012-12-14 12:15:40 +0100
commitf20e50a4e3ac3aeeac84358a68c253358f213667 (patch)
treeefed2b2c51fec59a0fae8f59845afa1b520e0204 /interpreter/Elymas.pm
parent26c5b2be3918e7e27f9ae0616f3a3a629190b19c (diff)
Compiler Tokenizer working
Diffstat (limited to 'interpreter/Elymas.pm')
-rw-r--r--interpreter/Elymas.pm17
1 files changed, 15 insertions, 2 deletions
diff --git a/interpreter/Elymas.pm b/interpreter/Elymas.pm
index 22199b7..b58bffd 100644
--- a/interpreter/Elymas.pm
+++ b/interpreter/Elymas.pm
@@ -7,7 +7,7 @@ require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
popInt popString popArray enstruct arrayAccess $quoted @globalCallStack
- interpretCode execute executeString executeFile resolve canCastTo
+ interpretCode execute executeString executeFile resolve canCastTo typeEqual
);
use Data::Dumper;
@@ -114,8 +114,21 @@ sub typeEqual {
return 0 unless @{$a->[2]} == grep { typeEqual($a->[2]->[$_], $b->[2]->[$_]) } 0 .. $#{$a->[2]};
return 0 unless @{$a->[3]} == grep { typeEqual($a->[3]->[$_], $b->[3]->[$_]) } 0 .. $#{$a->[3]};
return 1;
+ } elsif($a->[0] eq 'struct') {
+ return 0 unless $b->[0] eq 'struct';
+
+ my @aKeys = sort keys %{$a->[1]};
+ my @bKeys = sort keys %{$b->[1]};
+
+ return 0 unless @aKeys == @bKeys;
+ foreach my $i (0 .. $#aKeys) {
+ return 0 unless $aKeys[$i] eq $bKeys[$i];
+ return 0 unless typeEqual($a->[1]->{$aKeys[$i]}->[0], $b->[1]->{$bKeys[$i]}->[0]);
+ }
+
+ return 1;
} else {
- die "not yet implemented";
+ die "not yet implemented" . Dumper($a);
}
}