diff options
| author | nsfisis <nsfisis@gmail.com> | 2024-07-11 02:57:23 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2024-07-11 02:57:23 +0900 |
| commit | 26f49b7e27076e689541b9e13a1b54f60a4ee5c2 (patch) | |
| tree | a3762813c34a384f21ddeed630ddf333a1cc1b05 /src/WebAssembly/Structure/Types | |
| parent | 326273f20c2d7dfe3d866eb720d1bb914570e3a3 (diff) | |
| download | php-waddiwasi-26f49b7e27076e689541b9e13a1b54f60a4ee5c2.tar.gz php-waddiwasi-26f49b7e27076e689541b9e13a1b54f60a4ee5c2.tar.zst php-waddiwasi-26f49b7e27076e689541b9e13a1b54f60a4ee5c2.zip | |
feat: organize namespaces
Diffstat (limited to 'src/WebAssembly/Structure/Types')
19 files changed, 341 insertions, 0 deletions
diff --git a/src/WebAssembly/Structure/Types/ExternType.php b/src/WebAssembly/Structure/Types/ExternType.php new file mode 100644 index 0000000..bffeacf --- /dev/null +++ b/src/WebAssembly/Structure/Types/ExternType.php @@ -0,0 +1,28 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +abstract readonly class ExternType +{ + final public static function Func(FuncType $type): ExternTypes\Func + { + return new ExternTypes\Func($type); + } + + final public static function Table(TableType $type): ExternTypes\Table + { + return new ExternTypes\Table($type); + } + + final public static function Mem(MemType $type): ExternTypes\Mem + { + return new ExternTypes\Mem($type); + } + + final public static function Global(GlobalType $type): ExternTypes\Global_ + { + return new ExternTypes\Global_($type); + } +} diff --git a/src/WebAssembly/Structure/Types/ExternTypes/Func.php b/src/WebAssembly/Structure/Types/ExternTypes/Func.php new file mode 100644 index 0000000..d41ed61 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ExternTypes/Func.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\FuncType; + +final readonly class Func extends ExternType +{ + protected function __construct( + public FuncType $inner, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/ExternTypes/Global_.php b/src/WebAssembly/Structure/Types/ExternTypes/Global_.php new file mode 100644 index 0000000..1e78370 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ExternTypes/Global_.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\GlobalType; + +final readonly class Global_ extends ExternType +{ + protected function __construct( + public GlobalType $inner, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/ExternTypes/Mem.php b/src/WebAssembly/Structure/Types/ExternTypes/Mem.php new file mode 100644 index 0000000..92f1a39 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ExternTypes/Mem.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\MemType; + +final readonly class Mem extends ExternType +{ + protected function __construct( + public MemType $inner, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/ExternTypes/Table.php b/src/WebAssembly/Structure/Types/ExternTypes/Table.php new file mode 100644 index 0000000..034d9a8 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ExternTypes/Table.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ExternType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\TableType; + +final readonly class Table extends ExternType +{ + protected function __construct( + public TableType $inner, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/FuncType.php b/src/WebAssembly/Structure/Types/FuncType.php new file mode 100644 index 0000000..6c53519 --- /dev/null +++ b/src/WebAssembly/Structure/Types/FuncType.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +final readonly class FuncType +{ + public function __construct( + 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/WebAssembly/Structure/Types/GlobalType.php b/src/WebAssembly/Structure/Types/GlobalType.php new file mode 100644 index 0000000..3e8ab6c --- /dev/null +++ b/src/WebAssembly/Structure/Types/GlobalType.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +final readonly class GlobalType +{ + public function __construct( + public Mut $mut, + public ValType $valType, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/Limits.php b/src/WebAssembly/Structure/Types/Limits.php new file mode 100644 index 0000000..e60b842 --- /dev/null +++ b/src/WebAssembly/Structure/Types/Limits.php @@ -0,0 +1,24 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +final readonly class Limits +{ + /** + * @param U32 $min + * @param ?U32 $max + */ + public function __construct( + public int $min, + public ?int $max, + ) { + } + + public function isValid(): bool + { + return 0 <= $this->min && + ($this->max === null || $this->min <= $this->max); + } +} diff --git a/src/WebAssembly/Structure/Types/MemType.php b/src/WebAssembly/Structure/Types/MemType.php new file mode 100644 index 0000000..8d01150 --- /dev/null +++ b/src/WebAssembly/Structure/Types/MemType.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +final readonly class MemType +{ + public function __construct( + public Limits $limits, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/Mut.php b/src/WebAssembly/Structure/Types/Mut.php new file mode 100644 index 0000000..5bf366c --- /dev/null +++ b/src/WebAssembly/Structure/Types/Mut.php @@ -0,0 +1,11 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +enum Mut +{ + case Const; + case Var; +} diff --git a/src/WebAssembly/Structure/Types/NumType.php b/src/WebAssembly/Structure/Types/NumType.php new file mode 100644 index 0000000..2d5a3b1 --- /dev/null +++ b/src/WebAssembly/Structure/Types/NumType.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +enum NumType +{ + case I32; + case I64; + case F32; + case F64; +} diff --git a/src/WebAssembly/Structure/Types/RefType.php b/src/WebAssembly/Structure/Types/RefType.php new file mode 100644 index 0000000..2225f56 --- /dev/null +++ b/src/WebAssembly/Structure/Types/RefType.php @@ -0,0 +1,11 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +enum RefType +{ + case FuncRef; + case ExternRef; +} diff --git a/src/WebAssembly/Structure/Types/ResultType.php b/src/WebAssembly/Structure/Types/ResultType.php new file mode 100644 index 0000000..dff2e59 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ResultType.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +use function count; + +final readonly class ResultType +{ + /** + * @param list<ValType> $types + */ + public function __construct( + 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/WebAssembly/Structure/Types/TableType.php b/src/WebAssembly/Structure/Types/TableType.php new file mode 100644 index 0000000..7e4b957 --- /dev/null +++ b/src/WebAssembly/Structure/Types/TableType.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +final readonly class TableType +{ + public function __construct( + public Limits $limits, + public RefType $refType, + ) { + } +} diff --git a/src/WebAssembly/Structure/Types/ValType.php b/src/WebAssembly/Structure/Types/ValType.php new file mode 100644 index 0000000..f6f3111 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ValType.php @@ -0,0 +1,25 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +abstract readonly class ValType +{ + final public static function NumType(NumType $type): ValTypes\NumType + { + return new ValTypes\NumType($type); + } + + final public static function VecType(VecType $type): ValTypes\VecType + { + return new ValTypes\VecType($type); + } + + final public static function RefType(RefType $type): ValTypes\RefType + { + return new ValTypes\RefType($type); + } + + abstract public function equals(ValType $other): bool; +} diff --git a/src/WebAssembly/Structure/Types/ValTypes/NumType.php b/src/WebAssembly/Structure/Types/ValTypes/NumType.php new file mode 100644 index 0000000..1836679 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ValTypes/NumType.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\NumType as OrigNumType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValType; + +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/WebAssembly/Structure/Types/ValTypes/RefType.php b/src/WebAssembly/Structure/Types/ValTypes/RefType.php new file mode 100644 index 0000000..a31b7c3 --- /dev/null +++ b/src/WebAssembly/Structure/Types/ValTypes/RefType.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\RefType as OrigRefType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValType; + +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/WebAssembly/Structure/Types/ValTypes/VecType.php b/src/WebAssembly/Structure/Types/ValTypes/VecType.php new file mode 100644 index 0000000..03cc95e --- /dev/null +++ b/src/WebAssembly/Structure/Types/ValTypes/VecType.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValTypes; + +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\ValType; +use Nsfisis\Waddiwasi\WebAssembly\Structure\Types\VecType as OrigVecType; + +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 + } +} diff --git a/src/WebAssembly/Structure/Types/VecType.php b/src/WebAssembly/Structure/Types/VecType.php new file mode 100644 index 0000000..dcf7d68 --- /dev/null +++ b/src/WebAssembly/Structure/Types/VecType.php @@ -0,0 +1,10 @@ +<?php + +declare(strict_types=1); + +namespace Nsfisis\Waddiwasi\WebAssembly\Structure\Types; + +enum VecType +{ + case V128; +} |
