Module: wine Branch: master Commit: 7a76856e2d1652c0a7f6dd05dac26524c3d1f276 URL: https://source.winehq.org/git/wine.git/?a=commit;h=7a76856e2d1652c0a7f6dd05d...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Jan 22 23:27:20 2020 +0100
vbscript: Store source location in instr_t.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/vbscript/compile.c | 8 ++++++++ dlls/vbscript/vbscript.h | 1 + 2 files changed, 9 insertions(+)
diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c index 4a1f1a5c6a..6e86bb07d0 100644 --- a/dlls/vbscript/compile.c +++ b/dlls/vbscript/compile.c @@ -44,6 +44,7 @@ typedef struct { unsigned instr_size; vbscode_t *code;
+ unsigned loc; statement_ctx_t *stat_ctx;
unsigned *labels; @@ -162,6 +163,7 @@ static unsigned push_instr(compile_ctx_t *ctx, vbsop_t op) }
ctx->code->instrs[ctx->instr_cnt].op = op; + ctx->code->instrs[ctx->instr_cnt].loc = ctx->loc; return ctx->instr_cnt++; }
@@ -630,6 +632,8 @@ static HRESULT compile_if_statement(compile_ctx_t *ctx, if_statement_t *stat) for(elseif_decl = stat->elseifs; elseif_decl; elseif_decl = elseif_decl->next) { instr_ptr(ctx, cnd_jmp)->arg1.uint = ctx->instr_cnt;
+ ctx->loc = elseif_decl->loc; + hres = compile_expression(ctx, elseif_decl->expr); if(FAILED(hres)) return hres; @@ -723,6 +727,7 @@ static HRESULT compile_dowhile_statement(compile_ctx_t *ctx, while_statement_t * if(FAILED(hres)) return hres;
+ ctx->loc = stat->stat.loc; if(stat->expr) { hres = compile_expression(ctx, stat->expr); if(FAILED(hres)) @@ -778,6 +783,7 @@ static HRESULT compile_foreach_statement(compile_ctx_t *ctx, foreach_statement_t return hres;
/* We need a separated enumnext here, because we need to jump out of the loop on exception. */ + ctx->loc = stat->stat.loc; hres = push_instr_uint_bstr(ctx, OP_enumnext, loop_ctx.for_end_label, stat->identifier); if(FAILED(hres)) return hres; @@ -1295,6 +1301,8 @@ static HRESULT compile_statement(compile_ctx_t *ctx, statement_ctx_t *stat_ctx, }
while(stat) { + ctx->loc = stat->loc; + switch(stat->type) { case STAT_ASSIGN: hres = compile_assign_statement(ctx, (assign_statement_t*)stat, FALSE); diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h index 19431e23c3..d8b571b7d1 100644 --- a/dlls/vbscript/vbscript.h +++ b/dlls/vbscript/vbscript.h @@ -294,6 +294,7 @@ typedef union {
typedef struct { vbsop_t op; + unsigned loc; instr_arg_t arg1; instr_arg_t arg2; } instr_t;