Mercurial > hg > truffle
comparison src/share/vm/oops/klass.cpp @ 431:a45484ea312d
6653858: dynamic languages need to be able to load anonymous classes
Summary: low-level privileged sun.misc.Unsafe.defineAnonymousClass
Reviewed-by: kvn
author | jrose |
---|---|
date | Wed, 12 Nov 2008 22:33:26 -0800 |
parents | d1605aabd0a1 |
children | 98cb887364d3 |
comparison
equal
deleted
inserted
replaced
430:4d20a3aaf1ab | 431:a45484ea312d |
---|---|
476 f(as_klassOop()); | 476 f(as_klassOop()); |
477 } | 477 } |
478 | 478 |
479 | 479 |
480 const char* Klass::external_name() const { | 480 const char* Klass::external_name() const { |
481 if (oop_is_instance()) { | |
482 instanceKlass* ik = (instanceKlass*) this; | |
483 if (ik->is_anonymous()) { | |
484 assert(AnonymousClasses, ""); | |
485 intptr_t hash = ik->java_mirror()->identity_hash(); | |
486 char hash_buf[40]; | |
487 sprintf(hash_buf, "/" UINTX_FORMAT, (uintx)hash); | |
488 size_t hash_len = strlen(hash_buf); | |
489 | |
490 size_t result_len = name()->utf8_length(); | |
491 char* result = NEW_RESOURCE_ARRAY(char, result_len + hash_len + 1); | |
492 name()->as_klass_external_name(result, (int) result_len + 1); | |
493 assert(strlen(result) == result_len, ""); | |
494 strcpy(result + result_len, hash_buf); | |
495 assert(strlen(result) == result_len + hash_len, ""); | |
496 return result; | |
497 } | |
498 } | |
481 return name()->as_klass_external_name(); | 499 return name()->as_klass_external_name(); |
482 } | 500 } |
483 | 501 |
484 | 502 |
485 char* Klass::signature_name() const { | 503 char* Klass::signature_name() const { |