aboutsummaryrefslogtreecommitdiff
path: root/types.h
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2025-03-06 16:37:12 +0100
committerXavier Del Campo Romero <xavi92@disroot.org>2025-11-07 09:55:58 +0100
commit0086ccf0272fa195dca36845fde9c54149c72f0e (patch)
treedc025e30b7e0a6830e44c9558f3b800295cc79df /types.h
downloadnwc-0086ccf0272fa195dca36845fde9c54149c72f0e.tar.gz
First commit
Diffstat (limited to 'types.h')
-rw-r--r--types.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/types.h b/types.h
new file mode 100644
index 0000000..323e17e
--- /dev/null
+++ b/types.h
@@ -0,0 +1,91 @@
+/*
+ * nwc, a NanoWasm compiler
+ * Copyright (C) 2025 Xavier Del Campo Romero
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef TYPES_H
+#define TYPES_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+enum
+{
+ SECTION_CUSTOM,
+ SECTION_TYPE,
+ SECTION_IMPORT,
+ SECTION_FUNCTION,
+ SECTION_TABLE,
+ SECTION_MEMORY,
+ SECTION_GLOBAL,
+ SECTION_EXPORT,
+ SECTION_START,
+ SECTION_ELEMENT,
+ SECTION_CODE,
+ SECTION_DATA
+};
+
+typedef bool varint1;
+typedef bool varuint1;
+typedef signed char varint7;
+typedef short varint16;
+typedef long varint32;
+typedef long long varint64;
+typedef unsigned char varuint7;
+typedef unsigned short varuint16;
+typedef unsigned long varuint32;
+typedef unsigned long long varuint64;
+typedef varint7 value_type;
+
+struct parse
+{
+ struct offsets
+ {
+ uint32_t *offsets;
+ size_t n;
+ } to, fti, fbo, iti;
+
+ struct lo
+ {
+ struct lo_entry
+ {
+ const struct block *b;
+ uint32_t pc, dst;
+ } *entries;
+
+ size_t n;
+ } *lo;
+
+ size_t n_lo;
+};
+
+int read_varint1(FILE *f, varint1 *out);
+int read_varint7(FILE *f, varint7 *out);
+int read_varint32(FILE *f, varint32 *out);
+int read_varint64(FILE *f, varint64 *out);
+int read_varuint1(FILE *f, varuint1 *out);
+int read_varuint7(FILE *f, varuint7 *out);
+int read_varuint32(FILE *f, varuint32 *out);
+int read_varuint64(FILE *f, varuint64 *out);
+int read_instr(FILE *f, struct parse *p);
+
+int write_varuint7(FILE *f, varuint7 v);
+int write_varuint32(FILE *f, varuint32 v);
+size_t len_varuint32(varuint32 v);
+
+#endif