< prev index next > src/hotspot/share/cds/classListParser.hpp
Print this page
*/
#ifndef SHARE_CDS_CLASSLISTPARSER_HPP
#define SHARE_CDS_CLASSLISTPARSER_HPP
#include "utilities/exceptions.hpp"
#include "utilities/globalDefinitions.hpp"
#include "utilities/growableArray.hpp"
#include "utilities/istream.hpp"
#include "utilities/resizeableResourceHash.hpp"
- #define LAMBDA_PROXY_TAG "@lambda-proxy"
- #define LAMBDA_FORM_TAG "@lambda-form-invoker"
-
class constantPoolHandle;
class Thread;
class CDSIndyInfo {
GrowableArray<const char*>* _items;
*/
#ifndef SHARE_CDS_CLASSLISTPARSER_HPP
#define SHARE_CDS_CLASSLISTPARSER_HPP
+ #include "interpreter/bytecodes.hpp"
#include "utilities/exceptions.hpp"
#include "utilities/globalDefinitions.hpp"
#include "utilities/growableArray.hpp"
#include "utilities/istream.hpp"
#include "utilities/resizeableResourceHash.hpp"
class constantPoolHandle;
class Thread;
class CDSIndyInfo {
GrowableArray<const char*>* _items;
return _items;
}
};
class ClassListParser : public StackObj {
+ static const char* CONSTANT_POOL_TAG;
+ static const char* DYNAMIC_PROXY_TAG;
+ static const char* LAMBDA_FORM_TAG;
+ static const char* LAMBDA_PROXY_TAG;
public:
+ static const char* ARRAY_TAG;
+
+ static const char* CLASS_REFLECTION_DATA_TAG;
+ static const char* LOADER_NEGATIVE_CACHE_TAG;
+
enum ParseMode {
_parse_all,
_parse_lambda_forms_invokers_only,
};
InstanceKlass* lookup_class_by_id(int id);
void print_specified_interfaces();
void print_actual_interfaces(InstanceKlass *ik);
bool is_matching_cp_entry(const constantPoolHandle &pool, int cp_index, TRAPS);
void resolve_indy(JavaThread* current, Symbol* class_name_symbol);
void resolve_indy_impl(Symbol* class_name_symbol, TRAPS);
void clean_up_input_line();
void read_class_name_and_attributes();
void parse_class_name_and_attributes(TRAPS);
Klass* load_current_class(Symbol* class_name_symbol, TRAPS);
size_t lineno() { return _input_stream.lineno(); }
FILE* do_open(const char* file);
ClassListParser(const char* file, ParseMode _parse_mode);
~ClassListParser();
!
public:
static void parse_classlist(const char* classlist_path, ParseMode parse_mode, TRAPS) {
ClassListParser parser(classlist_path, parse_mode);
parser.parse(THREAD);
}
InstanceKlass* lookup_class_by_id(int id);
void print_specified_interfaces();
void print_actual_interfaces(InstanceKlass *ik);
bool is_matching_cp_entry(const constantPoolHandle &pool, int cp_index, TRAPS);
+ InstanceKlass* find_builtin_class_helper(JavaThread* current, Symbol* class_name_symbol, oop class_loader_oop);
+ InstanceKlass* find_builtin_class(JavaThread* current, const char* class_name);
+
void resolve_indy(JavaThread* current, Symbol* class_name_symbol);
void resolve_indy_impl(Symbol* class_name_symbol, TRAPS);
void clean_up_input_line();
void read_class_name_and_attributes();
void parse_class_name_and_attributes(TRAPS);
Klass* load_current_class(Symbol* class_name_symbol, TRAPS);
+ void parse_constant_pool_tag();
+ void parse_class_reflection_data_tag();
+ void parse_dynamic_proxy_tag();
+ void parse_loader_negative_cache_tag();
+ void parse_array_dimension_tag();
size_t lineno() { return _input_stream.lineno(); }
FILE* do_open(const char* file);
ClassListParser(const char* file, ParseMode _parse_mode);
~ClassListParser();
! void print_diagnostic_info(outputStream* st, const char* msg, va_list ap) ATTRIBUTE_PRINTF(3, 0);
+ void print_diagnostic_info(outputStream* st, const char* msg, ...) ATTRIBUTE_PRINTF(3, 0);
+ void constant_pool_resolution_warning(const char* msg, ...) ATTRIBUTE_PRINTF(2, 0);
+ void error(const char* msg, ...) ATTRIBUTE_PRINTF(2, 0);
+ oop loader_from_type(const char* loader_name);
public:
static void parse_classlist(const char* classlist_path, ParseMode parse_mode, TRAPS) {
ClassListParser parser(classlist_path, parse_mode);
parser.parse(THREAD);
}
static ClassListParser* instance() {
assert(is_parsing_thread(), "call this only in the thread that created ClassListParsing::_instance");
assert(_instance != nullptr, "must be");
return _instance;
}
void parse(TRAPS);
void split_tokens_by_whitespace(int offset, GrowableArray<const char*>* items);
int split_at_tag_from_line();
void parse_at_tags(TRAPS);
char* _token;
- void error(const char* msg, ...);
void parse_int(int* value);
void parse_uint(int* value);
bool try_parse_uint(int* value);
bool skip_token(const char* option_name);
void skip_whitespaces();
static ClassListParser* instance() {
assert(is_parsing_thread(), "call this only in the thread that created ClassListParsing::_instance");
assert(_instance != nullptr, "must be");
return _instance;
}
+ static const char* lambda_proxy_tag() {
+ return LAMBDA_PROXY_TAG;
+ }
+ static const char* lambda_form_tag() {
+ return LAMBDA_FORM_TAG;
+ }
void parse(TRAPS);
void split_tokens_by_whitespace(int offset, GrowableArray<const char*>* items);
int split_at_tag_from_line();
void parse_at_tags(TRAPS);
char* _token;
void parse_int(int* value);
void parse_uint(int* value);
bool try_parse_uint(int* value);
bool skip_token(const char* option_name);
void skip_whitespaces();
< prev index next >