-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunction_table.py
35 lines (29 loc) · 1.13 KB
/
function_table.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from symbol_table import SymbolTable
from typing import List
from scanner import Scanner
class FunctionEntry:
def __init__(self) -> None:
self.params: List[str] = []
self.params_type: List[str] = []
self.params_address: List[str] = []
self.params_array: List[str] = []
class FunctionTable:
def __init__(self, symbol_table: SymbolTable):
self.funcs = {}
self.symbol_table: SymbolTable = symbol_table
def func_declare(self, name, address, return_type):
self.funcs[address] = {
"name": name,
"address": address,
"return_type": return_type,
"scope": self.symbol_table.scope_stack[-1],
"params": [],
"params_type": [],
"params_address": [],
"params_array": [],
}
def add_param(self, func, param_name, param_type, param_address, is_array):
self.funcs[func]["params"].append(param_name)
self.funcs[func]["params_type"].append(param_type)
self.funcs[func]["params_address"].append(param_address)
self.funcs[func]["params_array"].append(is_array)