Skip to content

Commit b55d5e3

Browse files
committed
Various fixes
1 parent 4950502 commit b55d5e3

File tree

6 files changed

+56
-34
lines changed

6 files changed

+56
-34
lines changed

parser/metac_parser.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ uint32_t HashDecl(metac_decl_t* decl)
16171617
result = CRC32C_VALUE(result, fieldHash);
16181618
field = field->Next;
16191619
}
1620-
assert(field->Next = cast(decl_field_t*)emptyPointer);
1620+
assert(field->Next == cast(decl_field_t*)emptyPointer);
16211621
}
16221622
} break;
16231623
case decl_variable:
@@ -1929,7 +1929,6 @@ metac_decl_t* MetaCParser_ParseDecl(metac_parser_t* self, metac_decl_t* parent)
19291929
functionType->ReturnType = returnType;
19301930
hash = CRC32C_VALUE(hash, returnType->Hash);
19311931
functionType->ParameterCount = paramterList.ParameterCount;
1932-
const uint32_t pCount = functionType->ParameterCount;
19331932
hash = CRC32C_VALUE(hash, functionType->ParameterCount);
19341933
functionType->Parameters = paramterList.List;
19351934
hash = CRC32C_VALUE(hash, paramterList.Hash);

repl/completion_trie.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void CompletionTrie_Collect(completion_trie_root_t* root,
106106
uint32_t currentUnmatchedPrefixLength = unmatchedPrefixLength;
107107
bool descend = true;
108108

109-
memcpy(completionString + completionLength, prefix, matchedUntil);
109+
memcpy(completionString, prefix, matchedUntil);
110110

111111
for (;;) // until we are back at the root and there are no children left
112112
LSetCurrent:
@@ -524,9 +524,10 @@ void CompletionTrie_PrintRanges(completion_trie_root_t* self)
524524
fclose(f);
525525
}
526526
#endif
527-
void CompletionTrie_PrintStats(completion_trie_root_t* self)
527+
528+
void CompletionTrie_PrintTrie(completion_trie_root_t* self)
528529
{
529-
{
530+
ALIGN_STACK();
530531
FILE* f = fopen("g.dot", "w");
531532
fprintf(f, "digraph G {\n");
532533
fprintf(f, " node [shape=record headport=n]\n");
@@ -535,7 +536,12 @@ void CompletionTrie_PrintStats(completion_trie_root_t* self)
535536

536537
fprintf(f, "}\n");
537538
fclose(f);
538-
}
539+
RESTORE_STACK();
540+
}
541+
542+
void CompletionTrie_PrintStats(completion_trie_root_t* self)
543+
{
544+
CompletionTrie_PrintTrie(self);
539545

540546
printf("UsedNodes: %u\n", self->TotalNodes);
541547
printf("AllocatedNodes: %u\n", self->NodesCount);

semantic/metac_scope.h

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,27 @@
77

88
struct metac_sema_decl_t;
99

10+
#define FOREACH_SCOPE_OWNER(M) \
11+
M(scope_owner_unknown , 0x0) \
12+
/* unused for now */ \
13+
M(scope_owner_module , 0x1) \
14+
M(scope_owner_function , 0x2) \
15+
M(scope_owner_struct , 0x3) \
16+
M(scope_owner_statement , 0x4) \
17+
M(scope_owner_block , 0x5) \
18+
M(scope_owner_union , 0x6) \
19+
M(scope_owner_extended , 0x7) \
20+
M(scope_owner_enum , 0x9) \
21+
M(scope_owner_template , 0xA) \
22+
/* 0xF is for invalid reserved. */ \
23+
M(scope_owner_invalid , 0xF)
24+
25+
#define DEF_MEMBER(NAME, VALUE) \
26+
NAME = VALUE,
27+
1028
typedef enum metac_scope_owner_kind_t
1129
{
12-
scope_owner_unknown = 0x0,
13-
14-
/// unused for now
15-
scope_owner_module = 0x1,
16-
17-
scope_owner_function = 0x2,
18-
scope_owner_struct = 0x3,
19-
scope_owner_statement = 0x4,
20-
scope_owner_block = 0x5,
21-
22-
scope_owner_union = 0x6,
23-
24-
scope_owner_extended = 0x7,
25-
26-
scope_owner_enum = 0x9,
27-
28-
// unused range A-D A, B, C, D
29-
scope_owner_invalid = 0xF
30-
30+
FOREACH_SCOPE_OWNER(DEF_MEMBER)
3131
} metac_scope_owner_kind_t;
3232

3333

semantic/metac_semantic.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,8 @@ metac_type_t NodeFromTypeIndex(metac_sema_state_t* sema,
10611061
return cast(metac_type_t) FunctiontypePtr(sema, index);
10621062
case type_index_array:
10631063
return cast(metac_type_t) ArrayTypePtr(sema, index);
1064+
case type_index_template:
1065+
return cast(metac_type_t) TemplateTypePtr(sema, index);
10641066
}
10651067

10661068
return 0;

semantic/metac_type_semantic.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,18 @@ static inline bool isBasicType(metac_type_kind_t typeKind)
6363
bool IsUnknownType(metac_sema_state_t* self,
6464
metac_type_index_t typeIndex)
6565
{
66+
bool result = false;
67+
6668
if (TYPE_INDEX_KIND(typeIndex) == type_index_unknown)
6769
{
68-
return true;
70+
result = true;
6971
}
7072
if (TYPE_INDEX_KIND(typeIndex) == type_index_array)
7173
{
72-
return IsUnknownType(self, self->ArrayTypeTable.Slots[TYPE_INDEX_INDEX(typeIndex)].TypeIndex);
74+
result = IsUnknownType(self, self->ArrayTypeTable.Slots[TYPE_INDEX_INDEX(typeIndex)].TypeIndex);
7375
}
7476

75-
return false;
77+
return result;
7678
}
7779

7880
sema_decl_type_t* MetaCSemantic_GetTypeNode(metac_sema_state_t* self,
@@ -346,6 +348,7 @@ metac_type_index_t MetaCSemantic_GetElementType(metac_sema_state_t* self,
346348
metac_type_ptr_t* ptrType = PtrTypePtr(self, TYPE_INDEX_INDEX(typeIndex));
347349
result = ptrType->ElementType;
348350
} break;
351+
default:
349352
}
350353

351354
return result;
@@ -1178,16 +1181,22 @@ metac_type_index_t MetaCSemantic_TypeSemantic(metac_sema_state_t* self,
11781181
placeholder->Kind = expr_unknown_value;
11791182
placeholder->TypeIndex = MetaCSemantic_TypeSemantic(self, param->Parameter->VarType);
11801183
METAC_NODE(placeholder->Expr) = emptyNode;
1184+
placeholder->LocationIdx = locIdx;
11811185

11821186

1183-
MetaCSemantic_RegisterInScope(self, paramIdent, placeholder);
1187+
MetaCSemantic_RegisterInScope(self, paramIdent, METAC_NODE(placeholder));
11841188

11851189
param = param->Next;
11861190
}
11871191
}
11881192

11891193
MetaCSemantic_ComputeStructLayout(self, agg, tmpSemaAgg);
11901194

1195+
if (agg->ParameterCount != 0)
1196+
{
1197+
MetaCSemantic_PopTemporaryScope(self);
1198+
}
1199+
11911200
MetaCSemantic_UnmountScope(self);
11921201

11931202
hash = AggregateHash(tmpSemaAgg);
@@ -1313,7 +1322,7 @@ metac_type_index_t MetaCSemantic_TypeSemantic(metac_sema_state_t* self,
13131322
{
13141323
metac_decl_t* symbol = NULL;
13151324
metac_expr_t* arguments = cast(metac_expr_t*) emptyNode;
1316-
uint32_t hash = crc32c_nozero(~0, &symbol->Hash, sizeof(symbol->Hash));
1325+
uint32_t hash = symbol ? crc32c_nozero(~0, &symbol->Hash, sizeof(symbol->Hash)) : ~0;
13171326
uint32_t nArguments = 0;
13181327
for(uint32_t argIdx = 0; argIdx < nArguments; argIdx++)
13191328
{
@@ -1331,7 +1340,7 @@ metac_type_index_t MetaCSemantic_TypeSemantic(metac_sema_state_t* self,
13311340
result = MetaCTypeTable_GetOrEmptyTemplateType(&self->TemplateTypeTable, &key);
13321341
if (result.v == 0)
13331342
{
1334-
MetaCTypeTable_AddTemplateType(&self->TemplateTypeTable, &key);
1343+
result = MetaCTypeTable_AddTemplateType(&self->TemplateTypeTable, &key);
13351344
}
13361345
}
13371346

@@ -1648,7 +1657,7 @@ bool MetaCSemantic_ComputeStructLayout(metac_sema_state_t* self,
16481657
#ifndef NO_FIBERS
16491658
while (!semaField->Type.v)
16501659
{
1651-
printf("FieldType couldn't be resolved ... yielding fiber\n");
1660+
xprintf("FieldType couldn't be resolved ... yielding fiber\n");
16521661
aco_t* me = (aco_t*)CurrentFiber();
16531662
if (me != 0)
16541663
{
@@ -1659,11 +1668,11 @@ bool MetaCSemantic_ComputeStructLayout(metac_sema_state_t* self,
16591668

16601669
assert(self->Waiters.WaiterCount < self->Waiters.WaiterCapacity);
16611670
self->Waiters.Waiters[self->Waiters.WaiterCount++] = waiter;
1662-
printf("We should Yield\n");
1671+
xprintf("We should Yield\n");
16631672
(cast(task_t*)(me->arg))->TaskFlags = Task_Waiting;
16641673
YIELD(watingOnTypeSemantic);
16651674
(cast(task_t*)(me->arg))->TaskFlags = Task_Running;
1666-
printf("Now we should be able to resolve\n");
1675+
xprintf("Now we should be able to resolve\n");
16671676
semaField->Type =
16681677
MetaCSemantic_doTypeSemantic(self, declField->Field->VarType);
16691678
}

semantic/node_alloc.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ metac_type_array_t* ArrayTypePtr(metac_sema_state_t* self, uint32_t index)
106106
return result;
107107
}
108108

109+
metac_type_template_t* TemplateTypePtr(metac_sema_state_t* self, uint32_t index)
110+
{
111+
metac_type_template_t* result = (self->TemplateTypeTable.Slots + index);
112+
return result;
113+
}
114+
109115
metac_type_functiontype_t* FunctiontypePtr(metac_sema_state_t* self, uint32_t index)
110116
{
111117
metac_type_functiontype_t* result = (self->FunctionTypeTable.Slots + index);

0 commit comments

Comments
 (0)