X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=nxtOSEK%2Flejos_nxj%2Fsrc%2Fnxtvm%2Fjavavm%2Fop_other.hc;fp=nxtOSEK%2Flejos_nxj%2Fsrc%2Fnxtvm%2Fjavavm%2Fop_other.hc;h=f3fff190a52d4cea02f5e4a53e52ff6a8aef20c5;hb=02b55ed885bb3a3127d172ffe12a89eef34ef839;hp=3868e6f0b6a6b963cf08d91dc690cc82e8985fa6;hpb=815664f1648545c25bb41fd4c99117bf488c7735;p=nxt-jsp%2Flejos_nxj.git diff --git a/nxtOSEK/lejos_nxj/src/nxtvm/javavm/op_other.hc b/nxtOSEK/lejos_nxj/src/nxtvm/javavm/op_other.hc index 3868e6f..f3fff19 100644 --- a/nxtOSEK/lejos_nxj/src/nxtvm/javavm/op_other.hc +++ b/nxtOSEK/lejos_nxj/src/nxtvm/javavm/op_other.hc @@ -5,17 +5,32 @@ case OP_ATHROW: tempStackWord = pop_ref(); if (tempStackWord == JNULL) + goto LABEL_NULLPTR_EXCEPTION; + thrownException = word2obj (tempStackWord); + goto LABEL_THROW_EXCEPTION; + +case OP_MONITORENTER: { - throw_exception (nullPointerException); - goto LABEL_ENGINELOOP; + Object *obj = word2obj(pop_ref()); + SAVE_REGS(); + enter_monitor (currentThread, obj); + LOAD_REGS(); } - throw_exception (word2obj (tempStackWord)); - goto LABEL_ENGINELOOP; -case OP_MONITORENTER: - enter_monitor (currentThread, word2obj(pop_ref())); goto LABEL_ENGINELOOP; + case OP_MONITOREXIT: - exit_monitor (currentThread, word2obj(pop_ref())); + { + Object *obj = word2obj(pop_ref()); + SAVE_REGS(); + exit_monitor (currentThread, obj); + LOAD_REGS(); + } + goto LABEL_ENGINELOOP; + +LABEL_THROW_EXCEPTION: + SAVE_REGS(); + throw_exception( thrownException); + LOAD_REGS(); goto LABEL_ENGINELOOP; // Notes: