Jacek Caban : vbscript: Store source location in instr_t.

Alexandre Julliard julliard at winehq.org
Thu Jan 23 15:48:48 CST 2020


Module: wine
Branch: master
Commit: 7a76856e2d1652c0a7f6dd05dac26524c3d1f276
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7a76856e2d1652c0a7f6dd05dac26524c3d1f276

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jan 22 23:27:20 2020 +0100

vbscript: Store source location in instr_t.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;




More information about the wine-cvs mailing list