Signed-off-by: Tomek Grabiec <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel