Skip to content

Commit 9e8b891

Browse files
committed
Various fixes
1 parent 6c2f8a2 commit 9e8b891

File tree

8 files changed

+44
-21
lines changed

8 files changed

+44
-21
lines changed

metac.fpg

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,23 @@ MetalNode {
141141
}
142142

143143

144-
Variable @internal {
145-
"type" / Identfier type, Identifier name
144+
Stmt {
145+
ReturnStmt {
146+
"return", Expr value
147+
}
148+
149+
YieldStmt {
150+
"yield", Expr value
151+
}
152+
153+
BlockStmt {
154+
"{", Stmt[] statements : ";", "}"
155+
}
156+
}
157+
Decl {
158+
Variable @internal {
159+
"type" / Identfier type, Identifier name
160+
}
146161
}
147162

148163
Comment {

os/metac_alloc.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,15 @@ arena_ptr_t ReallocArenaArray(tagged_arena_t* arena, metac_alloc_t* alloc, uint3
7777
tagged_arena_t NAME##Arena; \
7878
arena_ptr_t NAME##ArenaPtr;
7979

80-
#define ARENA_ARRAY_INIT_SZ(TYPE, NAME, ALLOC, COUNT) \
81-
{ \
80+
#define ARENA_ARRAY_INIT_SZ(TYPE, NAME, ALLOC, COUNT) do { \
8281
(NAME) = cast(TYPE*)0; \
8382
(NAME##Count) = 0; \
8483
(NAME##Alloc) = (ALLOC); \
8584
(NAME##ArenaPtr) = AllocateArena(ALLOC, (sizeof(TYPE) * (COUNT))); \
8685
(NAME##Arena) = (ALLOC)->Arenas[(NAME##ArenaPtr).Index]; \
8786
(NAME##Arena).Flags |= arena_flag_inUse; \
8887
(NAME) = cast(TYPE*) (NAME##Arena).Memory; \
89-
} while(0)
88+
} while(0)
9089

9190
#define ARENA_ARRAY_INIT(TYPE, NAME, ALLOC) \
9291
ARENA_ARRAY_INIT_SZ(TYPE, NAME, ALLOC, 16)

printer/metac_printer.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,7 +1453,7 @@ static inline void PrintSemaType(metac_printer_t* self,
14531453
{
14541454
uint32_t enumIdx = TYPE_INDEX_INDEX(typeIndex);
14551455
metac_identifier_ptr_t enumName =
1456-
EnumTypePtr(sema, enumIdx)->Name;
1456+
EnumTypePtr(sema, enumIdx)->Identifier;
14571457
PrintString(self, "enum ", sizeof("enum"));
14581458
if (enumName.v != empty_identifier.v)
14591459
{
@@ -1543,7 +1543,7 @@ static inline void PrintSemaDecl(metac_printer_t* self,
15431543
{
15441544
case decl_type_enum:
15451545
{
1546-
PrintIdentifier(self, semaDecl->sema_decl_type_enum.Name);
1546+
PrintIdentifier(self, semaDecl->sema_decl_type_enum.Identifier);
15471547
} break;
15481548
case decl_type_typedef:
15491549
{

repl/completion_trie.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ void CompletionTrie_Init(completion_trie_root_t* self, metac_alloc_t* parentAllo
3737
{
3838
Allocator_Init(&self->TrieAllocator, parentAlloc);
3939

40-
ARENA_ARRAY_INIT_SZ(completion_trie_node_t, self->Nodes, &self->TrieAllocator, 786)
40+
ARENA_ARRAY_INIT_SZ(completion_trie_node_t, self->Nodes, &self->TrieAllocator, 786);
4141
#if TRACK_RANGES
42-
ARENA_ARRAY_INIT_SZ(node_range_t, self->NodeRanges, parentAlloc, 512)
42+
ARENA_ARRAY_INIT_SZ(node_range_t, self->NodeRanges, parentAlloc, 512);
4343
#endif
4444
self->NodesCount = 64;
4545

semantic/metac_semantic.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ scope_insert_error_t MetaCSemantic_RegisterInScope(metac_sema_state_t* self,
792792
ALIGN_STACK();
793793
MetaCSemantic_LRU_RemoveIdentifier(self, idPtr);
794794
RESTORE_STACK();
795-
795+
796796
if (self->CurrentScope != 0)
797797
{
798798
result = MetaCScope_RegisterIdentifier(self->CurrentScope, idPtr, node);
@@ -1084,8 +1084,10 @@ const char* doDeclSemantic_PrintFunction(task_t* task)
10841084
const char* declPrint = 0;
10851085
// MetaCPrinter_PrintDecl(&printer, ctx->Decl);
10861086

1087-
sprintf(buffer, "doDeclSemantic {Sema: %p, Decl: %s}\n",
1087+
ALIGN_STACK();
1088+
snprintf(buffer, 256, "doDeclSemantic {Sema: %p, Decl: %s}\n",
10881089
ctx->Sema, declPrint);
1090+
RESTORE_STACK();
10891091

10901092
return buffer;
10911093
}
@@ -1199,7 +1201,7 @@ metac_sema_decl_t* MetaCSemantic_declSemantic(metac_sema_state_t* self,
11991201
void MetaCSemantic_doDeclSemantic_Task(task_t* task)
12001202
{
12011203
const char* taskPrint = doDeclSemantic_PrintFunction(task);
1202-
printf("Task: %s\n", taskPrint);
1204+
xprintf("Task: %s\n", taskPrint);
12031205
free(cast(void*)taskPrint);
12041206

12051207
MetaCSemantic_doDeclSemantic_task_context_t* ctx =

semantic/metac_type.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ typedef struct metac_type_enum_t
126126

127127
metac_type_index_t TypeIndex;
128128

129-
metac_identifier_ptr_t Name;
129+
metac_identifier_ptr_t Identifier;
130130

131131
metac_type_index_t BaseType;
132132

@@ -172,9 +172,9 @@ typedef struct metac_type_functiontype_t
172172

173173
metac_type_index_t* ParameterTypes;
174174

175-
uint32_t ParameterTypeCount;
176-
177175
metac_identifier_ptr_t* ParameterNames;
176+
177+
uint32_t ParameterTypeCount;
178178
} metac_type_functiontype_t;
179179

180180
typedef struct metac_type_typedef_t

semantic/metac_type_semantic.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ metac_type_aggregate_t* MetaCSemantic_PersistTemporaryAggregateAndPopulateScope(
629629
typeIndex = MetaCTypeTable_AddStructType(&self->StructTypeTable, tmpAgg);
630630
semaAgg = StructPtr(self, TYPE_INDEX_INDEX(typeIndex));
631631
scope_->Owner.v = SCOPE_OWNER_V(scope_owner_struct, StructIndex(self, semaAgg));
632-
}
632+
}
633633
else if (tmpAgg->Header.Kind == decl_type_union)
634634
{
635635
typeIndex = MetaCTypeTable_AddUnionType(&self->UnionTypeTable, tmpAgg);
@@ -720,7 +720,7 @@ void MetaCSemantic_ComputeEnumValues(metac_sema_state_t* self,
720720
// such that you can interpret the increment operator
721721
// MetaCSemantic_SetInProgress(self, semaEnum, "Members");
722722

723-
semaEnum->Name = MetaCIdentifierTable_CopyIdentifier(self->ParserIdentifierTable, &self->SemanticIdentifierTable, enum_->Identifier);
723+
semaEnum->Identifier = MetaCIdentifierTable_CopyIdentifier(self->ParserIdentifierTable, &self->SemanticIdentifierTable, enum_->Identifier);
724724
semaEnum->Header.Kind = decl_type_enum;
725725
if (METAC_NODE(enum_->BaseType) == emptyNode)
726726
{
@@ -962,7 +962,7 @@ metac_type_index_t TypeEnumSemantic(metac_sema_state_t* self,
962962

963963
enumScope.Owner.v = SCOPE_OWNER_V(scope_owner_enum, 0);
964964
tmpSemaEnum.MemberCount = enm->MemberCount;
965-
tmpSemaEnum.Name = enm->Identifier;
965+
tmpSemaEnum.Identifier = enm->Identifier;
966966

967967
MetaCScopeTable_InitN(&enumScope.ScopeTable, tmpSemaEnum.MemberCount, &self->TempAlloc);
968968

@@ -1007,7 +1007,7 @@ metac_type_index_t TypeEnumSemantic(metac_sema_state_t* self,
10071007
result = MetaCTypeTable_AddEnumType(&self->EnumTypeTable, &tmpSemaEnum);
10081008

10091009
keepEnumScope = true;
1010-
MetaCSemantic_RegisterInScope(self, tmpSemaEnum.Name, cast(metac_node_t)EnumTypePtr(self, result.Index));
1010+
MetaCSemantic_RegisterInScope(self, tmpSemaEnum.Identifier, cast(metac_node_t)EnumTypePtr(self, result.Index));
10111011
for(uint32_t i = 0; i < semaMembersCount; i++)
10121012
{
10131013
semaMembers[i].Value->TypeIndex.v = result.v;
@@ -1332,7 +1332,7 @@ LtryAgian: {}
13321332
}
13331333
else
13341334
{
1335-
assert(0); // me not no what do do.
1335+
assert(0); // me not know what do do.
13361336
}
13371337
#ifndef NO_FIBERS
13381338
const uint32_t funcHash = crc32c(~0, "MetaCSemantic_doTypeSemantic",

semantic/metac_type_table.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ static inline const bool EnumSlotsEqual(const metac_type_table_slot_t* a,
3636
bool result = true;
3737
metac_type_enum_t* slotA = cast(metac_type_enum_t*) a;
3838
metac_type_enum_t* slotB = cast(metac_type_enum_t*) b;
39+
40+
if (slotA->Identifier.v != slotB->Identifier.v)
41+
{
42+
result = false;
43+
goto Lret;
44+
}
45+
3946
if (slotA->MemberCount == slotB->MemberCount)
4047
{
4148
uint32_t count = slotA->MemberCount;
@@ -53,7 +60,7 @@ static inline const bool EnumSlotsEqual(const metac_type_table_slot_t* a,
5360
{
5461
result = false;
5562
}
56-
63+
Lret:
5764
return result;
5865
}
5966

0 commit comments

Comments
 (0)