MCPcopy Create free account
hub / github.com/anjo76/angelscript / RegisterEnum

Method RegisterEnum

sdk/angelscript/source/as_scriptengine.cpp:6259–6311  ·  view source on GitHub ↗

interface

Source from the content-addressed store, hash-verified

6257
6258// interface
6259int 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
6314int asCScriptEngine::RegisterEnumValue(const char *typeName, const char *valueName, int value)

Callers

nothing calls this directly

Calls 8

GetTypeInfoMethod · 0.80
CheckNameConflictMethod · 0.80
CreatePrimitiveMethod · 0.80
PushLastMethod · 0.80
ParseDataTypeMethod · 0.45
GetTokenMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected