aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Structure/Types
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-01-03 01:35:32 +0900
committernsfisis <nsfisis@gmail.com>2024-01-27 12:05:23 +0900
commite2495878b872b341e6e04eed31dd255b1a6e256f (patch)
tree4057ab19765ea7fc13505798c6434dceac02f4b1 /src/Structure/Types
parent5b4652d080c7eae26f8aac482468a6777ad9defe (diff)
downloadphp-waddiwasi-e2495878b872b341e6e04eed31dd255b1a6e256f.tar.gz
php-waddiwasi-e2495878b872b341e6e04eed31dd255b1a6e256f.tar.zst
php-waddiwasi-e2495878b872b341e6e04eed31dd255b1a6e256f.zip
feat: implement binary decoder
Diffstat (limited to 'src/Structure/Types')
-rw-r--r--src/Structure/Types/DataIdx.php16
-rw-r--r--src/Structure/Types/ElemIdx.php16
-rw-r--r--src/Structure/Types/ExternType.php28
-rw-r--r--src/Structure/Types/ExternTypes/Func.php16
-rw-r--r--src/Structure/Types/ExternTypes/Global_.php16
-rw-r--r--src/Structure/Types/ExternTypes/Mem.php16
-rw-r--r--src/Structure/Types/ExternTypes/Table.php16
-rw-r--r--src/Structure/Types/FuncIdx.php16
-rw-r--r--src/Structure/Types/FuncType.php14
-rw-r--r--src/Structure/Types/GlobalIdx.php16
-rw-r--r--src/Structure/Types/GlobalType.php14
-rw-r--r--src/Structure/Types/LabelIdx.php16
-rw-r--r--src/Structure/Types/Limits.php18
-rw-r--r--src/Structure/Types/LocalIdx.php16
-rw-r--r--src/Structure/Types/MemIdx.php16
-rw-r--r--src/Structure/Types/MemType.php13
-rw-r--r--src/Structure/Types/Mut.php11
-rw-r--r--src/Structure/Types/NumType.php13
-rw-r--r--src/Structure/Types/RefType.php11
-rw-r--r--src/Structure/Types/ResultType.php16
-rw-r--r--src/Structure/Types/TableIdx.php16
-rw-r--r--src/Structure/Types/TableType.php14
-rw-r--r--src/Structure/Types/TypeIdx.php16
-rw-r--r--src/Structure/Types/ValType.php23
-rw-r--r--src/Structure/Types/ValTypes/NumType.php15
-rw-r--r--src/Structure/Types/ValTypes/RefType.php15
-rw-r--r--src/Structure/Types/ValTypes/VecType.php15
-rw-r--r--src/Structure/Types/VecType.php10
28 files changed, 438 insertions, 0 deletions
diff --git a/src/Structure/Types/DataIdx.php b/src/Structure/Types/DataIdx.php
new file mode 100644
index 0000000..5390ad4
--- /dev/null
+++ b/src/Structure/Types/DataIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class DataIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ElemIdx.php b/src/Structure/Types/ElemIdx.php
new file mode 100644
index 0000000..989ef94
--- /dev/null
+++ b/src/Structure/Types/ElemIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class ElemIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ExternType.php b/src/Structure/Types/ExternType.php
new file mode 100644
index 0000000..404f755
--- /dev/null
+++ b/src/Structure/Types/ExternType.php
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\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/Structure/Types/ExternTypes/Func.php b/src/Structure/Types/ExternTypes/Func.php
new file mode 100644
index 0000000..74e9215
--- /dev/null
+++ b/src/Structure/Types/ExternTypes/Func.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ExternTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\ExternType;
+use Nsfisis\Waddiwasi\Structure\Types\FuncType;
+
+final readonly class Func extends ExternType
+{
+ protected function __construct(
+ public FuncType $inner,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ExternTypes/Global_.php b/src/Structure/Types/ExternTypes/Global_.php
new file mode 100644
index 0000000..d88b4b2
--- /dev/null
+++ b/src/Structure/Types/ExternTypes/Global_.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ExternTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\ExternType;
+use Nsfisis\Waddiwasi\Structure\Types\GlobalType;
+
+final readonly class Global_ extends ExternType
+{
+ protected function __construct(
+ public GlobalType $inner,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ExternTypes/Mem.php b/src/Structure/Types/ExternTypes/Mem.php
new file mode 100644
index 0000000..3777c5c
--- /dev/null
+++ b/src/Structure/Types/ExternTypes/Mem.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ExternTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\ExternType;
+use Nsfisis\Waddiwasi\Structure\Types\MemType;
+
+final readonly class Mem extends ExternType
+{
+ protected function __construct(
+ public MemType $inner,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ExternTypes/Table.php b/src/Structure/Types/ExternTypes/Table.php
new file mode 100644
index 0000000..26a7675
--- /dev/null
+++ b/src/Structure/Types/ExternTypes/Table.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ExternTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\ExternType;
+use Nsfisis\Waddiwasi\Structure\Types\TableType;
+
+final readonly class Table extends ExternType
+{
+ protected function __construct(
+ public TableType $inner,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/FuncIdx.php b/src/Structure/Types/FuncIdx.php
new file mode 100644
index 0000000..9e2d9f7
--- /dev/null
+++ b/src/Structure/Types/FuncIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class FuncIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/FuncType.php b/src/Structure/Types/FuncType.php
new file mode 100644
index 0000000..17ef98a
--- /dev/null
+++ b/src/Structure/Types/FuncType.php
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class FuncType
+{
+ public function __construct(
+ public ResultType $args,
+ public ResultType $returns,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/GlobalIdx.php b/src/Structure/Types/GlobalIdx.php
new file mode 100644
index 0000000..c65d182
--- /dev/null
+++ b/src/Structure/Types/GlobalIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class GlobalIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/GlobalType.php b/src/Structure/Types/GlobalType.php
new file mode 100644
index 0000000..182b761
--- /dev/null
+++ b/src/Structure/Types/GlobalType.php
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class GlobalType
+{
+ public function __construct(
+ public Mut $mut,
+ public ValType $valType,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/LabelIdx.php b/src/Structure/Types/LabelIdx.php
new file mode 100644
index 0000000..e6941b0
--- /dev/null
+++ b/src/Structure/Types/LabelIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class LabelIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/Limits.php b/src/Structure/Types/Limits.php
new file mode 100644
index 0000000..12f6cbf
--- /dev/null
+++ b/src/Structure/Types/Limits.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class Limits
+{
+ /**
+ * @param U32 $min
+ * @param ?U32 $max
+ */
+ public function __construct(
+ public int $min,
+ public ?int $max,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/LocalIdx.php b/src/Structure/Types/LocalIdx.php
new file mode 100644
index 0000000..6620281
--- /dev/null
+++ b/src/Structure/Types/LocalIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class LocalIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/MemIdx.php b/src/Structure/Types/MemIdx.php
new file mode 100644
index 0000000..5fb9d76
--- /dev/null
+++ b/src/Structure/Types/MemIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class MemIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/MemType.php b/src/Structure/Types/MemType.php
new file mode 100644
index 0000000..d4c9009
--- /dev/null
+++ b/src/Structure/Types/MemType.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class MemType
+{
+ public function __construct(
+ public Limits $limits,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/Mut.php b/src/Structure/Types/Mut.php
new file mode 100644
index 0000000..8b3c611
--- /dev/null
+++ b/src/Structure/Types/Mut.php
@@ -0,0 +1,11 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+enum Mut
+{
+ case Const;
+ case Var;
+}
diff --git a/src/Structure/Types/NumType.php b/src/Structure/Types/NumType.php
new file mode 100644
index 0000000..28b6d80
--- /dev/null
+++ b/src/Structure/Types/NumType.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+enum NumType
+{
+ case I32;
+ case I64;
+ case F32;
+ case F64;
+}
diff --git a/src/Structure/Types/RefType.php b/src/Structure/Types/RefType.php
new file mode 100644
index 0000000..0d40d86
--- /dev/null
+++ b/src/Structure/Types/RefType.php
@@ -0,0 +1,11 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+enum RefType
+{
+ case FuncRef;
+ case ExternRef;
+}
diff --git a/src/Structure/Types/ResultType.php b/src/Structure/Types/ResultType.php
new file mode 100644
index 0000000..267916b
--- /dev/null
+++ b/src/Structure/Types/ResultType.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class ResultType
+{
+ /**
+ * @param list<ValType> $types
+ */
+ public function __construct(
+ public array $types,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/TableIdx.php b/src/Structure/Types/TableIdx.php
new file mode 100644
index 0000000..af2d72b
--- /dev/null
+++ b/src/Structure/Types/TableIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class TableIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/TableType.php b/src/Structure/Types/TableType.php
new file mode 100644
index 0000000..619ad25
--- /dev/null
+++ b/src/Structure/Types/TableType.php
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class TableType
+{
+ public function __construct(
+ public Limits $limits,
+ public RefType $refType,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/TypeIdx.php b/src/Structure/Types/TypeIdx.php
new file mode 100644
index 0000000..c0074d7
--- /dev/null
+++ b/src/Structure/Types/TypeIdx.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+final readonly class TypeIdx
+{
+ /**
+ * @param U32 $value
+ */
+ public function __construct(
+ public int $value,
+ ) {
+ }
+}
diff --git a/src/Structure/Types/ValType.php b/src/Structure/Types/ValType.php
new file mode 100644
index 0000000..58bf32c
--- /dev/null
+++ b/src/Structure/Types/ValType.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\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);
+ }
+}
diff --git a/src/Structure/Types/ValTypes/NumType.php b/src/Structure/Types/ValTypes/NumType.php
new file mode 100644
index 0000000..3376d27
--- /dev/null
+++ b/src/Structure/Types/ValTypes/NumType.php
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ValTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\NumType as OrigNumType;
+use Nsfisis\Waddiwasi\Structure\Types\ValType;
+
+final readonly class NumType extends ValType
+{
+ protected function __construct(public OrigNumType $inner)
+ {
+ }
+}
diff --git a/src/Structure/Types/ValTypes/RefType.php b/src/Structure/Types/ValTypes/RefType.php
new file mode 100644
index 0000000..720eb7d
--- /dev/null
+++ b/src/Structure/Types/ValTypes/RefType.php
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ValTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\RefType as OrigRefType;
+use Nsfisis\Waddiwasi\Structure\Types\ValType;
+
+final readonly class RefType extends ValType
+{
+ protected function __construct(public OrigRefType $inner)
+ {
+ }
+}
diff --git a/src/Structure/Types/ValTypes/VecType.php b/src/Structure/Types/ValTypes/VecType.php
new file mode 100644
index 0000000..8fb546c
--- /dev/null
+++ b/src/Structure/Types/ValTypes/VecType.php
@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types\ValTypes;
+
+use Nsfisis\Waddiwasi\Structure\Types\ValType;
+use Nsfisis\Waddiwasi\Structure\Types\VecType as OrigVecType;
+
+final readonly class VecType extends ValType
+{
+ protected function __construct(public OrigVecType $inner)
+ {
+ }
+}
diff --git a/src/Structure/Types/VecType.php b/src/Structure/Types/VecType.php
new file mode 100644
index 0000000..ae8a0f6
--- /dev/null
+++ b/src/Structure/Types/VecType.php
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\Structure\Types;
+
+enum VecType
+{
+ case V128;
+}