From 996259e6a1a04f91179d2b83cc19e3fbb371cd33 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 26 Feb 2024 13:21:22 +0900 Subject: feat: implement some of instructions --- src/Structure/Types/FuncType.php | 10 ++++++++-- src/Structure/Types/ResultType.php | 13 +++++++++++++ src/Structure/Types/ValType.php | 2 ++ src/Structure/Types/ValTypes/NumType.php | 6 ++++++ src/Structure/Types/ValTypes/RefType.php | 6 ++++++ src/Structure/Types/ValTypes/VecType.php | 6 ++++++ 6 files changed, 41 insertions(+), 2 deletions(-) (limited to 'src/Structure/Types') diff --git a/src/Structure/Types/FuncType.php b/src/Structure/Types/FuncType.php index 17ef98a..e445512 100644 --- a/src/Structure/Types/FuncType.php +++ b/src/Structure/Types/FuncType.php @@ -7,8 +7,14 @@ namespace Nsfisis\Waddiwasi\Structure\Types; final readonly class FuncType { public function __construct( - public ResultType $args, - public ResultType $returns, + public ResultType $params, + public ResultType $results, ) { } + + public function equals(FuncType $other): bool + { + return $this->params->equals($other->params) + && $this->results->equals($other->results); + } } diff --git a/src/Structure/Types/ResultType.php b/src/Structure/Types/ResultType.php index 267916b..a826805 100644 --- a/src/Structure/Types/ResultType.php +++ b/src/Structure/Types/ResultType.php @@ -13,4 +13,17 @@ final readonly class ResultType public array $types, ) { } + + public function equals(ResultType $other): bool + { + if (count($this->types) !== count($other->types)) { + return false; + } + foreach ($this->types as $i => $type) { + if (!$type->equals($other->types[$i])) { + return false; + } + } + return true; + } } diff --git a/src/Structure/Types/ValType.php b/src/Structure/Types/ValType.php index 58bf32c..bf072e2 100644 --- a/src/Structure/Types/ValType.php +++ b/src/Structure/Types/ValType.php @@ -20,4 +20,6 @@ abstract readonly class ValType { return new ValTypes\RefType($type); } + + abstract public function equals(ValType $other): bool; } diff --git a/src/Structure/Types/ValTypes/NumType.php b/src/Structure/Types/ValTypes/NumType.php index 3376d27..fcaa7e3 100644 --- a/src/Structure/Types/ValTypes/NumType.php +++ b/src/Structure/Types/ValTypes/NumType.php @@ -12,4 +12,10 @@ final readonly class NumType extends ValType protected function __construct(public OrigNumType $inner) { } + + public function equals(ValType $other): bool + { + return $other instanceof self + && $this->inner === $other->inner; + } } diff --git a/src/Structure/Types/ValTypes/RefType.php b/src/Structure/Types/ValTypes/RefType.php index 720eb7d..fc48dfb 100644 --- a/src/Structure/Types/ValTypes/RefType.php +++ b/src/Structure/Types/ValTypes/RefType.php @@ -12,4 +12,10 @@ final readonly class RefType extends ValType protected function __construct(public OrigRefType $inner) { } + + public function equals(ValType $other): bool + { + return $other instanceof self + && $this->inner === $other->inner; + } } diff --git a/src/Structure/Types/ValTypes/VecType.php b/src/Structure/Types/ValTypes/VecType.php index 8fb546c..a28081f 100644 --- a/src/Structure/Types/ValTypes/VecType.php +++ b/src/Structure/Types/ValTypes/VecType.php @@ -12,4 +12,10 @@ final readonly class VecType extends ValType protected function __construct(public OrigVecType $inner) { } + + public function equals(ValType $other): bool + { + return $other instanceof self + && $this->inner === $other->inner; // @phpstan-ignore-line + } } -- cgit v1.2.3-70-g09d2