od Pz » 11. 12. 2008 18:09
Ahoj,
uz druhy den jsem zaseknuty na pitome chybe, tak se chci zeptat, jestli nekdo na neco takoveho uz taky narazil.
Pri parsovani zdrojaku (z prvniho testu)
function multiply(i, j:integer) : integer;
begin
multiply := i*j;
end;
mi zlobi vyhledani parametru i a j uvnitr kodu funkce. Maji se chovat jako lokalni promenne (cili pri vyhledani
ctx->tab->find_symbol($1)->access_typed()->type() je vracen SKIND_LOCAL_VARIABLE). To jeste jde (=funguje).
Kdyz ale chci ziskat offset adresy i nebo j, vzdy dostanu -1 (coz pro j je spravne, i ma ale vracet -2).
Source (osekany pro prehlednost):
symbol_pointer ptr = ctx->tab->find_symbol($1.id_ci_);
switch (ptr->kind())
{
case SKIND_LOCAL_VARIABLE:
$$.code->append_instruction(new ai::LSTI(ptr->access_local_variable()->address()));
break;
.. atd.
Problem je, ze ptr->access_local_variable()->address() vraci prave porad -1. Zkousel jsem i access_variable(), ale se stejnym
vysledkem. Nefunguje ani s vetsim mnozstvim parametru (vsechny dostanou -1). A co je nejhorsi, spolubydlovi, ktery PP delal
loni, to funguje dobre - a ani s jeho zdrojakem jsem nebyl schopny najit chybu (ma to prakticky stejne jako ja).
Predem dodavam - skutecne vyhledavam spravne promenne (I a J), to jsem overoval snad 100x.
Uz jsem psal i cvicicimu, zatim bez odpovedi.
Kdyby nekdo vedel co s tim, tak mu slozim kratsi symfonii.
Ahoj,
uz druhy den jsem zaseknuty na pitome chybe, tak se chci zeptat, jestli nekdo na neco takoveho uz taky narazil.
Pri parsovani zdrojaku (z prvniho testu)
function multiply(i, j:integer) : integer;
begin
multiply := i*j;
end;
mi zlobi vyhledani parametru i a j uvnitr kodu funkce. Maji se chovat jako lokalni promenne (cili pri vyhledani
ctx->tab->find_symbol($1)->access_typed()->type() je vracen SKIND_LOCAL_VARIABLE). To jeste jde (=funguje).
Kdyz ale chci ziskat offset adresy i nebo j, vzdy dostanu -1 (coz pro j je spravne, i ma ale vracet -2).
Source (osekany pro prehlednost):
symbol_pointer ptr = ctx->tab->find_symbol($1.id_ci_);
switch (ptr->kind())
{
case SKIND_LOCAL_VARIABLE:
$$.code->append_instruction(new ai::LSTI(ptr->access_local_variable()->address()));
break;
.. atd.
Problem je, ze ptr->access_local_variable()->address() vraci prave porad -1. Zkousel jsem i access_variable(), ale se stejnym
vysledkem. Nefunguje ani s vetsim mnozstvim parametru (vsechny dostanou -1). A co je nejhorsi, spolubydlovi, ktery PP delal
loni, to funguje dobre - a ani s jeho zdrojakem jsem nebyl schopny najit chybu (ma to prakticky stejne jako ja).
Predem dodavam - skutecne vyhledavam spravne promenne (I a J), to jsem overoval snad 100x.
Uz jsem psal i cvicicimu, zatim bez odpovedi.
Kdyby nekdo vedel co s tim, tak mu slozim kratsi symfonii.