blob: 3b37b939e3cc24d53d7729c3b5e94c606aa38c1b [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
use strict;
use warnings;
package Clownfish::Symbol;
use Clownfish;
use Clownfish::Parcel;
use Clownfish::Util qw( verify_args );
use Carp;
my %new_PARAMS = (
parcel => undef,
exposure => undef,
class_name => undef,
class_cnick => undef,
micro_sym => undef,
);
sub new {
my ( $either, %args ) = @_;
verify_args( \%new_PARAMS, %args ) or confess $@;
$args{parcel} = Clownfish::Parcel->acquire( $args{parcel} );
my $class_class = ref($either) || $either;
return $class_class->_new(
@args{qw( parcel exposure class_name class_cnick micro_sym )} );
}
1;
__END__
__POD__
=head1 NAME
Clownfish::Symbol - Base class for Clownfish symbols.
=head1 DESCRIPTION
Clownfish::Symbol serves as a parent class for entities which may live in the
global namespace, such as classes, functions, methods, and variables.
=head1 CONSTRUCTOR
my $symbol = Clownfish::Symbol->new(
parcel => 'Crustacean', # default: special
exposure => 'parcel', # required
class_name => 'Crustacean::Lobster', # default: undef
class_cnick => undef, # default: special
micro_sym => 'average_lifespan', # required
);
=over
=item * B<parcel> - A Clownfish::Parcel, or a string that can be used to
create/retrieve one. If not supplied, will be assigned to the default Parcel.
=item * B<exposure> - The scope in which the symbol is exposed. Must be
'public', 'parcel', 'private', or 'local'.
=item * B<class_name> - A optional class name, consisting of one or more
components separated by "::". Each component must start with a capital
letter, contain at least one lower-case letter, and consist entirely of the
characters [A-Za-z0-9].
=item * B<class_cnick> - The C nickname associated with the supplied class
name. If not supplied, will be derived if possible from C<class_name> by
extracting the last class name component.
=item * B<micro_sym> - The local identifier for the symbol.
=back
=head1 OBJECT METHODS
=head2 get_parcel get_class_name get_class_cnick get_exposure micro_sym
Getters.
=head2 get_prefix get_Prefix get_PREFIX
Get a string prefix, delegating to C<parcel> member var.
=head2 public parcel private local
if ( $sym->public ) { do_x() }
elsif ( $sym->parcel ) { do_y() }
Indicate whether the symbol matches a given access level.
=head2 equals
do_stuff() if $sym->equals($other_sym);
Returns true if the symbols are "equal", false otherwise.
=head2 short_sym
# e.g. "Lobster_average_lifespan"
print $symbol->short_sym;
Returns the C representation for the symbol minus the parcel's prefix.
=head2 full_sym
# e.g. "crust_Lobster_average_lifespan"
print $symbol->full_sym;
Returns the fully qualified C representation for the symbol.
=cut