1## @file
2# This file is used to define class for data structure used in ECC
3#
4# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>
5# SPDX-License-Identifier: BSD-2-Clause-Patent
6
7##
8# Import Modules
9#
10import Common.EdkLogger as EdkLogger
11
12##
13# Static values for data models
14#
15MODEL_UNKNOWN = 0
16
17MODEL_FILE_C = 1001
18MODEL_FILE_H = 1002
19MODEL_FILE_ASM = 1003
20MODEL_FILE_INF = 1011
21MODEL_FILE_DEC = 1012
22MODEL_FILE_DSC = 1013
23MODEL_FILE_FDF = 1014
24MODEL_FILE_INC = 1015
25MODEL_FILE_CIF = 1016
26MODEL_FILE_UNI = 1017
27MODEL_FILE_OTHERS = 1099
28
29MODEL_IDENTIFIER_FILE_HEADER = 2001
30MODEL_IDENTIFIER_FUNCTION_HEADER = 2002
31MODEL_IDENTIFIER_COMMENT = 2003
32MODEL_IDENTIFIER_PARAMETER = 2004
33MODEL_IDENTIFIER_STRUCTURE = 2005
34MODEL_IDENTIFIER_VARIABLE = 2006
35MODEL_IDENTIFIER_INCLUDE = 2007
36MODEL_IDENTIFIER_PREDICATE_EXPRESSION = 2008
37MODEL_IDENTIFIER_ENUMERATE = 2009
38MODEL_IDENTIFIER_PCD = 2010
39MODEL_IDENTIFIER_UNION = 2011
40MODEL_IDENTIFIER_MACRO_IFDEF = 2012
41MODEL_IDENTIFIER_MACRO_IFNDEF = 2013
42MODEL_IDENTIFIER_MACRO_DEFINE = 2014
43MODEL_IDENTIFIER_MACRO_ENDIF = 2015
44MODEL_IDENTIFIER_MACRO_PROGMA = 2016
45MODEL_IDENTIFIER_FUNCTION_CALLING = 2018
46MODEL_IDENTIFIER_TYPEDEF = 2017
47MODEL_IDENTIFIER_FUNCTION_DECLARATION = 2019
48MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION = 2020
49
50MODEL_EFI_PROTOCOL = 3001
51MODEL_EFI_PPI = 3002
52MODEL_EFI_GUID = 3003
53MODEL_EFI_LIBRARY_CLASS = 3004
54MODEL_EFI_LIBRARY_INSTANCE = 3005
55MODEL_EFI_PCD = 3006
56MODEL_EFI_SOURCE_FILE = 3007
57MODEL_EFI_BINARY_FILE = 3008
58MODEL_EFI_SKU_ID = 3009
59MODEL_EFI_INCLUDE = 3010
60MODEL_EFI_DEPEX = 3011
61MODEL_EFI_DEFAULT_STORES = 3012
62
63MODEL_PCD = 4000
64MODEL_PCD_FIXED_AT_BUILD = 4001
65MODEL_PCD_PATCHABLE_IN_MODULE = 4002
66MODEL_PCD_FEATURE_FLAG = 4003
67MODEL_PCD_DYNAMIC_EX = 4004
68MODEL_PCD_DYNAMIC_EX_DEFAULT = 4005
69MODEL_PCD_DYNAMIC_EX_VPD = 4006
70MODEL_PCD_DYNAMIC_EX_HII = 4007
71MODEL_PCD_DYNAMIC = 4008
72MODEL_PCD_DYNAMIC_DEFAULT = 4009
73MODEL_PCD_DYNAMIC_VPD = 4010
74MODEL_PCD_DYNAMIC_HII = 4011
75MODEL_PCD_TYPE_LIST = [MODEL_PCD_FIXED_AT_BUILD,
76                        MODEL_PCD_PATCHABLE_IN_MODULE,
77                        MODEL_PCD_FEATURE_FLAG,
78                        MODEL_PCD_DYNAMIC_DEFAULT,
79                        MODEL_PCD_DYNAMIC_HII,
80                        MODEL_PCD_DYNAMIC_VPD,
81                        MODEL_PCD_DYNAMIC_EX_DEFAULT,
82                        MODEL_PCD_DYNAMIC_EX_HII,
83                        MODEL_PCD_DYNAMIC_EX_VPD
84                       ]
85
86MODEL_META_DATA_HEADER_COMMENT = 5000
87MODEL_META_DATA_HEADER = 5001
88MODEL_META_DATA_INCLUDE = 5002
89MODEL_META_DATA_DEFINE = 5003
90MODEL_META_DATA_CONDITIONAL_STATEMENT_IF = 5004
91MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE = 5005
92MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF = 5006
93MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF = 5007
94MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR = 5400
95MODEL_META_DATA_BUILD_OPTION = 5008
96MODEL_META_DATA_COMPONENT = 5009
97MODEL_META_DATA_USER_EXTENSION = 5010
98MODEL_META_DATA_PACKAGE = 5011
99MODEL_META_DATA_NMAKE = 5012
100MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF = 5013
101MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF = 5014
102MODEL_META_DATA_COMMENT = 5016
103MODEL_META_DATA_GLOBAL_DEFINE = 5017
104MODEL_META_DATA_SECTION_HEADER = 5100
105MODEL_META_DATA_SUBSECTION_HEADER = 5200
106MODEL_META_DATA_TAIL_COMMENT = 5300
107
108MODEL_EXTERNAL_DEPENDENCY = 10000
109
110MODEL_LIST = [('MODEL_UNKNOWN', MODEL_UNKNOWN),
111              ('MODEL_FILE_C', MODEL_FILE_C),
112              ('MODEL_FILE_H', MODEL_FILE_H),
113              ('MODEL_FILE_ASM', MODEL_FILE_ASM),
114              ('MODEL_FILE_INF', MODEL_FILE_INF),
115              ('MODEL_FILE_DEC', MODEL_FILE_DEC),
116              ('MODEL_FILE_DSC', MODEL_FILE_DSC),
117              ('MODEL_FILE_FDF', MODEL_FILE_FDF),
118              ('MODEL_FILE_INC', MODEL_FILE_INC),
119              ('MODEL_FILE_CIF', MODEL_FILE_CIF),
120              ('MODEL_FILE_OTHERS', MODEL_FILE_OTHERS),
121              ('MODEL_IDENTIFIER_FILE_HEADER', MODEL_IDENTIFIER_FILE_HEADER),
122              ('MODEL_IDENTIFIER_FUNCTION_HEADER', MODEL_IDENTIFIER_FUNCTION_HEADER),
123              ('MODEL_IDENTIFIER_COMMENT', MODEL_IDENTIFIER_COMMENT),
124              ('MODEL_IDENTIFIER_PARAMETER', MODEL_IDENTIFIER_PARAMETER),
125              ('MODEL_IDENTIFIER_STRUCTURE', MODEL_IDENTIFIER_STRUCTURE),
126              ('MODEL_IDENTIFIER_VARIABLE', MODEL_IDENTIFIER_VARIABLE),
127              ('MODEL_IDENTIFIER_INCLUDE', MODEL_IDENTIFIER_INCLUDE),
128              ('MODEL_IDENTIFIER_PREDICATE_EXPRESSION', MODEL_IDENTIFIER_PREDICATE_EXPRESSION),
129              ('MODEL_IDENTIFIER_ENUMERATE', MODEL_IDENTIFIER_ENUMERATE),
130              ('MODEL_IDENTIFIER_PCD', MODEL_IDENTIFIER_PCD),
131              ('MODEL_IDENTIFIER_UNION', MODEL_IDENTIFIER_UNION),
132              ('MODEL_IDENTIFIER_MACRO_IFDEF', MODEL_IDENTIFIER_MACRO_IFDEF),
133              ('MODEL_IDENTIFIER_MACRO_IFNDEF', MODEL_IDENTIFIER_MACRO_IFNDEF),
134              ('MODEL_IDENTIFIER_MACRO_DEFINE', MODEL_IDENTIFIER_MACRO_DEFINE),
135              ('MODEL_IDENTIFIER_MACRO_ENDIF', MODEL_IDENTIFIER_MACRO_ENDIF),
136              ('MODEL_IDENTIFIER_MACRO_PROGMA', MODEL_IDENTIFIER_MACRO_PROGMA),
137              ('MODEL_IDENTIFIER_FUNCTION_CALLING', MODEL_IDENTIFIER_FUNCTION_CALLING),
138              ('MODEL_IDENTIFIER_TYPEDEF', MODEL_IDENTIFIER_TYPEDEF),
139              ('MODEL_IDENTIFIER_FUNCTION_DECLARATION', MODEL_IDENTIFIER_FUNCTION_DECLARATION),
140              ('MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION', MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION),
141              ('MODEL_EFI_PROTOCOL', MODEL_EFI_PROTOCOL),
142              ('MODEL_EFI_PPI', MODEL_EFI_PPI),
143              ('MODEL_EFI_GUID', MODEL_EFI_GUID),
144              ('MODEL_EFI_LIBRARY_CLASS', MODEL_EFI_LIBRARY_CLASS),
145              ('MODEL_EFI_LIBRARY_INSTANCE', MODEL_EFI_LIBRARY_INSTANCE),
146              ('MODEL_EFI_PCD', MODEL_EFI_PCD),
147              ('MODEL_EFI_SKU_ID', MODEL_EFI_SKU_ID),
148              ('MODEL_EFI_INCLUDE', MODEL_EFI_INCLUDE),
149              ('MODEL_EFI_DEPEX', MODEL_EFI_DEPEX),
150              ('MODEL_IDENTIFIER_UNION', MODEL_IDENTIFIER_UNION),
151              ('MODEL_EFI_SOURCE_FILE', MODEL_EFI_SOURCE_FILE),
152              ('MODEL_EFI_BINARY_FILE', MODEL_EFI_BINARY_FILE),
153              ('MODEL_PCD', MODEL_PCD),
154              ('MODEL_PCD_FIXED_AT_BUILD', MODEL_PCD_FIXED_AT_BUILD),
155              ('MODEL_PCD_PATCHABLE_IN_MODULE', MODEL_PCD_PATCHABLE_IN_MODULE),
156              ('MODEL_PCD_FEATURE_FLAG', MODEL_PCD_FEATURE_FLAG),
157              ('MODEL_PCD_DYNAMIC_EX', MODEL_PCD_DYNAMIC_EX),
158              ('MODEL_PCD_DYNAMIC_EX_DEFAULT', MODEL_PCD_DYNAMIC_EX_DEFAULT),
159              ('MODEL_PCD_DYNAMIC_EX_VPD', MODEL_PCD_DYNAMIC_EX_VPD),
160              ('MODEL_PCD_DYNAMIC_EX_HII', MODEL_PCD_DYNAMIC_EX_HII),
161              ('MODEL_PCD_DYNAMIC', MODEL_PCD_DYNAMIC),
162              ('MODEL_PCD_DYNAMIC_DEFAULT', MODEL_PCD_DYNAMIC_DEFAULT),
163              ('MODEL_PCD_DYNAMIC_VPD', MODEL_PCD_DYNAMIC_VPD),
164              ('MODEL_PCD_DYNAMIC_HII', MODEL_PCD_DYNAMIC_HII),
165              ("MODEL_META_DATA_HEADER", MODEL_META_DATA_HEADER),
166              ("MODEL_META_DATA_INCLUDE", MODEL_META_DATA_INCLUDE),
167              ("MODEL_META_DATA_DEFINE", MODEL_META_DATA_DEFINE),
168              ("MODEL_META_DATA_CONDITIONAL_STATEMENT_IF", MODEL_META_DATA_CONDITIONAL_STATEMENT_IF),
169              ("MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE", MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE),
170              ("MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF", MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF),
171              ("MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF", MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF),
172              ("MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR", MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR),
173              ("MODEL_META_DATA_BUILD_OPTION", MODEL_META_DATA_BUILD_OPTION),
174              ("MODEL_META_DATA_COMPONENT", MODEL_META_DATA_COMPONENT),
175              ('MODEL_META_DATA_USER_EXTENSION', MODEL_META_DATA_USER_EXTENSION),
176              ('MODEL_META_DATA_PACKAGE', MODEL_META_DATA_PACKAGE),
177              ('MODEL_META_DATA_NMAKE', MODEL_META_DATA_NMAKE),
178              ('MODEL_META_DATA_COMMENT', MODEL_META_DATA_COMMENT)
179             ]
180
181## FunctionClass
182#
183# This class defines a structure of a function
184#
185# @param ID:               ID of a Function
186# @param Header:           Header of a Function
187# @param Modifier:         Modifier of a Function
188# @param Name:             Name of a Function
189# @param ReturnStatement:  ReturnStatement of a Function
190# @param StartLine:        StartLine of a Function
191# @param StartColumn:      StartColumn of a Function
192# @param EndLine:          EndLine of a Function
193# @param EndColumn:        EndColumn of a Function
194# @param BodyStartLine:    BodyStartLine of a Function Body
195# @param BodyStartColumn:  BodyStartColumn of a Function Body
196# @param BelongsToFile:    The Function belongs to which file
197# @param IdentifierList:   IdentifierList of a File
198# @param PcdList:          PcdList of a File
199#
200# @var ID:                 ID of a Function
201# @var Header:             Header of a Function
202# @var Modifier:           Modifier of a Function
203# @var Name:               Name of a Function
204# @var ReturnStatement:    ReturnStatement of a Function
205# @var StartLine:          StartLine of a Function
206# @var StartColumn:        StartColumn of a Function
207# @var EndLine:            EndLine of a Function
208# @var EndColumn:          EndColumn of a Function
209# @var BodyStartLine:      StartLine of a Function Body
210# @var BodyStartColumn:    StartColumn of a Function Body
211# @var BelongsToFile:      The Function belongs to which file
212# @var IdentifierList:     IdentifierList of a File
213# @var PcdList:            PcdList of a File
214#
215class FunctionClass(object):
216    def __init__(self, ID = -1, Header = '', Modifier = '', Name = '', ReturnStatement = '', \
217                 StartLine = -1, StartColumn = -1, EndLine = -1, EndColumn = -1, \
218                 BodyStartLine = -1, BodyStartColumn = -1, BelongsToFile = -1, \
219                 IdentifierList = [], PcdList = [], \
220                 FunNameStartLine = -1, FunNameStartColumn = -1):
221        self.ID = ID
222        self.Header = Header
223        self.Modifier = Modifier
224        self.Name = Name
225        self.ReturnStatement = ReturnStatement
226        self.StartLine = StartLine
227        self.StartColumn = StartColumn
228        self.EndLine = EndLine
229        self.EndColumn = EndColumn
230        self.BodyStartLine = BodyStartLine
231        self.BodyStartColumn = BodyStartColumn
232        self.BelongsToFile = BelongsToFile
233        self.FunNameStartLine = FunNameStartLine
234        self.FunNameStartColumn = FunNameStartColumn
235
236        self.IdentifierList = IdentifierList
237        self.PcdList = PcdList
238
239## IdentifierClass
240#
241# This class defines a structure of a variable
242#
243# @param ID:                 ID of a Identifier
244# @param Modifier:           Modifier of a Identifier
245# @param Type:               Type of a Identifier
246# @param Name:               Name of a Identifier
247# @param Value:              Value of a Identifier
248# @param Model:              Model of a Identifier
249# @param BelongsToFile:      The Identifier belongs to which file
250# @param BelongsToFunction:  The Identifier belongs to which function
251# @param StartLine:          StartLine of a Identifier
252# @param StartColumn:        StartColumn of a Identifier
253# @param EndLine:            EndLine of a Identifier
254# @param EndColumn:          EndColumn of a Identifier
255#
256# @var ID:                   ID of a Identifier
257# @var Modifier:             Modifier of a Identifier
258# @var Type:                 Type of a Identifier
259# @var Name:                 Name of a Identifier
260# @var Value:                Value of a Identifier
261# @var Model:                Model of a Identifier
262# @var BelongsToFile:        The Identifier belongs to which file
263# @var BelongsToFunction:    The Identifier belongs to which function
264# @var StartLine:            StartLine of a Identifier
265# @var StartColumn:          StartColumn of a Identifier
266# @var EndLine:              EndLine of a Identifier
267# @var EndColumn:            EndColumn of a Identifier
268#
269class IdentifierClass(object):
270    def __init__(self, ID = -1, Modifier = '', Type = '', Name = '', Value = '', Model = MODEL_UNKNOWN, \
271                 BelongsToFile = -1, BelongsToFunction = -1, StartLine = -1, StartColumn = -1, EndLine = -1, EndColumn = -1):
272        self.ID = ID
273        self.Modifier = Modifier
274        self.Type = Type
275        self.Name = Name
276        self.Value = Value
277        self.Model = Model
278        self.BelongsToFile = BelongsToFile
279        self.BelongsToFunction = BelongsToFunction
280        self.StartLine = StartLine
281        self.StartColumn = StartColumn
282        self.EndLine = EndLine
283        self.EndColumn = EndColumn
284
285## PcdClass
286#
287# This class defines a structure of a Pcd
288#
289# @param ID:                   ID of a Pcd
290# @param CName:                CName of a Pcd
291# @param TokenSpaceGuidCName:  TokenSpaceGuidCName of a Pcd
292# @param Token:                Token of a Pcd
293# @param DatumType:            DatumType of a Pcd
294# @param Model:                Model of a Pcd
295# @param BelongsToFile:        The Pcd belongs to which file
296# @param BelongsToFunction:    The Pcd belongs to which function
297# @param StartLine:            StartLine of a Pcd
298# @param StartColumn:          StartColumn of a Pcd
299# @param EndLine:              EndLine of a Pcd
300# @param EndColumn:            EndColumn of a Pcd
301#
302# @var ID:                     ID of a Pcd
303# @var CName:                  CName of a Pcd
304# @var TokenSpaceGuidCName:    TokenSpaceGuidCName of a Pcd
305# @var Token:                  Token of a Pcd
306# @var DatumType:              DatumType of a Pcd
307# @var Model:                  Model of a Pcd
308# @var BelongsToFile:          The Pcd belongs to which file
309# @var BelongsToFunction:      The Pcd belongs to which function
310# @var StartLine:              StartLine of a Pcd
311# @var StartColumn:            StartColumn of a Pcd
312# @var EndLine:                EndLine of a Pcd
313# @var EndColumn:              EndColumn of a Pcd
314#
315class PcdDataClass(object):
316    def __init__(self, ID = -1, CName = '', TokenSpaceGuidCName = '', Token = '', DatumType = '', Model = MODEL_UNKNOWN, \
317                 BelongsToFile = -1, BelongsToFunction = -1, StartLine = -1, StartColumn = -1, EndLine = -1, EndColumn = -1):
318        self.ID = ID
319        self.CName = CName
320        self.TokenSpaceGuidCName = TokenSpaceGuidCName
321        self.Token = Token
322        self.DatumType = DatumType
323        self.BelongsToFile = BelongsToFile
324        self.BelongsToFunction = BelongsToFunction
325        self.StartLine = StartLine
326        self.StartColumn = StartColumn
327        self.EndLine = EndLine
328        self.EndColumn = EndColumn
329
330## FileClass
331#
332# This class defines a structure of a file
333#
334# @param ID:              ID of a File
335# @param Name:            Name of a File
336# @param ExtName:         ExtName of a File
337# @param Path:            Path of a File
338# @param FullPath:        FullPath of a File
339# @param Model:           Model of a File
340# @param TimeStamp:       TimeStamp of a File
341# @param FunctionList:    FunctionList of a File
342# @param IdentifierList:  IdentifierList of a File
343# @param PcdList:         PcdList of a File
344#
345# @var ID:                ID of a File
346# @var Name:              Name of a File
347# @var ExtName:           ExtName of a File
348# @var Path:              Path of a File
349# @var FullPath:          FullPath of a File
350# @var Model:             Model of a File
351# @var TimeStamp:         TimeStamp of a File
352# @var FunctionList:      FunctionList of a File
353# @var IdentifierList:    IdentifierList of a File
354# @var PcdList:           PcdList of a File
355#
356class FileClass(object):
357    def __init__(self, ID = -1, Name = '', ExtName = '', Path = '', FullPath = '', Model = MODEL_UNKNOWN, TimeStamp = '', \
358                 FunctionList = [], IdentifierList = [], PcdList = []):
359        self.ID = ID
360        self.Name = Name
361        self.ExtName = ExtName
362        self.Path = Path
363        self.FullPath = FullPath
364        self.Model = Model
365        self.TimeStamp = TimeStamp
366
367        self.FunctionList = FunctionList
368        self.IdentifierList = IdentifierList
369        self.PcdList = PcdList
370