MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / InitializerParser

Class InitializerParser

addons/misra_9.py:215–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213
214# Parses the initializers and update the ElementDefs status accordingly
215class InitializerParser:
216 def __init__(self):
217 self.token = None
218 self.root = None
219 self.ed = None
220 self.rootStack = []
221
222 def parseInitializer(self, root, token):
223 self.root = root
224 self.token = token
225 dummyRoot = ElementDef('array', '->', self.root.valueType)
226 dummyRoot.children = [self.root]
227
228 self.rootStack = []
229 self.root = dummyRoot
230 self.ed = self.root.getFirstValueElement()
231 isFirstElement = False
232 isDesignated = False
233
234 while self.token:
235 if self.token.str == ',':
236 self.token = self.token.astOperand1
237 isFirstElement = False
238
239 # Designated initializer ( [2]=... or .name=... )
240 elif self.token.isAssignmentOp and not self.token.valueType:
241 self.popFromStackIfExitElement()
242
243 self.ed = getElementByDesignator(self.root, self.token.astOperand1)
244 if self.ed:
245 # Update root
246 self.pushToRootStackAndMarkAsDesignated()
247 # Make sure ed points to valueElement
248 self.ed = self.ed.getFirstValueElement()
249
250 self.token = self.token.astOperand2
251 isFirstElement = False
252 isDesignated = True
253
254 elif self.token.isString and self.ed and self.ed.isArray:
255 self.ed.setInitialized(isDesignated)
256 if self.token == self.token.astParent.astOperand1 and self.token.astParent.astOperand2:
257 self.token = self.token.astParent.astOperand2
258 self.ed.markAsCurrent()
259 self.ed = self.root.getNextChild()
260 else:
261 self.unwindAndContinue()
262 continue
263
264 elif self.token.str == '{':
265 nextChild = self.root.getNextChild() if self.root is not None else None
266
267 if nextChild:
268 if nextChild.isArray or nextChild.isRecord:
269 nextChild.unset()
270 nextChild.setInitialized(isDesignated)
271 self.ed = nextChild.getFirstValueElement()
272 isDesignated = False

Callers 1

misra_9_xFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected