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

Function fxResolveSpecifier

xs/sources/xsModule.c:2144–2194  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2142}
2143
2144txID fxResolveSpecifier(txMachine* the, txSlot* realm, txID moduleID, txSlot* name)
2145{
2146 if (moduleID == XS_NO_ID) {
2147 if (realm == mxModuleInstanceInternal(mxProgram.value.reference)->value.module.realm) {
2148 moduleID = fxFindModule(the, realm, XS_NO_ID, name);
2149 if (moduleID == XS_NO_ID) {
2150 fxToStringBuffer(the, name, the->nameBuffer, sizeof(the->nameBuffer));
2151 mxReferenceError("module \"%s\" not found", the->nameBuffer);
2152 }
2153 }
2154 else {
2155 if (name->kind == XS_STRING_X_KIND)
2156 moduleID = fxNewNameX(the, name->value.string);
2157 else
2158 moduleID = fxNewName(the, name);
2159 }
2160 }
2161 else {
2162 txSlot* resolveHook = mxResolveHook(realm);
2163 while (mxIsUndefined(resolveHook)) {
2164 txSlot* parent = mxRealmParent(realm);
2165 if (mxIsReference(parent)) {
2166 realm = parent->value.reference;
2167 resolveHook = mxResolveHook(realm);
2168 }
2169 else
2170 break;
2171 }
2172 if (mxIsUndefined(resolveHook)) {
2173 mxCheck(the, realm == mxModuleInstanceInternal(mxProgram.value.reference)->value.module.realm);
2174 moduleID = fxFindModule(the, realm, moduleID, name);
2175 if (moduleID == XS_NO_ID) {
2176 fxToStringBuffer(the, name, the->nameBuffer, sizeof(the->nameBuffer));
2177 mxReferenceError("module \"%s\" not found", the->nameBuffer);
2178 }
2179 }
2180 else {
2181 mxPushUndefined();
2182 mxPushSlot(resolveHook);
2183 mxCall();
2184 mxPushSlot(name);
2185 fxPushKeyString(the, moduleID, C_NULL);
2186 mxRunCount(2);
2187 moduleID = fxToID(the, the->stack);
2188 mxPop();
2189 }
2190 }
2191 name->kind = XS_SYMBOL_KIND;
2192 name->value.symbol = moduleID;
2193 return moduleID;
2194}
2195
2196void fxImport(txMachine* the)
2197{

Callers 3

fxLoadModulesFromFunction · 0.85
fxMapModuleDescriptorFunction · 0.85
fxRunImportAuxFunction · 0.85

Calls 6

fxToStringBufferFunction · 0.85
fxNewNameXFunction · 0.85
fxNewNameFunction · 0.85
fxPushKeyStringFunction · 0.85
fxToIDFunction · 0.85
fxFindModuleFunction · 0.70

Tested by

no test coverage detected