[ruby/yarp] Less const_get
Right now whenever you go to create a Ruby object from a C struct we dynamically look up the constants. This is not great for performance. Now instead we template out a constant for each VALUE that holds the classes, and then directly reference it. https://github.com/ruby/yarp/commit/f4756cda77
This commit is contained in:
parent
96aebb4265
commit
9b952670bb
Notes:
git
2023-08-17 00:48:02 +00:00
@ -4,6 +4,7 @@
|
||||
// All non-trivial logic should be in librubyparser so it can be shared its the various callers.
|
||||
|
||||
VALUE rb_cYARP;
|
||||
VALUE rb_cYARPNode;
|
||||
VALUE rb_cYARPSource;
|
||||
VALUE rb_cYARPToken;
|
||||
VALUE rb_cYARPLocation;
|
||||
@ -490,6 +491,7 @@ Init_yarp(void) {
|
||||
// Grab up references to all of the constants that we're going to need to
|
||||
// reference throughout this extension.
|
||||
rb_cYARP = rb_define_module("YARP");
|
||||
rb_cYARPNode = rb_define_class_under(rb_cYARP, "Node", rb_cObject);
|
||||
rb_cYARPSource = rb_define_class_under(rb_cYARP, "Source", rb_cObject);
|
||||
rb_cYARPToken = rb_define_class_under(rb_cYARP, "Token", rb_cObject);
|
||||
rb_cYARPLocation = rb_define_class_under(rb_cYARP, "Location", rb_cObject);
|
||||
@ -520,6 +522,7 @@ Init_yarp(void) {
|
||||
rb_define_singleton_method(rb_cYARPDebug, "memsize", memsize, 1);
|
||||
rb_define_singleton_method(rb_cYARPDebug, "profile_file", profile_file, 1);
|
||||
|
||||
// Next, initialize the pack API.
|
||||
// Next, initialize the other APIs.
|
||||
Init_yarp_api_node();
|
||||
Init_yarp_pack();
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ VALUE yp_source_new(yp_parser_t *parser);
|
||||
VALUE yp_token_new(yp_parser_t *parser, yp_token_t *token, rb_encoding *encoding, VALUE source);
|
||||
VALUE yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding);
|
||||
|
||||
void Init_yarp_api_node(void);
|
||||
void Init_yarp_pack(void);
|
||||
YP_EXPORTED_FUNCTION void Init_yarp(void);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user