Skip to content

Commit

Permalink
Update for Python3.8 support
Browse files Browse the repository at this point in the history
  • Loading branch information
tekknolagi committed Nov 22, 2023
1 parent b8b0bc0 commit bbe7527
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions scrapscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,9 +346,9 @@ def parse(tokens: typing.List[str], p: float = 0) -> "Object":

@dataclass(eq=True, frozen=True, unsafe_hash=True)
class Object:
def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
cls = type(self)
result: dict[bytes, object] = {b"type": cls.__name__.encode("utf-8")}
result: Dict[bytes, object] = {b"type": cls.__name__.encode("utf-8")}
for field in dataclasses.fields(cls):
if issubclass(field.type, Object):
value = getattr(self, field.name)
Expand All @@ -357,7 +357,7 @@ def serialize(self) -> dict[bytes, object]:
raise NotImplementedError("serializing non-Object fields; write your own serialize function")
return result

def _serialize(self, **kwargs: object) -> dict[bytes, object]:
def _serialize(self, **kwargs: object) -> Dict[bytes, object]:
return {
b"type": type(self).__name__.encode("utf-8"),
**{key.encode("utf-8"): value for key, value in kwargs.items()},
Expand All @@ -368,39 +368,39 @@ def _serialize(self, **kwargs: object) -> dict[bytes, object]:
class Int(Object):
value: int

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return self._serialize(value=self.value)


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class String(Object):
value: str

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {b"type": b"String", b"value": self.value.encode("utf-8")}


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class Bytes(Object):
value: bytes

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {b"type": b"Bytes", b"value": self.value}


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class Var(Object):
name: str

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {b"type": b"Var", b"name": self.name.encode("utf-8")}


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class Bool(Object):
value: bool

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {b"type": b"Bool", b"value": self.value}


Expand Down Expand Up @@ -460,7 +460,7 @@ class Binop(Object):
left: Object
right: Object

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {
b"type": b"Binop",
b"op": self.op.name.encode("utf-8"),
Expand All @@ -473,7 +473,7 @@ def serialize(self) -> dict[bytes, object]:
class List(Object):
items: typing.List[Object]

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return {b"type": b"List", b"items": [item.serialize() for item in self.items]}


Expand Down Expand Up @@ -513,15 +513,15 @@ class Assert(Object):
cond: Object


def serialize_env(env: Env) -> dict[bytes, object]:
def serialize_env(env: Env) -> Dict[bytes, object]:
return {key.encode("utf-8"): value.serialize() for key, value in env.items()}


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class EnvObject(Object):
env: Env

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return self._serialize(value=serialize_env(self.env))


Expand All @@ -535,7 +535,7 @@ class MatchCase(Object):
class MatchFunction(Object):
cases: typing.List[MatchCase]

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return self._serialize(cases=[case.serialize() for case in self.cases])


Expand All @@ -549,15 +549,15 @@ class Closure(Object):
env: Env
func: Union[Function, MatchFunction]

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return self._serialize(env=serialize_env(self.env), func=self.func.serialize())


@dataclass(eq=True, frozen=True, unsafe_hash=True)
class Record(Object):
data: Dict[str, Object]

def serialize(self) -> dict[bytes, object]:
def serialize(self) -> Dict[bytes, object]:
return self._serialize(data={key.encode("utf-8"): value.serialize() for key, value in self.data.items()})


Expand Down

0 comments on commit bbe7527

Please sign in to comment.