Source

Magnum / todo-script.txt

The branch 'refvalue_branch' does not exist.
Full commit
NativeValue:
=============
- Verbesserte Objekt-Erkennung!

BytecodeGenerator:
- opCall: weg, muss mit opFunction konsollidiert werden
  vielleicht doch da lassen für interne calls (als Gegenstück zu Jumps)
- Zusätzlich: Klassen
   createClass
   createMethod
   createField
   finishClass
   finishMethod
- es müssen export/import-Tabellen generiert werden
- wer löst diese bei/vor der Ausführung auf? (MultiThreading berücksichtigen!)
- wie gelangen die export-Tabellen ins Modul?
- sollen auch die import-Tabellen ins Modul?


Symbol-Resolving
  Funktionen, Variablen, Methoden, Fields und Klassen müssen aufgelöst
  werden. 
	1. Strategie beim "compile":
		Versuche Funktionen und Variablen intern aufzulösen
		=> Neue opcodes? Evtl einfach "call" opcode
		
	2. Strategie beim Erstellen eines Moduls:
		Versuche Funktionen und Variablen quer aufzulösen
		=> Neue opcodes? Einfacher call geht nicht über
		   Programmgrenzen hinweg. Oder doch?!
		Alle nicht aufgelösten Symbole müssen in Import-Tabelle
	      
	3. Strategie beim Linken:
	    Versuche alles mit Hilfe anderer Module aufzulösen
	    => Neue opcodes?
	    
	4. Strategie bei der Ausführung:
	    Versuche den Rest mit Hilfe des Dispatchers aufzulösen.
	    => Neue opcodes?
  
  Wie kommen die Exporte in die Module?
   => Module kennen die Programme, die in Ihnen sind (Zur Not über
      "friend").
      
  Wie sollen Fields und Methods heißen?
   => Entweder FqName oder localName
  
  Im NativeClass Falle: Woher die Fields und Methods einer Class nehmen?
   => Aus dem Modul? ... nicht sehr gut, da die Native... auch ohne Modul
      instanziierbar sind. (Ref-Counting fällt uns hier für einen getter
      auf die Füße)
  
  Wie soll das Linken passieren? 
   => Der Linker soll unabhängig von der jeweiligen Modul-Implementierung sein!
   => Die Module müssen selber Linken können oder zumindes ein entsprechendes
      Interface für Importe zur Verfügung stellen.