summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/ast-tree.c38
-rw-r--r--src/compiler/ast-tree.h4
-rw-r--r--src/compiler/lexer.c57
-rw-r--r--src/compiler/lexer.h3
-rw-r--r--src/compiler/parser.c34
-rw-r--r--src/compiler/parser.h2
6 files changed, 110 insertions, 28 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index 2a11f58..239f9b4 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -74,11 +74,13 @@ AstTree AST_TREE_U64_TYPE = {
.type = &AST_TREE_TYPE_TYPE,
};
+#ifdef FLOAT_16_SUPPORT
AstTree AST_TREE_F16_TYPE = {
.token = AST_TREE_TOKEN_TYPE_F16,
.metadata = NULL,
.type = &AST_TREE_TYPE_TYPE,
};
+#endif
AstTree AST_TREE_F32_TYPE = {
.token = AST_TREE_TOKEN_TYPE_F32,
@@ -125,7 +127,9 @@ const char *AST_TREE_TOKEN_STRINGS[] = {
"AST_TREE_TOKEN_TYPE_U32",
"AST_TREE_TOKEN_TYPE_I64",
"AST_TREE_TOKEN_TYPE_U64",
+#ifdef FLOAT_16_SUPPORT
"AST_TREE_TOKEN_TYPE_F16",
+#endif
"AST_TREE_TOKEN_TYPE_F32",
"AST_TREE_TOKEN_TYPE_F64",
"AST_TREE_TOKEN_TYPE_F128",
@@ -218,7 +222,9 @@ void astTreePrint(const AstTree *tree, int indent) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -559,7 +565,9 @@ void astTreeDestroy(AstTree tree) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -771,7 +779,9 @@ AstTree *copyAstTreeBack(AstTree *tree, AstTreeVariables oldVariables[],
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -1170,7 +1180,7 @@ AstTreeRoot *makeAstTree(ParserNode *parsedRoot) {
root->trees.size = 0;
AstTreeVariables *variables = &root->variables;
- constexpr size_t variables_size = 1;
+ static const size_t variables_size = 1;
AstTreeHelper helper = {
.variables = &variables,
@@ -1265,7 +1275,9 @@ AstTreeRoot *makeAstTree(ParserNode *parsedRoot) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -1432,8 +1444,10 @@ AstTree *astTreeParse(ParserNode *parserNode, AstTreeHelper *helper) {
return &AST_TREE_I64_TYPE;
case PARSER_TOKEN_TYPE_U64:
return &AST_TREE_U64_TYPE;
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
return &AST_TREE_F16_TYPE;
+#endif
case PARSER_TOKEN_TYPE_F32:
return &AST_TREE_F32_TYPE;
case PARSER_TOKEN_TYPE_F64:
@@ -1654,7 +1668,9 @@ AstTree *astTreeParseFunction(ParserNode *parserNode, AstTreeHelper *p_helper) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -2198,7 +2214,9 @@ AstTree *astTreeParseCurlyBracket(ParserNode *parserNode,
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -2393,7 +2411,9 @@ bool isConst(AstTree *tree) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -2489,7 +2509,9 @@ bool isConstByValue(AstTree *tree) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -2583,7 +2605,9 @@ AstTree *makeTypeOf(AstTree *value) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -2764,7 +2788,9 @@ bool typeIsEqualBack(const AstTree *type0, const AstTree *type1) {
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
case AST_TREE_TOKEN_TYPE_BOOL:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -2840,7 +2866,9 @@ AstTree *getValue(AstTree *tree) {
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -2921,7 +2949,9 @@ bool isCircularDependenciesBack(AstTreeHelper *helper,
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -3104,7 +3134,9 @@ bool setAllTypes(AstTree *tree, AstTreeSetTypesHelper helper,
case AST_TREE_TOKEN_TYPE_U32:
case AST_TREE_TOKEN_TYPE_I64:
case AST_TREE_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case AST_TREE_TOKEN_TYPE_F16:
+#endif
case AST_TREE_TOKEN_TYPE_F32:
case AST_TREE_TOKEN_TYPE_F64:
case AST_TREE_TOKEN_TYPE_F128:
@@ -3239,6 +3271,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_U8_TYPE;
+#ifdef FLOAT_16_SUPPORT
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F16_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
AstTreeInt *value = tree->metadata;
@@ -3250,6 +3283,7 @@ bool setTypesValueInt(AstTree *tree, AstTreeSetTypesHelper helper) {
}
free(value);
tree->type = &AST_TREE_F16_TYPE;
+#endif
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F32_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
AstTreeInt *value = tree->metadata;
@@ -3300,6 +3334,7 @@ bool setTypesValueFloat(AstTree *tree, AstTreeSetTypesHelper helper) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_F64_TYPE;
+#ifdef FLOAT_16_SUPPORT
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F16_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
AstTreeFloat value = *(AstTreeFloat *)tree->metadata;
@@ -3309,6 +3344,7 @@ bool setTypesValueFloat(AstTree *tree, AstTreeSetTypesHelper helper) {
printWarning(tree->str_begin, tree->str_end, "Value is overflowing");
}
tree->type = &AST_TREE_F16_TYPE;
+ #endif
} else if (typeIsEqual(helper.lookingType, &AST_TREE_F32_TYPE)) {
tree->token = AST_TREE_TOKEN_VALUE_FLOAT;
AstTreeFloat value = *(AstTreeFloat *)tree->metadata;
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h
index 3692ead..4617ce4 100644
--- a/src/compiler/ast-tree.h
+++ b/src/compiler/ast-tree.h
@@ -27,7 +27,9 @@ typedef enum AstTreeToken {
AST_TREE_TOKEN_TYPE_U32,
AST_TREE_TOKEN_TYPE_I64,
AST_TREE_TOKEN_TYPE_U64,
+#ifdef FLOAT_16_SUPPORT
AST_TREE_TOKEN_TYPE_F16,
+#endif
AST_TREE_TOKEN_TYPE_F32,
AST_TREE_TOKEN_TYPE_F64,
AST_TREE_TOKEN_TYPE_F128,
@@ -90,7 +92,9 @@ extern AstTree AST_TREE_I32_TYPE;
extern AstTree AST_TREE_U32_TYPE;
extern AstTree AST_TREE_I64_TYPE;
extern AstTree AST_TREE_U64_TYPE;
+#ifdef FLOAT_16_SUPPORT
extern AstTree AST_TREE_F16_TYPE;
+#endif
extern AstTree AST_TREE_F32_TYPE;
extern AstTree AST_TREE_F64_TYPE;
extern AstTree AST_TREE_F128_TYPE;
diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c
index 6feb77e..0f971d7 100644
--- a/src/compiler/lexer.c
+++ b/src/compiler/lexer.c
@@ -4,7 +4,6 @@
#include "utils/memory.h"
#include "utils/string.h"
-#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -22,7 +21,9 @@ const char *LEXER_TOKEN_STRINGS[] = {
"LEXER_TOKEN_KEYWORD_U32",
"LEXER_TOKEN_KEYWORD_I64",
"LEXER_TOKEN_KEYWORD_U64",
+#ifdef FLOAT_16_SUPPORT
"LEXER_TOKEN_KEYWORD_F16",
+#endif
"LEXER_TOKEN_KEYWORD_F32",
"LEXER_TOKEN_KEYWORD_F64",
"LEXER_TOKEN_KEYWORD_F128",
@@ -115,25 +116,32 @@ const size_t LEXER_SYMBOL_SIZE =
sizeof(LEXER_SYMBOL_TOKENS) / sizeof(*LEXER_SYMBOL_TOKENS);
const char *LEXER_KEYWORD_STRINGS[] = {
- "type", "void", "i8", "u8", "i16", "u16", "i32",
- "u32", "i64", "u64", "f16", "f32", "f64", "f128",
- "bool", "print_u64", "return", "true", "false", "if", "else",
- "while", "comptime", "null", "struct", "undefined",
+ "type", "void", "i8", "u8", "i16",
+ "u16", "i32", "u32", "i64", "u64",
+#ifdef FLOAT_16_SUPPORT
+ "f16",
+#endif
+ "f32", "f64", "f128", "bool", "print_u64",
+ "return", "true", "false", "if", "else",
+ "while", "comptime", "null", "struct", "undefined",
};
const LexerToken LEXER_KEYWORD_TOKENS[] = {
- LEXER_TOKEN_KEYWORD_TYPE, LEXER_TOKEN_KEYWORD_VOID,
- LEXER_TOKEN_KEYWORD_I8, LEXER_TOKEN_KEYWORD_U8,
- LEXER_TOKEN_KEYWORD_I16, LEXER_TOKEN_KEYWORD_U16,
- LEXER_TOKEN_KEYWORD_I32, LEXER_TOKEN_KEYWORD_U32,
- LEXER_TOKEN_KEYWORD_I64, LEXER_TOKEN_KEYWORD_U64,
- LEXER_TOKEN_KEYWORD_F16, LEXER_TOKEN_KEYWORD_F32,
- LEXER_TOKEN_KEYWORD_F64, LEXER_TOKEN_KEYWORD_F128,
- LEXER_TOKEN_KEYWORD_BOOL, LEXER_TOKEN_KEYWORD_PRINT_U64,
- LEXER_TOKEN_KEYWORD_RETURN, LEXER_TOKEN_KEYWORD_TRUE,
- LEXER_TOKEN_KEYWORD_FALSE, LEXER_TOKEN_KEYWORD_IF,
- LEXER_TOKEN_KEYWORD_ELSE, LEXER_TOKEN_KEYWORD_WHILE,
- LEXER_TOKEN_KEYWORD_COMPTIME, LEXER_TOKEN_KEYWORD_NULL,
- LEXER_TOKEN_KEYWORD_STRUCT, LEXER_TOKEN_KEYWORD_UNDEFINED,
+ LEXER_TOKEN_KEYWORD_TYPE, LEXER_TOKEN_KEYWORD_VOID,
+ LEXER_TOKEN_KEYWORD_I8, LEXER_TOKEN_KEYWORD_U8,
+ LEXER_TOKEN_KEYWORD_I16, LEXER_TOKEN_KEYWORD_U16,
+ LEXER_TOKEN_KEYWORD_I32, LEXER_TOKEN_KEYWORD_U32,
+ LEXER_TOKEN_KEYWORD_I64, LEXER_TOKEN_KEYWORD_U64,
+#ifdef FLOAT_16_SUPPORT
+ LEXER_TOKEN_KEYWORD_F16,
+#endif
+ LEXER_TOKEN_KEYWORD_F32, LEXER_TOKEN_KEYWORD_F64,
+ LEXER_TOKEN_KEYWORD_F128, LEXER_TOKEN_KEYWORD_BOOL,
+ LEXER_TOKEN_KEYWORD_PRINT_U64, LEXER_TOKEN_KEYWORD_RETURN,
+ LEXER_TOKEN_KEYWORD_TRUE, LEXER_TOKEN_KEYWORD_FALSE,
+ LEXER_TOKEN_KEYWORD_IF, LEXER_TOKEN_KEYWORD_ELSE,
+ LEXER_TOKEN_KEYWORD_WHILE, LEXER_TOKEN_KEYWORD_COMPTIME,
+ LEXER_TOKEN_KEYWORD_NULL, LEXER_TOKEN_KEYWORD_STRUCT,
+ LEXER_TOKEN_KEYWORD_UNDEFINED,
};
const size_t LEXER_KEYWORD_SIZE =
sizeof(LEXER_KEYWORD_TOKENS) / sizeof(*LEXER_KEYWORD_TOKENS);
@@ -273,7 +281,9 @@ void lexerPushClear(LexerNodeArray *array, size_t *array_size, char *iter,
case LEXER_TOKEN_KEYWORD_U32:
case LEXER_TOKEN_KEYWORD_I64:
case LEXER_TOKEN_KEYWORD_U64:
+#ifdef FLOAT_16_SUPPORT
case LEXER_TOKEN_KEYWORD_F16:
+#endif
case LEXER_TOKEN_KEYWORD_F32:
case LEXER_TOKEN_KEYWORD_F64:
case LEXER_TOKEN_KEYWORD_F128:
@@ -382,4 +392,13 @@ bool isCompleteSymbol(char *str, size_t str_size) {
str_size) != LEXER_SYMBOL_SIZE;
}
-bool isSpace(char c) { return isspace(c); }
+bool isSpace(char c) {
+ switch (c) {
+ case ' ':
+ case '\n':
+ case '\t':
+ return true;
+ default:
+ return false;
+ }
+}
diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h
index 4b59dff..8759e10 100644
--- a/src/compiler/lexer.h
+++ b/src/compiler/lexer.h
@@ -1,5 +1,6 @@
#pragma once
+#include "utils/type.h"
#include <stddef.h>
typedef enum LexerToken {
@@ -15,7 +16,9 @@ typedef enum LexerToken {
LEXER_TOKEN_KEYWORD_U32,
LEXER_TOKEN_KEYWORD_I64,
LEXER_TOKEN_KEYWORD_U64,
+#ifdef FLOAT_16_SUPPORT
LEXER_TOKEN_KEYWORD_F16,
+#endif
LEXER_TOKEN_KEYWORD_F32,
LEXER_TOKEN_KEYWORD_F64,
LEXER_TOKEN_KEYWORD_F128,
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index ad06a7f..951d3b4 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -30,7 +30,9 @@ const char *PARSER_TOKEN_STRINGS[] = {
"PARSER_TOKEN_TYPE_U32",
"PARSER_TOKEN_TYPE_I64",
"PARSER_TOKEN_TYPE_U64",
+#ifdef FLOAT_16_SUPPORT
"PARSER_TOKEN_TYPE_F16",
+#endif
"PARSER_TOKEN_TYPE_F32",
"PARSER_TOKEN_TYPE_F64",
"PARSER_TOKEN_TYPE_F128",
@@ -87,7 +89,7 @@ const char *PARSER_TOKEN_STRINGS[] = {
.size = sizeof((LexerToken[]){__VA_ARGS__}) / sizeof(LexerToken), \
.data = {__VA_ARGS__}
-static constexpr ParserOrder PARSER_ORDER[] = {
+static const ParserOrder PARSER_ORDER[] = {
{
.ltr = true,
ORDER_ARRAY(LEXER_TOKEN_SYMBOL_CLOSE_CURLY_BRACKET, ),
@@ -100,12 +102,14 @@ static constexpr ParserOrder PARSER_ORDER[] = {
LEXER_TOKEN_KEYWORD_U8, LEXER_TOKEN_KEYWORD_I16,
LEXER_TOKEN_KEYWORD_U16, LEXER_TOKEN_KEYWORD_I32,
LEXER_TOKEN_KEYWORD_U32, LEXER_TOKEN_KEYWORD_I64,
- LEXER_TOKEN_KEYWORD_F16, LEXER_TOKEN_KEYWORD_F32,
- LEXER_TOKEN_KEYWORD_F64, LEXER_TOKEN_KEYWORD_F128,
- LEXER_TOKEN_KEYWORD_U64, LEXER_TOKEN_KEYWORD_BOOL,
- LEXER_TOKEN_KEYWORD_TRUE, LEXER_TOKEN_KEYWORD_FALSE,
- LEXER_TOKEN_KEYWORD_NULL, LEXER_TOKEN_NUMBER,
- LEXER_TOKEN_KEYWORD_UNDEFINED, ),
+#ifdef FLOAT_16_SUPPORT
+ LEXER_TOKEN_KEYWORD_F16,
+#endif
+ LEXER_TOKEN_KEYWORD_F32, LEXER_TOKEN_KEYWORD_F64,
+ LEXER_TOKEN_KEYWORD_F128, LEXER_TOKEN_KEYWORD_U64,
+ LEXER_TOKEN_KEYWORD_BOOL, LEXER_TOKEN_KEYWORD_TRUE,
+ LEXER_TOKEN_KEYWORD_FALSE, LEXER_TOKEN_KEYWORD_NULL,
+ LEXER_TOKEN_NUMBER, LEXER_TOKEN_KEYWORD_UNDEFINED, ),
},
{
.ltr = false,
@@ -165,7 +169,7 @@ static constexpr ParserOrder PARSER_ORDER[] = {
},
};
-static constexpr size_t PARSER_ORDER_SIZE =
+static const size_t PARSER_ORDER_SIZE =
sizeof(PARSER_ORDER) / sizeof(*PARSER_ORDER);
void parserNodePrint(const ParserNode *node, int indent) {
@@ -206,7 +210,9 @@ void parserNodePrint(const ParserNode *node, int indent) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -459,7 +465,9 @@ void parserNodeDelete(ParserNode *node) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -706,8 +714,10 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end,
return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_U64);
case LEXER_TOKEN_KEYWORD_BOOL:
return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_BOOL);
+#ifdef FLOAT_16_SUPPORT
case LEXER_TOKEN_KEYWORD_F16:
return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_F16);
+#endif
case LEXER_TOKEN_KEYWORD_F32:
return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_F32);
case LEXER_TOKEN_KEYWORD_F64:
@@ -1220,7 +1230,9 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end,
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -1703,7 +1715,9 @@ bool isExpression(ParserNode *node) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -1734,7 +1748,9 @@ bool isType(ParserNode *node) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
@@ -1833,7 +1849,9 @@ bool isValue(ParserNode *node) {
case PARSER_TOKEN_TYPE_U32:
case PARSER_TOKEN_TYPE_I64:
case PARSER_TOKEN_TYPE_U64:
+#ifdef FLOAT_16_SUPPORT
case PARSER_TOKEN_TYPE_F16:
+#endif
case PARSER_TOKEN_TYPE_F32:
case PARSER_TOKEN_TYPE_F64:
case PARSER_TOKEN_TYPE_F128:
diff --git a/src/compiler/parser.h b/src/compiler/parser.h
index 2df35b9..8eaea77 100644
--- a/src/compiler/parser.h
+++ b/src/compiler/parser.h
@@ -26,7 +26,9 @@ typedef enum ParserToken {
PARSER_TOKEN_TYPE_U32,
PARSER_TOKEN_TYPE_I64,
PARSER_TOKEN_TYPE_U64,
+#ifdef FLOAT_16_SUPPORT
PARSER_TOKEN_TYPE_F16,
+ #endif
PARSER_TOKEN_TYPE_F32,
PARSER_TOKEN_TYPE_F64,
PARSER_TOKEN_TYPE_F128,