Skip to content

Commit ed8cb1f

Browse files
committed
Add encoder and decoder proc
1 parent c376b48 commit ed8cb1f

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

auto_editor/lang/palet.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -646,8 +646,8 @@ def pop(self) -> None:
646646

647647

648648
def my_eval(env: Env, node: object) -> Any:
649-
def make_trace(sym: Sym) -> str:
650-
return f" at {sym.val} ({sym.lineno}:{sym.column})"
649+
def make_trace(sym: object) -> str:
650+
return f" at {sym.val} ({sym.lineno}:{sym.column})" if type(sym) is Sym else ""
651651

652652
if type(node) is Sym:
653653
val = env.get(node.val)

auto_editor/lang/stdenv.py

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from typing import TYPE_CHECKING
44

5+
import av
6+
57
from auto_editor.analyze import mut_remove_large, mut_remove_small
68
from auto_editor.lib.contracts import *
79
from auto_editor.lib.data_structs import *
@@ -749,6 +751,13 @@ def attr(env: Env, node: Node) -> Any:
749751
raise MyError("@r: attribute must be an identifier")
750752

751753
base = my_eval(env, node[1])
754+
755+
if hasattr(base, "__pyx_vtable__"):
756+
try:
757+
return getattr(base, node[2].val)
758+
except AttributeError as e:
759+
raise MyError(e)
760+
752761
if type(base) is PaletClass:
753762
if type(name := node[2]) is not Sym:
754763
raise MyError("@r: class attribute must be an identifier")
@@ -1171,6 +1180,9 @@ def change_file_ext(a, ext) -> str:
11711180
"string->vector", lambda s: [Char(c) for c in s], (1, 1), is_str
11721181
),
11731182
"range->vector": Proc("range->vector", list, (1, 1), is_range),
1183+
# av
1184+
"encoder": Proc("encoder", lambda x: av.Codec(x, "w"), (1, 1), is_str),
1185+
"decoder": Proc("decoder", lambda x: av.Codec(x), (1, 1), is_str),
11741186
# reflexion
11751187
"var-exists?": Proc("var-exists?", lambda sym: sym.val in env, (1, 1), is_symbol),
11761188
"rename": Syntax(syn_rename),

0 commit comments

Comments
 (0)