@@ -956,8 +956,8 @@ void AbstractModuleRecord::gatherAsynchronousTransitiveDependencies(OrderedHashS
956956 auto * cyclic = dynamicDowncast<CyclicModuleRecord>(module );
957957 if (!cyclic)
958958 continue ;
959- // 6. If module.[[Status]] is either EVALUATING or EVALUATED , return result.
960- if (cyclic->status () == CyclicModuleRecord::Status::Evaluating || cyclic->status () == CyclicModuleRecord::Status::Evaluated )
959+ // 6. If module.[[Status]] is either EVALUATING or IsModuleSCCEvaluated(module) , return result.
960+ if (cyclic->status () == CyclicModuleRecord::Status::Evaluating || cyclic->isSCCEvaluated () )
961961 continue ;
962962 // 7. If module.[[HasTLA]] is true, then
963963 if (cyclic->hasTLA ()) {
@@ -994,14 +994,17 @@ bool AbstractModuleRecord::readyForSyncExecution()
994994 // 4. Append module to seen.
995995 if (!seen.add (module ).isNewEntry )
996996 continue ;
997- // 5. If module.[[Status]] is EVALUATED , return true.
998- if (cyclic->status () == CyclicModuleRecord::Status::Evaluated )
997+ // 5. If IsModuleSCCEvaluated( module) , return true.
998+ if (cyclic->isSCCEvaluated () )
999999 continue ;
10001000 // 6. If module.[[Status]] is either EVALUATING or EVALUATING-ASYNC, return false.
10011001 if (cyclic->status () == CyclicModuleRecord::Status::Evaluating || cyclic->status () == CyclicModuleRecord::Status::EvaluatingAsync)
10021002 return false ;
1003- // 7. Assert: module.[[Status]] is LINKED.
1004- ASSERT (cyclic->status () == CyclicModuleRecord::Status::Linked);
1003+ // 7. Assert: module.[[Status]] is LINKED or EVALUATED.
1004+ // EVALUATED is reachable for a module whose own body has run inside a cycle that is still
1005+ // awaiting; the walk below then reaches its EVALUATING-ASYNC cycle root and returns false.
1006+ // https://github.com/tc39/proposal-defer-import-eval/issues/86
1007+ ASSERT (cyclic->status () == CyclicModuleRecord::Status::Linked || cyclic->status () == CyclicModuleRecord::Status::Evaluated);
10051008 // 8. If module.[[HasTLA]] is true, return false.
10061009 if (cyclic->hasTLA ())
10071010 return false ;
0 commit comments