interface
| 6257 | |
| 6258 | // interface |
| 6259 | int asCScriptEngine::RegisterEnum(const char *name) |
| 6260 | { |
| 6261 | // Check the name |
| 6262 | if( NULL == name ) |
| 6263 | return ConfigError(asINVALID_NAME, "RegisterEnum", name, 0); |
| 6264 | |
| 6265 | // Verify if the name has been registered as a type already |
| 6266 | if( GetRegisteredType(name, defaultNamespace) ) |
| 6267 | return asALREADY_REGISTERED; |
| 6268 | |
| 6269 | // Use builder to parse the datatype |
| 6270 | asCDataType dt; |
| 6271 | asCBuilder bld(this, 0); |
| 6272 | bool oldMsgCallback = msgCallback; msgCallback = false; |
| 6273 | int r = bld.ParseDataType(name, &dt, defaultNamespace); |
| 6274 | msgCallback = oldMsgCallback; |
| 6275 | if( r >= 0 ) |
| 6276 | { |
| 6277 | // If it is not in the defaultNamespace then the type was successfully parsed because |
| 6278 | // it is declared in a parent namespace which shouldn't be treated as an error |
| 6279 | if( dt.GetTypeInfo() && dt.GetTypeInfo()->nameSpace == defaultNamespace ) |
| 6280 | return ConfigError(asERROR, "RegisterEnum", name, 0); |
| 6281 | } |
| 6282 | |
| 6283 | // Make sure the name is not a reserved keyword |
| 6284 | size_t tokenLen; |
| 6285 | int token = tok.GetToken(name, strlen(name), &tokenLen); |
| 6286 | if( token != ttIdentifier || strlen(name) != tokenLen ) |
| 6287 | return ConfigError(asINVALID_NAME, "RegisterEnum", name, 0); |
| 6288 | |
| 6289 | r = bld.CheckNameConflict(name, 0, 0, defaultNamespace, true, false, false); |
| 6290 | if( r < 0 ) |
| 6291 | return ConfigError(asNAME_TAKEN, "RegisterEnum", name, 0); |
| 6292 | |
| 6293 | asCEnumType *st = asNEW(asCEnumType)(this); |
| 6294 | if( st == 0 ) |
| 6295 | return ConfigError(asOUT_OF_MEMORY, "RegisterEnum", name, 0); |
| 6296 | |
| 6297 | asCDataType dataType; |
| 6298 | dataType.CreatePrimitive(ttInt, false); |
| 6299 | |
| 6300 | st->flags = asOBJ_ENUM | asOBJ_SHARED; |
| 6301 | st->size = 4; |
| 6302 | st->name = name; |
| 6303 | st->nameSpace = defaultNamespace; |
| 6304 | |
| 6305 | allRegisteredTypes.Insert(asSNameSpaceNamePair(st->nameSpace, st->name), st); |
| 6306 | registeredEnums.PushLast(st); |
| 6307 | |
| 6308 | currentGroup->types.PushLast(st); |
| 6309 | |
| 6310 | return GetTypeIdByDecl(name); |
| 6311 | } |
| 6312 | |
| 6313 | // interface |
| 6314 | int asCScriptEngine::RegisterEnumValue(const char *typeName, const char *valueName, int value) |
nothing calls this directly
no test coverage detected