From: <ol...@us...> - 2012-09-08 00:58:55
|
Revision: 13770 http://swig.svn.sourceforge.net/swig/?rev=13770&view=rev Author: oliv3rb Date: 2012-09-08 00:58:49 +0000 (Sat, 08 Sep 2012) Log Message: ----------- Remove member variable current_wrapper from JSEmitter. Instead each emitting function creates local wrapper instance. Modified Paths: -------------- branches/oliverb-javascript-v8/Source/Modules/javascript.cxx Modified: branches/oliverb-javascript-v8/Source/Modules/javascript.cxx =================================================================== --- branches/oliverb-javascript-v8/Source/Modules/javascript.cxx 2012-09-08 00:58:37 UTC (rev 13769) +++ branches/oliverb-javascript-v8/Source/Modules/javascript.cxx 2012-09-08 00:58:49 UTC (rev 13770) @@ -239,8 +239,6 @@ String *empty_string; Hash *templates; - - Wrapper *current_wrapper; State state; }; @@ -544,8 +542,7 @@ * ----------------------------------------------------------------------------- */ JSEmitter::JSEmitter() -: empty_string(NewString("")), - current_wrapper(NULL) +: empty_string(NewString("")) { templates = NewHash(); } @@ -645,10 +642,8 @@ while (base.item && GetFlag(base.item, "feature:ignore")) { base = Next(base); } - return base.item; } - return NULL; } @@ -659,9 +654,6 @@ int JSEmitter::emitWrapperFunction(Node *n) { int ret = SWIG_OK; - current_wrapper = NewWrapper(); - Setattr(n, "wrap:name", Getattr(n, "sym:name")); - String *kind = Getattr(n, "kind"); if (kind) { @@ -699,9 +691,6 @@ } } - DelWrapper(current_wrapper); - current_wrapper = 0; - return ret; } @@ -1225,6 +1214,8 @@ } int JSCEmitter::emitCtor(Node *n) { + + Wrapper *wrapper = NewWrapper(); Template t_ctor(getTemplate("JS_ctordefn")); String *mangled_name = SwigType_manglestr(Getattr(n, "name")); @@ -1234,20 +1225,20 @@ Setattr(n, "wrap:name", wrap_name); ParmList *params = Getattr(n, "parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); - Printf(current_wrapper->locals, "%sresult;", SwigType_str(Getattr(n, "type"), 0)); + Printf(wrapper->locals, "%sresult;", SwigType_str(Getattr(n, "type"), 0)); int num_args = emit_num_arguments(params); String *action = emit_action(n); - marshalInputArgs(n, params, current_wrapper, Ctor, true); + marshalInputArgs(n, params, wrapper, Ctor, true); - Printv(current_wrapper->code, action, "\n", 0); + Printv(wrapper->code, action, "\n", 0); t_ctor.replace("${classname_mangled}", mangled_name) .replace("${overloadext}", overname) - .replace("${LOCALS}", current_wrapper->locals) - .replace("${CODE}", current_wrapper->code) + .replace("${LOCALS}", wrapper->locals) + .replace("${CODE}", wrapper->code) .replace("${type_mangled}", state.clazz(TYPE_MANGLED)) .pretty_print(state.clazz(CTORS)); @@ -1259,6 +1250,8 @@ .replace("${argcount}", argcount); Append(state.clazz(CTOR_DISPATCHERS), t_ctor_case.str()); Delete(argcount); + + DelWrapper(wrapper); return SWIG_OK; } @@ -1274,6 +1267,8 @@ } int JSCEmitter::emitGetter(Node *n, bool is_member) { + Wrapper *wrapper = NewWrapper(); + Template t_getter(getTemplate("JS_getproperty")); bool is_static = Equal(Getattr(n, "storage"), "static"); @@ -1282,19 +1277,21 @@ state.variable(GETTER, wrap_name); ParmList *params = Getattr(n, "parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); - Wrapper_add_local(current_wrapper, "jsresult", "JSValueRef jsresult"); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); + Wrapper_add_local(wrapper, "jsresult", "JSValueRef jsresult"); String *action = emit_action(n); - marshalInputArgs(n, params, current_wrapper, Getter, is_member, is_static); - marshalOutput(n, action, current_wrapper); + marshalInputArgs(n, params, wrapper, Getter, is_member, is_static); + marshalOutput(n, action, wrapper); t_getter.replace("${getname}", wrap_name) - .replace("${LOCALS}", current_wrapper->locals) - .replace("${CODE}", current_wrapper->code) + .replace("${LOCALS}", wrapper->locals) + .replace("${CODE}", wrapper->code) .pretty_print(f_wrappers); + DelWrapper(wrapper); + return SWIG_OK; } @@ -1304,6 +1301,8 @@ if (State::IsSet(state.variable(IS_IMMUTABLE))) { return SWIG_OK; } + + Wrapper *wrapper = NewWrapper(); Template t_setter(getTemplate("JS_setproperty")); bool is_static = Equal(Getattr(n, "storage"), "static"); @@ -1313,18 +1312,20 @@ state.variable(SETTER, wrap_name); ParmList *params = Getattr(n, "parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); String *action = emit_action(n); - marshalInputArgs(n, params, current_wrapper, Setter, is_member, is_static); - Append(current_wrapper->code, action); + marshalInputArgs(n, params, wrapper, Setter, is_member, is_static); + Append(wrapper->code, action); t_setter.replace("${setname}", wrap_name) - .replace("${LOCALS}", current_wrapper->locals) - .replace("${CODE}", current_wrapper->code) + .replace("${LOCALS}", wrapper->locals) + .replace("${CODE}", wrapper->code) .pretty_print(f_wrappers); + DelWrapper(wrapper); + return SWIG_OK; } @@ -1334,16 +1335,24 @@ int JSCEmitter::emitConstant(Node *n) { + Wrapper *wrapper = NewWrapper(); + + Template t_getter(getTemplate("JS_getproperty")); + // call the variable methods as a constants are // registred in same way enterVariable(n); - current_wrapper = NewWrapper(); + // prepare function wrapper name + String *wrap_name = Swig_name_wrapper(Getattr(n, "name")); + state.variable(GETTER, wrap_name); + Setattr(n, "wrap:name", wrap_name); + // prepare local variables + Wrapper_add_local(wrapper, "jsresult", "JSValueRef jsresult"); + + // prepare action String *action = NewString(""); - - String *name = Getattr(n, "name"); - String *wrap_name = Swig_name_wrapper(name); String *value = Getattr(n, "rawval"); if (value == NULL) { value = Getattr(n, "rawvalue"); @@ -1351,32 +1360,27 @@ if (value == NULL) { value = Getattr(n, "value"); } - - Template t_getter(getTemplate("JS_getproperty")); - - state.variable(GETTER, wrap_name); - Setattr(n, "wrap:name", wrap_name); - Printf(action, "result = %s;\n", value); Setattr(n, "wrap:action", action); - Wrapper_add_local(current_wrapper, "jsresult", "JSValueRef jsresult"); - marshalOutput(n, action, current_wrapper); + marshalOutput(n, action, wrapper); t_getter.replace("${getname}", wrap_name) - .replace("${LOCALS}", current_wrapper->locals) - .replace("${CODE}", current_wrapper->code) + .replace("${LOCALS}", wrapper->locals) + .replace("${CODE}", wrapper->code) .pretty_print(f_wrappers); - DelWrapper(current_wrapper); - current_wrapper = 0; - exitVariable(n); + DelWrapper(wrapper); + return SWIG_OK; } int JSCEmitter::emitFunction(Node *n, bool is_member) { + + Wrapper *wrapper = NewWrapper(); + Template t_function(getTemplate("JS_functionwrapper")); // Note: there is an inconsistency in SWIG with static member functions @@ -1397,18 +1401,18 @@ // prepare local variables ParmList *params = Getattr(n, "parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); - Wrapper_add_local(current_wrapper, "jsresult", "JSValueRef jsresult"); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); + Wrapper_add_local(wrapper, "jsresult", "JSValueRef jsresult"); // prepare code part String *action = emit_action(n); - marshalInputArgs(n, params, current_wrapper, Function, is_member, is_static); - marshalOutput(n, action, current_wrapper); + marshalInputArgs(n, params, wrapper, Function, is_member, is_static); + marshalOutput(n, action, wrapper); t_function.replace("${functionname}", wrap_name) - .replace("${LOCALS}", current_wrapper->locals) - .replace("${CODE}", current_wrapper->code) + .replace("${LOCALS}", wrapper->locals) + .replace("${CODE}", wrapper->code) .pretty_print(f_wrappers); // handle function overloading @@ -1426,6 +1430,8 @@ Delete(argcount); } + + DelWrapper(wrapper); return SWIG_OK; } @@ -1994,15 +2000,15 @@ Template t(GetTemplate(V8_CTOR_WRAPPER)); //HACK: manually add declaration of instance pointer - Printf(current_wrapper->locals, "%sresult;", SwigType_str(Getattr(n, "type"),0)); + Printf(wrapper->locals, "%sresult;", SwigType_str(Getattr(n, "type"),0)); String* action = emit_action(n); - Printv(current_wrapper->code, action, 0); + Printv(wrapper->code, action, 0); t.Replace(KW_MANGLED_NAME, current_classname_mangled) .Replace(KW_UNQUALIFIED_NAME, current_classname_unqualified) - .Replace(KW_LOCALS, current_wrapper->locals) - .Replace(KW_CODE, current_wrapper->code); + .Replace(KW_LOCALS, wrapper->locals) + .Replace(KW_CODE, wrapper->code); Wrapper_pretty_print(t.str(), f_wrapper); @@ -2022,17 +2028,17 @@ current_getter = Getattr(n,"wrap:name"); ParmList *params = Getattr(n,"parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); int num_args = emit_num_arguments(params); String* action = emit_action(n); - marshalInputArgs(n, params, num_args, current_wrapper); - marshalOutput(n, action, current_wrapper); + marshalInputArgs(n, params, num_args, wrapper); + marshalOutput(n, action, wrapper); t_getter.Replace(KW_MANGLED_NAME, current_variable_mangled) - .Replace(KW_LOCALS, current_wrapper->locals) - .Replace(KW_CODE, current_wrapper->code); + .Replace(KW_LOCALS, wrapper->locals) + .Replace(KW_CODE, wrapper->code); Wrapper_pretty_print(t_getter.str(), f_wrapper); @@ -2046,17 +2052,17 @@ current_setter = Getattr(n,"wrap:name"); ParmList *params = Getattr(n,"parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); int num_args = emit_num_arguments(params); String* action = emit_action(n); - marshalInputArgs(n, params, num_args, current_wrapper); - Printv(current_wrapper->code, action, 0); + marshalInputArgs(n, params, num_args, wrapper); + Printv(wrapper->code, action, 0); t_setter.Replace(KW_MANGLED_NAME, current_variable_mangled) - .Replace(KW_LOCALS, current_wrapper->locals) - .Replace(KW_CODE, current_wrapper->code); + .Replace(KW_LOCALS, wrapper->locals) + .Replace(KW_CODE, wrapper->code); Wrapper_pretty_print(t_setter.str(), f_wrapper); @@ -2073,17 +2079,17 @@ Setattr(n, "wrap:name", wrap_name); ParmList *params = Getattr(n,"parms"); - emit_parameter_variables(params, current_wrapper); - emit_attach_parmmaps(params, current_wrapper); + emit_parameter_variables(params, wrapper); + emit_attach_parmmaps(params, wrapper); int num_args = emit_num_arguments(params); String* action = emit_action(n); - marshalInputArgs(n, params, num_args, current_wrapper); - marshalOutput(n, action, current_wrapper); + marshalInputArgs(n, params, num_args, wrapper); + marshalOutput(n, action, wrapper); t_function.Replace(KW_MANGLED_NAME, current_function_mangled) - .Replace(KW_LOCALS, current_wrapper->locals) - .Replace(KW_CODE, current_wrapper->code); + .Replace(KW_LOCALS, wrapper->locals) + .Replace(KW_CODE, wrapper->code); Wrapper_pretty_print(t_function.str(), f_wrapper); return SWIG_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |