[Tool][Generator] fix undefined constructor in instance template
authorpius.lee <pius.lee@samsung.com>
Fri, 16 Jan 2015 10:22:47 +0000 (19:22 +0900)
committerpius.lee <pius.lee@samsung.com>
Fri, 16 Jan 2015 10:22:47 +0000 (19:22 +0900)
Change-Id: Ifd011b3740192ceaa0426bbaffbc088cca2ced4b
Signed-off-by: pius.lee <pius.lee@samsung.com>
tools/skeleton_generator/WAPIOven.py
tools/skeleton_generator/tpl/tpl_instance.cc

index 02bb4c8..896a354 100644 (file)
@@ -122,6 +122,8 @@ class Compiler(IndentPrintable):
                         native_function = iface.name + "Constructor"
                         native_cmd = iface.name + "_constructor"
                         self.ctx['cmdtable'][native_function] = native_cmd
+                        iface.native_function = native_function
+                        iface.native_cmd = native_cmd
                 if iface.inherit in [x.name for x in self.ctx['exportedInterface']]:
                     iface.private = True
                 #if iface.name in self.ctx['callback']:
index a6f8b31..4c8c4c5 100644 (file)
@@ -81,8 +81,28 @@ static void ReplyAsync({{module.title}}Instance* instance, {{module.title}}Callb
       return;\
     }
 
+{% for func in cmdtable %}
+{% endfor %}
+
 {% for iface in moduleObj.getTypes('Interface') %}
   {% if iface.exported %}
+    {% if iface.native_function %}
+void {{module.title}}Instance::{{iface.native_function}}(const picojson::value& args, picojson::object& out) {
+      {% for arg in iface.constructor.arguments %}
+      {% if not arg.optional and type_map[arg.xtype.name] %}
+  CHECK_EXIST(args, "{{arg.name}}", out)
+      {% endif %}
+      {% endfor %}
+
+      {% for arg in iface.constructor.arguments %}
+      {% set type = type_map[arg.xtype.name] %}
+      {% if type %}
+  {%+ if type not in primitives %}const {% endif -%}
+  {{type}}{% if type == 'std::string' %}&{% endif %} {{arg.name}} = args.get("{{arg.name}}").get<{{type}}>();
+      {% endif %}
+      {% endfor %}
+}
+    {% endif %}
     {% for operation in iface.getTypes('Operation') %}
 void {{module.title}}Instance::{{operation.native_function}}(const picojson::value& args, picojson::object& out) {
   {% if operation.async %}
@@ -95,7 +115,7 @@ void {{module.title}}Instance::{{operation.native_function}}(const picojson::val
   {% endfor %}
 
   {% if operation.async %}
-  int callbackId = args.get("callbackId").get<int>();
+  int callbackId = static_cast<int>(args.get("callbackId").get<double>());
   {% endif %}
   {% for arg in operation.arguments %}
   {% set type = type_map[arg.xtype.name] %}