- Added `generateSignature_Variable(Variable var)` which generates JUST a variable signature (with symbol mapping)
- `emitExterns(File modOut, Module mod)` now also generates extern statements for global variables
This commit is contained in:
Tristan B. Velloza Kildaire 2024-04-01 22:14:55 +02:00
parent e1fbdde91c
commit e41c3a8d88
1 changed files with 28 additions and 2 deletions

View File

@ -1083,6 +1083,9 @@ public final class DCodeEmitter : CodeEmitter
{
gprintln(format("Emitting extern(...) statements for module %s...", mos.mod()));
// TODO: What about extern (At the T level)??!?! In wonder, those should be relaxed hey
// Emit public functions
foreach(Function func; mos.funcs())
{
@ -1093,8 +1096,13 @@ public final class DCodeEmitter : CodeEmitter
}
// Emit public variables
// TODO: Implement me
foreach(Variable var; mos.vars())
{
string externEmit = format("extern %s;", generateSignature_Variable(var));
gprintln(format("VarExternEmit: '%s'", externEmit));
modOut.writeln(externEmit);
}
}
/**
@ -1210,6 +1218,24 @@ public final class DCodeEmitter : CodeEmitter
}
}
private string generateSignature_Variable(Variable var)
{
string signature;
// Extract the Variable's type
Type varType = typeChecker.getType(var.context.container, var.getType());
// FIXME: Set proper scope type
string renamedSymbol = mapper.map(var, ScopeType.GLOBAL);
// <type> <name>
signature = typeTransform(varType)~" "~renamedSymbol;
// TODO: Add extern here?
return signature;
}
private string generateSignature(Function func)
{
string signature;