algorand / algorand/pyteal

Improve subroutine evaluation code (post frame pointers)

Abierto
#599 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Team Scytale
Lenguaje dominante
Python
Estrellas
288
Forks
138
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

This issue deals with code implemented in #584 and #562.

In those PRs, to probe info for `has_return` and `type_of` of subroutine declaration, subroutines are evaluated twice: once with ScratchVar arguments, and once with frame pointer arguments. Then during compilation the appropriate version of subroutine evaulator is chosen and used in code generation.

Generally speaking it would be nice to avoid having to evaluate every subroutine twice. Once way of doing that could be with something like a `ProxyExpr`:

```python
class ProxyExpr(Expr):

def __init__(self, type_of: TealType):
super().__init__()
self.representing: Expr | None = None

def resolve_to(self, expr: Expr):
self.representing = expr

def __teal__(self, options: "CompileOptions"):
if self.representing is None:
raise TealInternalError("Not assigned....")
return self.representing.__teal__(options)
```

The idea would be to use this as a placeholder before compilation to evaluate the subroutine, then assign the `ProxyExpr` to its actual value once that's known at compile time.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.