Skip to content

Commit

Permalink
passing existing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
barnjamin committed Mar 25, 2023
1 parent 227c5ac commit 813d3a7
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 13 deletions.
6 changes: 3 additions & 3 deletions tealish/expression_nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def process(self) -> None:
self.a.process()
self.check_arg_types(self.op, [self.a])
op = self.lookup_op(self.op)
self.type = self.lookup_type(op.returns)
self.type = self.lookup_type(op.returns[0])

def write_teal(self, writer: "TealWriter") -> None:
writer.write(self, self.a)
Expand All @@ -132,7 +132,7 @@ def process(self) -> None:
self.b.process()
self.check_arg_types(self.op, [self.a, self.b])
op = self.lookup_op(self.op)
self.type = self.lookup_type(op.returns)
self.type = self.lookup_type(op.returns[0])

def write_teal(self, writer: "TealWriter") -> None:
writer.write(self, self.a)
Expand Down Expand Up @@ -216,7 +216,7 @@ def process_op_call(self, op: Op) -> None:
immediates = self.args[: len(op.immediate_args)]
num_args = len(op.args)

self.args = self.args[len(op.immediate_args):]
self.args = self.args[len(op.immediate_args) :]
if len(self.args) != num_args:
raise CompileError(f"Expected {num_args} args for {op.name}!", node=self)
for i, arg in enumerate(self.args):
Expand Down
7 changes: 7 additions & 0 deletions tealish/langspec.json
Original file line number Diff line number Diff line change
Expand Up @@ -1294,6 +1294,13 @@
"PseudoOps": [
{
"Name": "method",
"ImmediateDetails":[
{
"Comment": "Method Signature",
"Encoding": "bytes",
"Name": "methodsig"
}
],
"Returns": [
"method"
],
Expand Down
27 changes: 17 additions & 10 deletions tealish/langspec.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
"[]byte": AVMType.bytes,
"uint64": AVMType.int,
"none": AVMType.none,
"addr": AVMType.bytes,
"hash": AVMType.bytes,
"bool": AVMType.int,
}

operators = [
Expand Down Expand Up @@ -144,11 +147,12 @@ class FieldGroup:
FieldGroup represents the full set of FieldEnumValues for a given Field
"""

#: set of values this FieldGroup contains
values: List[FieldGroupValue]
#: dict of name to type this FieldGroup contains
values: Dict[str, AVMType]

def __init__(self, vals: List[Dict[str, Any]]):
self.values = [FieldGroupValue(val) for val in vals]
initialized_vals = [FieldGroupValue(val) for val in vals]
self.values = {v.name: type_lookup(v.type) for v in initialized_vals}


class ImmediateDetails:
Expand Down Expand Up @@ -206,7 +210,7 @@ class Op:
is_operator: bool

def __init__(self, op_def: Dict[str, Any], stack_types: Dict[str, StackType]):
self.opcode = op_def["Opcode"]
self.opcode = op_def.get("Opcode", 0)
self.name = op_def["Name"]
self.size = op_def["Size"]
self.immediate_args_num = self.size - 1
Expand Down Expand Up @@ -273,22 +277,25 @@ def __init__(self, spec: Dict[str, Any]) -> None:
name: StackType(st)
for name, st in cast(Dict[str, Any], spec["StackTypes"]).items()
}
# TODO: add pseudo ops to all ops
# self.pseudo_ops: Dict[str, Op] = {
# op["Name"]: Op(op) for op in spec["PseudoOps"]
# }

self.pseudo_ops: Dict[str, Op] = {
op["Name"]: Op(op, self.stack_types) for op in spec["PseudoOps"]
}

self.ops: Dict[str, Op] = {
op["Name"]: Op(op, self.stack_types) for op in spec["Ops"]
}
self.ops.update(self.pseudo_ops)

self.fields: Dict[str, FieldGroup] = {
name: FieldGroup(value)
for name, value in cast(Dict[str, Any], spec["Fields"]).items()
}

self.global_fields = self.fields["global"]
self.txn_fields = self.fields["txn"]
self.global_fields = self.fields["global"].values

self.txn_fields = self.fields["txn"].values
self.txn_fields.update(self.fields["txna"].values)

def as_dict(self) -> Dict[str, Any]:
return self.spec
Expand Down

0 comments on commit 813d3a7

Please sign in to comment.