Mercurial > projects > qtd
comparison generator/cppimplgenerator.cpp @ 167:ae06da58ec25
fixed hacky conversion of arguments when emmitting a signal
author | eldar |
---|---|
date | Sat, 20 Jun 2009 19:14:29 +0000 |
parents | ae34188ddd84 |
children | d3f4f14d43a5 |
comparison
equal
deleted
inserted
replaced
166:52da31f967f0 | 167:ae06da58ec25 |
---|---|
1380 s << "EmitCallback emit_callbacks_" << java_class->name() << "[1];" << endl; // Hack for msvc. | 1380 s << "EmitCallback emit_callbacks_" << java_class->name() << "[1];" << endl; // Hack for msvc. |
1381 else { | 1381 else { |
1382 // D-side signal callbacks | 1382 // D-side signal callbacks |
1383 for(int i = 0; i < signal_funcs.size(); i++) { | 1383 for(int i = 0; i < signal_funcs.size(); i++) { |
1384 AbstractMetaFunction *signal = signal_funcs.at(i); | 1384 AbstractMetaFunction *signal = signal_funcs.at(i); |
1385 writeSignalHandler(s, java_class, signal); | 1385 s << "extern \"C\" DLL_PUBLIC void " << signalExternName(java_class, signal) << "_handle(void* d_entity, void** args);" << endl; |
1386 } | 1386 } |
1387 | 1387 |
1388 if(signal_funcs.size() > 0) | 1388 if(signal_funcs.size() > 0) |
1389 s << "EmitCallback emit_callbacks_" << java_class->name() << "[" << signal_funcs.size() << "] = {" << endl; | 1389 s << "EmitCallback emit_callbacks_" << java_class->name() << "[" << signal_funcs.size() << "] = {" << endl; |
1390 else | 1390 else |
3237 | 3237 |
3238 QString cls_name = getTypeName(targ->typeEntry(), EnumAsInts); | 3238 QString cls_name = getTypeName(targ->typeEntry(), EnumAsInts); |
3239 cls_name.remove("_ConcreteWrapper"); | 3239 cls_name.remove("_ConcreteWrapper"); |
3240 | 3240 |
3241 s << endl | 3241 s << endl |
3242 << INDENT << "{" << endl // qtd2 hack, additional scope for avoiding duplicating of "i" | 3242 // << INDENT << "{" << endl // qtd2 hack, additional scope for avoiding duplicating of "i" |
3243 << INDENT; | 3243 << INDENT; |
3244 | 3244 |
3245 switch (type->type()) { | 3245 switch (type->type()) { |
3246 case ContainerTypeEntry::LinkedListContainer: | 3246 case ContainerTypeEntry::LinkedListContainer: |
3247 case ContainerTypeEntry::QueueContainer: | 3247 case ContainerTypeEntry::QueueContainer: |
3262 s << ";" << endl | 3262 s << ";" << endl |
3263 << INDENT; | 3263 << INDENT; |
3264 | 3264 |
3265 | 3265 |
3266 writeTypeInfo(s, java_type, ForceValueType); | 3266 writeTypeInfo(s, java_type, ForceValueType); |
3267 QString index = "i_" + qt_name; | |
3267 s << "::const_iterator " << qt_name << "_end_it = " << qt_name << ".constEnd();" << endl | 3268 s << "::const_iterator " << qt_name << "_end_it = " << qt_name << ".constEnd();" << endl |
3268 << INDENT << "int i = 0;" << endl | 3269 << INDENT << QString("int %0 = 0;").arg(index) << endl |
3269 << INDENT; | 3270 << INDENT; |
3270 s << "for ("; | 3271 s << "for ("; |
3271 writeTypeInfo(s, java_type, ForceValueType); | 3272 writeTypeInfo(s, java_type, ForceValueType); |
3272 s << "::const_iterator " << qt_name << "_it = " << qt_name << ".constBegin(); " | 3273 s << "::const_iterator " << qt_name << "_it = " << qt_name << ".constBegin(); " |
3273 << qt_name << "_it != " << qt_name << "_end_it; ++" << qt_name << "_it) {" << endl; | 3274 << qt_name << "_it != " << qt_name << "_end_it; ++" << qt_name << "_it) {" << endl; |
3276 s << INDENT; | 3277 s << INDENT; |
3277 writeTypeInfo(s, targ); | 3278 writeTypeInfo(s, targ); |
3278 s << " __qt_tmp = *" << qt_name << "_it;" << endl; | 3279 s << " __qt_tmp = *" << qt_name << "_it;" << endl; |
3279 | 3280 |
3280 if(targ->isTargetLangString()) | 3281 if(targ->isTargetLangString()) |
3281 s << INDENT << "void *__java_tmp = qtd_string_from_array(" << java_name << ", i);" << endl; | 3282 s << INDENT << "void *__java_tmp = qtd_string_from_array(" << java_name << ", " << index << ");" << endl; |
3282 | 3283 |
3283 writeQtToJava(s, targ, "__qt_tmp", "__java_tmp", 0, -1, BoxedPrimitive); | 3284 writeQtToJava(s, targ, "__qt_tmp", "__java_tmp", 0, -1, BoxedPrimitive); |
3284 | 3285 |
3285 s << INDENT << "qtd_assign_" << cls_name << "_array_element(" << java_name << ", i, __java_tmp);" << endl; | 3286 s << INDENT << "qtd_assign_" << cls_name << "_array_element(" << java_name << ", " << index << ", __java_tmp);" << endl; |
3286 s << INDENT << "++i;" << endl; | 3287 s << INDENT << "++" << index << ";" << endl; |
3287 } | 3288 } |
3288 s << INDENT << "}" << endl | 3289 s << INDENT << "}" << endl; |
3289 << INDENT << "}" << endl; | 3290 // << INDENT << "}" << endl; |
3290 | 3291 |
3291 } else if (type->type() == ContainerTypeEntry::PairContainer) { | 3292 } else if (type->type() == ContainerTypeEntry::PairContainer) { |
3292 QList<AbstractMetaType *> args = java_type->instantiations(); | 3293 QList<AbstractMetaType *> args = java_type->instantiations(); |
3293 Q_ASSERT(args.size() == 2); | 3294 Q_ASSERT(args.size() == 2); |
3294 | 3295 |