#package TraceCode;
#
#use vars qw (@ISA @EXPORT);
#
#require Exporter; 
#push(@ISA, qw(Exporter));
#
#@EXPORT = qw(
#                traceCode
#            );

use strict;
use Data::Dumper;
use Attribute::Handlers;
use constant {
    PKG    => 0,
    SYMBOL => 1,
    CODE   => 2,
    ATTR   => 3,
    DATA   => 4,
    PHASE  => 5,
};

sub traceCode :ATTR {
    my ($symbol, $code) = @_[SYMBOL, CODE];
    my $name = *{$symbol}{PACKAGE}."::".*{$symbol}{NAME};
    print "traceCode: $name\n";
    
    no warnings 'redefine';
    *{$symbol} = sub {
        print "Starting: $name\n";
        my @output = $code->(@_) if wantarray;
        my $output = $code->(@_) if not wantarray;
        print "Ending: $name\n";
        return wantarray ? @output: $output;
    };
}


sub traceVar :ATTR {
    print "traceVar\n";
}
1;