- my ($self, $sexp) = @_;
- die "Toplevel is not a cons: $sexp\n " unless consp($sexp);
- my $type = $sexp->car;
- my $addr = $sexp->cdr;
+ my ($self, $sexp, $location) = @_;
+ die 'Toplevel is not a list: ', Dumper($sexp), "\n" unless ref $sexp eq 'ARRAY';
+ my ($type, @addrs) = @$sexp;
+ my $addr;
+
+ die 'Type of toplevel is not atom: '. Dumper($type), "\n" unless scalarp($type);
+
+ if (@addrs > 1) {
+ $addr = $self->{freeptr} + 1;
+ $self->{freeptr} += @addrs;
+ $self->process($addrs[$_], $addr + $_) for 0 .. $#addrs;
+ } else {
+ $addr = $addrs[0];
+ }
+
+ $addr = $self->process($addr) if ref $addr eq 'ARRAY';
+ die 'Addr of toplevel is not atom: ', Dumper($addr), "\n" unless scalarp($addr);