Separate symbol_table reference inside each basic block
Not sure how fond I am of the design of putting a separate reference to the symbol table into each basic block, when the de-facto usage pattern is that all basic blocks in a function share the same one. The current data structure design allows for someone clueless to give each basic block a separate symbol table, which would be bad.
Suggestion: Put a reference to the function in to each basic block. The symbol_table attribute can be emulated with a @property.