JavaScript::Code::Expression - A JavaScript Expression


JavaScript-Code documentation Contained in the JavaScript-Code distribution.

Index


Code Index:

NAME

Top

JavaScript::Code::Expression - A JavaScript Expression

DESCRIPTION

Top

A Expression Class

METHODS

Top

$self->command( )

$self->tree( )

Returns a tree of JavaScript::Code::Expression::Op's

$self->output( )

SEE ALSO

Top

JavaScript::Code

AUTHOR

Top

Sascha Kiefer, esskar@cpan.org

LICENSE

Top

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.


JavaScript-Code documentation Contained in the JavaScript-Code distribution.
package JavaScript::Code::Expression;

use strict;
use vars qw[ $VERSION ];
use base qw[
  JavaScript::Code::Accessor
  JavaScript::Code::Value
];

__PACKAGE__->mk_ro_accessors(qw[ tree ]);

$VERSION = '0.08';

sub command {
    my ( $self, $op, $left, $right ) = @_;

    my $class = 'JavaScript::Code::Expression::Op::' . $op;
    eval "require $class";
    die $@ if $@;

    my $tree;
    if ( $class->unary ) {

        $tree = $class->new(
              $left->isa('JavaScript::Code::Expression')
            ? $left->tree
            : JavaScript::Code::Expression::Op::Term->new( $left->clone )
        );

    }
    else {

        $tree = $class->new(
            $left->isa('JavaScript::Code::Expression') ? $left->tree
            : JavaScript::Code::Expression::Op::Term->new( $left->clone ),
            $right->isa('JavaScript::Code::Expression') ? $right->tree
            : JavaScript::Code::Expression::Op::Term->new( $right->clone )
        );
    }

    $self->{tree} = $tree;

    return $self;
}

sub output {
    my ($self) = @_;

    my $tree = $self->tree;
    return '' unless defined $tree;
    return $tree->output;
}

1;