Strumenta / pylasu

Apache License 2.0
24 stars 4 forks source link

Remove anonymous symbol resolution and simplify scope #13

Closed loradd closed 2 years ago

loradd commented 2 years ago

See comment in #7.

@dataclass
class Scope:
    symbols: Dict[str, List[Symbol]] = field(default_factory=list)
    parent: Optional['Scope'] = field(default=None)

    def lookup(self, symbol_name: str, symbol_type: type = Symbol) -> Optional[Symbol]:
        return next((symbol for symbol in self.symbols.get(symbol_name, []) if isinstance(symbol, symbol_type)),
                    self.parent.lookup(symbol_name, symbol_type) if self.parent is not None else None)

    def add(self, symbol: Symbol):
        self.symbols[symbol.name] = self.symbols.get(symbol.name, []) + [symbol]