/* src/vm/jit/parse.c - parser for JavaVM to intermediate code translation
- Copyright (C) 1996-2005, 2006, 2007, 2008
+ Copyright (C) 1996-2011
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
#include "vm/types.h"
-#include "mm/memory.h"
+#include "mm/memory.hpp"
#include "native/native.hpp"
#include "threads/lock.hpp"
-#include "toolbox/logging.h"
+#include "toolbox/logging.hpp"
#include "vm/jit/builtin.hpp"
#include "vm/exceptions.hpp"
#include "vm/global.h"
-#include "vm/linker.h"
+#include "vm/linker.hpp"
#include "vm/loader.hpp"
#include "vm/options.h"
#include "vm/resolve.hpp"
s_count += bytecode[opcode].slots;
+ /* Generate a breakpoint instruction right before the actual
+ instruction, if the method contains a breakpoint at the
+ current bytecode index. */
+
+ if (m->breakpoints != NULL && m->breakpoints->contains(bcindex)) {
+ INSTRUCTIONS_CHECK(1);
+ OP_PREPARE_ZEROFLAGS(ICMD_BREAKPOINT);
+ iptr->sx.val.anyptr = m->breakpoints->get_breakpoint(bcindex);
+ PINC;
+ }
+
/* We check here for the space of 1 instruction in the
instruction array. If an opcode is converted to more than
1 instruction, this is checked in the corresponding
md = fmi->parseddesc.md;
- if (md->params == NULL)
- if (!descriptor_params_from_paramtypes(md, ACC_STATIC))
- return false;
+ descriptor_params_from_paramtypes(md, ACC_STATIC);
goto invoke_method;
md = fmi->parseddesc.md;
- if (md->params == NULL)
- if (!descriptor_params_from_paramtypes(md, 0))
- return false;
+ descriptor_params_from_paramtypes(md, 0);
invoke_method:
code_unflag_leafmethod(code);
(opcode == BC_invokestatic),
(opcode == BC_invokespecial));
- if (um == NULL)
- return false;
-
/* store the unresolved_method pointer */
iptr->sx.s23.s3.um = um;