diff --git a/v8js_class.cc b/v8js_class.cc index 3dfea48..9c27d15 100644 --- a/v8js_class.cc +++ b/v8js_class.cc @@ -119,7 +119,7 @@ static void v8js_free_storage(zend_object *object) /* {{{ */ } c->call_impls.~map(); - for (std::map::iterator it = c->method_tmpls.begin(); + for (std::map, v8js_function_tmpl_t>::iterator it = c->method_tmpls.begin(); it != c->method_tmpls.end(); ++it) { it->second.Reset(); } @@ -232,7 +232,7 @@ static zend_object* v8js_new(zend_class_entry *ce) /* {{{ */ new(&c->weak_closures) std::map(); new(&c->weak_objects) std::map(); new(&c->call_impls) std::map(); - new(&c->method_tmpls) std::map(); + new(&c->method_tmpls) std::map, v8js_function_tmpl_t>(); new(&c->v8js_v8objects) std::list(); new(&c->script_objects) std::vector(); @@ -589,7 +589,7 @@ static PHP_METHOD(V8Js, __construct) ft = v8::FunctionTemplate::New(isolate, v8js_php_callback, v8::External::New((isolate), method_ptr)); // @fixme add/check Signature v8::Signature::New((isolate), tmpl)); - v8js_function_tmpl_t *persistent_ft = &c->method_tmpls[method_ptr]; + v8js_function_tmpl_t *persistent_ft = &c->method_tmpls[std::make_pair(ce, method_ptr)]; persistent_ft->Reset(isolate, ft); php_obj->CreateDataProperty(context, method_name, ft->GetFunction(context).ToLocalChecked()); diff --git a/v8js_class.h b/v8js_class.h index cd06fc5..aaf2807 100644 --- a/v8js_class.h +++ b/v8js_class.h @@ -63,7 +63,7 @@ struct v8js_ctx { std::map weak_objects; std::map weak_closures; std::map call_impls; - std::map method_tmpls; + std::map, v8js_function_tmpl_t> method_tmpls; std::list v8js_v8objects; diff --git a/v8js_object_export.cc b/v8js_object_export.cc index b36574c..9aac1fc 100644 --- a/v8js_object_export.cc +++ b/v8js_object_export.cc @@ -701,13 +701,13 @@ v8::Local v8js_named_property_callback(v8::Local property_n v8::Local ft; try { ft = v8::Local::New - (isolate, ctx->method_tmpls.at(method_ptr)); + (isolate, ctx->method_tmpls.at(std::make_pair(ce, method_ptr))); } catch (const std::out_of_range &) { ft = v8::FunctionTemplate::New(isolate, v8js_php_callback, v8::External::New((isolate), method_ptr), v8::Signature::New((isolate), tmpl)); - v8js_function_tmpl_t *persistent_ft = &ctx->method_tmpls[method_ptr]; + v8js_function_tmpl_t *persistent_ft = &ctx->method_tmpls[std::make_pair(ce, method_ptr)]; persistent_ft->Reset(isolate, ft); } ft->GetFunction(v8_context).ToLocal(&ret_value);