Line 55... |
Line 55... |
return name in self.symbols['list'];
|
return name in self.symbols['list'];
|
|
|
def SymbolDict(self):
|
def SymbolDict(self):
|
"""
|
"""
|
Return a dict object usable by the eval function with the currently defines
|
Return a dict object usable by the eval function with the currently defines
|
symbols for constants, variables, memory lengths, stack lengths, and signal
|
symbols for constants, variables, memory and I/O signal lengths, variable
|
lengths.
|
lengths, and stack lengths.
|
"""
|
"""
|
t = dict();
|
t = dict();
|
|
# Add constants and variable locations.
|
for ixSymbol in range(len(self.symbols['list'])):
|
for ixSymbol in range(len(self.symbols['list'])):
|
name = self.symbols['list'][ixSymbol];
|
name = self.symbols['list'][ixSymbol];
|
stype = self.symbols['type'][ixSymbol];
|
stype = self.symbols['type'][ixSymbol];
|
if stype == 'constant':
|
if stype == 'constant':
|
t[name] = self.symbols['body'][ixSymbol][0];
|
t[name] = self.symbols['body'][ixSymbol][0];
|
elif stype == 'variable':
|
elif stype == 'variable':
|
t[name] = self.symbols['body'][ixSymbol]['start'];
|
t[name] = self.symbols['body'][ixSymbol]['start'];
|
|
# Construct and add dictionary of sizes.
|
sizes=dict();
|
sizes=dict();
|
|
def AddSize(name,value):
|
|
if name in sizes:
|
|
raise Exception('Program Bug: Symbol "%s" multiply defined');
|
|
sizes[name] = value;
|
for name in self.memoryLength:
|
for name in self.memoryLength:
|
sizes[name] = self.memoryLength[name];
|
AddSize(name,self.memoryLength[name]);
|
|
for ix in [ix for ix in range(len(self.symbols['type'])) if self.symbols['type'][ix] == 'variable']:
|
|
AddSize(self.symbols['list'][ix],len(self.symbols['body'][ix]['value']));
|
for name in self.stackLength:
|
for name in self.stackLength:
|
sizes[name] = self.stackLength[name];
|
AddSize(name,self.stackLength[name]);
|
t['size'] = sizes;
|
t['size'] = sizes;
|
|
# That's all.
|
return t;
|
return t;
|
|
|
################################################################################
|
################################################################################
|
#
|
#
|
# Configure the class for identifying and processing macros.
|
# Configure the class for identifying and processing macros.
|
Line 352... |
Line 361... |
self.memoryLength[name] = length;
|
self.memoryLength[name] = length;
|
|
|
def RegisterStackLength(self,name,length):
|
def RegisterStackLength(self,name,length):
|
"""
|
"""
|
Record the length of the specified stack.\n
|
Record the length of the specified stack.\n
|
Note: This is used to evaluate "size[name]" in "${...}" expressions.
|
Note: This is used to evaluate "size[name]" in "${...}" expressions.\n
|
|
Note: This differs from RegisterMemoryLength() in that the stack lengths
|
|
can be larger than 256.
|
"""
|
"""
|
self.stackLength[name] = length;
|
self.stackLength[name] = length;
|
|
|
################################################################################
|
################################################################################
|
#
|
#
|