diff --git a/msingi/mkusanyaji/mkaguzi.swa b/msingi/mkusanyaji/mkaguzi.swa index 5499cac..63c165f 100644 --- a/msingi/mkusanyaji/mkaguzi.swa +++ b/msingi/mkusanyaji/mkaguzi.swa @@ -35,6 +35,9 @@ W0 wigo_sukuma() { kama (wigo_vidokezo_idadi < 256) { wigo_vidokezo[wigo_vidokezo_idadi] = wigo_idadi; wigo_vidokezo_idadi = wigo_vidokezo_idadi + 1; + } sivyo { + andika_stderr("KOSA: kina cha kitanzi/tawi (wigo_vidokezo) kimejaa (kikomo 256) — kazi ina viwango vingi mno vya kutagusana vya {}\n"); + mkaguzi_makosa = mkaguzi_makosa + 1; } } @@ -57,6 +60,9 @@ W0 wigo_ongeza(N8* jina, N32 enc) { ast_pool[ast_pool_wapi + i] = 0; ast_pool_wapi = ast_pool_wapi + i + 1; wigo_idadi = wigo_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la vigezo vya wigo (wigo_idadi) limejaa (kikomo 256) kwenye kigezo '%s' — kazi ina vigezo/vitambulisho vingi mno vinavyoonekana kwa wakati mmoja\n", jina); + mkaguzi_makosa = mkaguzi_makosa + 1; } } @@ -165,13 +171,18 @@ N32 mkaguzi_angalia(N32 mzizi) { global_idadi = 0; N32 gn = ast_kushoto[mzizi]; wakati (gn != -1) { - kama (ast_aina[gn] == 35 && global_idadi < 1024) { - global_jina_off[global_idadi] = ast_jina_off[ast_kushoto[gn]]; - N32 genc = ast_thamani[gn]; - // Safu: usemi unapaswa kuiona kama kielekezi (anwani ya msingi) - kama (ast_tiga[gn] != -1) { genc = genc + 1; } - global_aina[global_idadi] = genc; - global_idadi = global_idadi + 1; + kama (ast_aina[gn] == 35) { + kama (global_idadi < 1024) { + global_jina_off[global_idadi] = ast_jina_off[ast_kushoto[gn]]; + N32 genc = ast_thamani[gn]; + // Safu: usemi unapaswa kuiona kama kielekezi (anwani ya msingi) + kama (ast_tiga[gn] != -1) { genc = genc + 1; } + global_aina[global_idadi] = genc; + global_idadi = global_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la vigezo vya ulimwengu (global_idadi) limejaa (kikomo 1024) — mradi una vigezo vya ulimwengu vingi mno\n"); + mkaguzi_makosa = mkaguzi_makosa + 1; + } } gn = ast_nne[gn]; } @@ -183,6 +194,9 @@ N32 mkaguzi_angalia(N32 mzizi) { kama (muundo_count < 1024) { muundo_nodes[muundo_count] = node; muundo_count = muundo_count + 1; + } sivyo { + andika_stderr("KOSA: akiba ya nodi za miundo (muundo_nodes) imejaa (kikomo 1024) — graph ya husisha ina aina za muundo nyingi mno\n"); + mkaguzi_makosa = mkaguzi_makosa + 1; } } node = ast_nne[node]; @@ -242,6 +256,9 @@ W0 mkaguzi_sajili_kazi(N32 kazi_node) { kama (kazi_param_enc_wapi < 4096) { kazi_param_enc[kazi_param_enc_wapi] = ast_thamani[p]; kazi_param_enc_wapi = kazi_param_enc_wapi + 1; + } sivyo { + andika_stderr("kosa [%s]: jedwali la aina za hoja bapa (kazi_param_enc) limejaa (kikomo 4096) — mradi una hoja nyingi mno kwa jumla, kwenye kazi zote\n", jina); + mkaguzi_makosa = mkaguzi_makosa + 1; } pc = pc + 1; p = ast_kulia[p]; @@ -283,6 +300,9 @@ W0 mkaguzi_sajili_kazi(N32 kazi_node) { kazi_ret_jina_off[kazi_ret_idadi] = off; kazi_ret_aina[kazi_ret_idadi] = ast_thamani[kazi_node]; kazi_ret_idadi = kazi_ret_idadi + 1; + } sivyo { + andika_stderr("kosa [%s]: jedwali la aina za kurudi za kazi (kazi_ret_idadi) limejaa (kikomo 1024) — mradi una kazi nyingi mno\n", jina); + mkaguzi_makosa = mkaguzi_makosa + 1; } } diff --git a/msingi/mkusanyaji/msambazaji.swa b/msingi/mkusanyaji/msambazaji.swa index 8bc3d11..d5edf92 100644 --- a/msingi/mkusanyaji/msambazaji.swa +++ b/msingi/mkusanyaji/msambazaji.swa @@ -121,7 +121,14 @@ muundo Msambazaji { // ------------------------------------------------------- N32 node_mpya(N32 aina, N32 thamani, N32 kushoto, N32 kulia) { kama (ast_idadi >= 1048576) { - andika_stderr("; DEB: HITILAFU node_mpya imefurika! idadi=%d aina=%d\n", ast_idadi, aina); + // MUHIMU: kama muundo_nodes[1024] (#189) na kazi_jina_pool[131072] + // (#197), dimbwi hili ni jedwali linaloendana na UKUBWA WA MRADI — + // faili kubwa la kweli (mfano Dominion) huweza kulifikia. Wito + // huu unarudisha -1 KWA MAKUSUDI (badala ya kuandika nje ya + // mipaka), LAKINI waitaji wengi wa node_mpya() bado hawaangalii + // matokeo haya kabla ya kuyatumia kama faharisi ya AST -- angalia + // lugha-swa/swa#199 kwa maelezo kamili ya hatari hii. + andika_stderr("KOSA: akiba ya nodi za AST (ast_aina/ast_thamani/...) imejaa (idadi=%d, aina ya nodi iliyoshindwa=%d) — chanzo (baada ya kutatua husisha zote) ni kikubwa mno kwa kikomo cha 1048576\n", ast_idadi, aina); rudisha -1; } N32 idx = ast_idadi; @@ -2242,6 +2249,8 @@ N32 changanua_muundo(Msambazaji* p) { muundo_ukubwa_jina[muundo_ukubwa_idadi] = ast_pool + ast_jina_off[name]; muundo_ukubwa_val[muundo_ukubwa_idadi] = running_offset; muundo_ukubwa_idadi = muundo_ukubwa_idadi + 1; + } sivyo { + andika_stderr("KOSA: akiba ya ukubwa wa miundo (muundo_ukubwa_jina/val) imejaa (kikomo 1024) — muundo '%s' na zinazofuata hazitapata ukubwa sahihi\n", ast_pool + ast_jina_off[name]); } rudisha mnode; } diff --git a/msingi/mkusanyaji/uzalishaji.swa b/msingi/mkusanyaji/uzalishaji.swa index 0ac9503..f34fb32 100644 --- a/msingi/mkusanyaji/uzalishaji.swa +++ b/msingi/mkusanyaji/uzalishaji.swa @@ -1165,6 +1165,8 @@ W0 andika_rela_ulimwengu(N32 urekebishaji_idx) { rela_nje_id[rela_idadi] = -1; // alama: sio nje rela_ulimwengu_idx[rela_idadi] = urekebishaji_idx; rela_idadi = rela_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la urekebishaji (rela_*) limejaa (kikomo 65536) — anwani hii haitarekebishwa sahihi\n"); } } @@ -1738,6 +1740,8 @@ W0 lebo_hifadhi(N8* jina, N32 ret_enc) { lebo_nafasi[lebo_idadi] = bafa_text_wapi; lebo_ret_enc[lebo_idadi] = ret_enc; lebo_idadi = lebo_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la lebo za kazi (lebo_*) limejaa (kikomo 2048) kwenye kazi '%s' — mradi una kazi nyingi mno\n", jina); } } @@ -2243,6 +2247,7 @@ N32 pata_au_unda_nje(N8* jina) { nje_idadi = nje_idadi + 1; rudisha nje_idadi - 1; } + andika_stderr("KOSA: jedwali la alama za nje (nje_*) limejaa (kikomo 2048) kwa alama '%s'\n", jina); rudisha -1; } @@ -2284,6 +2289,9 @@ N32 kusanya_herufi(N8* raw) { } // Ongeza mpya — badilisha utorokaji wakati wa kunakili + kama (str_idadi >= 1024 || str_buf_wapi + len + 1 >= 16384) { + andika_stderr("KOSA: jedwali la mfuatano halisi (str_*) limejaa (kikomo cha idadi 1024, au bafa ya baiti 16384) — mfuatano huu hautahifadhiwa sahihi\n"); + } kama (str_idadi < 1024 && str_buf_wapi + len + 1 < 16384) { N32 o = str_buf_wapi; N32 j = 0; // faharisi ya chanzo @@ -2735,6 +2743,12 @@ W0 uzalishaji_wito(N32 node, N32 kazi_node) { kama (ast_aina[a] == 45) { hoja_enc[hoja_idadi] = ast_nne[a]; } // HALISI_D: enc iko ast_nne kama (ast_aina[a] == 4) { hoja_enc[hoja_idadi] = ast_nne[a]; } // AST_NAMBARI: enc iko ast_nne (thamani iko ast_thamani) hoja_idadi = hoja_idadi + 1; + } sivyo { + // Ulinzi wa ziada: mkaguzi.swa tayari inakataa wito wenye + // hoja zaidi ya 16 kabla ya kufika hapa (kikomo hiki cha 32 + // hakipaswi kufikiwa kwa kawaida) -- kama ujumbe huu + // umeonekana, njia ya ukaguzi imepitwa mahali fulani. + andika_stderr("KOSA: bafa ya hoja za wito (hoja_nodes/hoja_enc) imejaa (kikomo 32) — hii haipaswi kutokea, mkaguzi anapaswa kuwa amekataa wito huu tayari\n"); } a = ast_tiga[a]; // hoja inayofuata kupitia ast_tiga } @@ -2977,6 +2991,8 @@ W0 uzalishaji_wito(N32 node, N32 kazi_node) { rela_text_off[rela_idadi] = bafa_text_wapi; rela_nje_id[rela_idadi] = nje_id; rela_idadi = rela_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la urekebishaji (rela_*) limejaa (kikomo 65536) — wito wa '%s' hautarekebishwa sahihi\n", callee); } andika_neno4(0); } @@ -3570,6 +3586,8 @@ W0 uzalishaji_achilia(N32 node, N32 kazi_node) { rela_text_off[rela_idadi] = bafa_text_wapi; rela_nje_id[rela_idadi] = nje_id; rela_idadi = rela_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la urekebishaji (rela_*) limejaa (kikomo 65536) — wito wa 'free' hautarekebishwa sahihi\n"); } andika_neno4(0); } @@ -3591,6 +3609,8 @@ W0 uzalishaji_badili(N32 node, N32 kazi_node) { rela_text_off[rela_idadi] = bafa_text_wapi; rela_nje_id[rela_idadi] = nje_id; rela_idadi = rela_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la urekebishaji (rela_*) limejaa (kikomo 65536) — wito wa 'realloc' hautarekebishwa sahihi\n"); } andika_neno4(0); } @@ -4399,6 +4419,10 @@ W0 uzalishaji_anwani_ya(N32 node, N32 kazi_node) { andika_neno4(0); rudisha; } + // MUHIMU: bila ujumbe huu, `&jina_la_kazi` ingekuwa 0 (null) + // KIMYA badala ya anwani halisi — tofauti na kuruka usajili tu + // (kama majedwali mengine), hapa msimbo WA UONGO unazalishwa. + andika_stderr("KOSA: jedwali la anwani za kazi (anwani_kazi_*) limejaa (kikomo 512) kwa '&%s' — anwani itakuwa 0 (null) kimakosa\n", jina); andika_xor_eax_eax(); rudisha; } @@ -5462,6 +5486,9 @@ W0 uzalishaji_kuu(N32 mzizi, N32 hali_exe) { // 0b. Kusanya vigezo vya ulimwengu (pre-scan) N32 gn = ast_kushoto[mzizi]; wakati (gn != -1) { + kama (ast_aina[gn] == 35 && data_ulimwengu_idadi >= 1024) { // AST_TANGAZO_ULIMWENGU + andika_stderr("KOSA: jedwali la data la ulimwengu (data_ulimwengu_*) limejaa (kikomo 1024) — kigezo hiki cha ulimwengu hakitatolewa sahihi\n"); + } kama (ast_aina[gn] == 35 && data_ulimwengu_idadi < 1024) { // AST_TANGAZO_ULIMWENGU N32 name_n = ast_kushoto[gn]; N32 enc = ast_thamani[gn]; // usimbaji wa aina (sasa umejaa!) @@ -5593,6 +5620,8 @@ W0 uzalishaji_kuu(N32 mzizi, N32 hali_exe) { anwani_data_pos[anwani_data_idadi] = bafa_data_wapi; anwani_data_jina[anwani_data_idadi] = ast_pool + ast_jina_off[val]; anwani_data_idadi = anwani_data_idadi + 1; + } sivyo { + andika_stderr("KOSA: jedwali la anwani za data (anwani_data_*) limejaa (kikomo 512)\n"); } N32 k = 0; wakati (k < 8) {