jscript: Get rid of no longer needed no_fallback hack.

This commit is contained in:
Jacek Caban 2011-12-28 12:07:06 +01:00 committed by Alexandre Julliard
parent c5c2276a9f
commit 8f8c852897
2 changed files with 4 additions and 35 deletions

View File

@ -49,8 +49,6 @@ struct _compiler_ctx_t {
unsigned labels_cnt;
statement_ctx_t *stat_ctx;
BOOL no_fallback;
};
static const struct {
@ -483,9 +481,6 @@ static HRESULT compile_interp_fallback(compiler_ctx_t *ctx, statement_t *stat)
{
unsigned instr;
if(ctx->no_fallback)
return E_NOTIMPL;
instr = push_instr(ctx, OP_tree);
if(instr == -1)
return E_OUTOFMEMORY;
@ -1021,7 +1016,6 @@ static HRESULT compile_while_statement(compiler_ctx_t *ctx, while_statement_t *s
{
statement_ctx_t stat_ctx = {0, FALSE, FALSE};
unsigned off_backup, jmp_off;
BOOL prev_no_fallback;
HRESULT hres;
off_backup = ctx->code_off;
@ -1055,10 +1049,7 @@ static HRESULT compile_while_statement(compiler_ctx_t *ctx, while_statement_t *s
jmp_off = ctx->code_off;
}
prev_no_fallback = ctx->no_fallback;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &stat_ctx, stat->statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = while_statement_eval;
@ -1094,7 +1085,6 @@ static HRESULT compile_for_statement(compiler_ctx_t *ctx, for_statement_t *stat)
{
statement_ctx_t stat_ctx = {0, FALSE, FALSE};
unsigned off_backup, expr_off;
BOOL prev_no_fallback;
HRESULT hres;
off_backup = ctx->code_off;
@ -1140,10 +1130,7 @@ static HRESULT compile_for_statement(compiler_ctx_t *ctx, for_statement_t *stat)
if(push_instr(ctx, OP_pop) == -1)
return E_OUTOFMEMORY;
prev_no_fallback = ctx->no_fallback;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &stat_ctx, stat->statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = for_statement_eval;
@ -1178,7 +1165,6 @@ static HRESULT compile_forin_statement(compiler_ctx_t *ctx, forin_statement_t *s
{
statement_ctx_t stat_ctx = {4, FALSE, FALSE};
unsigned off_backup = ctx->code_off;
BOOL prev_no_fallback;
HRESULT hres;
if(stat->variable) {
@ -1229,10 +1215,7 @@ static HRESULT compile_forin_statement(compiler_ctx_t *ctx, forin_statement_t *s
if(FAILED(hres))
return E_OUTOFMEMORY;
prev_no_fallback = ctx->no_fallback;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &stat_ctx, stat->statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = forin_statement_eval;
@ -1331,7 +1314,6 @@ static HRESULT compile_with_statement(compiler_ctx_t *ctx, with_statement_t *sta
{
statement_ctx_t stat_ctx = {0, TRUE, FALSE, -1, -1};
unsigned off_backup;
BOOL prev_no_fallback;
HRESULT hres;
off_backup = ctx->code_off;
@ -1343,10 +1325,7 @@ static HRESULT compile_with_statement(compiler_ctx_t *ctx, with_statement_t *sta
if(push_instr(ctx, OP_push_scope) == -1)
return E_OUTOFMEMORY;
prev_no_fallback = ctx->no_fallback;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &stat_ctx, stat->statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = with_statement_eval;
@ -1370,7 +1349,6 @@ static HRESULT compile_switch_statement(compiler_ctx_t *ctx, switch_statement_t
statement_t *stat_iter;
case_clausule_t *iter;
unsigned off_backup;
BOOL prev_no_fallback;
HRESULT hres;
off_backup = ctx->code_off;
@ -1436,10 +1414,7 @@ static HRESULT compile_switch_statement(compiler_ctx_t *ctx, switch_statement_t
instr_ptr(ctx, iter->expr ? case_jmps[i++] : default_jmp)->arg1.uint = ctx->code_off;
for(stat_iter = iter->stat; stat_iter && (!iter->next || iter->next->stat != stat_iter); stat_iter = stat_iter->next) {
prev_no_fallback = ctx->no_fallback;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &stat_ctx, stat_iter);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = switch_statement_eval;
@ -1487,12 +1462,10 @@ static HRESULT compile_try_statement(compiler_ctx_t *ctx, try_statement_t *stat)
statement_ctx_t try_ctx = {0, FALSE, TRUE, -1, -1}, catch_ctx = {0, TRUE, FALSE, -1, -1};
statement_ctx_t finally_ctx = {2, FALSE, FALSE, -1, -1};
unsigned off_backup, push_except;
BOOL prev_no_fallback;
BSTR ident;
HRESULT hres;
off_backup = ctx->code_off;
prev_no_fallback = ctx->no_fallback;
push_except = push_instr(ctx, OP_push_except);
if(push_except == -1)
@ -1511,9 +1484,7 @@ static HRESULT compile_try_statement(compiler_ctx_t *ctx, try_statement_t *stat)
if(!stat->catch_block)
try_ctx.stack_use = 2;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &try_ctx, stat->try_statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = try_statement_eval;
@ -1534,9 +1505,7 @@ static HRESULT compile_try_statement(compiler_ctx_t *ctx, try_statement_t *stat)
instr_ptr(ctx, push_except)->arg1.uint = ctx->code_off;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, &catch_ctx, stat->catch_block->statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = try_statement_eval;
@ -1558,9 +1527,7 @@ static HRESULT compile_try_statement(compiler_ctx_t *ctx, try_statement_t *stat)
if(push_instr(ctx, OP_pop) == -1)
return E_OUTOFMEMORY;
ctx->no_fallback = TRUE;
hres = compile_statement(ctx, stat->catch_block ? NULL : &finally_ctx, stat->finally_statement);
ctx->no_fallback = prev_no_fallback;
if(hres == E_NOTIMPL) {
ctx->code_off = off_backup;
stat->stat.eval = try_statement_eval;

View File

@ -3265,10 +3265,12 @@ HRESULT compiled_statement_eval(script_ctx_t *ctx, statement_t *stat, return_typ
exec_ctx->ei = prev_ei;
exec_ctx->except_frame = prev_except_frame;
if(FAILED(hres)) {
stack_popn(exec_ctx, exec_ctx->top-prev_top);
if(FAILED(hres) || rt->type != RT_NORMAL) {
while(exec_ctx->scope_chain != prev_scope)
scope_pop(&exec_ctx->scope_chain);
}
if(FAILED(hres)) {
stack_popn(exec_ctx, exec_ctx->top-prev_top);
return hres;
}