| 8255 | } |
| 8256 | |
| 8257 | bool ValueType::fromLibraryType(const std::string &typestr, const Settings &settings) |
| 8258 | { |
| 8259 | const Library::PodType* podtype = settings.library.podtype(typestr); |
| 8260 | if (podtype && (podtype->sign == 's' || podtype->sign == 'u')) { |
| 8261 | if (podtype->size == 1) |
| 8262 | type = ValueType::Type::CHAR; |
| 8263 | else if (podtype->size == settings.platform.sizeof_int) |
| 8264 | type = ValueType::Type::INT; |
| 8265 | else if (podtype->size == settings.platform.sizeof_short) |
| 8266 | type = ValueType::Type::SHORT; |
| 8267 | else if (podtype->size == settings.platform.sizeof_long) |
| 8268 | type = ValueType::Type::LONG; |
| 8269 | else if (podtype->size == settings.platform.sizeof_long_long) |
| 8270 | type = ValueType::Type::LONGLONG; |
| 8271 | else if (podtype->stdtype == Library::PodType::Type::BOOL) |
| 8272 | type = ValueType::Type::BOOL; |
| 8273 | else if (podtype->stdtype == Library::PodType::Type::CHAR) |
| 8274 | type = ValueType::Type::CHAR; |
| 8275 | else if (podtype->stdtype == Library::PodType::Type::SHORT) |
| 8276 | type = ValueType::Type::SHORT; |
| 8277 | else if (podtype->stdtype == Library::PodType::Type::INT) |
| 8278 | type = ValueType::Type::INT; |
| 8279 | else if (podtype->stdtype == Library::PodType::Type::LONG) |
| 8280 | type = ValueType::Type::LONG; |
| 8281 | else if (podtype->stdtype == Library::PodType::Type::LONGLONG) |
| 8282 | type = ValueType::Type::LONGLONG; |
| 8283 | else |
| 8284 | type = ValueType::Type::UNKNOWN_INT; |
| 8285 | sign = (podtype->sign == 'u') ? ValueType::UNSIGNED : ValueType::SIGNED; |
| 8286 | return true; |
| 8287 | } |
| 8288 | if (podtype && podtype->stdtype == Library::PodType::Type::NO) { |
| 8289 | type = ValueType::Type::POD; |
| 8290 | sign = ValueType::UNKNOWN_SIGN; |
| 8291 | return true; |
| 8292 | } |
| 8293 | |
| 8294 | const Library::PlatformType *platformType = settings.library.platform_type(typestr, settings.platform.toString()); |
| 8295 | if (platformType) { |
| 8296 | if (platformType->mType == "char") |
| 8297 | type = ValueType::Type::CHAR; |
| 8298 | else if (platformType->mType == "short") |
| 8299 | type = ValueType::Type::SHORT; |
| 8300 | else if (platformType->mType == "wchar_t") |
| 8301 | type = ValueType::Type::WCHAR_T; |
| 8302 | else if (platformType->mType == "int") |
| 8303 | type = platformType->mLong ? ValueType::Type::LONG : ValueType::Type::INT; |
| 8304 | else if (platformType->mType == "long") |
| 8305 | type = platformType->mLong ? ValueType::Type::LONGLONG : ValueType::Type::LONG; |
| 8306 | if (platformType->mSigned) |
| 8307 | sign = ValueType::SIGNED; |
| 8308 | else if (platformType->mUnsigned) |
| 8309 | sign = ValueType::UNSIGNED; |
| 8310 | if (platformType->mPointer) |
| 8311 | pointer = 1; |
| 8312 | if (platformType->mPtrPtr) |
| 8313 | pointer = 2; |
| 8314 | if (platformType->mConstPtr) |