328 void verify_iinc (u2 index, StackMapFrame* current_frame, TRAPS); 329 330 bool name_in_supers(Symbol* ref_name, instanceKlassHandle current); 331 332 VerificationType object_type() const; 333 334 instanceKlassHandle _klass; // the class being verified 335 methodHandle _method; // current method being verified 336 VerificationType _this_type; // the verification type of the current class 337 338 // Some recursive calls from the verifier to the name resolver 339 // can cause the current class to be re-verified and rewritten. 340 // If this happens, the original verification should not continue, 341 // because constant pool indexes will have changed. 342 // The rewriter is preceded by the verifier. If the verifier throws 343 // an error, rewriting is prevented. Also, rewriting always precedes 344 // bytecode execution or compilation. Thus, is_rewritten implies 345 // that a class has been verified and prepared for execution. 346 bool was_recursively_verified() { return _klass->is_rewritten(); } 347 348 public: 349 enum { 350 BYTECODE_OFFSET = 1, 351 NEW_OFFSET = 2 352 }; 353 354 // constructor 355 ClassVerifier(instanceKlassHandle klass, TRAPS); 356 357 // destructor 358 ~ClassVerifier(); 359 360 Thread* thread() { return _thread; } 361 methodHandle method() { return _method; } 362 instanceKlassHandle current_class() const { return _klass; } 363 VerificationType current_type() const { return _this_type; } 364 365 // Verifies the class. If a verify or class file format error occurs, 366 // the '_exception_name' symbols will set to the exception name and 367 // the message_buffer will be filled in with the exception message. | 328 void verify_iinc (u2 index, StackMapFrame* current_frame, TRAPS); 329 330 bool name_in_supers(Symbol* ref_name, instanceKlassHandle current); 331 332 VerificationType object_type() const; 333 334 instanceKlassHandle _klass; // the class being verified 335 methodHandle _method; // current method being verified 336 VerificationType _this_type; // the verification type of the current class 337 338 // Some recursive calls from the verifier to the name resolver 339 // can cause the current class to be re-verified and rewritten. 340 // If this happens, the original verification should not continue, 341 // because constant pool indexes will have changed. 342 // The rewriter is preceded by the verifier. If the verifier throws 343 // an error, rewriting is prevented. Also, rewriting always precedes 344 // bytecode execution or compilation. Thus, is_rewritten implies 345 // that a class has been verified and prepared for execution. 346 bool was_recursively_verified() { return _klass->is_rewritten(); } 347 348 bool is_same_or_direct_interface(instanceKlassHandle klass, 349 VerificationType klass_type, VerificationType ref_class_type); 350 351 public: 352 enum { 353 BYTECODE_OFFSET = 1, 354 NEW_OFFSET = 2 355 }; 356 357 // constructor 358 ClassVerifier(instanceKlassHandle klass, TRAPS); 359 360 // destructor 361 ~ClassVerifier(); 362 363 Thread* thread() { return _thread; } 364 methodHandle method() { return _method; } 365 instanceKlassHandle current_class() const { return _klass; } 366 VerificationType current_type() const { return _this_type; } 367 368 // Verifies the class. If a verify or class file format error occurs, 369 // the '_exception_name' symbols will set to the exception name and 370 // the message_buffer will be filled in with the exception message. |