Fix regressions of latest commits.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/oliverb-javascript-v8@13828 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Oliver Buchtala 2012-09-08 01:16:26 +00:00
commit 217ffb11d0
2 changed files with 28 additions and 17 deletions

View file

@ -11,13 +11,10 @@
JSObjectRef $jswrapper(JSContextRef context, JSObjectRef thisObject, size_t argc, const JSValueRef argv[], JSValueRef* exception) JSObjectRef $jswrapper(JSContextRef context, JSObjectRef thisObject, size_t argc, const JSValueRef argv[], JSValueRef* exception)
{ {
$jslocals $jslocals
if(argc != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper."); if(argc != $jsargcount) SWIG_exception_fail(SWIG_ERROR, "Illegal number of arguments for $jswrapper.");
$jscode $jscode
return SWIG_JSC_NewPointerObj(context, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN); return SWIG_JSC_NewPointerObj(context, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN);
goto fail; goto fail;
fail: fail:
return NULL; return NULL;
@ -63,6 +60,20 @@ JSObjectRef $jswrapper(JSContextRef context, JSObjectRef ctorObject,
} }
%} %}
%fragment ("js_overloaded_ctor", "templates")
%{
JSObjectRef $jswrapper(JSContextRef context, JSObjectRef thisObject, size_t argc, const JSValueRef argv[], JSValueRef* exception)
{
$jslocals
$jscode
return SWIG_JSC_NewPointerObj(context, result, SWIGTYPE_$jsmangledtype, SWIG_POINTER_OWN);
goto fail;
fail:
return NULL;
}
%}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* js_ctor_dispatch_case: template for a dispatch case for calling an overloaded ctor. * js_ctor_dispatch_case: template for a dispatch case for calling an overloaded ctor.
* - $jsargcount: number of arguments of called ctor * - $jsargcount: number of arguments of called ctor

View file

@ -1075,18 +1075,16 @@ int JSEmitter::emitFunctionDispatcher(Node *n, bool /*is_member */ ) {
void JSEmitter::registerProxyType(SwigType* type) { void JSEmitter::registerProxyType(SwigType* type) {
SwigType *ftype = SwigType_typedef_resolve_all(type); SwigType *ftype = SwigType_typedef_resolve_all(type);
if(Language::instance()->classLookup(ftype)) return;
// TODO: confused... more try and error... understand and fix eventually
SwigType *p_ftype = SwigType_add_pointer(ftype);
// register undefined wrappers // register undefined wrappers
int needs_proxy= (SwigType_ispointer(ftype) SwigType_remember_clientdata(p_ftype, 0);
|| SwigType_isarray(ftype) || SwigType_isreference(ftype)) Setattr(undefined_types, SwigType_manglestr(p_ftype), p_ftype);
&& !(Language::instance()->classLookup(ftype));
if (needs_proxy) {
SwigType_remember_clientdata(ftype, 0);
Setattr(undefined_types, SwigType_manglestr(ftype), ftype);
} else {
Delete(ftype);
}
Delete(ftype);
} }
void JSEmitter::emitInputTypemap(Node *n, Parm *p, Wrapper *wrapper, String *arg) { void JSEmitter::emitInputTypemap(Node *n, Parm *p, Wrapper *wrapper, String *arg) {
@ -1119,7 +1117,9 @@ void JSEmitter::marshalOutput(Node *n, Wrapper *wrapper, String *actioncode, co
if(cresult == 0) cresult = defaultResultName; if(cresult == 0) cresult = defaultResultName;
tm = Swig_typemap_lookup_out("out", n, cresult, wrapper, actioncode); tm = Swig_typemap_lookup_out("out", n, cresult, wrapper, actioncode);
if(GetFlag(n, "feature:new")) { bool should_own = GetFlag(n, "feature:new");
bool needs_proxy = GetFlag(n, "tmap:out:SWIGTYPE");
if(needs_proxy) {
registerProxyType(type); registerProxyType(type);
} }
@ -1127,7 +1127,7 @@ void JSEmitter::marshalOutput(Node *n, Wrapper *wrapper, String *actioncode, co
Replaceall(tm, "$result", "jsresult"); Replaceall(tm, "$result", "jsresult");
Replaceall(tm, "$objecttype", Swig_scopename_last(SwigType_str(SwigType_strip_qualifiers(type), 0))); Replaceall(tm, "$objecttype", Swig_scopename_last(SwigType_str(SwigType_strip_qualifiers(type), 0)));
if (GetFlag(n, "feature:new")) { if (should_own) {
Replaceall(tm, "$owner", "SWIG_POINTER_OWN"); Replaceall(tm, "$owner", "SWIG_POINTER_OWN");
} else { } else {
Replaceall(tm, "$owner", "0"); Replaceall(tm, "$owner", "0");
@ -1985,10 +1985,10 @@ int V8Emitter::emitNamespaces() {
void V8Emitter::emitUndefined() { void V8Emitter::emitUndefined() {
Iterator ki; Iterator ki;
for (ki = First(undefined_types); ki.item; ki = Next(ki)) { for (ki = First(undefined_types); ki.item; ki = Next(ki)) {
String *mangled_name = ki.key; String *mangled_name = NewStringf("SWIGTYPE%s", ki.key);
SwigType *type = ki.item; SwigType *type = ki.item;
String *dtor = Swig_name_destroy("", mangled_name); String *dtor = Swig_name_destroy("", mangled_name);
String *type_mangled = SwigType_manglestr(type); String *type_mangled = ki.key;
String *ctype = SwigType_lstr(type, ""); String *ctype = SwigType_lstr(type, "");
String *free = NewString(""); String *free = NewString("");
@ -2018,9 +2018,9 @@ void V8Emitter::emitUndefined() {
.replace(T_DTOR, dtor) .replace(T_DTOR, dtor)
.pretty_print(f_init_class_templates); .pretty_print(f_init_class_templates);
Delete(mangled_name);
Delete(dtor); Delete(dtor);
Delete(free); Delete(free);
Delete(type_mangled);
Delete(ctype); Delete(ctype);
} }