/usr/local/CPAN/enum-fields/enum/fields/extending.pm


package enum::fields::extending;

use 5.00503;
use strict;
use vars qw($VERSION %class_info %final);
use Carp;

use enum::fields;

$VERSION = 1.0;

sub import {

    shift;
    
    croak "No parent class specified" unless (@_);
    
    my $class = caller();
    my $idx = 0;
    
    my $extclass = shift;
    
    croak $@ if ($@);
    
    croak "Connot extend from parent class if this class already has fields" 
        if exists($class_info{$class});
    
    croak "Cannot add fields to class that has been inherited"
        if exists($final{$class});
    
    $class_info{$extclass} = [] unless exists($class_info{$extclass});
    $final{$extclass} = 1;

    for my $fld (@{$class_info{$extclass}}, @_) {
    
        define_constant($class, $fld, $idx++);

        $class_info{$class} = [] unless exists($class_info{$class});
        push @{$class_info{$class}}, $fld;
    }
}

1;