From: Matthias Kramm Date: Tue, 17 Mar 2009 08:33:00 +0000 (+0100) Subject: fixed switch+try/catch problem X-Git-Tag: release-0-9-0~46 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=6b14c68239f98b818a7aacacc49bb7a16bfa7812 fixed switch+try/catch problem --- diff --git a/lib/as3/ok/switchtrycatch.as b/lib/as3/ok/switchtrycatch.as index f21475e..80ce9b9 100644 --- a/lib/as3/ok/switchtrycatch.as +++ b/lib/as3/ok/switchtrycatch.as @@ -6,18 +6,21 @@ package { for(x=0;x<3;x++) { switch(String(x*x)) { case "0": - trace("ok 1/5");break; + trace("ok 1/6");break; case "1": try { - trace("ok 2/5"); + trace("ok 2/6"); throw new Error(); } catch(e:Error) { - trace("ok 3/5"); + trace("ok 3/6"); } + case "2": + trace("ok 4/6"); + break; case "4": - trace("ok 4/5"); + trace("ok 5/6"); case "fallthrough": - trace("ok 5/5"); + trace("ok 6/6"); } } } diff --git a/lib/as3/parser.tab.c b/lib/as3/parser.tab.c index 59cda49..0623611 100644 --- a/lib/as3/parser.tab.c +++ b/lib/as3/parser.tab.c @@ -387,6 +387,8 @@ typedef struct _state { methodstate_t*method; char*exception_name; + + int switch_var; dict_t*vars; } state_t; @@ -673,6 +675,11 @@ static char variable_exists(char*name) } code_t*defaultvalue(code_t*c, classinfo_t*type); +static int alloc_local() +{ + return state->method->variable_count++; +} + static variable_t* new_variable2(const char*name, classinfo_t*type, char init, char maybeslot) { if(maybeslot) { @@ -682,7 +689,7 @@ static variable_t* new_variable2(const char*name, classinfo_t*type, char init, c } NEW(variable_t, v); - v->index = state->method->variable_count++; + v->index = alloc_local(); v->type = type; v->init = init; @@ -1180,7 +1187,6 @@ void check_code_for_break(code_t*c) static void check_constant_against_type(classinfo_t*t, constant_t*c) { - return; #define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name) if(TYPE_IS_NUMBER(t)) { xassert(c->type == CONSTANT_FLOAT @@ -2083,7 +2089,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar) /* Line 273 of skeleton.m4 */ -#line 2087 "parser.tab.c" +#line 2093 "parser.tab.c" #ifdef short # undef short @@ -2496,37 +2502,37 @@ static const yytype_int16 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 2065, 2065, 2067, 2067, 2068, 2069, 2071, 2072, 2073, - 2074, 2075, 2076, 2077, 2078, 2080, 2080, 2081, 2082, 2084, - 2085, 2086, 2087, 2088, 2089, 2090, 2092, 2093, 2095, 2096, - 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, - 2109, 2110, 2111, 2112, 2115, 2116, 2117, 2118, 2119, 2120, - 2121, 2122, 2126, 2127, 2131, 2138, 2142, 2143, 2147, 2148, - 2150, 2151, 2153, 2214, 2215, 2218, 2218, 2237, 2238, 2239, - 2244, 2248, 2253, 2254, 2256, 2276, 2324, 2324, 2343, 2343, - 2358, 2361, 2364, 2367, 2371, 2372, 2373, 2374, 2375, 2376, - 2378, 2389, 2392, 2392, 2421, 2421, 2446, 2446, 2462, 2463, - 2464, 2465, 2473, 2482, 2482, 2531, 2535, 2546, 2558, 2575, - 2576, 2578, 2579, 2581, 2581, 2583, 2583, 2586, 2602, 2619, - 2620, 2621, 2622, 2630, 2631, 2632, 2633, 2634, 2635, 2636, - 2637, 2638, 2639, 2643, 2644, 2646, 2647, 2649, 2650, 2654, - 2652, 2660, 2658, 2667, 2668, 2669, 2670, 2671, 2672, 2673, - 2674, 2676, 2682, 2683, 2684, 2685, 2686, 2687, 2690, 2703, - 2703, 2705, 2705, 2707, 2708, 2710, 2785, 2786, 2788, 2789, - 2790, 2791, 2792, 2794, 2795, 2796, 2797, 2809, 2813, 2819, - 2825, 2833, 2838, 2844, 2852, 2860, 2861, 2862, 2865, 2864, - 2881, 2882, 2884, 2883, 2907, 2926, 2940, 2941, 2943, 2944, - 2946, 2947, 2948, 2957, 2958, 2962, 2963, 2965, 2966, 2967, - 2969, 2973, 2974, 2979, 2980, 3016, 3062, 3083, 3104, 3107, - 3114, 3115, 3116, 3122, 3128, 3130, 3132, 3134, 3136, 3138, - 3140, 3157, 3162, 3165, 3168, 3171, 3174, 3177, 3180, 3183, - 3186, 3190, 3193, 3196, 3199, 3202, 3205, 3208, 3211, 3215, - 3226, 3244, 3249, 3254, 3259, 3264, 3269, 3273, 3277, 3282, - 3286, 3290, 3299, 3308, 3318, 3323, 3335, 3341, 3346, 3352, - 3358, 3362, 3364, 3375, 3384, 3391, 3392, 3394, 3400, 3409, - 3416, 3428, 3434, 3440, 3446, 3452, 3458, 3464, 3470, 3483, - 3494, 3501, 3514, 3541, 3555, 3569, 3583, 3598, 3605, 3612, - 3619, 3626, 3637, 3687, 3792, 3799, 3806, 3813, 3820 + 0, 2071, 2071, 2073, 2073, 2074, 2075, 2077, 2078, 2079, + 2080, 2081, 2082, 2083, 2084, 2086, 2086, 2087, 2088, 2090, + 2091, 2092, 2093, 2094, 2095, 2096, 2098, 2099, 2101, 2102, + 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, + 2115, 2116, 2117, 2118, 2121, 2122, 2123, 2124, 2125, 2126, + 2127, 2128, 2132, 2133, 2137, 2144, 2148, 2149, 2153, 2154, + 2156, 2157, 2159, 2220, 2221, 2224, 2224, 2243, 2244, 2245, + 2250, 2254, 2259, 2260, 2262, 2282, 2330, 2330, 2349, 2349, + 2364, 2367, 2370, 2373, 2377, 2378, 2379, 2380, 2381, 2382, + 2384, 2395, 2398, 2398, 2429, 2429, 2454, 2454, 2470, 2471, + 2472, 2473, 2481, 2490, 2490, 2539, 2543, 2554, 2564, 2581, + 2582, 2584, 2585, 2587, 2587, 2589, 2589, 2592, 2608, 2625, + 2626, 2627, 2628, 2636, 2637, 2638, 2639, 2640, 2641, 2642, + 2643, 2644, 2645, 2649, 2650, 2652, 2653, 2655, 2656, 2660, + 2658, 2666, 2664, 2673, 2674, 2675, 2676, 2677, 2678, 2679, + 2680, 2682, 2688, 2689, 2690, 2691, 2692, 2693, 2696, 2709, + 2709, 2711, 2711, 2713, 2714, 2716, 2791, 2792, 2794, 2795, + 2796, 2797, 2798, 2800, 2801, 2802, 2803, 2815, 2819, 2825, + 2831, 2839, 2844, 2850, 2858, 2866, 2867, 2868, 2871, 2870, + 2887, 2888, 2890, 2889, 2913, 2932, 2946, 2947, 2949, 2950, + 2952, 2953, 2954, 2963, 2964, 2968, 2969, 2971, 2972, 2973, + 2975, 2979, 2980, 2985, 2986, 3022, 3068, 3089, 3110, 3113, + 3120, 3121, 3122, 3128, 3134, 3136, 3138, 3140, 3142, 3144, + 3146, 3163, 3168, 3171, 3174, 3177, 3180, 3183, 3186, 3189, + 3192, 3196, 3199, 3202, 3205, 3208, 3211, 3214, 3217, 3221, + 3232, 3250, 3255, 3260, 3265, 3270, 3275, 3279, 3283, 3288, + 3292, 3296, 3305, 3314, 3324, 3329, 3341, 3347, 3352, 3358, + 3364, 3368, 3370, 3381, 3390, 3397, 3398, 3400, 3406, 3415, + 3422, 3434, 3440, 3446, 3452, 3458, 3464, 3470, 3476, 3489, + 3500, 3507, 3520, 3547, 3561, 3575, 3589, 3604, 3611, 3618, + 3625, 3632, 3643, 3693, 3798, 3805, 3812, 3819, 3826 }; #endif @@ -4330,7 +4336,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2092 "parser.y" +#line 2098 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4341,7 +4347,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2093 "parser.y" +#line 2099 "parser.y" {(yyval.code)=code_new();} } break; @@ -4352,7 +4358,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2095 "parser.y" +#line 2101 "parser.y" {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));} } break; @@ -4363,7 +4369,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2096 "parser.y" +#line 2102 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4374,7 +4380,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2111 "parser.y" +#line 2117 "parser.y" {(yyval.code)=(yyvsp[(2) - (3)].code);} } break; @@ -4385,7 +4391,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2112 "parser.y" +#line 2118 "parser.y" {(yyval.code)=0;} } break; @@ -4396,7 +4402,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2115 "parser.y" +#line 2121 "parser.y" {(yyval.code)=0;} } break; @@ -4407,7 +4413,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2122 "parser.y" +#line 2128 "parser.y" {(yyval.code)=(yyvsp[(3) - (4)].code);} } break; @@ -4418,7 +4424,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2126 "parser.y" +#line 2132 "parser.y" {(yyval.code)=(yyvsp[(1) - (2)].code);} } break; @@ -4429,7 +4435,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2127 "parser.y" +#line 2133 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4440,7 +4446,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2131 "parser.y" +#line 2137 "parser.y" { code_t**cc = &global->init->method->body->code; *cc = code_append(*cc, (yyvsp[(1) - (1)].code)); @@ -4454,7 +4460,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2142 "parser.y" +#line 2148 "parser.y" {(yyval.value)=(yyvsp[(2) - (2)].value);} } break; @@ -4465,7 +4471,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2143 "parser.y" +#line 2149 "parser.y" {(yyval.value).c=abc_pushundefined(0); (yyval.value).t=TYPE_ANY; } @@ -4478,7 +4484,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2147 "parser.y" +#line 2153 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; @@ -4489,7 +4495,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2148 "parser.y" +#line 2154 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; @@ -4500,7 +4506,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2150 "parser.y" +#line 2156 "parser.y" {(yyval.code) = (yyvsp[(1) - (1)].code);} } break; @@ -4511,7 +4517,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2151 "parser.y" +#line 2157 "parser.y" {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));} } break; @@ -4522,7 +4528,7 @@ yyreduce: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2154 "parser.y" +#line 2160 "parser.y" { PASS12 if(variable_exists((yyvsp[(1) - (3)].id))) @@ -4589,7 +4595,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2214 "parser.y" +#line 2220 "parser.y" {(yyval.code) = code_new();} } break; @@ -4600,7 +4606,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2215 "parser.y" +#line 2221 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; @@ -4611,7 +4617,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2218 "parser.y" +#line 2224 "parser.y" {PASS12 new_state();} } break; @@ -4622,7 +4628,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2218 "parser.y" +#line 2224 "parser.y" { (yyval.code) = code_new(); @@ -4650,7 +4656,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2237 "parser.y" +#line 2243 "parser.y" {(yyval.code)=code_new();} } break; @@ -4661,7 +4667,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2244 "parser.y" +#line 2250 "parser.y" { PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),0,1,0); PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0); @@ -4675,7 +4681,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2248 "parser.y" +#line 2254 "parser.y" { PASS12 (yyval.id)=(yyvsp[(1) - (1)].id); @@ -4689,7 +4695,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2253 "parser.y" +#line 2259 "parser.y" {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;} } break; @@ -4700,7 +4706,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2254 "parser.y" +#line 2260 "parser.y" {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;} } break; @@ -4711,7 +4717,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2256 "parser.y" +#line 2262 "parser.y" { if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement"); (yyval.code) = code_new(); @@ -4740,7 +4746,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2276 "parser.y" +#line 2282 "parser.y" { variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id)); if(!var) { @@ -4797,7 +4803,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2324 "parser.y" +#line 2330 "parser.y" {PASS12 new_state();} } break; @@ -4808,7 +4814,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2324 "parser.y" +#line 2330 "parser.y" { (yyval.code) = code_new(); @@ -4836,7 +4842,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2343 "parser.y" +#line 2349 "parser.y" {PASS12 new_state();} } break; @@ -4847,7 +4853,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2343 "parser.y" +#line 2349 "parser.y" { (yyval.code) = code_new(); code_t*loopstart = (yyval.code) = abc_label((yyval.code)); @@ -4871,7 +4877,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2358 "parser.y" +#line 2364 "parser.y" { (yyval.code) = abc___break__(0, ""); } @@ -4884,7 +4890,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2361 "parser.y" +#line 2367 "parser.y" { (yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id)); } @@ -4897,7 +4903,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2364 "parser.y" +#line 2370 "parser.y" { (yyval.code) = abc___continue__(0, ""); } @@ -4910,7 +4916,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2367 "parser.y" +#line 2373 "parser.y" { (yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id)); } @@ -4923,7 +4929,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2371 "parser.y" +#line 2377 "parser.y" {(yyval.code)=0;} } break; @@ -4934,7 +4940,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2372 "parser.y" +#line 2378 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4945,7 +4951,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2373 "parser.y" +#line 2379 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4956,7 +4962,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2374 "parser.y" +#line 2380 "parser.y" {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));} } break; @@ -4967,7 +4973,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2375 "parser.y" +#line 2381 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; @@ -4978,7 +4984,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2376 "parser.y" +#line 2382 "parser.y" {(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));} } break; @@ -4989,9 +4995,9 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2378 "parser.y" +#line 2384 "parser.y" { - (yyval.code) = abc_dup(0); + (yyval.code) = abc_getlocal(0, state->switch_var); (yyval.code) = code_append((yyval.code), (yyvsp[(2) - (4)].value).c); code_t*j = (yyval.code) = abc_ifne((yyval.code), 0); (yyval.code) = code_append((yyval.code), (yyvsp[(4) - (4)].code)); @@ -5010,7 +5016,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2389 "parser.y" +#line 2395 "parser.y" { (yyval.code) = (yyvsp[(3) - (3)].code); } @@ -5023,8 +5029,8 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2392 "parser.y" - {PASS12 new_state();} +#line 2398 "parser.y" + {PASS12 new_state();state->switch_var=alloc_local();} } break; @@ -5034,11 +5040,13 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2392 "parser.y" +#line 2398 "parser.y" { (yyval.code)=(yyvsp[(4) - (8)].value).c; + (yyval.code) = abc_setlocal((yyval.code), state->switch_var); (yyval.code) = code_append((yyval.code), (yyvsp[(7) - (8)].code)); - code_t*out = (yyval.code) = abc_pop((yyval.code)); + + code_t*out = (yyval.code) = abc_kill((yyval.code), state->switch_var); breakjumpsto((yyval.code), (yyvsp[(1) - (8)].id), out); code_t*c = (yyval.code),*lastblock=0; @@ -5070,7 +5078,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2421 "parser.y" +#line 2429 "parser.y" {PASS12 new_state(); state->exception_name=(yyvsp[(3) - (5)].id); PASS1 new_variable((yyvsp[(3) - (5)].id), 0, 0, 0); @@ -5085,7 +5093,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2426 "parser.y" +#line 2434 "parser.y" { namespace_t name_ns = {ACCESS_PACKAGE, ""}; multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)}; @@ -5115,7 +5123,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2446 "parser.y" +#line 2454 "parser.y" {PASS12 new_state();state->exception_name=0;} } break; @@ -5126,7 +5134,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2446 "parser.y" +#line 2454 "parser.y" { (yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code)); if(!(yyvsp[(4) - (5)].code)) { @@ -5151,7 +5159,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2462 "parser.y" +#line 2470 "parser.y" {(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));} } break; @@ -5162,7 +5170,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2463 "parser.y" +#line 2471 "parser.y" {(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));} } break; @@ -5173,7 +5181,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2464 "parser.y" +#line 2472 "parser.y" {(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);} } break; @@ -5184,7 +5192,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2465 "parser.y" +#line 2473 "parser.y" { (yyval.catch_list) = (yyvsp[(1) - (2)].catch_list); (yyval.catch_list).finally = 0; @@ -5202,7 +5210,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2473 "parser.y" +#line 2481 "parser.y" { (yyval.catch_list).l=list_new(); (yyval.catch_list).finally = 0; @@ -5220,7 +5228,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2482 "parser.y" +#line 2490 "parser.y" {PASS12 new_state(); state->method->has_exceptions=1; state->method->late_binding=1;//for invariant scope_code @@ -5234,7 +5242,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2485 "parser.y" +#line 2493 "parser.y" { code_t*out = abc_nop(0); @@ -5287,7 +5295,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2531 "parser.y" +#line 2539 "parser.y" { (yyval.code)=(yyvsp[(2) - (2)].value).c; (yyval.code)=abc_throw((yyval.code)); @@ -5301,7 +5309,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2535 "parser.y" +#line 2543 "parser.y" { if(!state->exception_name) syntaxerror("re-throw only possible within a catch block"); @@ -5319,13 +5327,11 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2546 "parser.y" +#line 2554 "parser.y" { new_state(); if(state->method->has_exceptions) { - char var[32]; - sprintf(var, "#with#_%d", as3_tokencount); - int v = new_variable(var,(yyvsp[(3) - (4)].value).t,0,0); + int v = alloc_local(); state->method->scope_code = abc_getlocal(state->method->scope_code, v); state->method->scope_code = abc_pushwith(state->method->scope_code); (yyval.value_list).number = v; @@ -5341,7 +5347,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2558 "parser.y" +#line 2564 "parser.y" { /* remove getlocal;pushwith from scope code again */ state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code)); @@ -5365,7 +5371,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2576 "parser.y" +#line 2582 "parser.y" {PASS12 (yyval.id)="package";} } break; @@ -5376,7 +5382,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2578 "parser.y" +#line 2584 "parser.y" {PASS12 (yyval.id) = concat3((yyvsp[(1) - (3)].id),".",(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;} } break; @@ -5387,7 +5393,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2579 "parser.y" +#line 2585 "parser.y" {PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));} } break; @@ -5398,7 +5404,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2581 "parser.y" +#line 2587 "parser.y" {PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;} } break; @@ -5409,7 +5415,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2582 "parser.y" +#line 2588 "parser.y" {PASS12 endpackage();(yyval.code)=0;} } break; @@ -5420,7 +5426,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2583 "parser.y" +#line 2589 "parser.y" {PASS12 startpackage("");} } break; @@ -5431,7 +5437,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2584 "parser.y" +#line 2590 "parser.y" {PASS12 endpackage();(yyval.code)=0;} } break; @@ -5442,7 +5448,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2586 "parser.y" +#line 2592 "parser.y" { PASS12 slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name); @@ -5468,7 +5474,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2602 "parser.y" +#line 2608 "parser.y" { PASS12 if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) { @@ -5492,7 +5498,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2619 "parser.y" +#line 2625 "parser.y" {PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;} } break; @@ -5503,7 +5509,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2620 "parser.y" +#line 2626 "parser.y" {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);} } break; @@ -5514,7 +5520,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2621 "parser.y" +#line 2627 "parser.y" {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);} } break; @@ -5525,7 +5531,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2622 "parser.y" +#line 2628 "parser.y" { PASS12 (yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags; @@ -5542,7 +5548,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2630 "parser.y" +#line 2636 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;} } break; @@ -5553,7 +5559,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2631 "parser.y" +#line 2637 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;} } break; @@ -5564,7 +5570,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2632 "parser.y" +#line 2638 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;} } break; @@ -5575,7 +5581,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2633 "parser.y" +#line 2639 "parser.y" {PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;} } break; @@ -5586,7 +5592,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2634 "parser.y" +#line 2640 "parser.y" {PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;} } break; @@ -5597,7 +5603,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2635 "parser.y" +#line 2641 "parser.y" {PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;} } break; @@ -5608,7 +5614,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2636 "parser.y" +#line 2642 "parser.y" {PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;} } break; @@ -5619,7 +5625,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2637 "parser.y" +#line 2643 "parser.y" {PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;} } break; @@ -5630,7 +5636,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2638 "parser.y" +#line 2644 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;} } break; @@ -5641,7 +5647,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2639 "parser.y" +#line 2645 "parser.y" {PASS12 (yyval.flags).flags=FLAG_NAMESPACE; (yyval.flags).ns=(yyvsp[(1) - (1)].id); } @@ -5654,7 +5660,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2643 "parser.y" +#line 2649 "parser.y" {PASS12 (yyval.classinfo)=0;} } break; @@ -5665,7 +5671,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2644 "parser.y" +#line 2650 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);} } break; @@ -5676,7 +5682,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2646 "parser.y" +#line 2652 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();} } break; @@ -5687,7 +5693,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2647 "parser.y" +#line 2653 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);} } break; @@ -5698,7 +5704,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2649 "parser.y" +#line 2655 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();} } break; @@ -5709,7 +5715,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2650 "parser.y" +#line 2656 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);} } break; @@ -5720,7 +5726,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2654 "parser.y" +#line 2660 "parser.y" {PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));} } break; @@ -5731,7 +5737,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2656 "parser.y" +#line 2662 "parser.y" {PASS12 endclass();(yyval.code)=0;} } break; @@ -5742,7 +5748,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2660 "parser.y" +#line 2666 "parser.y" {PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE; startclass(&(yyvsp[(1) - (5)].flags),(yyvsp[(3) - (5)].id),0,(yyvsp[(4) - (5)].classinfo_list));} } @@ -5754,7 +5760,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2663 "parser.y" +#line 2669 "parser.y" {PASS12 endclass();(yyval.code)=0;} } break; @@ -5765,7 +5771,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2676 "parser.y" +#line 2682 "parser.y" { code_t*c = state->cls->static_init->header; c = code_append(c, (yyvsp[(1) - (1)].code)); @@ -5780,7 +5786,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2687 "parser.y" +#line 2693 "parser.y" { syntaxerror("variable declarations not allowed in interfaces"); } @@ -5793,7 +5799,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2690 "parser.y" +#line 2696 "parser.y" { PASS12 (yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC; @@ -5813,7 +5819,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2705 "parser.y" +#line 2711 "parser.y" {setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));} } break; @@ -5824,7 +5830,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2705 "parser.y" +#line 2711 "parser.y" {(yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);} } break; @@ -5835,7 +5841,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2707 "parser.y" +#line 2713 "parser.y" {(yyval.code) = (yyvsp[(1) - (1)].code);} } break; @@ -5846,7 +5852,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2708 "parser.y" +#line 2714 "parser.y" {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));} } break; @@ -5857,7 +5863,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2711 "parser.y" +#line 2717 "parser.y" { int flags = slotstate_flags->flags; namespace_t ns = modifiers2access(slotstate_flags); @@ -5938,7 +5944,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2785 "parser.y" +#line 2791 "parser.y" {(yyval.constant)=0;} } break; @@ -5949,7 +5955,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2786 "parser.y" +#line 2792 "parser.y" {(yyval.constant)=(yyvsp[(2) - (2)].constant);} } break; @@ -5960,7 +5966,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2788 "parser.y" +#line 2794 "parser.y" {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_uint));} } break; @@ -5971,7 +5977,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2789 "parser.y" +#line 2795 "parser.y" {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));} } break; @@ -5982,7 +5988,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2790 "parser.y" +#line 2796 "parser.y" {(yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint));} } break; @@ -5993,7 +5999,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2791 "parser.y" +#line 2797 "parser.y" {(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));} } break; @@ -6004,7 +6010,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2792 "parser.y" +#line 2798 "parser.y" {(yyval.constant) = constant_new_string2((yyvsp[(1) - (1)].str).str,(yyvsp[(1) - (1)].str).len);free((char*)(yyvsp[(1) - (1)].str).str);} } break; @@ -6015,7 +6021,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2794 "parser.y" +#line 2800 "parser.y" {(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));} } break; @@ -6026,7 +6032,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2795 "parser.y" +#line 2801 "parser.y" {(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));} } break; @@ -6037,7 +6043,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2796 "parser.y" +#line 2802 "parser.y" {(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));} } break; @@ -6048,7 +6054,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2797 "parser.y" +#line 2803 "parser.y" { if(!strcmp((yyvsp[(1) - (1)].id), "NaN")) { (yyval.constant) = constant_new_float(__builtin_nan("")); @@ -6066,7 +6072,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2809 "parser.y" +#line 2815 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); @@ -6080,7 +6086,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2813 "parser.y" +#line 2819 "parser.y" { PASS12 (yyval.params)=(yyvsp[(1) - (1)].params); @@ -6094,7 +6100,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2819 "parser.y" +#line 2825 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); @@ -6110,7 +6116,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2825 "parser.y" +#line 2831 "parser.y" { PASS12 (yyval.params) =(yyvsp[(1) - (4)].params); @@ -6126,7 +6132,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2833 "parser.y" +#line 2839 "parser.y" { PASS12 (yyval.params) = (yyvsp[(1) - (3)].params); @@ -6141,7 +6147,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2838 "parser.y" +#line 2844 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); @@ -6156,7 +6162,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2844 "parser.y" +#line 2850 "parser.y" { PASS12 (yyval.param) = rfx_calloc(sizeof(param_t)); @@ -6174,7 +6180,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2852 "parser.y" +#line 2858 "parser.y" { PASS12 (yyval.param) = rfx_calloc(sizeof(param_t)); @@ -6192,7 +6198,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2862 "parser.y" +#line 2868 "parser.y" {PASS12 (yyval.token)=0;} } break; @@ -6203,7 +6209,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2865 "parser.y" +#line 2871 "parser.y" {PASS12 startfunction(&(yyvsp[(1) - (9)].flags),(yyvsp[(3) - (9)].token),(yyvsp[(4) - (9)].id),&(yyvsp[(6) - (9)].params),(yyvsp[(8) - (9)].classinfo));} } break; @@ -6214,7 +6220,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2866 "parser.y" +#line 2872 "parser.y" { PASS1 endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0); @@ -6238,7 +6244,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2882 "parser.y" +#line 2888 "parser.y" {PASS12 (yyval.id)=0;} } break; @@ -6249,7 +6255,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2884 "parser.y" +#line 2890 "parser.y" {PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));} } break; @@ -6260,7 +6266,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2885 "parser.y" +#line 2891 "parser.y" { PASS1 endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0); @@ -6288,7 +6294,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2907 "parser.y" +#line 2913 "parser.y" { PASS1 NEW(unresolvedinfo_t,c); memset(c, 0, sizeof(*c)); @@ -6316,7 +6322,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2926 "parser.y" +#line 2932 "parser.y" { PASS1 NEW(unresolvedinfo_t,c); memset(c, 0, sizeof(*c)); @@ -6339,7 +6345,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2943 "parser.y" +#line 2949 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));} } break; @@ -6350,7 +6356,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2944 "parser.y" +#line 2950 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));} } break; @@ -6361,7 +6367,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2946 "parser.y" +#line 2952 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);} } break; @@ -6372,7 +6378,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2947 "parser.y" +#line 2953 "parser.y" {PASS12 (yyval.classinfo)=registry_getanytype();} } break; @@ -6383,7 +6389,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2948 "parser.y" +#line 2954 "parser.y" {PASS12 (yyval.classinfo)=registry_getanytype();} } break; @@ -6394,7 +6400,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2957 "parser.y" +#line 2963 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);} } break; @@ -6405,7 +6411,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2958 "parser.y" +#line 2964 "parser.y" {PASS12 (yyval.classinfo)=0;} } break; @@ -6416,7 +6422,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2962 "parser.y" +#line 2968 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; @@ -6427,7 +6433,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2963 "parser.y" +#line 2969 "parser.y" {(yyval.value_list)=(yyvsp[(2) - (3)].value_list);} } break; @@ -6438,7 +6444,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2965 "parser.y" +#line 2971 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; @@ -6449,7 +6455,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2969 "parser.y" +#line 2975 "parser.y" {(yyval.value_list).number=1; (yyval.value_list).cc = (yyvsp[(1) - (1)].value).c; } @@ -6462,7 +6468,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2973 "parser.y" +#line 2979 "parser.y" {(yyval.value_list) = (yyvsp[(1) - (2)].value_list);} } break; @@ -6473,7 +6479,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2974 "parser.y" +#line 2980 "parser.y" { (yyval.value_list).number= (yyvsp[(1) - (2)].value_list).number+1; (yyval.value_list).cc = code_append((yyvsp[(1) - (2)].value_list).cc, (yyvsp[(2) - (2)].value).c); @@ -6487,7 +6493,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 2980 "parser.y" +#line 2986 "parser.y" { (yyval.value).c = (yyvsp[(2) - (4)].value).c; if((yyval.value).c->opcode == OPCODE_COERCE_A) (yyval.value).c = code_cutlast((yyval.value).c); @@ -6528,7 +6534,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3016 "parser.y" +#line 3022 "parser.y" { (yyval.value).c = (yyvsp[(1) - (4)].value).c; @@ -6583,7 +6589,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3062 "parser.y" +#line 3068 "parser.y" { if(!state->cls) syntaxerror("super() not allowed outside of a class"); if(!state->method) syntaxerror("super() not allowed outside of a function"); @@ -6613,7 +6619,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3083 "parser.y" +#line 3089 "parser.y" { (yyval.value).c = (yyvsp[(2) - (2)].value).c; if((yyval.value).c->opcode == OPCODE_COERCE_A) { @@ -6643,7 +6649,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3104 "parser.y" +#line 3110 "parser.y" { (yyval.code) = abc_returnvoid(0); } @@ -6656,7 +6662,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3107 "parser.y" +#line 3113 "parser.y" { (yyval.code) = (yyvsp[(2) - (2)].value).c; (yyval.code) = abc_returnvalue((yyval.code)); @@ -6670,7 +6676,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3114 "parser.y" +#line 3120 "parser.y" {(yyval.value)=(yyvsp[(1) - (1)].value);} } break; @@ -6681,7 +6687,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3115 "parser.y" +#line 3121 "parser.y" {(yyval.value) = (yyvsp[(1) - (1)].value);} } break; @@ -6692,7 +6698,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3116 "parser.y" +#line 3122 "parser.y" { (yyval.value).c = (yyvsp[(1) - (3)].value).c; (yyval.value).c = cut_last_push((yyval.value).c); @@ -6708,7 +6714,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3122 "parser.y" +#line 3128 "parser.y" { (yyval.code)=cut_last_push((yyvsp[(1) - (1)].value).c); } @@ -6721,7 +6727,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3128 "parser.y" +#line 3134 "parser.y" {(yyval.value) = (yyvsp[(1) - (1)].value);} } break; @@ -6732,7 +6738,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3132 "parser.y" +#line 3138 "parser.y" {(yyval.value) = (yyvsp[(1) - (1)].value);} } break; @@ -6743,7 +6749,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3134 "parser.y" +#line 3140 "parser.y" {(yyval.value) = (yyvsp[(1) - (1)].value);} } break; @@ -6754,7 +6760,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3136 "parser.y" +#line 3142 "parser.y" {(yyval.value) = (yyvsp[(1) - (1)].value);} } break; @@ -6765,7 +6771,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3140 "parser.y" +#line 3146 "parser.y" { (yyval.value).c = 0; namespace_t ns = {ACCESS_PACKAGE, ""}; @@ -6791,7 +6797,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3157 "parser.y" +#line 3163 "parser.y" {(yyval.value).c = abc_pushbyte(0, (yyvsp[(1) - (1)].number_uint)); //MULTINAME(m, registry_getintclass()); //$$.c = abc_coerce2($$.c, &m); // FIXME @@ -6806,7 +6812,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3162 "parser.y" +#line 3168 "parser.y" {(yyval.value).c = abc_pushshort(0, (yyvsp[(1) - (1)].number_uint)); (yyval.value).t = TYPE_INT; } @@ -6819,7 +6825,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3165 "parser.y" +#line 3171 "parser.y" {(yyval.value).c = abc_pushint(0, (yyvsp[(1) - (1)].number_int)); (yyval.value).t = TYPE_INT; } @@ -6832,7 +6838,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3168 "parser.y" +#line 3174 "parser.y" {(yyval.value).c = abc_pushuint(0, (yyvsp[(1) - (1)].number_uint)); (yyval.value).t = TYPE_UINT; } @@ -6845,7 +6851,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3171 "parser.y" +#line 3177 "parser.y" {(yyval.value).c = abc_pushdouble(0, (yyvsp[(1) - (1)].number_float)); (yyval.value).t = TYPE_FLOAT; } @@ -6858,7 +6864,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3174 "parser.y" +#line 3180 "parser.y" {(yyval.value).c = abc_pushstring2(0, &(yyvsp[(1) - (1)].str));free((char*)(yyvsp[(1) - (1)].str).str); (yyval.value).t = TYPE_STRING; } @@ -6871,7 +6877,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3177 "parser.y" +#line 3183 "parser.y" {(yyval.value).c = abc_pushundefined(0); (yyval.value).t = TYPE_ANY; } @@ -6884,7 +6890,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3180 "parser.y" +#line 3186 "parser.y" {(yyval.value).c = abc_pushtrue(0); (yyval.value).t = TYPE_BOOLEAN; } @@ -6897,7 +6903,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3183 "parser.y" +#line 3189 "parser.y" {(yyval.value).c = abc_pushfalse(0); (yyval.value).t = TYPE_BOOLEAN; } @@ -6910,7 +6916,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3186 "parser.y" +#line 3192 "parser.y" {(yyval.value).c = abc_pushnull(0); (yyval.value).t = TYPE_NULL; } @@ -6923,7 +6929,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3190 "parser.y" +#line 3196 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterequals((yyval.value).c);(yyval.value).c=abc_not((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -6936,7 +6942,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3193 "parser.y" +#line 3199 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterthan((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -6949,7 +6955,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3196 "parser.y" +#line 3202 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterthan((yyval.value).c);(yyval.value).c=abc_not((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -6962,7 +6968,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3199 "parser.y" +#line 3205 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterequals((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -6975,7 +6981,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3202 "parser.y" +#line 3208 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_equals((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -6988,7 +6994,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3205 "parser.y" +#line 3211 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_strictequals((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -7001,7 +7007,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3208 "parser.y" +#line 3214 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_strictequals((yyval.value).c);(yyval.value).c = abc_not((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -7014,7 +7020,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3211 "parser.y" +#line 3217 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_equals((yyval.value).c);(yyval.value).c = abc_not((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; } @@ -7027,7 +7033,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3215 "parser.y" +#line 3221 "parser.y" {(yyval.value).t = join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'O'); (yyval.value).c = (yyvsp[(1) - (3)].value).c; (yyval.value).c = converttype((yyval.value).c, (yyvsp[(1) - (3)].value).t, (yyval.value).t); @@ -7048,7 +7054,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3226 "parser.y" +#line 3232 "parser.y" { (yyval.value).t = join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'A'); /*printf("%08x:\n",$1.t); @@ -7075,7 +7081,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3244 "parser.y" +#line 3250 "parser.y" {(yyval.value).c=(yyvsp[(2) - (2)].value).c; (yyval.value).c = abc_not((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; @@ -7089,7 +7095,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3249 "parser.y" +#line 3255 "parser.y" {(yyval.value).c=(yyvsp[(2) - (2)].value).c; (yyval.value).c = abc_bitnot((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7103,7 +7109,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3254 "parser.y" +#line 3260 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_bitand((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7117,7 +7123,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3259 "parser.y" +#line 3265 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_bitxor((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7131,7 +7137,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3264 "parser.y" +#line 3270 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_bitor((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7145,7 +7151,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3269 "parser.y" +#line 3275 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_rshift((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7159,7 +7165,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3273 "parser.y" +#line 3279 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_urshift((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7173,7 +7179,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3277 "parser.y" +#line 3283 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_lshift((yyval.value).c); (yyval.value).t = TYPE_INT; @@ -7187,7 +7193,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3282 "parser.y" +#line 3288 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_divide((yyval.value).c); (yyval.value).t = TYPE_NUMBER; @@ -7201,7 +7207,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3286 "parser.y" +#line 3292 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_modulo((yyval.value).c); (yyval.value).t = TYPE_NUMBER; @@ -7215,7 +7221,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3290 "parser.y" +#line 3296 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); if(BOTH_INT((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t)) { (yyval.value).c = abc_add_i((yyval.value).c); @@ -7234,7 +7240,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3299 "parser.y" +#line 3305 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) { (yyval.value).c = abc_subtract_i((yyval.value).c); @@ -7253,7 +7259,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3308 "parser.y" +#line 3314 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) { (yyval.value).c = abc_multiply_i((yyval.value).c); @@ -7272,7 +7278,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3318 "parser.y" +#line 3324 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_in((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; @@ -7286,7 +7292,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3323 "parser.y" +#line 3329 "parser.y" {char use_astype=0; // flash player's astype works differently than astypelate if(use_astype && TYPE_IS_CLASS((yyvsp[(3) - (3)].value).t) && (yyvsp[(3) - (3)].value).t->data) { MULTINAME(m, (classinfo_t*)((yyvsp[(3) - (3)].value).t->data)); @@ -7307,7 +7313,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3336 "parser.y" +#line 3342 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c, (yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_instanceof((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; @@ -7321,7 +7327,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3341 "parser.y" +#line 3347 "parser.y" {(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c, (yyvsp[(3) - (3)].value).c); (yyval.value).c = abc_istypelate((yyval.value).c); (yyval.value).t = TYPE_BOOLEAN; @@ -7335,7 +7341,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3346 "parser.y" +#line 3352 "parser.y" { (yyval.value).c = (yyvsp[(3) - (4)].value).c; (yyval.value).c = abc_typeof((yyval.value).c); @@ -7350,7 +7356,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3352 "parser.y" +#line 3358 "parser.y" { (yyval.value).c = cut_last_push((yyvsp[(2) - (2)].value).c); (yyval.value).c = abc_pushundefined((yyval.value).c); @@ -7365,7 +7371,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3358 "parser.y" +#line 3364 "parser.y" { (yyval.value).c = abc_pushundefined(0); (yyval.value).t = TYPE_ANY; } @@ -7378,7 +7384,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3362 "parser.y" +#line 3368 "parser.y" {(yyval.value)=(yyvsp[(2) - (3)].value);} } break; @@ -7389,7 +7395,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3364 "parser.y" +#line 3370 "parser.y" { (yyval.value)=(yyvsp[(2) - (2)].value); if(IS_INT((yyvsp[(2) - (2)].value).t)) { @@ -7409,7 +7415,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3375 "parser.y" +#line 3381 "parser.y" { (yyval.value).c = (yyvsp[(1) - (4)].value).c; (yyval.value).c = code_append((yyval.value).c, (yyvsp[(3) - (4)].value).c); @@ -7427,7 +7433,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3384 "parser.y" +#line 3390 "parser.y" { (yyval.value).c = code_new(); (yyval.value).c = code_append((yyval.value).c, (yyvsp[(2) - (3)].value_list).cc); @@ -7443,7 +7449,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3391 "parser.y" +#line 3397 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; @@ -7454,7 +7460,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3392 "parser.y" +#line 3398 "parser.y" {(yyval.value_list)=(yyvsp[(1) - (1)].value_list);} } break; @@ -7465,7 +7471,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3394 "parser.y" +#line 3400 "parser.y" { (yyval.value_list).cc = 0; (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].value).c); @@ -7481,7 +7487,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3400 "parser.y" +#line 3406 "parser.y" { (yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc; (yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2; @@ -7497,7 +7503,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3409 "parser.y" +#line 3415 "parser.y" { (yyval.value).c = code_new(); (yyval.value).c = code_append((yyval.value).c, (yyvsp[(2) - (3)].value_list).cc); @@ -7513,7 +7519,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3416 "parser.y" +#line 3422 "parser.y" { code_t*c = (yyvsp[(3) - (3)].value).c; if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) { @@ -7534,7 +7540,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3428 "parser.y" +#line 3434 "parser.y" { code_t*c = abc_modulo((yyvsp[(3) - (3)].value).c); c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '%'), (yyvsp[(1) - (3)].value).t); @@ -7550,7 +7556,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3434 "parser.y" +#line 3440 "parser.y" { code_t*c = abc_lshift((yyvsp[(3) - (3)].value).c); c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '<'), (yyvsp[(1) - (3)].value).t); @@ -7566,7 +7572,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3440 "parser.y" +#line 3446 "parser.y" { code_t*c = abc_rshift((yyvsp[(3) - (3)].value).c); c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '>'), (yyvsp[(1) - (3)].value).t); @@ -7582,7 +7588,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3446 "parser.y" +#line 3452 "parser.y" { code_t*c = abc_urshift((yyvsp[(3) - (3)].value).c); c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'U'), (yyvsp[(1) - (3)].value).t); @@ -7598,7 +7604,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3452 "parser.y" +#line 3458 "parser.y" { code_t*c = abc_divide((yyvsp[(3) - (3)].value).c); c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '/'), (yyvsp[(1) - (3)].value).t); @@ -7614,7 +7620,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3458 "parser.y" +#line 3464 "parser.y" { code_t*c = abc_bitor((yyvsp[(3) - (3)].value).c); c=converttype(c, TYPE_INT, (yyvsp[(1) - (3)].value).t); @@ -7630,7 +7636,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3464 "parser.y" +#line 3470 "parser.y" { code_t*c = abc_bitxor((yyvsp[(3) - (3)].value).c); c=converttype(c, TYPE_INT, (yyvsp[(1) - (3)].value).t); @@ -7646,7 +7652,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3470 "parser.y" +#line 3476 "parser.y" { code_t*c = (yyvsp[(3) - (3)].value).c; @@ -7669,7 +7675,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3483 "parser.y" +#line 3489 "parser.y" { code_t*c = (yyvsp[(3) - (3)].value).c; if(TYPE_IS_INT((yyvsp[(1) - (3)].value).t)) { c=abc_subtract_i(c); @@ -7690,7 +7696,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3494 "parser.y" +#line 3500 "parser.y" { code_t*c = 0; c = code_append(c, (yyvsp[(3) - (3)].value).c); c = converttype(c, (yyvsp[(3) - (3)].value).t, (yyvsp[(1) - (3)].value).t); @@ -7706,7 +7712,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3501 "parser.y" +#line 3507 "parser.y" { (yyval.value).t = join_types((yyvsp[(3) - (5)].value).t,(yyvsp[(5) - (5)].value).t,'?'); (yyval.value).c = (yyvsp[(1) - (5)].value).c; @@ -7728,7 +7734,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3514 "parser.y" +#line 3520 "parser.y" { code_t*c = 0; classinfo_t*type = (yyvsp[(1) - (2)].value).t; if(is_getlocal((yyvsp[(1) - (2)].value).c) && (TYPE_IS_INT((yyvsp[(1) - (2)].value).t) || TYPE_IS_NUMBER((yyvsp[(1) - (2)].value).t))) { @@ -7763,7 +7769,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3541 "parser.y" +#line 3547 "parser.y" { code_t*c = 0; classinfo_t*type = (yyvsp[(1) - (2)].value).t; if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) { @@ -7786,7 +7792,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3555 "parser.y" +#line 3561 "parser.y" { code_t*c = 0; classinfo_t*type = (yyvsp[(2) - (2)].value).t; if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) { @@ -7809,7 +7815,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3569 "parser.y" +#line 3575 "parser.y" { code_t*c = 0; classinfo_t*type = (yyvsp[(2) - (2)].value).t; if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) { @@ -7832,7 +7838,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3584 "parser.y" +#line 3590 "parser.y" { if(!state->cls->info) syntaxerror("super keyword not allowed outside a class"); classinfo_t*t = state->cls->info->superclass; @@ -7855,7 +7861,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3598 "parser.y" +#line 3604 "parser.y" { // attribute TODO (yyval.value).c = abc_pushundefined(0); @@ -7871,7 +7877,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3605 "parser.y" +#line 3611 "parser.y" { // child attribute TODO (yyval.value).c = abc_pushundefined(0); @@ -7887,7 +7893,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3612 "parser.y" +#line 3618 "parser.y" { // namespace declaration TODO (yyval.value).c = abc_pushundefined(0); @@ -7903,7 +7909,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3619 "parser.y" +#line 3625 "parser.y" { // descendants TODO (yyval.value).c = abc_pushundefined(0); @@ -7919,7 +7925,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3626 "parser.y" +#line 3632 "parser.y" { // filter TODO (yyval.value).c = abc_pushundefined(0); @@ -7935,7 +7941,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3637 "parser.y" +#line 3643 "parser.y" { (yyval.value).c = (yyvsp[(1) - (3)].value).c; classinfo_t*t = (yyvsp[(1) - (3)].value).t; @@ -7994,7 +8000,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3687 "parser.y" +#line 3693 "parser.y" { PASS1 /* Queue unresolved identifiers for checking against the parent @@ -8106,7 +8112,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3792 "parser.y" +#line 3798 "parser.y" { PASS12 NEW(namespace_decl_t,n); @@ -8123,7 +8129,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3799 "parser.y" +#line 3805 "parser.y" { PASS12 NEW(namespace_decl_t,n); @@ -8140,7 +8146,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3806 "parser.y" +#line 3812 "parser.y" { PASS12 NEW(namespace_decl_t,n); @@ -8157,7 +8163,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3813 "parser.y" +#line 3819 "parser.y" { PASS12 list_append(state->new_namespaces, (yyvsp[(2) - (2)].namespace_decl)); @@ -8173,7 +8179,7 @@ PASS2 if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ -#line 3820 "parser.y" +#line 3826 "parser.y" { PASS12 NEW(namespace_decl_t,n); @@ -8192,7 +8198,7 @@ PASS2 /* Line 1464 of skeleton.m4 */ -#line 8196 "parser.tab.c" +#line 8202 "parser.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); diff --git a/lib/as3/parser.y b/lib/as3/parser.y index 5670793..d6cf02a 100644 --- a/lib/as3/parser.y +++ b/lib/as3/parser.y @@ -363,6 +363,8 @@ typedef struct _state { methodstate_t*method; char*exception_name; + + int switch_var; dict_t*vars; } state_t; @@ -649,6 +651,11 @@ static char variable_exists(char*name) } code_t*defaultvalue(code_t*c, classinfo_t*type); +static int alloc_local() +{ + return state->method->variable_count++; +} + static variable_t* new_variable2(const char*name, classinfo_t*type, char init, char maybeslot) { if(maybeslot) { @@ -658,7 +665,7 @@ static variable_t* new_variable2(const char*name, classinfo_t*type, char init, c } NEW(variable_t, v); - v->index = state->method->variable_count++; + v->index = alloc_local(); v->type = type; v->init = init; @@ -1156,7 +1163,6 @@ void check_code_for_break(code_t*c) static void check_constant_against_type(classinfo_t*t, constant_t*c) { - return; #define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name) if(TYPE_IS_NUMBER(t)) { xassert(c->type == CONSTANT_FLOAT @@ -2376,7 +2382,7 @@ CASE_LIST: CASE {$$=$1;} CASE_LIST: CASE_LIST CASE {$$=code_append($$,$2);} CASE: "case" E ':' MAYBECODE { - $$ = abc_dup(0); + $$ = abc_getlocal(0, state->switch_var); $$ = code_append($$, $2.c); code_t*j = $$ = abc_ifne($$, 0); $$ = code_append($$, $4); @@ -2389,10 +2395,12 @@ CASE: "case" E ':' MAYBECODE { DEFAULT: "default" ':' MAYBECODE { $$ = $3; } -SWITCH : T_SWITCH '(' {PASS12 new_state();} E ')' '{' MAYBE_CASE_LIST '}' { +SWITCH : T_SWITCH '(' {PASS12 new_state();state->switch_var=alloc_local();} E ')' '{' MAYBE_CASE_LIST '}' { $$=$4.c; + $$ = abc_setlocal($$, state->switch_var); $$ = code_append($$, $7); - code_t*out = $$ = abc_pop($$); + + code_t*out = $$ = abc_kill($$, state->switch_var); breakjumpsto($$, $1, out); code_t*c = $$,*lastblock=0; @@ -2546,9 +2554,7 @@ THROW : "throw" %prec prec_none { WITH_HEAD : "with" '(' EXPRESSION ')' { new_state(); if(state->method->has_exceptions) { - char var[32]; - sprintf(var, "#with#_%d", as3_tokencount); - int v = new_variable(var,$3.t,0,0); + int v = alloc_local(); state->method->scope_code = abc_getlocal(state->method->scope_code, v); state->method->scope_code = abc_pushwith(state->method->scope_code); $$.number = v;