aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/WebAssembly/Structure/Types
diff options
context:
space:
mode:
Diffstat (limited to 'src/WebAssembly/Structure/Types')
-rw-r--r--src/WebAssembly/Structure/Types/ExternType.php28
-rw-r--r--src/WebAssembly/Structure/Types/ExternTypes/Func.php16
-rw-r--r--src/WebAssembly/Structure/Types/ExternTypes/Global_.php16
-rw-r--r--src/WebAssembly/Structure/Types/ExternTypes/Mem.php16
-rw-r--r--src/WebAssembly/Structure/Types/ExternTypes/Table.php16
-rw-r--r--src/WebAssembly/Structure/Types/FuncType.php20
-rw-r--r--src/WebAssembly/Structure/Types/GlobalType.php14
-rw-r--r--src/WebAssembly/Structure/Types/Limits.php24
-rw-r--r--src/WebAssembly/Structure/Types/MemType.php13
-rw-r--r--src/WebAssembly/Structure/Types/Mut.php11
-rw-r--r--src/WebAssembly/Structure/Types/NumType.php13
-rw-r--r--src/WebAssembly/Structure/Types/RefType.php11
-rw-r--r--src/WebAssembly/Structure/Types/ResultType.php31
-rw-r--r--src/WebAssembly/Structure/Types/TableType.php14
-rw-r--r--src/WebAssembly/Structure/Types/ValType.php25
-rw-r--r--src/WebAssembly/Structure/Types/ValTypes/NumType.php21
-rw-r--r--src/WebAssembly/Structure/Types/ValTypes/RefType.php21
-rw-r--r--src/WebAssembly/Structure/Types/ValTypes/VecType.php21
-rw-r--r--src/WebAssembly/Structure/Types/VecType.php10
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;
+}