40 // | monitor 0 (maybe) |
41 // | ... |
42 // | interpreter state |
43 // | ... |
44 // | frame_type |
45 // | next_frame | high addresses
46 // +--------------------+ ------------------
47 // | ... |
48
49 class InterpreterFrame : public ZeroFrame {
50 friend class AbstractInterpreter;
51
52 private:
53 InterpreterFrame() : ZeroFrame() {
54 ShouldNotCallThis();
55 }
56
57 protected:
58 enum Layout {
59 istate_off = jf_header_words +
60 (align_size_up_(sizeof(BytecodeInterpreter),
61 wordSize) >> LogBytesPerWord) - 1,
62 header_words
63 };
64
65 public:
66 static InterpreterFrame *build(Method* const method, TRAPS);
67 static InterpreterFrame *build(int size, TRAPS);
68
69 public:
70 interpreterState interpreter_state() const {
71 return (interpreterState) addr_of_word(istate_off);
72 }
73
74 public:
75 void identify_word(int frame_index,
76 int offset,
77 char* fieldbuf,
78 char* valuebuf,
79 int buflen) const;
80 };
|
40 // | monitor 0 (maybe) |
41 // | ... |
42 // | interpreter state |
43 // | ... |
44 // | frame_type |
45 // | next_frame | high addresses
46 // +--------------------+ ------------------
47 // | ... |
48
49 class InterpreterFrame : public ZeroFrame {
50 friend class AbstractInterpreter;
51
52 private:
53 InterpreterFrame() : ZeroFrame() {
54 ShouldNotCallThis();
55 }
56
57 protected:
58 enum Layout {
59 istate_off = jf_header_words +
60 (align_up_(sizeof(BytecodeInterpreter),
61 wordSize) >> LogBytesPerWord) - 1,
62 header_words
63 };
64
65 public:
66 static InterpreterFrame *build(Method* const method, TRAPS);
67 static InterpreterFrame *build(int size, TRAPS);
68
69 public:
70 interpreterState interpreter_state() const {
71 return (interpreterState) addr_of_word(istate_off);
72 }
73
74 public:
75 void identify_word(int frame_index,
76 int offset,
77 char* fieldbuf,
78 char* valuebuf,
79 int buflen) const;
80 };
|