next up previous contents
Next: Adaos - Plugins Up: Miez - Core Previous: Cache   Cuprins

Tip

Tipul variabilelor este gestionat in fiserele prog/type.c si prog/type.h. Aici se implementeaza o subclasa in sens C (structura ce inglobeaza alta structura la offsetul 0), numita ``plint_type_info_t'', a cheii unei variabile, care adauga o serie de informatii despre tipul variabilei, dintre care cea mai importanta este o interfata de functii numit hook. Aceasta este o colectie de functii callback asociate operatorilor posibili din limbaj (new, echo, +=, -=, $ etc.); un hook este practic tipul unei variabile; aceste tipuri se pot crea/adauga dinamic, stocandu-se lista dublu inlantuita; fiecare tip poate sa precizeze in momentul inregistrarii la multimea existenta de tipuri acele tipuri de care el depinde intr-un fel oarecare. Daca nu se pot asigura dependendentele, atunci inregistrarea este fara succes.

Odata inregistrat un tip, se pot crea variabile de acest tip. Cu aceste variabile se pot forma expresii cu operatori; in momentul aplicarii unui operator pe o variabila, cursul programului poate devia prin apeluri de metode plint care sa returneze valoarea rezultata in urma aplicarii operatorului. Alta posibilitate este de a apela metode care returneaza numele unei metode care realizeaza in cele din urma operatia dorita. Mai simplificat, se poate ca rezultatul sa fie calculat direct de ``motorul'' C al tipului.

Oricare ar fi numarul de operanzi ai unui operator, exact unul dintre acestea este cel pe care se aplica operatorul, iar restul sunt un fel de paramterrii.

Pentru a realiza aplicarea unui operator, dupa momentul citirii din fisier a operanzilor si operandului, se apeleaza dependent de operator niste functii de initializare a operatiei. Aici se va determina cum va fi realizata operatia: imediat, prin apel direct sau indirect (cautare/apel); In cazul operatiilor cu mai multi operanzi (binare), avand in vedere ca exista mai multe tipuri inregistrate la un moment dat, care nu depind unele de altele, este normal sa se verifice acum daca are rost sa se efectueze operatia intre operanzi de diferite tipuri. O modalitatea simpla este de a verifica liniar daca in lista de dependente a operatorului principal exista tipuri ale operanzilor parametrii.

Dupa o anumita experienta obtinuta din teste, mai ales din pluginul ``class'', s-a ajuns la concluzia ca verificare dependentelor prin cautare liniara a cheii proprii variabilei este un mod static de a privi lucrurile. S-a corectat acest comportament in doua sensuri:


next up previous contents
Next: Adaos - Plugins Up: Miez - Core Previous: Cache   Cuprins
Sebastian Glita 2002-06-19