Trigger editor having serious problems with "For each"

Status
Not open for further replies.
Level 13
Joined
Apr 15, 2008
Messages
1,063
I noticed the trigger editor has some problems transcribing "for each" loops into galaxy code. Just look at this (4-dimension array initialization)
  • abbbbb
    • Events
    • Local Variables
      • array = 0 <Integer[6][6][6][6]>
      • a = 0 <Integer>
      • b = 0 <Integer>
      • c = 0 <Integer>
      • d = 0 <Integer>
    • Conditions
    • Actions
      • General - For each integer a from 1 to 6 with increment 1, do (Actions)
        • Actions
          • General - For each integer b from 1 to 6 with increment 1, do (Actions)
            • Actions
              • General - For each integer c from 1 to 6 with increment 1, do (Actions)
                • Actions
                  • General - For each integer d from 1 to 6 with increment 1, do (Actions)
                    • Actions
                      • Variable - Set array[a][b][c][d] = 0
JASS:
int init_i;
    int init_j;
    int init_k;
    int init_l;

    int auto20E4D4DC_as;
    int auto20E4D4DC_ae;
    int auto20E4D4DC_ai;
    int autoACDBA2B7_as;
    int autoACDBA2B7_ae;
    int autoACDBA2B7_ai;
    int auto7962326C_as;
    int auto7962326C_ae;
    int auto7962326C_ai;
    int autoD5FC416D_as;
    int autoD5FC416D_ae;
    int autoD5FC416D_ai;

    // Variable Declarations
    int[7][7][7][7] lv_array;
    int lv_a;
    int lv_b;
    int lv_c;
    int lv_d;

    // Variable Initialization
    init_i = 0;
    while (init_i <= 6) {
        init_j = 0;
        while (init_j <= 6) {
            init_k = 0;
            while (init_k <= 6) {
                init_l = 0;
                while (init_l <= 6) {
                    lv_array[init_i][init_j][init_k][init_l] = 0;
                    init_l = init_l + 1;
                }
                init_k = init_k + 1;
            }
            init_j = init_j + 1;
        }
        init_i = init_i + 1;
    }
    lv_a = 0;
    lv_b = 0;
    lv_c = 0;
    lv_d = 0;

    // Actions
    if (!runActions) {
        return true;
    }

    auto20E4D4DC_as = 1;
    auto20E4D4DC_ae = 6;
    auto20E4D4DC_ai = 1;
    lv_a = auto20E4D4DC_as;
    if (auto20E4D4DC_ai > 0 || (auto20E4D4DC_ai == 0 && auto20E4D4DC_as < auto20E4D4DC_ae)) {
        while (lv_a <= auto20E4D4DC_ae) {
            autoACDBA2B7_as = 1;
            autoACDBA2B7_ae = 6;
            autoACDBA2B7_ai = 1;
            lv_b = autoACDBA2B7_as;
            if (autoACDBA2B7_ai > 0 || (autoACDBA2B7_ai == 0 && autoACDBA2B7_as < autoACDBA2B7_ae)) {
                while (lv_b <= autoACDBA2B7_ae) {
                    auto7962326C_as = 1;
                    auto7962326C_ae = 6;
                    auto7962326C_ai = 1;
                    lv_c = auto7962326C_as;
                    if (auto7962326C_ai > 0 || (auto7962326C_ai == 0 && auto7962326C_as < auto7962326C_ae)) {
                        while (lv_c <= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    else if (auto7962326C_ai < 0 || (auto7962326C_ai == 0 && auto7962326C_ae < auto7962326C_as)) {
                        while (lv_c >= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    lv_b = lv_b + autoACDBA2B7_ai;
                }
            }
            else if (autoACDBA2B7_ai < 0 || (autoACDBA2B7_ai == 0 && autoACDBA2B7_ae < autoACDBA2B7_as)) {
                while (lv_b >= autoACDBA2B7_ae) {
                    auto7962326C_as = 1;
                    auto7962326C_ae = 6;
                    auto7962326C_ai = 1;
                    lv_c = auto7962326C_as;
                    if (auto7962326C_ai > 0 || (auto7962326C_ai == 0 && auto7962326C_as < auto7962326C_ae)) {
                        while (lv_c <= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    else if (auto7962326C_ai < 0 || (auto7962326C_ai == 0 && auto7962326C_ae < auto7962326C_as)) {
                        while (lv_c >= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    lv_b = lv_b + autoACDBA2B7_ai;
                }
            }
            lv_a = lv_a + auto20E4D4DC_ai;
        }
    }
    else if (auto20E4D4DC_ai < 0 || (auto20E4D4DC_ai == 0 && auto20E4D4DC_ae < auto20E4D4DC_as)) {
        while (lv_a >= auto20E4D4DC_ae) {
            autoACDBA2B7_as = 1;
            autoACDBA2B7_ae = 6;
            autoACDBA2B7_ai = 1;
            lv_b = autoACDBA2B7_as;
            if (autoACDBA2B7_ai > 0 || (autoACDBA2B7_ai == 0 && autoACDBA2B7_as < autoACDBA2B7_ae)) {
                while (lv_b <= autoACDBA2B7_ae) {
                    auto7962326C_as = 1;
                    auto7962326C_ae = 6;
                    auto7962326C_ai = 1;
                    lv_c = auto7962326C_as;
                    if (auto7962326C_ai > 0 || (auto7962326C_ai == 0 && auto7962326C_as < auto7962326C_ae)) {
                        while (lv_c <= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    else if (auto7962326C_ai < 0 || (auto7962326C_ai == 0 && auto7962326C_ae < auto7962326C_as)) {
                        while (lv_c >= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    lv_b = lv_b + autoACDBA2B7_ai;
                }
            }
            else if (autoACDBA2B7_ai < 0 || (autoACDBA2B7_ai == 0 && autoACDBA2B7_ae < autoACDBA2B7_as)) {
                while (lv_b >= autoACDBA2B7_ae) {
                    auto7962326C_as = 1;
                    auto7962326C_ae = 6;
                    auto7962326C_ai = 1;
                    lv_c = auto7962326C_as;
                    if (auto7962326C_ai > 0 || (auto7962326C_ai == 0 && auto7962326C_as < auto7962326C_ae)) {
                        while (lv_c <= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    else if (auto7962326C_ai < 0 || (auto7962326C_ai == 0 && auto7962326C_ae < auto7962326C_as)) {
                        while (lv_c >= auto7962326C_ae) {
                            autoD5FC416D_as = 1;
                            autoD5FC416D_ae = 6;
                            autoD5FC416D_ai = 1;
                            lv_d = autoD5FC416D_as;
                            if (autoD5FC416D_ai > 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_as < autoD5FC416D_ae)) {
                                while (lv_d <= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            else if (autoD5FC416D_ai < 0 || (autoD5FC416D_ai == 0 && autoD5FC416D_ae < autoD5FC416D_as)) {
                                while (lv_d >= autoD5FC416D_ae) {
                                    lv_array[lv_a][lv_b][lv_c][lv_d] = 0;
                                    lv_d = lv_d + autoD5FC416D_ai;
                                }
                            }
                            lv_c = lv_c + auto7962326C_ai;
                        }
                    }
                    lv_b = lv_b + autoACDBA2B7_ai;
                }
            }
            lv_a = lv_a + auto20E4D4DC_ai;
        }
    }
:grin:
 
Level 13
Joined
Apr 15, 2008
Messages
1,063
Well yes, they are initialized, this was an example.
Problem is, that each "for each" loop is translated as an IF and two different loops, depending on what the step was (whether it was negative or positive), the condition is either <= or >=. That is quite logical when you don't know, what the step is going to be, but here, there are fixed values everywhere.
So what happens here is that each loop effectively doubles the code inside it. If you looked for the array[a][c][d] line, you'll find 16 of them :grin:

What I don't understand is why "for each" loops require you to specify a variable, when it creates a completely new one and it won't use the specified variable even once!
 
Status
Not open for further replies.
Top