comparison gen/classes.cpp @ 906:f1ed7fe85138

Casts from interface to class generally need to be dynamic. Fixes #189.
author Christian Kamm <kamm incasoftware de>
date Sun, 25 Jan 2009 12:35:11 +0100
parents a125ada7fd95
children 545f54041d91
comparison
equal deleted inserted replaced
905:bd000a7fab18 906:f1ed7fe85138
1088 Logger::println("to class"); 1088 Logger::println("to class");
1089 int poffset; 1089 int poffset;
1090 // interface -> class 1090 // interface -> class
1091 if (fc->sym->isInterfaceDeclaration()) { 1091 if (fc->sym->isInterfaceDeclaration()) {
1092 Logger::println("interface cast"); 1092 Logger::println("interface cast");
1093 return DtoCastInterfaceToObject(val, _to); 1093 return DtoDynamicCastInterface(val, _to);
1094 } 1094 }
1095 // class -> class - static down cast 1095 // class -> class - static down cast
1096 else if (tc->sym->isBaseOf(fc->sym,NULL)) { 1096 else if (tc->sym->isBaseOf(fc->sym,NULL)) {
1097 Logger::println("static down cast)"); 1097 Logger::println("static down cast");
1098 const LLType* tolltype = DtoType(_to); 1098 const LLType* tolltype = DtoType(_to);
1099 LLValue* rval = DtoBitCast(val->getRVal(), tolltype); 1099 LLValue* rval = DtoBitCast(val->getRVal(), tolltype);
1100 return new DImValue(_to, rval); 1100 return new DImValue(_to, rval);
1101 } 1101 }
1102 // class -> class - dynamic up cast 1102 // class -> class - dynamic up cast