MojErr MojDbPerfUpdateTest::testUpdateKind(MojDb& db) { MojString buf; MojErr err = buf.format("\nUPDATE KIND,,,,,\n"); MojTestErrCheck(err); err = fileWrite(file, buf); MojTestErrCheck(err); err = updateKind(db, MojPerfSmKindId, MojPerfSmKindStr, MojPerfSmKindExtraIndex, &MojDbPerfTest::createSmallObj); MojTestErrCheck(err); err = updateKind(db, MojPerfMedKindId, MojPerfMedKindStr, MojPerfMedKindExtraIndex, &MojDbPerfTest::createMedObj); MojTestErrCheck(err); err = updateKind(db, MojPerfLgKindId, MojPerfLgKindStr, MojPerfLgKindExtraIndex, &MojDbPerfTest::createLargeObj); MojTestErrCheck(err); err = updateKind(db, MojPerfMedNestedKindId, MojPerfMedNestedKindStr, MojPerfMedNestedKindExtraIndex, &MojDbPerfTest::createMedNestedObj); MojTestErrCheck(err); err = updateKind(db, MojPerfLgNestedKindId, MojPerfLgNestedKindStr, MojPerfLgNestedKindExtraIndex, &MojDbPerfTest::createLargeNestedObj); MojTestErrCheck(err); err = updateKind(db, MojPerfMedArrayKindId, MojPerfMedArrayKindStr, MojPerfMedArrayKindExtraIndex, &MojDbPerfTest::createMedArrayObj); MojTestErrCheck(err); err = updateKind(db, MojPerfLgArrayKindId, MojPerfLgArrayKindStr, MojPerfLgArrayKindExtraIndex, &MojDbPerfTest::createLargeArrayObj); MojTestErrCheck(err); return MojErrNone; }
static void findVerilogTags (void) { tokenInfo *const token = newToken (); int c = '\0'; currentContext = newToken (); while (c != EOF) { c = vGetc (); c = skipWhite (c); switch (c) { /* Store current block name whenever a : is found * This is used later by any tag type that requires this information * */ case ':': vStringCopy (currentContext->blockName, token->name); break; /* Skip interface modport port declarations */ case '(': if (currentContext && currentContext->lastKind == K_MODPORT) { skipPastMatch ("()"); } break; /* Drop context on prototypes because they don't have an end * statement */ case ';': if (currentContext->scope && currentContext->scope->prototype) { verbose ("Dropping context %s\n", vStringValue (currentContext->name)); currentContext = popToken (currentContext); currentContext->prototype = FALSE; } /* Prototypes end at the end of statement */ if (currentContext->prototype) { currentContext->prototype = FALSE; } break; default : if (isIdentifierCharacter (c)) { readIdentifier (token, c); updateKind (token); findTag (token); } } } deleteToken (token); pruneTokens (currentContext); currentContext = NULL; }
static void processClass (tokenInfo *const token) { /*Note: At the moment, only identifies typedef name and not its contents */ int c; tokenInfo *extra; tokenInfo *parameters = NULL; /* Get identifiers */ c = skipWhite (vGetc ()); if (isIdentifierCharacter (c)) { readIdentifier (token, c); c = skipWhite (vGetc ()); } /* Find class parameters list */ if (c == '#') { c = skipWhite (vGetc ()); if (c == '(') { parameters = newToken (); do { c = skipWhite (vGetc ()); readIdentifier (parameters, c); updateKind (parameters); verbose ("Found class parameter %s\n", vStringValue (parameters->name)); if (parameters->kind == K_UNDEFINED) { parameters->kind = K_CONSTANT; parameters = pushToken (parameters, newToken ()); c = vGetc(); while (c != ',' && c != ')' && c != EOF) { c = vGetc(); } } } while (c != ')' && c != EOF); c = vGetc (); parameters = popToken (parameters); } c = skipWhite (vGetc ()); } /* Search for inheritance information */ if (isIdentifierCharacter (c)) { extra = newToken (); readIdentifier (extra, c); c = skipWhite (vGetc ()); if (strcmp (vStringValue (extra->name), "extends") == 0) { readIdentifier (extra, c); vStringCopy (token->inheritance, extra->name); verbose ("Inheritance %s\n", vStringValue (token->inheritance)); } deleteToken (extra); } /* Use last identifier to create tag */ createTag (token); /* Add parameter list */ while (parameters) { createTag (parameters); parameters = popToken (parameters); } }
static void processPortList (int c) { if ((c = skipWhite (c)) == '(') { tokenInfo *token = newToken (); /* Get next non-whitespace character after ( */ c = skipWhite (vGetc ()); while (c != ';' && c != EOF) { if (c == '[') { c = skipPastMatch ("[]"); } else if (c == '(') { c = skipPastMatch ("()"); } else if (c == '{') { c = skipPastMatch ("{}"); } else if (c == '`') { c = skipMacro (c); } else if (c == '=') { /* Search for next port or end of port declaration */ while (c != ',' && c != ')' && c != EOF) { c = skipWhite (vGetc ()); } } else if (isIdentifierCharacter (c)) { readIdentifier (token, c); updateKind (token); if (token->kind == K_UNDEFINED) { /* Only add port name if it is the last keyword. * First keyword can be a dynamic type, like a class name */ c = skipWhite (vGetc ()); if (! isIdentifierCharacter (c) || c == '`') { verbose ("Found port: %s\n", vStringValue (token->name)); token->kind = K_PORT; createTag (token); } } else { c = skipWhite (vGetc ()); } } else { c = skipWhite (vGetc ()); } } if (! isIdentifierCharacter (c)) vUngetc (c); deleteToken (token); } }