Skip to content

Commit 3804d58

Browse files
committed
Updated insight to support volatile pointers
1 parent 4f15a40 commit 3804d58

12 files changed

Lines changed: 65 additions & 18 deletions

File tree

src/backend/INSIGHT/include/AST/TYPE/ast_type_make.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ ast_elem_t *ast_elem_empty_make(unsigned int id, source_t source);
8585

8686
// ---------------- ast_elem_pointer_make ----------------
8787
// Makes a pointer element (e.g. '*')
88-
#define ast_elem_pointer_make(SOURCE) ast_elem_empty_make(AST_ELEM_POINTER, SOURCE)
88+
ast_elem_t *ast_elem_pointer_make(source_t source, bool is_volatile);
8989

9090
// ---------------- ast_elem_generic_int_make ----------------
9191
// Makes a generic int type element (no syntactic equivalent - represents the type of an unsuffixed integer)

src/backend/INSIGHT/include/AST/ast_type.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ typedef struct {
6464

6565
// ---------------- ast_elem_pointer_t ----------------
6666
// Type element for a pointer
67-
typedef ast_elem_t ast_elem_pointer_t;
67+
typedef struct {
68+
unsigned int id;
69+
source_t source;
70+
bool is_volatile;
71+
} ast_elem_pointer_t;
6872

6973
// ---------------- ast_elem_array_t ----------------
7074
// Type element for an array

src/backend/INSIGHT/include/DRVR/compiler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ typedef struct compiler {
138138
#define CROSS_COMPILE_WINDOWS 0x01
139139
#define CROSS_COMPILE_MACOS 0x02
140140
#define CROSS_COMPILE_WASM32 0x03
141+
#define CROSS_COMPILE_LINUX 0x04
141142

142143
// ---------------- compiler_run ----------------
143144
// Runs a compiler with the given arguments.

src/backend/INSIGHT/include/TOKEN/token_data.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#ifndef _ISAAC_TOKEN_DATA_H
55
#define _ISAAC_TOKEN_DATA_H
66

7-
#define TOKEN_ITERATION_VERSION 0x63FCD5C0
7+
#define TOKEN_ITERATION_VERSION 0x67EAAACA
88

99
#define TOKEN_NONE 0x00000000
1010
#define TOKEN_WORD 0x00000001
@@ -153,10 +153,11 @@
153153
#define TOKEN_VA_START 0x00000090
154154
#define TOKEN_VERBATIM 0x00000091
155155
#define TOKEN_VIRTUAL 0x00000092
156-
#define TOKEN_WHILE 0x00000093
156+
#define TOKEN_VOLATILE 0x00000093
157+
#define TOKEN_WHILE 0x00000094
157158
#define TOKEN_BIT_AND 0x00000021
158159

159-
#define MAX_LEX_TOKEN 0x00000093
160+
#define MAX_LEX_TOKEN 0x00000094
160161
#define BEGINNING_OF_KEYWORD_TOKENS 0x0000004B
161162

162163
#define TOKEN_EXTRA_DATA_FORMAT_ID_ONLY 0x00000061

src/backend/INSIGHT/src/AST/TYPE/ast_type_clone.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
static ast_elem_t *ast_elem_empty_clone(const ast_elem_t*);
1414
static ast_elem_t *ast_elem_base_clone(const ast_elem_base_t*);
15+
static ast_elem_t *ast_elem_pointer_clone(const ast_elem_pointer_t*);
1516
static ast_elem_t *ast_elem_fixed_array_clone(const ast_elem_fixed_array_t*);
1617
static ast_elem_t *ast_elem_var_fixed_array_clone(const ast_elem_var_fixed_array_t*);
1718
static ast_elem_t *ast_elem_polycount_clone(const ast_elem_polycount_t*);
@@ -37,7 +38,7 @@ ast_elem_t *ast_elem_clone(const ast_elem_t *original){
3738
case AST_ELEM_BASE:
3839
return ast_elem_base_clone((ast_elem_base_t*) original);
3940
case AST_ELEM_POINTER:
40-
return ast_elem_empty_clone(original);
41+
return ast_elem_pointer_clone((ast_elem_pointer_t*) original);
4142
case AST_ELEM_ARRAY:
4243
return ast_elem_empty_clone(original);
4344
case AST_ELEM_FIXED_ARRAY:
@@ -81,6 +82,18 @@ static ast_elem_t *ast_elem_empty_clone(const ast_elem_t *original){
8182
);
8283
}
8384

85+
static ast_elem_t *ast_elem_pointer_clone(const ast_elem_pointer_t *original){
86+
ast_elem_pointer_t *clone = malloc(sizeof *original);
87+
88+
*clone = (ast_elem_pointer_t){
89+
.id = AST_ELEM_POINTER,
90+
.source = original->source,
91+
.is_volatile = original->is_volatile,
92+
};
93+
94+
return (ast_elem_t*) clone;
95+
}
96+
8497
static ast_elem_t *ast_elem_base_clone(const ast_elem_base_t *original){
8598
ast_elem_base_t *clone = malloc(sizeof *original);
8699

src/backend/INSIGHT/src/AST/TYPE/ast_type_helpers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ void ast_type_prepend_ptr(ast_type_t *type){
1616

1717
ast_elem_t **new_elements = malloc(sizeof(ast_elem_t*) * (type->elements_length + 1));
1818
memcpy(&new_elements[1], type->elements, sizeof(ast_elem_t*) * type->elements_length);
19-
new_elements[0] = ast_elem_pointer_make(NULL_SOURCE);
19+
new_elements[0] = ast_elem_pointer_make(NULL_SOURCE, false);
2020

2121
free(type->elements);
2222
type->elements = new_elements;

src/backend/INSIGHT/src/AST/TYPE/ast_type_make.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ ast_elem_t *ast_elem_empty_make(unsigned int id, source_t source){
1919
});
2020
}
2121

22+
ast_elem_t *ast_elem_pointer_make(source_t source, bool is_volatile){
23+
return (ast_elem_t*) malloc_init(ast_elem_pointer_t, {
24+
.id = AST_ELEM_POINTER,
25+
.source = source,
26+
.is_volatile = is_volatile,
27+
});
28+
}
29+
2230
ast_elem_t *ast_elem_base_make(strong_cstr_t base, source_t source){
2331
return (ast_elem_t*) malloc_init(ast_elem_base_t, {
2432
.id = AST_ELEM_BASE,
@@ -172,15 +180,15 @@ ast_type_t ast_type_make_base(strong_cstr_t base){
172180

173181
ast_type_t ast_type_make_base_ptr(strong_cstr_t base){
174182
return from_2elems(
175-
ast_elem_pointer_make(NULL_SOURCE),
183+
ast_elem_pointer_make(NULL_SOURCE, false),
176184
ast_elem_base_make(base, NULL_SOURCE)
177185
);
178186
}
179187

180188
ast_type_t ast_type_make_base_ptr_ptr( strong_cstr_t base){
181189
return from_3elems(
182-
ast_elem_pointer_make(NULL_SOURCE),
183-
ast_elem_pointer_make(NULL_SOURCE),
190+
ast_elem_pointer_make(NULL_SOURCE, false),
191+
ast_elem_pointer_make(NULL_SOURCE, false),
184192
ast_elem_base_make(base, NULL_SOURCE)
185193
);
186194
}

src/backend/INSIGHT/src/AST/TYPE/ast_type_str.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ static void ast_elem_base_str(string_builder_t *builder, ast_elem_base_t *elem){
1414
string_builder_append(builder, elem->base);
1515
}
1616

17-
static void ast_elem_pointer_str(string_builder_t *builder){
17+
static void ast_elem_pointer_str(string_builder_t *builder, ast_elem_pointer_t *elem){
1818
string_builder_append_char(builder, '*');
19+
20+
if (elem->is_volatile) {
21+
string_builder_append(builder, "volatile ");
22+
}
1923
}
2024

2125
static void ast_elem_fixed_array_str(string_builder_t *builder, ast_elem_fixed_array_t *elem){
@@ -152,7 +156,7 @@ static void ast_elem_str(string_builder_t *builder, ast_elem_t *elem){
152156
ast_elem_base_str(builder, (ast_elem_base_t*) elem);
153157
break;
154158
case AST_ELEM_POINTER:
155-
ast_elem_pointer_str(builder);
159+
ast_elem_pointer_str(builder, (ast_elem_pointer_t*) elem);
156160
break;
157161
case AST_ELEM_FIXED_ARRAY:
158162
ast_elem_fixed_array_str(builder, (ast_elem_fixed_array_t*) elem);

src/backend/INSIGHT/src/DRVR/compiler.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,11 @@ errorcode_t parse_arguments(compiler_t *compiler, object_t *object, int argc, ch
524524
printf("[-] Cross compiling for MacOS x86_64\n");
525525
compiler->cross_compile_for = CROSS_COMPILE_MACOS;
526526
#endif
527+
} else if(streq(arg, "--linux")){
528+
#ifndef __linux__
529+
printf("[-] Cross compiling for Linux x86_64\n");
530+
compiler->cross_compile_for = CROSS_COMPILE_LINUX;
531+
#endif
527532
} else if(streq(arg, "--wasm32")){
528533
printf("[-] Cross compiling for WebAssembly\n");
529534
printf(" (Adept is intended for true 64-bit architectures, some things may break!)\n");
@@ -765,6 +770,7 @@ void show_help(bool show_advanced_options){
765770
printf("\nCross Compilation:\n");
766771
printf(" --windows Output Windows Executable (Requires Extension)\n");
767772
printf(" --macos Output MacOS Mach-O Object File\n");
773+
printf(" --linux Output Linux ELF Object File\n");
768774

769775
printf("\nLinker Options:\n");
770776
printf(" --libm Forces linking against libc math library\n");

src/backend/INSIGHT/src/PARSE/parse_func.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ errorcode_t parse_func_arguments(parse_ctx_t *ctx, ast_func_t *func){
458458
generics[i] = ast_type_make_polymorph(strclone(ctx->composite_association->generics[i]), false);
459459
}
460460

461-
ast_elem_t *pointer = ast_elem_pointer_make(NULL_SOURCE);
461+
ast_elem_t *pointer = ast_elem_pointer_make(NULL_SOURCE, false);
462462
ast_elem_t *generic_base = ast_elem_generic_base_make(strclone(ctx->composite_association->name), NULL_SOURCE, generics, generics_length);
463463

464464
ast_elem_t **elements = malloc(sizeof(ast_elem_t*) * 2);

0 commit comments

Comments
 (0)