MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxNewLinkerSymbol

Function fxNewLinkerSymbol

xs/tools/xslBase.c:523–568  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

521}
522
523txLinkerSymbol* fxNewLinkerSymbol(txLinker* linker, txString theString, txFlag flag, txBoolean table)
524{
525 txString aString;
526 txSize aLength;
527 txSize aSum;
528 txSize aModulo;
529 txLinkerSymbol* aSymbol;
530 txID anID;
531
532 aString = theString;
533 aLength = 0;
534 aSum = 0;
535 while(*aString != 0) {
536 aLength++;
537 aSum = (aSum << 1) + *aString++;
538 }
539 aSum &= 0x7FFFFFFF;
540 aModulo = aSum % linker->symbolModulo;
541 aSymbol = linker->symbolTable[aModulo];
542 while (aSymbol != C_NULL) {
543 if (aSymbol->sum == aSum)
544 if (c_strcmp(aSymbol->string, theString) == 0)
545 break;
546 aSymbol = aSymbol->next;
547 }
548 if (aSymbol == C_NULL) {
549 anID = linker->symbolIndex;
550 if (anID == linker->symbolCount) {
551 exit(1);
552 }
553 aSymbol = fxNewLinkerChunk(linker, sizeof(txLinkerSymbol));
554 aSymbol->next = linker->symbolTable[aModulo];
555 aSymbol->ID = anID;
556 aSymbol->length = aLength + 1;
557 aSymbol->string = fxNewLinkerString(linker, theString, aLength);
558 aSymbol->sum = aSum;
559 aSymbol->flag = flag;
560 linker->symbolArray[anID] = aSymbol;
561 if (table)
562 linker->symbolTable[aModulo] = aSymbol;
563 linker->symbolIndex++;
564 }
565 else
566 aSymbol->flag |= flag;
567 return aSymbol;
568}
569
570void fxReadSymbols(txLinker* linker, txString path, txFlag flag, FILE** fileAddress)
571{

Callers 5

mainFunction · 0.85
fxDefaultSymbolsFunction · 0.85
fxMapSymbolsFunction · 0.85
fxReadSymbolsFunction · 0.85
mainFunction · 0.85

Calls 2

fxNewLinkerChunkFunction · 0.85
fxNewLinkerStringFunction · 0.85

Tested by

no test coverage detected