Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 jit/object-bc.c          |   14 ++++++++++++--
 test/jit/bc-test-utils.c |    6 ++++--
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/jit/object-bc.c b/jit/object-bc.c
index 13c3afc..3e252c8 100644
--- a/jit/object-bc.c
+++ b/jit/object-bc.c
@@ -486,17 +486,22 @@ int convert_checkcast(struct parse_context *ctx)
 
 int convert_monitor_enter(struct parse_context *ctx)
 {
+       struct expression *nullcheck;
        struct expression *exp;
        struct statement *stmt;
 
        exp = stack_pop(ctx->bb->mimic_stack);
 
+       nullcheck = null_check_expr(exp);
+       if (!nullcheck)
+               return -ENOMEM;
+
        stmt = alloc_statement(STMT_MONITOR_ENTER);
        if (!stmt)
                return -ENOMEM;
 
        expr_get(exp);
-       stmt->expression = &exp->node;
+       stmt->expression = &nullcheck->node;
        convert_statement(ctx, stmt);
 
        return 0;
@@ -504,17 +509,22 @@ int convert_monitor_enter(struct parse_context *ctx)
 
 int convert_monitor_exit(struct parse_context *ctx)
 {
+       struct expression *nullcheck;
        struct expression *exp;
        struct statement *stmt;
 
        exp = stack_pop(ctx->bb->mimic_stack);
 
+       nullcheck = null_check_expr(exp);
+       if (!nullcheck)
+               return -ENOMEM;
+
        stmt = alloc_statement(STMT_MONITOR_EXIT);
        if (!stmt)
                return -ENOMEM;
 
        expr_get(exp);
-       stmt->expression = &exp->node;
+       stmt->expression = &nullcheck->node;
        convert_statement(ctx, stmt);
 
        return 0;
diff --git a/test/jit/bc-test-utils.c b/test/jit/bc-test-utils.c
index b93dec3..5b6c938 100644
--- a/test/jit/bc-test-utils.c
+++ b/test/jit/bc-test-utils.c
@@ -236,14 +236,16 @@ void assert_monitor_enter_stmt(struct expression 
*expected,
                               struct statement *actual)
 {
        assert_int_equals(STMT_MONITOR_ENTER, stmt_type(actual));
-       assert_value_expr(J_REFERENCE, expected->value, actual->expression);
+       assert_nullcheck_value_expr(J_REFERENCE, expected->value,
+                                   actual->expression);
 }
 
 void assert_monitor_exit_stmt(struct expression *expected,
                              struct statement *actual)
 {
        assert_int_equals(STMT_MONITOR_EXIT, stmt_type(actual));
-       assert_value_expr(J_REFERENCE, expected->value, actual->expression);
+       assert_nullcheck_value_expr(J_REFERENCE, expected->value,
+                                   actual->expression);
 }
 
 void assert_checkcast_stmt(struct expression *expected,
-- 
1.6.0.6


------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to