#!/usr/bin/python
#####################################
class PreprocessScope:
##################################
def __init__(self, file, line, parent, inst, expr):
# Parent Scope
self.parent = parent
# Instrution
self.inst = inst
# Expression
self.expr = expr
# Lines in current scope (Tag, Scope, Unknown)
self.lines = []
# sibling scopes (only #if, #ifndef, #ifdef has this fields)
# ( contains #elif #else scope )
self.elses = []
# file name
self.file = file
self.line = line
##################################
def show(self):
print("#" + self.inst, self.expr)
for line in self.lines:
line.show()
for scope in self.elses:
scope.show()
##################################
def merge(self, scope):
if scope.is_one():
self.lines += scope.lines
elif scope.is_zero():
assert len(scope.elses) <= 1
if len(scope.elses) > 0:
self.lines += scope.elses[0].lines
else:
self.add_scope(scope)
##################################
def get_file_name(self):
return self.file
##################################
def get_line_number(self):
return self.line
##################################
def get_parent(self):
return self.parent
##################################
def get_inst(self):
return self.inst
##################################
def get_lines(self):
return self.lines
##################################
def get_elses(self):
return self.elses
##################################
def get_expr(self):
return self.expr
#####################################