Mercurial > projects > ldc
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 |