Mercurial > hg > truffle
comparison src/share/vm/oops/constMethod.cpp @ 6934:4735d2c84362
7200776: Implement default methods in interfaces
Summary: Add generic type analysis and default method selection algorithms
Reviewed-by: coleenp, acorn
author | kamg |
---|---|
date | Thu, 11 Oct 2012 12:25:42 -0400 |
parents | da91efe96a93 |
children | 18fb7da42534 |
comparison
equal
deleted
inserted
replaced
6921:a1b8cf9cf970 | 6934:4735d2c84362 |
---|---|
32 // Static initialization | 32 // Static initialization |
33 const u2 ConstMethod::MAX_IDNUM = 0xFFFE; | 33 const u2 ConstMethod::MAX_IDNUM = 0xFFFE; |
34 const u2 ConstMethod::UNSET_IDNUM = 0xFFFF; | 34 const u2 ConstMethod::UNSET_IDNUM = 0xFFFF; |
35 | 35 |
36 ConstMethod* ConstMethod::allocate(ClassLoaderData* loader_data, | 36 ConstMethod* ConstMethod::allocate(ClassLoaderData* loader_data, |
37 int byte_code_size, | 37 int byte_code_size, |
38 int compressed_line_number_size, | 38 int compressed_line_number_size, |
39 int localvariable_table_length, | 39 int localvariable_table_length, |
40 int exception_table_length, | 40 int exception_table_length, |
41 int checked_exceptions_length, | 41 int checked_exceptions_length, |
42 TRAPS) { | 42 MethodType method_type, |
43 TRAPS) { | |
43 int size = ConstMethod::size(byte_code_size, | 44 int size = ConstMethod::size(byte_code_size, |
44 compressed_line_number_size, | 45 compressed_line_number_size, |
45 localvariable_table_length, | 46 localvariable_table_length, |
46 exception_table_length, | 47 exception_table_length, |
47 checked_exceptions_length); | 48 checked_exceptions_length); |
48 return new (loader_data, size, true, THREAD) ConstMethod( | 49 return new (loader_data, size, true, THREAD) ConstMethod( |
49 byte_code_size, compressed_line_number_size, | 50 byte_code_size, compressed_line_number_size, localvariable_table_length, |
50 localvariable_table_length, exception_table_length, | 51 exception_table_length, checked_exceptions_length, method_type, size); |
51 checked_exceptions_length, size); | |
52 } | 52 } |
53 | 53 |
54 ConstMethod::ConstMethod(int byte_code_size, | 54 ConstMethod::ConstMethod(int byte_code_size, |
55 int compressed_line_number_size, | 55 int compressed_line_number_size, |
56 int localvariable_table_length, | 56 int localvariable_table_length, |
57 int exception_table_length, | 57 int exception_table_length, |
58 int checked_exceptions_length, | 58 int checked_exceptions_length, |
59 int size) { | 59 MethodType method_type, |
60 int size) { | |
60 | 61 |
61 No_Safepoint_Verifier no_safepoint; | 62 No_Safepoint_Verifier no_safepoint; |
62 set_interpreter_kind(Interpreter::invalid); | 63 set_interpreter_kind(Interpreter::invalid); |
63 init_fingerprint(); | 64 init_fingerprint(); |
64 set_constants(NULL); | 65 set_constants(NULL); |
67 set_constMethod_size(size); | 68 set_constMethod_size(size); |
68 set_inlined_tables_length(checked_exceptions_length, | 69 set_inlined_tables_length(checked_exceptions_length, |
69 compressed_line_number_size, | 70 compressed_line_number_size, |
70 localvariable_table_length, | 71 localvariable_table_length, |
71 exception_table_length); | 72 exception_table_length); |
73 set_method_type(method_type); | |
72 assert(this->size() == size, "wrong size for object"); | 74 assert(this->size() == size, "wrong size for object"); |
73 } | 75 } |
74 | 76 |
75 | 77 |
76 // Deallocate metadata fields associated with ConstMethod* | 78 // Deallocate metadata fields associated with ConstMethod* |