How to use get_symbol_table method in lisa

Best Python code snippet using lisa_python

lexical_scope_symbol_table.py

Source: lexical_scope_symbol_table.py Github

copy

Full Screen

...36 """37 Returns the offset of the direct parent scope38 """39 return self.upper_scope_offset40 def get_symbol_table(self):41 """42 Returns the collection of symbols43 """44 return self.symbols45 def set_upper_scope_offset(self, offset):46 """47 Sets the direct parent scope offset48 """49 self.upper_scope_offset = offset50 def set_offset_scope(self, offset):51 """52 Sets the current scope offset53 """54 self.offset_scope = offset55 def set_symbol_table(self, symbol_table):56 """57 Sets the value of the symbol table58 """59 self.symbols = symbol_table60class LexicalScopeSymbolTable(object):61 """62 Contains the implementation of the tracking of symbols and their values per scope level63 """64 level_scope = list(list())65 current_level = 066 def __init__(self):67 self.initialize_scope()68 def debug_level(self):69 """70 Prints the number of scope level and prints the number of symbols per scope71 """72 print "DEBUG_LEVEL: Number of level => " + str(self.get_size_level())73 for scope_collection in self.level_scope:74 print "Debug_level: " + str(len(scope_collection))75 def dump_level(self, level):76 """77 Prints the content of each scope level78 """79 collection_scope = self.level_scope[level]80 print "#" * 35 + "Dump_Level" + "#" * 3581 for scope_offset in collection_scope:82 symbol_table = scope_offset.get_symbol_table()83 i = scope_offset.get_offset_scope()84 for k, value in symbol_table.iteritems():85 print "Scope(%s:%s) -> id: %s, value=%s, addr=%s, addr_table=%s"\86 % (str(level), str(i), str(k)87 , str(value.n), str(value), str(hex(id(symbol_table))))88 def add_new_scope(self):89 """90 Creates and append a new scope to the current level of the EntrySymbolTable91 A scope contains:92 offset: offset of the new scope93 upper_scope: level of the direct parent scope94 dictionnary: contains symbol as key associated with a value95 """96 # upper_offset = self.get_offset_last_dominant()97 self.level_scope.append([EntrySymbolTable(self.current_level, -1, -1, dict())])98 addr_table = hex(id(self.level_scope[self.current_level][-1].get_symbol_table()))99 print "Add_new_scope: %s:%s - addr_table=%s" % ("x", "x", addr_table)100 def add_new_offset(self, index_level):101 """102 Adds an offset of a scope level103 """104 # offset = len(self.level_scope[index_level])105 self.level_scope[index_level].append(EntrySymbolTable(index_level, -1, -1, dict()))106 addr_table = hex(id(self.level_scope[self.current_level][-1].get_symbol_table()))107 print "Add_new_offset: %s:%s - addr_table=%s" % ("x", "x", addr_table)108 def set_offset_new_scope(self):109 """110 Sets the direct parent offset and the current offset of a scope level111 """112 # offset = -1113 upper_offset = self.get_offset_last_dominant()114 if self.get_offset_current_level() == -1:115 offset = self.get_size_offset(self.get_current_level()) - 1116 else:117 offset = self.level_scope[self.get_current_level()][-1].get_offset_scope() + 1118 self.level_scope[self.get_current_level()][-1].set_offset_scope(offset)119 self.level_scope[self.get_current_level()][-1].set_upper_scope_offset(upper_offset)120 def initialize_scope(self):121 """122 Initialize a scope123 """124 index_level = self.get_current_level()125 if index_level >= self.get_size_level():126 self.add_new_scope()127 else:128 self.add_new_offset(index_level)129 # upper_offset = self.get_offset_last_dominant()130 current_offset = self.get_offset_current_level()131 self.set_offset_new_scope()132 self.print_scope_initialization(current_offset)133 self.current_level += 1134 def bind_symbol(self, symbol, value, index_level, offset):135 """136 Sets the state of a symbol, according to its scope level137 """138 symbol_table = self.get_symbol_table(index_level, offset)139 symbol_table[symbol] = value140 print "Bind_scope: %s:%s - addr_table=%s" \141 % (str(index_level), offset, str(hex(id(symbol_table))))142 def lookup_symbol(self, symbol):143 """144 Returns the value associated to a symbol145 """146 index_level = self.get_current_level() - 1147 if index_level < 0:148 print "ERROR(lexicalScopeSymbolTable.lookup_symbol): index level must be positive"149 return None150 offset = self.get_offset_by_level(index_level)151 symbol_table = self.get_symbol_table(index_level, offset)152 if symbol in symbol_table.keys():153 value = symbol_table[symbol]154 return value155 print "Lookup_symbol: Not found - " + str(symbol)156 return self.lookup_dominant_scope(symbol, index_level, offset)157 def lookup_dominant_scope(self, symbol, index_level, offset):158 """159 Returns the value of a symbol of a direct dominant scope160 """161 dominant_level = index_level - 1162 upper_offset = self.level_scope[index_level][offset].get_upper_offset()163 if self.level_scope[dominant_level][upper_offset]:164 symbol_table = self.get_symbol_table(dominant_level, upper_offset)165 if symbol in symbol_table.keys():166 print "Lookup_dominant_scope: found %s=%s" \167 % (symbol, symbol_table[symbol])168 return symbol_table[symbol]169 print "Lookup_dominant_scope: Not found - %s; upper_level=%s, upper_offset=%s" \170 % (str(symbol), dominant_level, upper_offset)171 return None172 def finalize_scope(self):173 """174 Close a scope level, decrement the current level175 """176 self.current_level -= 1177 print "===== -> Finalize Scope %s =====" % (str(self.current_level))178 def get_offset_last_dominant(self):179 """180 Returns the offset of the last dominant scope181 """182 if self.get_current_level() == 0:183 return 0184 return self.level_scope[self.get_current_level() - 1][-1].get_offset_scope()185 def get_last_offset_level(self, index_level):186 """187 Returns the last valid offset of a specific scope188 """189 return len(self.level_scope[index_level]) - 1190 def get_offset_current_level(self):191 """192 Returns the offset of the current level193 """194 return self.level_scope[self.current_level][-1].get_offset_scope()195 def get_offset_by_level(self, index_level):196 """197 Returns the offset of a specified level198 """199 return self.level_scope[index_level][-1].get_offset_scope()200 def get_size_offset(self, index_level):201 """202 Returns the number of symbol in a specified scope level203 """204 return len(self.level_scope[index_level])205 def get_last_offset(self, index_level):206 """207 Returns the last valid offset of a scope level208 """209 return self.level_scope[index_level][-1].get_offset_scope()210 def get_size_level(self):211 """212 Returns the size of level_scope213 """214 return len(self.level_scope)215 def get_scope(self, offset):216 """217 Returns a scope by offset218 """219 return self.level_scope[self.get_current_level()][offset]220 def get_current_level(self):221 """222 Returns the value of the current scope level223 """224 return self.current_level225 def get_symbol_table(self, index_level, offset):226 """227 Returns the symbol table228 """229 symbol_table = self.level_scope[index_level][offset].get_symbol_table()230 print "Get_symbol_table(Scope %s:%s)" % (str(index_level), offset)231 return symbol_table232 def print_scope_initialization(self, offset):233 """234 Prints debug informations:235 - current_level: current scope level236 - offset: current scope offset237 - upper_offset: direct parent scope offset238 """239 print "===== -> Initialize Scope %s:%s - %s ====="\240 % (str(self.current_level)241 , self.get_scope(offset).get_offset_scope()...

Full Screen

Full Screen

stack.py

Source: stack.py Github

copy

Full Screen

...32 # the implementation of chain map does things this way33 yield from set().union(self.locals, self.globals)34 def __len__(self):35 return len(set().union(self.locals, self.globals))36def get_symbol_table(37 decorators: tp.Optional[tp.Sequence[inspect.FrameInfo]] = None,38 copy_locals: bool = False39 ) -> SymbolTable:40 exec(_SKIP_FRAME_DEBUG_STMT)41 locals = ChainMap()42 globals = ChainMap()43 if decorators is None:44 decorators = set()45 else:46 decorators = {f.__code__ for f in decorators}47 decorators.add(get_symbol_table.__code__)48 stack = inspect.stack()49 for i in range(len(stack) - 1, 0, -1):50 frame = stack[i]51 if frame.frame.f_code in decorators:52 continue53 debug_check = frame.frame.f_locals.get(_SKIP_FRAME_DEBUG_NAME, None)54 if debug_check == _SKIP_FRAME_DEBUG_VALUE:55 if _SKIP_FRAME_DEBUG_FAIL:56 raise RuntimeError(f'{frame.function} @ {frame.filename}:{frame.lineno} might be leaking names')57 else:58 logging.debug(f'{frame.function} @ {frame.filename}:{frame.lineno} might be leaking names')59 f_locals = stack[i].frame.f_locals60 if copy_locals:61 f_locals = copy.copy(f_locals)62 locals = locals.new_child(f_locals)63 globals = globals.new_child(stack[i].frame.f_globals)64 return SymbolTable(locals=locals, globals=dict(globals))65def inspect_symbol_table(66 fn: tp.Callable, # tp.Callable[[SymbolTable, ...], tp.Any],67 *,68 decorators: tp.Optional[tp.Sequence[inspect.FrameInfo]] = None,69 ) -> tp.Callable:70 exec(_SKIP_FRAME_DEBUG_STMT)71 if decorators is None:72 decorators = ()73 @functools.wraps(fn)74 def wrapped_0(*args, **kwargs):75 exec(_SKIP_FRAME_DEBUG_STMT)76 st = get_symbol_table(list(itertools.chain(decorators, [wrapped_0])))77 return fn(st, *args, **kwargs)78 return wrapped_079# mostly equivelent to magma.ast_utils.inspect_enclosing_env80def inspect_enclosing_env(81 fn: tp.Callable, # tp.Callable[[tp.Dict[str, tp.Any], ...], tp.Any],82 *,83 decorators: tp.Optional[tp.Sequence[inspect.FrameInfo]] = None,84 st: tp.Optional[SymbolTable] = None) -> tp.Callable:85 exec(_SKIP_FRAME_DEBUG_STMT)86 if decorators is None:87 decorators = ()88 @functools.wraps(fn)89 def wrapped_0(*args, **kwargs):90 exec(_SKIP_FRAME_DEBUG_STMT)91 _st = get_symbol_table(list(itertools.chain(decorators, [wrapped_0])))92 if st is not None:93 _st.locals.update(st)94 env = dict(_st.globals)95 env.update(_st.locals)96 return fn(env, *args, **kwargs)...

Full Screen

Full Screen

test_stack.py

Source: test_stack.py Github

copy

Full Screen

1import pytest2from ast_tools import stack3MAGIC = 'foo'4def test_get_symbol_table():5 MAGIC = 'bar'6 st = stack.get_symbol_table()7 assert st.globals['MAGIC'] == 'foo'8 assert st.locals['MAGIC'] == 'bar'9def test_inspect_symbol_table():10 MAGIC = 'bar'11 @stack.inspect_symbol_table12 def test(st):13 assert st.globals['MAGIC'] == 'foo'14 assert st.locals['MAGIC'] == 'bar'15 test()16 @stack.inspect_symbol_table17 def test(st):18 assert st.locals[stack._SKIP_FRAME_DEBUG_NAME] == 0xdeadbeaf19 stack._SKIP_FRAME_DEBUG_FAIL = True20 exec(stack._SKIP_FRAME_DEBUG_STMT)21 with pytest.raises(RuntimeError):22 test()23 stack._SKIP_FRAME_DEBUG_FAIL = False24 test()25def test_inspect_enclosing_env():26 MAGIC = 'bar'27 @stack.inspect_enclosing_env28 def test(env):29 assert env['MAGIC'] == 'bar'30 test()31 @stack.inspect_enclosing_env32 def test(env):33 assert env[stack._SKIP_FRAME_DEBUG_NAME] == 0xdeadbeaf34 stack._SKIP_FRAME_DEBUG_FAIL = True35 exec(stack._SKIP_FRAME_DEBUG_STMT)36 with pytest.raises(RuntimeError):37 test()38 stack._SKIP_FRAME_DEBUG_FAIL = False39 test()40def test_custom_env():41 MAGIC1 = 'foo'42 def test(env):43 assert env['MAGIC1'] == 'foo'44 assert env['MAGIC2'] == 'bar'45 st = stack.SymbolTable(locals={},globals={'MAGIC2':'bar'})46 test = stack.inspect_enclosing_env(test, st=st)47 test()48def test_get_symbol_table_copy_frames():49 non_copy_sts = []50 copy_sts = []51 for i in range(5):52 non_copy_sts.append(stack.get_symbol_table())53 copy_sts.append(stack.get_symbol_table(copy_locals=True))54 for j in range(5):55 assert non_copy_sts[j].locals["i"] == 4...

Full Screen

Full Screen

Blogs

Check out the latest blogs from LambdaTest on this topic:

How To Handle Multiple Windows In Selenium Python

Automating testing is a crucial step in the development pipeline of a software product. In an agile development environment, where there is continuous development, deployment, and maintenance of software products, automation testing ensures that the end software products delivered are error-free.

Joomla Testing Guide: How To Test Joomla Websites

Before we discuss the Joomla testing, let us understand the fundamentals of Joomla and how this content management system allows you to create and maintain web-based applications or websites without having to write and implement complex coding requirements.

Starting &#038; growing a QA Testing career

The QA testing career includes following an often long, winding road filled with fun, chaos, challenges, and complexity. Financially, the spectrum is broad and influenced by location, company type, company size, and the QA tester’s experience level. QA testing is a profitable, enjoyable, and thriving career choice.

The Art of Testing the Untestable

It’s strange to hear someone declare, “This can’t be tested.” In reply, I contend that everything can be tested. However, one must be pleased with the outcome of testing, which might include failure, financial loss, or personal injury. Could anything be tested when a claim is made with this understanding?

How To Create Custom Menus with CSS Select

When it comes to UI components, there are two versatile methods that we can use to build it for your website: either we can use prebuilt components from a well-known library or framework, or we can develop our UI components from scratch.

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run lisa automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful