• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rjfarmer / gfModParser / 15276237822

27 May 2025 01:12PM UTC coverage: 87.828% (+0.4%) from 87.394%
15276237822

push

github

rjfarmer
Fix tests

736 of 838 relevant lines covered (87.83%)

0.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.06
/gfModParser/modules/properties.py
1
# SPDX-License-Identifier: GPL-2.0+
2
import pyparsing
1✔
3

4
from . import attributes
1✔
5
from . import components
1✔
6
from . import expressions
1✔
7
from . import simds
1✔
8
from . import namespaces
1✔
9
from . import procedures
1✔
10
from . import arrays
1✔
11
from . import namelists
1✔
12

13

14
class Properties:
1✔
15
    """
16
    Stores properties of an object
17
    """
18

19
    def __init__(self, properties, *, version):
1✔
20
        self._raw = properties
1✔
21
        self.version = version
1✔
22
        self._properties = None
1✔
23
        self._components = None
1✔
24

25
        self._comp_access = None
1✔
26
        self._parameter = None
1✔
27

28
    def _load(self):
1✔
29
        p = pyparsing.OneOrMore(pyparsing.nestedExpr()).parseString(self._raw)
1✔
30
        self._properties = p[0]
1✔
31

32
        if isinstance(self._properties[2], str):
1✔
33
            self._comp_access = self._properties[2]
1✔
34
            _ = self._properties.pop(2)
1✔
35
        if self.attributes.is_parameter:
1✔
36
            self._parameter = self._properties[6]
1✔
37
            _ = self._properties.pop(6)
1✔
38

39
    @property
1✔
40
    def attributes(self):
1✔
41
        if self._properties is None:
1✔
42
            self._load()
1✔
43
        return attributes.Attributes(self._properties[0], version=self.version)
1✔
44

45
    @property
1✔
46
    def components(self):
1✔
47
        if self._properties is None:
1✔
48
            self._load()
1✔
49
        if self._components is None:
1✔
50
            self._components = components.Components(
1✔
51
                self._properties[1], version=self.version
52
            )
53

54
        return self._components
1✔
55

56
    @property
1✔
57
    def component_access(self):
1✔
58
        if self._properties is None:
1✔
59
            self._load()
1✔
60
        return self._comp_access
1✔
61

62
    @property
1✔
63
    def typespec(self):
1✔
64
        if self._properties is None:
1✔
65
            self._load()
1✔
66
        return expressions.typespec(self._properties[2], version=self.version)
1✔
67

68
    @property
1✔
69
    def namespace(self):
1✔
70
        if self._properties is None:
1✔
71
            self._load()
1✔
72
        return namespaces.namespace(self._properties[3], version=self.version)
1✔
73

74
    @property
1✔
75
    def common_symbol(self):
1✔
76
        if self._properties is None:
1✔
77
            self._load()
1✔
78
        return int(self._properties[4])
1✔
79

80
    @property
1✔
81
    def formal_argument(self):
1✔
82
        """
83
        Symbol references for the procedure arguments
84
        """
85
        if self._properties is None:
1✔
86
            self._load()
1✔
87
        return procedures.arglist(self._properties[5], version=self.version)
1✔
88

89
    @property
1✔
90
    def parameter(self):
1✔
91
        if self._properties is None:
1✔
92
            self._load()
1✔
93
        if self._parameter is not None:
1✔
94
            return expressions.Expression(self._parameter, version=self.version)
1✔
95

96
    @property
1✔
97
    def array_spec(self):
1✔
98
        if self._properties is None:
1✔
99
            self._load()
1✔
100
        return arrays.arrayspec(self._properties[6], version=self.version)
1✔
101

102
    @property
1✔
103
    def symbol_reference(self):
1✔
104
        """
105
        0 if a subroutine, else the symbol reference for a function result
106
        """
107
        if self._properties is None:
1✔
108
            self._load()
1✔
109
        if not any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
110
            return int(self._properties[7])
1✔
111

112
    @property
1✔
113
    def cray_pointer_reference(self):
1✔
114
        if self._properties is None:
1✔
115
            self._load()
1✔
116
        if any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
117
            return int(self._properties[7])
1✔
118

119
    @property
1✔
120
    def derived(self):
1✔
121
        if self._properties is None:
1✔
122
            self._load()
1✔
123
        return namespaces.derived_ns(self._properties[8], version=self.version)
1✔
124

125
    @property
1✔
126
    def actual_argument(self):
1✔
127
        if self._properties is None:
×
128
            self._load()
×
129
        return procedures.arglist(self._properties[9], version=self.version)
×
130

131
    @property
1✔
132
    def namelist(self):
1✔
133
        if self._properties is None:
×
134
            self._load()
×
135
        return namelists.namelist(self._properties[10], version=self.version)
×
136

137
    @property
1✔
138
    def intrinsic(self):
1✔
139
        if self._properties is None:
×
140
            self._load()
×
141
        return self._properties[11] == 1
×
142

143
    @property
1✔
144
    def intrinsic_symbol(self):
1✔
145
        if self._properties is None:
×
146
            self._load()
×
147
        if len(self._properties) > 12:
×
148
            return self._properties[12] == 1
×
149

150
    @property
1✔
151
    def hash(self):
1✔
152
        if self._properties is None:
×
153
            self._load()
×
154
        if len(self._properties) > 13:
×
155
            return int(self._properties[13])
×
156

157
    @property
1✔
158
    def simd(self):
1✔
159
        if self._properties is None:
×
160
            self._load()
×
161
        if len(self._properties) >= 14:
×
162
            return simds.simd(self._properties[14], version=self.version)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc