about summary refs log tree commit diff
path: root/docs/tool/Modules/NaturalDocs/Languages/Advanced/Scope.pm
blob: e1e50a9576b022fae6479342fb48db7c990c107e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
###############################################################################
#
#   Class: NaturalDocs::Languages::Advanced::Scope
#
###############################################################################
#
#   A class used to store a scope level.
#
###############################################################################

# This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
# Natural Docs is licensed under the GPL

use strict;
use integer;

package NaturalDocs::Languages::Advanced::Scope;

#
#   Constants: Implementation
#
#   The object is implemented as a blessed arrayref.  The constants below are used as indexes.
#
#   CLOSING_SYMBOL - The closing symbol character of the scope.
#   PACKAGE - The package <SymbolString> of the scope.
#   USING - An arrayref of <SymbolStrings> for using statements, or undef if none.
#
use NaturalDocs::DefineMembers 'CLOSING_SYMBOL', 'PACKAGE', 'USING';
# Dependency: New() depends on the order of these constants as well as that there is no inherited members.


#
#   Function: New
#
#   Creates and returns a new object.
#
#   Parameters:
#
#       closingSymbol - The closing symbol character of the scope.
#       package - The package <SymbolString> of the scope.
#       using - An arrayref of using <SymbolStrings>, or undef if none.  The contents of the array will be duplicated.
#
#       If package is set to undef, it is assumed that it inherits the value of the previous scope on the stack.
#
sub New #(closingSymbol, package, using)
    {
    # Dependency: This depends on the order of the parameters matching the constants, and that there are no inherited
    # members.
    my $package = shift;

    my $object = [ @_ ];
    bless $object, $package;

    if (defined $object->[USING])
        {  $object->[USING] = [ @{$object->[USING]} ];  };

    return $object;
    };


# Function: ClosingSymbol
# Returns the closing symbol character of the scope.
sub ClosingSymbol
    {  return $_[0]->[CLOSING_SYMBOL];  };

# Function: Package
# Returns the package <SymbolString> of the scope, or undef if none.
sub Package
    {  return $_[0]->[PACKAGE];  };

# Function: SetPackage
# Sets the package <SymbolString> of the scope.
sub SetPackage #(package)
    {  $_[0]->[PACKAGE] = $_[1];  };

# Function: Using
# Returns an arrayref of <SymbolStrings> for using statements, or undef if none
sub Using
    {  return $_[0]->[USING];  };

# Function: AddUsing
# Adds a <SymbolString> to the <Using()> array.
sub AddUsing #(using)
    {
    my ($self, $using) = @_;

    if (!defined $self->[USING])
        {  $self->[USING] = [ ];  };

    push @{$self->[USING]}, $using;
    };



1;