Skip to content

Commit

Permalink
fixed name shadowing
Browse files Browse the repository at this point in the history
  • Loading branch information
bafto committed Nov 14, 2024
1 parent 87725aa commit 6f39ae8
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Der Changelog von DDP. Sortiert nach Release.

## In Entwicklung

- [Fix] Man kann eine Variable, die eine andere überschreibt jetzt mit dieser initialisieren
- [Added] Man kann jetzt (auch rekursiv) alle Module aus einem Ordner einbinden
- [Fix] Vorwärts Deklarationen geben nun keinen "undefined reference" Fehler mehr, wenn man sie einbindet

Expand Down
5 changes: 5 additions & 0 deletions lib/runtime/source/DDP/runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
// mainly for debugging
void SignalHandler(int signal) {
if (signal == SIGSEGV) {
DDP_DBGLOG("caught SIGSEGV");
ddp_end_runtime();
ddp_runtime_error(1, "Segmentation fault\n");
}
Expand All @@ -35,6 +36,10 @@ static void handle_args(int argc, char **argv) {

// initialize runtime stuff
void ddp_init_runtime(int argc, char **argv) {
#ifdef DDP_DEBUG
setvbuf(stdout, NULL, _IONBF, 0); // disable buffering for stdout
#endif // DDP_DEBUG

DDP_DBGLOG("init_runtime");
#ifdef DDPOS_WINDOWS
// the locales behaviour seems to change from time to time on windows
Expand Down
3 changes: 2 additions & 1 deletion lib/stdlib/Duden/Fehlerbehandlung.ddp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ Die öffentliche Funktion Loesche_Fehler gibt nichts zurück, ist extern sichtba
Speichere falsch in Fehlermeldung_Valide.
Und kann so benutzt werden:
"Lösche den letzten Fehler" oder
"lösche den letzten Fehler"
"lösche den letzten Fehler" oder
"Diese Funktion könnte einen Fehler melden"

[
Wenn es einen Fehler gab, wird dieser zurückgegeben und gelöscht
Expand Down
8 changes: 4 additions & 4 deletions src/compiler/compiler.go
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,6 @@ func (c *compiler) VisitVarDecl(d *ast.VarDecl) ast.VisitResult {
varLocation = c.NewAlloca(Typ.IrType())
}

Var := c.scp.addVar(d.Name(), varLocation, Typ, false)

// adds the variable initializer to the function fun
addInitializer := func() {
initVal, initTyp, isTemp := c.evaluate(d.InitVal) // evaluate the initial value
Expand All @@ -496,7 +494,7 @@ func (c *compiler) VisitVarDecl(d *ast.VarDecl) ast.VisitResult {
initVal, initTyp, isTemp = c.castNonAnyToAny(initVal, initTyp, isTemp, vtable)
}

c.claimOrCopy(Var, initVal, Typ, isTemp)
c.claimOrCopy(varLocation, initVal, Typ, isTemp)
}

if c.scp.enclosing == nil { // module_init
Expand All @@ -512,7 +510,7 @@ func (c *compiler) VisitVarDecl(d *ast.VarDecl) ast.VisitResult {
c.moduleInitFunc, c.moduleInitCbb = c.cf, c.cbb

c.cf, c.cbb = c.moduleDisposeFunc, c.moduleDisposeFunc.Blocks[0]
c.freeNonPrimitive(Var, Typ) // free the variable in module_dispose
c.freeNonPrimitive(varLocation, Typ) // free the variable in module_dispose

c.cf, c.cbb = cf, cbb
}
Expand All @@ -522,6 +520,8 @@ func (c *compiler) VisitVarDecl(d *ast.VarDecl) ast.VisitResult {
if c.cf != nil && c.cbb != nil { // ddp_main
addInitializer()
}

c.scp.addVar(d.Name(), varLocation, Typ, false)
return ast.VisitRecurse
}

Expand Down
3 changes: 3 additions & 0 deletions tests/testdata/kddp/name_shadowing/expected.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hallo
hi
hallo
10 changes: 10 additions & 0 deletions tests/testdata/kddp/name_shadowing/name_shadowing.ddp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Binde "Duden/Ausgabe" ein.

Der Text t ist "hallo".
:
Der Text t ist t.
Schreibe t auf eine Zeile.
Speichere "hi" in t.
Schreibe t auf eine Zeile.

Schreibe t auf eine Zeile.

0 comments on commit 6f39ae8

Please sign in to comment.