Exemplo n.º 1
0
 def __init__(self, cache: PyreData) -> None:
     super().__init__(cache)
     lookup: Dict[CodeRange, str] = {}
     for item in cache["types"]:
         location = item["location"]
         start = location["start"]
         end = location["stop"]
         lookup[CodeRange(
             start=CodePosition(start["line"], start["column"]),
             end=CodePosition(end["line"], end["column"]),
         )] = item["annotation"]
     self.lookup: Dict[CodeRange, str] = lookup
Exemplo n.º 2
0
    def after_codegen(self, node: "CSTNode") -> None:
        # we must unconditionally pop the stack, else we could end up in a broken state
        start_pos = self._stack.pop()

        # Don't overwrite existing position information
        # (i.e. semantic position has already been recorded)
        if node not in self.provider._computed:
            end_pos = CodePosition(self.line, self.column)
            node_range = CodeRange(start_pos, end_pos)
            self.provider._computed[node] = node_range
Exemplo n.º 3
0
    def record_syntactic_position(
        self,
        node: CSTNode,
        *,
        start_node: Optional[CSTNode] = None,
        end_node: Optional[CSTNode] = None,
    ) -> Iterator[None]:
        start = CodePosition(self.line, self.column)
        try:
            yield
        finally:
            end = CodePosition(self.line, self.column)

            # Override with positions hoisted from child nodes if provided
            start = (self.provider._computed[start_node].start
                     if start_node is not None else start)
            end = self.provider._computed[
                end_node].end if end_node is not None else end

            self.provider._computed[node] = CodeRange(start, end)
Exemplo n.º 4
0
 def before_codegen(self, node: "CSTNode") -> None:
     self._stack.append(CodePosition(self.line, self.column))
Exemplo n.º 5
0
 def _codegen(self, state: CodegenState, **kwargs: Any) -> None:
     start = CodePosition(state.line, state.column)
     self._codegen_impl(state, **kwargs)
     end = CodePosition(state.line, state.column)
     state.record_position(self, CodeRange(start, end))