about summary refs log tree commit diff stats
path: root/wrapperhelper/src/lang.c
diff options
context:
space:
mode:
Diffstat (limited to 'wrapperhelper/src/lang.c')
-rw-r--r--wrapperhelper/src/lang.c82
1 files changed, 59 insertions, 23 deletions
diff --git a/wrapperhelper/src/lang.c b/wrapperhelper/src/lang.c
index 1c4cba6c..3e9f2a78 100644
--- a/wrapperhelper/src/lang.c
+++ b/wrapperhelper/src/lang.c
@@ -349,9 +349,9 @@ int init_str2kw(void) {
 		printf("Failed to create the string to keyword map (init)\n");
 		return 0;
 	}
+	int iret; khiter_t it;
 	for (enum token_keyword_type_e kw = 0; kw <= LAST_KEYWORD; ++kw) {
-		int iret;
-		khiter_t it = kh_put(str2kw, str2kw, kw2str[kw], &iret);
+		it = kh_put(str2kw, str2kw, kw2str[kw], &iret);
 		if (iret < 0) {
 			printf("Failed to create the string to keyword map (keyword %u)\n", kw);
 			kh_destroy(str2kw, str2kw);
@@ -359,6 +359,35 @@ int init_str2kw(void) {
 		}
 		kh_val(str2kw, it) = kw;
 	}
+#define ADD_ALIAS(alias, k) \
+	it = kh_put(str2kw, str2kw, #alias, &iret);                                            \
+	if (iret < 0) {                                                                        \
+		printf("Failed to create the string to keyword map (keyword alias " #alias ")\n"); \
+		kh_destroy(str2kw, str2kw);                                                        \
+		return 0;                                                                          \
+	}                                                                                      \
+	kh_val(str2kw, it) = KW_ ## k;
+	ADD_ALIAS(__alignof__,   ALIGNOF)
+	// ADD_ALIAS(__asm,         asm)
+	// ADD_ALIAS(__asm__,       asm)
+	ADD_ALIAS(__complex,     COMPLEX)
+	ADD_ALIAS(__complex__,   COMPLEX)
+	ADD_ALIAS(__const,       CONST)
+	ADD_ALIAS(__const__,     CONST)
+	// ADD_ALIAS(__decltype,    decltype)
+	// ADD_ALIAS(__imag__,      __imag)
+	ADD_ALIAS(__inline,      INLINE)
+	ADD_ALIAS(__inline__,    INLINE)
+	// ADD_ALIAS(__nullptr,     nullptr)
+	// ADD_ALIAS(__real__,      __real)
+	ADD_ALIAS(__restrict,    RESTRICT)
+	ADD_ALIAS(__restrict__,  RESTRICT)
+	ADD_ALIAS(__signed,      SIGNED)
+	ADD_ALIAS(__signed__,    SIGNED)
+	// ADD_ALIAS(__typeof,      typeof)
+	// ADD_ALIAS(__typeof__,    typeof)
+	ADD_ALIAS(__volatile,    VOLATILE)
+	ADD_ALIAS(__volatile__,  VOLATILE)
 	return 1;
 }
 void del_str2kw(void) {
@@ -1109,7 +1138,7 @@ file_t *file_new(void) {
 	}
 	
 	// Now fill in the builtin types
-	int iret;
+	int iret; khiter_t it;
 	for (enum type_builtin_e i = 0; i < LAST_BUILTIN + 1; ++i) {
 		type_t *t = malloc(sizeof *t);
 		if (!t) {
@@ -1162,26 +1191,33 @@ file_t *file_new(void) {
 	}
 	// ret is valid
 	
-	// Add __builtin_va_list as a typedef
-	char *sdup = strdup("__builtin_va_list");
-	if (!sdup) {
-		printf("Failed to create a new translation unit structure (va_list name)\n");
-		file_del(ret);
-		return NULL;
-	}
-	khiter_t it = kh_put(type_map, ret->type_map, sdup, &iret);
-	if (iret < 0) {
-		printf("Failed to create a new translation unit structure (add va_list typedef)\n");
-		free(sdup);
-		file_del(ret);
-		return NULL;
-	} else if (iret == 0) {
-		printf("Failed to create a new translation unit structure (__builtin_va_list is already a typedef)\n");
-		file_del(ret);
-		return NULL;
-	}
-	kh_val(ret->type_map, it) = ret->builtins[BTT_VA_LIST];
-	++ret->builtins[BTT_VA_LIST]->nrefs;
+	// Add __builtin_va_list, __int128_t, __uint128_t as typedef
+	char *sdup;
+#define ADD_TYPEDEF(name, btt) \
+	sdup = strdup(#name);                                                                               \
+	if (!sdup) {                                                                                        \
+		printf("Failed to create a new translation unit structure (" #name " name)\n");                 \
+		file_del(ret);                                                                                  \
+		return NULL;                                                                                    \
+	}                                                                                                   \
+	it = kh_put(type_map, ret->type_map, sdup, &iret);                                                  \
+	if (iret < 0) {                                                                                     \
+		printf("Failed to create a new translation unit structure (add " #name " typedef)\n");          \
+		free(sdup);                                                                                     \
+		file_del(ret);                                                                                  \
+		return NULL;                                                                                    \
+	} else if (iret == 0) {                                                                             \
+		printf("Failed to create a new translation unit structure (" #name " is already a typedef)\n"); \
+		free(sdup);                                                                                     \
+		file_del(ret);                                                                                  \
+		return NULL;                                                                                    \
+	}                                                                                                   \
+	kh_val(ret->type_map, it) = ret->builtins[BTT_ ## btt];                                             \
+	++ret->builtins[BTT_ ## btt]->nrefs;
+	
+	ADD_TYPEDEF(__builtin_va_list, VA_LIST)
+	ADD_TYPEDEF(__int128_t, INT128)
+	ADD_TYPEDEF(__uint128_t, UINT128)
 	
 	return ret;
 }