unique_name sheningans

This commit is contained in:
Krzosa Karol
2023-04-01 20:32:29 +02:00
parent e8f82f643a
commit 96ce6765fe
7 changed files with 18 additions and 22 deletions

View File

@@ -728,11 +728,11 @@ gen_ast(Ast *ast) {
} }
CASE(ENUM, Decl) { CASE(ENUM, Decl) {
gen("/*enum %Q{", node->name); gen("/*enum %Q{", node->unique_name);
// @todo add typespec // @todo add typespec
global_indent++; global_indent++;
For(node->scope->decls) { For(node->scope->decls) {
genln("%Q", it->name); genln("%Q", it->unique_name);
gen(" = "); gen(" = ");
gen_value(it->pos, it->value); gen_value(it->pos, it->value);
gen(","); gen(",");

View File

@@ -1011,6 +1011,7 @@ parse_decl(B32 is_global) {
if (result) { if (result) {
set_flag(result->flags, flags); set_flag(result->flags, flags);
result->name = tname->intern_val; result->name = tname->intern_val;
result->unique_name = tname->intern_val;
} }
return result; return result;

View File

@@ -53,14 +53,14 @@ Ast *ast_copy(Ast *ast, Ast_Scope *parent_scope, Array<Ast_Decl *> *replace, Arr
Ast_Atom *src = (Ast_Atom *)ast; Ast_Atom *src = (Ast_Atom *)ast;
Ast_Atom *dst = ast_create_copy(parent_scope, Ast_Atom, ast); Ast_Atom *dst = ast_create_copy(parent_scope, Ast_Atom, ast);
if (replace && with && (dst->flags & AST_TYPESPEC)) { if (replace && with) {
// @todo: IF ITS STRUCT we only want to replace TYPESPECS
For(*replace) { For(*replace) {
assert(it->type == pctx->type_type); assert(it->type == pctx->type_type);
if (it->name == dst->intern_val) { if (it->name == dst->intern_val) {
int it_index = replace->get_index(&it); int it_index = replace->get_index(&it);
Ast_Call_Item *replacement = with[0][it_index]; Ast_Call_Item *replacement = with[0][it_index];
Ast *replacement_v = replacement->item; Ast *replacement_v = replacement->item;
// assert(replacement_v->resolved_type == pctx->type_type);
dst = (Ast_Atom *)ast_copy(replacement_v, parent_scope, 0, 0); dst = (Ast_Atom *)ast_copy(replacement_v, parent_scope, 0, 0);
} }
} }
@@ -316,8 +316,7 @@ Ast_Decl *get_or_instantiate_polymorph_type(Token *pos, Ast_Decl *poly, Array<As
result->polymorph_hash = hash; result->polymorph_hash = hash;
assert(result->di != poly->di); assert(result->di != poly->di);
result->name = get_unique_name_for_decl(result); result->unique_name = get_unique_name_for_decl(result);
result->unique_name = result->name;
poly->polymorphs.allocator = pctx->heap; poly->polymorphs.allocator = pctx->heap;
poly->polymorphs.add(result); poly->polymorphs.add(result);
@@ -366,8 +365,7 @@ Ast_Decl *get_or_instantiate_polymorph_lambda(Token *pos, Ast_Decl *poly, Array<
result->polymorph_hash = hash; result->polymorph_hash = hash;
assert(result->di != poly->di); assert(result->di != poly->di);
result->name = get_unique_name_for_decl(result); result->unique_name = get_unique_name_for_decl(result);
result->unique_name = result->name;
poly->polymorphs.allocator = pctx->heap; poly->polymorphs.allocator = pctx->heap;
poly->polymorphs.add(result); poly->polymorphs.add(result);

View File

@@ -1699,6 +1699,7 @@ resolve_expr(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_and_const_str
For(matches) { For(matches) {
if (it.lambda_arg->flags & AST_POLYMORPH) { if (it.lambda_arg->flags & AST_POLYMORPH) {
replacements.add(it.call_arg); replacements.add(it.call_arg);
matches.ordered_remove(it);
} }
} }
@@ -1706,6 +1707,11 @@ resolve_expr(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_and_const_str
Ast_Decl *instance = get_or_instantiate_polymorph_lambda(node->pos, poly, replacements, field_access_scope); Ast_Decl *instance = get_or_instantiate_polymorph_lambda(node->pos, poly, replacements, field_access_scope);
node->resolved_decl = instance; node->resolved_decl = instance;
lambda = instance->lambda; lambda = instance->lambda;
// We know need to fix the matches list CAUSE ITS FUCKED
// Thanks polymorphism
For(matches) {
}
} }
// Typecheck the arguments and produce properly ordered list of arguments for codegeneration // Typecheck the arguments and produce properly ordered list of arguments for codegeneration

View File

@@ -261,7 +261,6 @@ type_struct_complete(Ast_Type *type, Ast_Decl *node) {
type->padding = type->size - members_size; type->padding = type->size - members_size;
type->agg.members = members.tight_copy(pctx->perm); type->agg.members = members.tight_copy(pctx->perm);
type->kind = TYPE_STRUCT; type->kind = TYPE_STRUCT;
node->unique_name = pctx->internf("%Q%Q", pctx->symbol_prefix, node->name);
} }
else { else {
assert(node->kind == AST_UNION); assert(node->kind == AST_UNION);
@@ -289,7 +288,6 @@ type_struct_complete(Ast_Type *type, Ast_Decl *node) {
type->size = align_up(type->size, type->align); type->size = align_up(type->size, type->align);
type->agg.members = members.tight_copy(pctx->perm); type->agg.members = members.tight_copy(pctx->perm);
type->kind = TYPE_UNION; type->kind = TYPE_UNION;
node->unique_name = pctx->internf("%Q%Q", pctx->symbol_prefix, node->name);
} }
} }

View File

@@ -53,7 +53,6 @@ MultipleArgs :: (): Tuple(int, F32)
PolyLambda :: ($T: Type): T PolyLambda :: ($T: Type): T
return 32 return 32
GetCount :: (a: int): int GetCount :: (a: int): int
return a return a

View File

@@ -1,16 +1,10 @@
MA :: #import "Arena.core" MA :: #import "Arena.core"
/* PushStruct :: (a: *MA.Arena, $T: Type): *T
PushStruct :: (a: *MA.Arena, $T: Type): *$T v: T
size := size_of(Type) size := SizeOf(v)
result := PushSize(a, size) result := MA.PushSize(a, size->U64)
return result return result->*T
*/
PushStruct :: (a: *MA.Arena, type: Type): *void
ti := GetTypeInfo(type)
result := MA.PushSize(a, ti.size->U64)
return result
main :: (argc: int, argv: **char): int main :: (argc: int, argv: **char): int
arena: MA.Arena arena: MA.Arena