Merge branch 'master' of https://github.com/dopefishh/cc1516
[cc1516.git] / ontwerpbesluiten.txt
index b65b74a..71e02c2 100644 (file)
@@ -24,4 +24,20 @@ Globaal gedefinieerde dingen worden als constanten beschouwd. Enkel in functies
 
 — mbt code generation
 —- 
-Bij callen is de callee verantwoordelijk voor het opslaan van de registers, indien nodig. Dit omdat _alles_ als function wordt gecalled, dus ook: i=4; b=i+1; levert een functiecall naar i op in de toewijzing van b. 
\ No newline at end of file
+Globals zijn bestaan niet, ondingen. Lokale variabelen komen gewoon op de stack
+te staan in volgorde van declaratie.
+
+Int, Char, Bool worden gewoon normaal opgeslagen met hun waarde
+Tuple wordt opgeslagen dmv twee pointers naar de heap
+List wordt opgeslagen dmv een pointer, als die 0 is dan is het het einde. Als
+       het een plek op de heap is dan wijst die plek naar de waarde, de volgende
+       plek wijst dan naar de tail.
+Incomplete functies sla je op dmv heap pointer, plek van de pointer is het
+       functieadres, plekken erna zijn de argumenten. Dit is poor-mans higher
+       order functions. Als we het pro willen doen is dat niet in de scope van het
+       project.(closure, lambda's nodig etc)
+
+Functies callen gebeurt door eerst de oude frame pointer op de stack te duwen,
+dan omgekeert de argumenten van de functie. Bij afbraak herstel je gewoon de
+stack pointer naar de waarde onder het laatste argument.
+