From: <ne...@us...> - 2012-07-09 17:18:55
|
Revision: 13306 http://swig.svn.sourceforge.net/swig/?rev=13306&view=rev Author: neha1 Date: 2012-07-09 17:18:44 +0000 (Mon, 09 Jul 2012) Log Message: ----------- Adapted constant code generator implemenatation to fix errors. Constant wrappers now make use of values directly (-> raw value). From: Oliver Buchtala <oli...@go...> Modified Paths: -------------- branches/gsoc2012-javascript/Source/Modules/javascript.cxx branches/gsoc2012-javascript/Source/Modules/javascript_emitter.cxx branches/gsoc2012-javascript/Source/Modules/javascript_emitter.h branches/gsoc2012-javascript/Source/Modules/javascript_jsc.cxx branches/gsoc2012-javascript/Source/Modules/javascript_jsc.h Modified: branches/gsoc2012-javascript/Source/Modules/javascript.cxx =================================================================== --- branches/gsoc2012-javascript/Source/Modules/javascript.cxx 2012-07-09 17:18:06 UTC (rev 13305) +++ branches/gsoc2012-javascript/Source/Modules/javascript.cxx 2012-07-09 17:18:44 UTC (rev 13306) @@ -31,6 +31,8 @@ **/ virtual int fragmentDirective(Node *n); + virtual int constantDirective(Node *n); + virtual void main(int argc, char *argv[]); virtual int top(Node *n); @@ -130,7 +132,7 @@ if( Equal(Getattr(n, "kind"), "function") ) { return SWIG_OK; } - + //Language::constantWrapper(n); emitter->emitConstant(n); @@ -168,6 +170,13 @@ return SWIG_OK; } +int JAVASCRIPT::constantDirective(Node *n) { + + Language::constantDirective(n); + + return SWIG_OK; +} + /* --------------------------------------------------------------------- * top() * Modified: branches/gsoc2012-javascript/Source/Modules/javascript_emitter.cxx =================================================================== --- branches/gsoc2012-javascript/Source/Modules/javascript_emitter.cxx 2012-07-09 17:18:06 UTC (rev 13305) +++ branches/gsoc2012-javascript/Source/Modules/javascript_emitter.cxx 2012-07-09 17:18:44 UTC (rev 13306) @@ -153,35 +153,6 @@ } /* ----------------------------------------------------------------------------- - * swig::JSEmitter::emitConstant() : triggers code generation for constants - * ----------------------------------------------------------------------------- */ - -int swig::JSEmitter::emitConstant(Node *n) { - - // TODO: extra handling for constants defined using the %constant keyword - if( Equal(Getattr(n, "storage"), "%constant") ) { - declareCConst(n); - } - - current_wrapper = NewWrapper(); - String* action = NewString(""); - - Setattr(n, "wrap:name", Getattr(n, "sym:name")); - Printf(action, "result = %s;", Getattr(n, "name")); - Setattr(n, "wrap:action", action); - - enterVariable(n); - emitGetter(n, false); - exitVariable(n); - - DelWrapper(current_wrapper); - - current_wrapper = 0; - - return SWIG_OK; -} - -/* ----------------------------------------------------------------------------- * __swigjs_str_ends_with() : c string helper to check suffix match * ----------------------------------------------------------------------------- */ Modified: branches/gsoc2012-javascript/Source/Modules/javascript_emitter.h =================================================================== --- branches/gsoc2012-javascript/Source/Modules/javascript_emitter.h 2012-07-09 17:18:06 UTC (rev 13305) +++ branches/gsoc2012-javascript/Source/Modules/javascript_emitter.h 2012-07-09 17:18:44 UTC (rev 13306) @@ -117,7 +117,7 @@ /** * Invoked from constantWrapper after call to Language::constantWrapper. **/ - virtual int emitConstant(Node *n); + virtual int emitConstant(Node *n) = 0; /** * Registers a given code snippet for a given key name. @@ -146,10 +146,8 @@ virtual int emitSetter(Node *n, bool is_member) = 0; - virtual int declareCConst(Node *n) = 0; + bool isSetterMethod(Node *n); - bool isSetterMethod(Node *n); - Node *getBaseClass(Node *n); const String *typemapLookup(Node *n, const_String_or_char_ptr tmap_method, SwigType *type, int warning, Node *typemap_attributes = 0); Modified: branches/gsoc2012-javascript/Source/Modules/javascript_jsc.cxx =================================================================== --- branches/gsoc2012-javascript/Source/Modules/javascript_jsc.cxx 2012-07-09 17:18:06 UTC (rev 13305) +++ branches/gsoc2012-javascript/Source/Modules/javascript_jsc.cxx 2012-07-09 17:18:44 UTC (rev 13306) @@ -351,7 +351,7 @@ Wrapper_pretty_print(t_registerclass.str(), initializer_code); /* clean up all DOHs */ - Delete(js_class_variables_code); + Delete(class_variables_code); Delete(current_class_functions); Delete(class_static_variables_code); Delete(class_static_functions_code); @@ -425,7 +425,7 @@ } int swig::JSCEmitter::emitGetter(Node *n, bool is_member) { - Template t_setter(getTemplate("getproperty")); + Template t_getter(getTemplate("getproperty")); String *name = Getattr(n, "wrap:name"); String *wrap_name = Swig_name_wrapper(name); @@ -441,16 +441,15 @@ marshalInputArgs(params, current_wrapper, Getter, is_member); marshalOutput(n, action, current_wrapper); - t_setter.replace("${getname}", wrap_name) + t_getter.replace("${getname}", wrap_name) .replace("${LOCALS}", current_wrapper->locals) .replace("${CODE}", current_wrapper->code); - Wrapper_pretty_print(t_setter.str(), f_wrappers); + Wrapper_pretty_print(t_getter.str(), f_wrappers); return SWIG_OK; } - int swig::JSCEmitter::emitSetter(Node *n, bool is_member) { Template t_setter(getTemplate("setproperty")); @@ -477,7 +476,55 @@ return SWIG_OK; } +/* ----------------------------------------------------------------------------- + * swig::JSEmitter::emitConstant() : triggers code generation for constants + * ----------------------------------------------------------------------------- */ +int swig::JSCEmitter::emitConstant(Node *n) { + + // call the variable methods as a constants are + // registred in same way + enterVariable(n); + + current_wrapper = NewWrapper(); + + 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"); + } + if(value == NULL) { + value = Getattr(n, "value"); + } + + Template t_getter(getTemplate("getproperty")); + + current_getter = wrap_name; + Setattr(n, "wrap:name", wrap_name); + + Printf(action, "result = %s;", value); + Setattr(n, "wrap:action", action); + + Wrapper_add_local(current_wrapper, "jsresult", "JSValueRef jsresult"); + marshalOutput(n, action, current_wrapper); + + t_getter.replace("${getname}", wrap_name) + .replace("${LOCALS}", current_wrapper->locals) + .replace("${CODE}", current_wrapper->code); + + Wrapper_pretty_print(t_getter.str(), f_wrappers); + + DelWrapper(current_wrapper); + current_wrapper = 0; + + exitVariable(n); + + return SWIG_OK; +} + int swig::JSCEmitter::emitFunction(Node *n, bool is_member) { Template t_function(getTemplate("functionwrapper")); @@ -638,15 +685,6 @@ return SWIG_OK; } - -int swig::JSCEmitter::declareCConst(Node *n) { - Printf(f_header, "%s %s = %s;\n", Getattr(n, "type"), Getattr(n, "sym:name"), Getattr(n, "rawvalue")); - - return SWIG_OK; -} - - - swig::JSEmitter* swig_javascript_create_JSC_emitter() { return new swig::JSCEmitter(); Modified: branches/gsoc2012-javascript/Source/Modules/javascript_jsc.h =================================================================== --- branches/gsoc2012-javascript/Source/Modules/javascript_jsc.h 2012-07-09 17:18:06 UTC (rev 13305) +++ branches/gsoc2012-javascript/Source/Modules/javascript_jsc.h 2012-07-09 17:18:44 UTC (rev 13306) @@ -67,10 +67,10 @@ virtual Hash *createNamespaceEntry(const char *name, const char *parent); - virtual int emitNamespaces(); + virtual int emitNamespaces(); + + virtual int emitConstant(Node *n); - virtual int declareCConst(Node *n); - private: File *f_wrap_cpp; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |