Class PropertyCycleMarker
Runs PropertyTypeGraph from the types that actually GET a generated recursive operator, through the
shared Tarjan. A type whose FIELDS node is in a cyclic component is marked PROPERTY_CYCLE; each of
its fields whose held node (PropertyTypeGraph.holdsOf(ISymbol)) is in the SAME component (so it can lead back) is
marked CYCLIC_PROPERTY. Only a cycle can make an operator recurse forever, and recursion can only loop
through cycle members, so guarding exactly these is enough - a type that merely REACHES a cycle is unchanged.
Every concrete parameterisation of a developer's generic is marked as analysed ("FALSE" unless cyclic):
phase 7 still creates a few parameterisations, and PropertyCycles guards one it finds unanalysed.
Adds no errors. Call under the program lock: it writes squirrelled data.
-
Constructor Summary
ConstructorsConstructorDescriptionPropertyCycleMarker(PropertyTypeGraph graph, Parameterisations parameterisations) -
Method Summary
-
Constructor Details
-
PropertyCycleMarker
-
-
Method Details
-
mark
public int mark()Find and mark the cyclic types.- Returns:
- the number of types marked cyclic
-