< prev index next >

src/hotspot/share/runtime/javaCalls.hpp

Print this page
rev 52749 : Bootstrap method consolidation
* clean up and simplify JDK support code for BSM invocation
* simplify JVM bootstrap handshake: use BootstrapCallInfo only
* remove unused JVM paths and data fields
* move bootstrap argument processing from MethodHandleNatives to ConstantPool
* remove ConstantGroup; merge argument access into BootstrapCallInfo
* adjust BSM argument access: remove copyArguments, add argumentRef API
* add metadata-free BSM modes, including symbolic arguments from CP

@@ -161,38 +161,48 @@
     value_state_handle,
     value_state_jobject,
     value_state_limit
   };
 
+  void size_check(int words = 1) {
+    assert(_size + (words-1) < _max_size, "oob: increase max_size argument to JavaCallArguments");
+  }
+
   inline void push_oop(Handle h) {
+    size_check();
     _value_state[_size] = value_state_handle;
     _size = push_oop_impl(h.raw_value(), _size);
   }
 
   inline void push_jobject(jobject h) {
+    size_check();
     _value_state[_size] = value_state_jobject;
     _size = push_oop_impl(h, _size);
   }
 
   inline void push_int(int i) {
+    size_check();
     _value_state[_size] = value_state_primitive;
     JNITypes::put_int(i, _value, _size);
   }
 
   inline void push_double(double d) {
+    size_check(2);
     _value_state[_size] = value_state_primitive;
     _value_state[_size + 1] = value_state_primitive;
     JNITypes::put_double(d, _value, _size);
   }
 
   inline void push_long(jlong l) {
+    size_check(2);
     _value_state[_size] = value_state_primitive;
     _value_state[_size + 1] = value_state_primitive;
     JNITypes::put_long(l, _value, _size);
   }
 
   inline void push_float(float f) {
+    size_check();
     _value_state[_size] = value_state_primitive;
     JNITypes::put_float(f, _value, _size);
   }
 
   // receiver

@@ -208,10 +218,11 @@
     assert(_start_at_zero == false, "can only be called once");
     _start_at_zero = true;
     _value_state--;
     _value--;
     _size++;
+    DEBUG_ONLY(_max_size++);
     _value_state[0] = value_state_handle;
     push_oop_impl(h.raw_value(), 0);
   }
 
   // Converts all Handles to oops, and returns a reference to parameter vector
< prev index next >