Fix cycle in coersion of functional type to unknown classifier (fixes MPSCR-72)

Use statically built FunctionTypes table in closures for
finding canonical functional type for a given closure.
This commit is contained in:
Grigorii Kirgizov 2020-09-03 14:34:18 +03:00
parent b693156229
commit d9a35005e2
5 changed files with 8250 additions and 586 deletions

View File

@ -1082,6 +1082,7 @@
<module ref="f486b8aa-5b2d-4ec0-8ef5-8f45d773fb84(jetbrains.mps.lang.typechecking.runtime)" kind="rt" />
<module ref="a5478664-6b44-4c62-a9f7-434f8aa57eee(jetbrains.mps.logic.runtime)" kind="rt" />
<module ref="9a4afe51-f114-4595-b5df-048ce3c596be(jetbrains.mps.runtime)" kind="rt" />
<module ref="4c6a28d1-2c60-478d-b36e-db9b3cbb21fb(closures.runtime)" kind="cl" />
<module ref="a9e4c532-c5f5-4bb7-99ef-42abb73bbb70(jetbrains.mps.lang.descriptor.aspects)" kind="cl" />
<module ref="35320f26-77cb-4c55-be9f-a97a27770af1(jetbrains.mps.logic)" kind="cl" />
</dependencies>
@ -1881,6 +1882,7 @@
<uses>
<language id="l:f3061a53-9226-4cc5-a443-f952ceaf5816:jetbrains.mps.baseLanguage" />
<language id="l:fd392034-7849-419d-9071-12563d152375:jetbrains.mps.baseLanguage.closures" />
<language id="l:9e36d2ee-c59c-4580-9e81-646748d0614b:jetbrains.mps.baseLanguage.closuresExt" />
<language id="l:83888646-71ce-4f1c-9c53-c54016f6ad4f:jetbrains.mps.baseLanguage.collections" />
<language id="l:f2801650-65d5-424e-bb1b-463a8781b786:jetbrains.mps.baseLanguage.javadoc" />
<language id="l:760a0a8c-eabb-4521-8bfd-65db761a9ba3:jetbrains.mps.baseLanguage.logging" />

View File

@ -70,6 +70,7 @@
<sourcePath />
<dependencies>
<dependency reexport="false">35320f26-77cb-4c55-be9f-a97a27770af1(jetbrains.mps.logic)</dependency>
<dependency reexport="false">4c6a28d1-2c60-478d-b36e-db9b3cbb21fb(closures.runtime)</dependency>
</dependencies>
<languageVersions>
<language slang="l:f3061a53-9226-4cc5-a443-f952ceaf5816:jetbrains.mps.baseLanguage" version="11" />
@ -113,6 +114,7 @@
<module reference="6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)" version="0" />
<module reference="6ed54515-acc8-4d1e-a16c-9fd6cfe951ea(MPS.Core)" version="0" />
<module reference="8865b7a8-5271-43d3-884c-6fd1d9cfdd34(MPS.OpenAPI)" version="0" />
<module reference="4c6a28d1-2c60-478d-b36e-db9b3cbb21fb(closures.runtime)" version="0" />
<module reference="f3061a53-9226-4cc5-a443-f952ceaf5816(jetbrains.mps.baseLanguage)" version="0" />
<module reference="fd392034-7849-419d-9071-12563d152375(jetbrains.mps.baseLanguage.closures)" version="0" />
<module reference="9e36d2ee-c59c-4580-9e81-646748d0614b(jetbrains.mps.baseLanguage.closuresExt)" version="0" />

View File

@ -471,9 +471,6 @@
<concept id="7400021826774799413" name="jetbrains.mps.lang.smodel.structure.NodePointerExpression" flags="ng" index="2tJFMh">
<child id="7400021826774799510" name="ref" index="2tJFKM" />
</concept>
<concept id="4693937538533521280" name="jetbrains.mps.lang.smodel.structure.OfConceptOperation" flags="ng" index="v3k3i">
<child id="4693937538533538124" name="requestedConcept" index="v3oSu" />
</concept>
<concept id="1173122760281" name="jetbrains.mps.lang.smodel.structure.Node_GetAncestorsOperation" flags="nn" index="z$bX8" />
<concept id="2396822768958367367" name="jetbrains.mps.lang.smodel.structure.AbstractTypeCastExpression" flags="nn" index="$5XWr">
<child id="6733348108486823193" name="leftExpression" index="1m5AlR" />
@ -490,7 +487,6 @@
<child id="1145567471833" name="createdType" index="2T96Bj" />
</concept>
<concept id="1171407110247" name="jetbrains.mps.lang.smodel.structure.Node_GetAncestorOperation" flags="nn" index="2Xjw5R" />
<concept id="1171500988903" name="jetbrains.mps.lang.smodel.structure.Node_GetChildrenOperation" flags="nn" index="32TBzR" />
<concept id="1154546950173" name="jetbrains.mps.lang.smodel.structure.ConceptReference" flags="ng" index="3gn64h">
<reference id="1154546997487" name="concept" index="3gnhBz" />
</concept>
@ -642,7 +638,6 @@
<concept id="1240216724530" name="jetbrains.mps.baseLanguage.collections.structure.LinkedHashMapCreator" flags="nn" index="32Fmki" />
<concept id="1162935959151" name="jetbrains.mps.baseLanguage.collections.structure.GetSizeOperation" flags="nn" index="34oBXx" />
<concept id="1175845471038" name="jetbrains.mps.baseLanguage.collections.structure.ReverseOperation" flags="nn" index="35Qw8J" />
<concept id="1201792049884" name="jetbrains.mps.baseLanguage.collections.structure.TranslateOperation" flags="nn" index="3goQfb" />
<concept id="1201872418428" name="jetbrains.mps.baseLanguage.collections.structure.GetKeysOperation" flags="nn" index="3lbrtF" />
<concept id="1178286324487" name="jetbrains.mps.baseLanguage.collections.structure.SortDirection" flags="nn" index="1nlBCl" />
<concept id="1197683403723" name="jetbrains.mps.baseLanguage.collections.structure.MapType" flags="in" index="3rvAFt">
@ -682,7 +677,6 @@
</concept>
<concept id="1176501494711" name="jetbrains.mps.baseLanguage.collections.structure.IsNotEmptyOperation" flags="nn" index="3GX2aA" />
<concept id="1172254888721" name="jetbrains.mps.baseLanguage.collections.structure.ContainsOperation" flags="nn" index="3JPx81" />
<concept id="31378964227347002" name="jetbrains.mps.baseLanguage.collections.structure.SelectNotNullOperation" flags="ng" index="1KnU$U" />
<concept id="8293956702609956630" name="jetbrains.mps.baseLanguage.collections.structure.MultiForEachVariableReference" flags="nn" index="3M$PaV">
<reference id="8293956702609966325" name="variable" index="3M$S_o" />
</concept>
@ -693,7 +687,6 @@
<concept id="1228228912534" name="jetbrains.mps.baseLanguage.collections.structure.DowncastExpression" flags="nn" index="3S9uib">
<child id="1228228959951" name="expression" index="3S9DZi" />
</concept>
<concept id="1178894719932" name="jetbrains.mps.baseLanguage.collections.structure.DistinctOperation" flags="nn" index="1VAtEI" />
</language>
<language id="c4803b19-6d89-4a3b-bf82-390769514add" name="jetbrains.mps.lang.coderules">
<concept id="1618328391714763069" name="jetbrains.mps.lang.coderules.structure.MacroTable" flags="ng" index="0oKg$">
@ -758,9 +751,6 @@
<concept id="6533016889629821361" name="jetbrains.mps.lang.coderules.structure.QueryTable" flags="ng" index="KEFAe">
<child id="6533016889629824446" name="query" index="KEEm1" />
</concept>
<concept id="1204249894870288679" name="jetbrains.mps.lang.coderules.structure.RequireAllStatement" flags="ng" index="Oftf1">
<child id="1204249894870289978" name="nodes" index="Oftjs" />
</concept>
<concept id="5042557354438383712" name="jetbrains.mps.lang.coderules.structure.TermListType" flags="ig" index="VbTHi" />
<concept id="2381360340662937504" name="jetbrains.mps.lang.coderules.structure.TermType" flags="ig" index="32pEOW" />
<concept id="6097203247139556923" name="jetbrains.mps.lang.coderules.structure.CallMacroTemplate" flags="ng" index="3hwh0R">
@ -35750,6 +35740,33 @@
<node concept="10Oyi0" id="4E290qPZ8bM" role="1tU5fm" />
</node>
</node>
<node concept="2tJIrI" id="3DgB4rOx085" role="jymVt" />
<node concept="2YIFZL" id="3DgB4rOx1ZG" role="jymVt">
<property role="TrG5h" value="length" />
<node concept="3clFbS" id="3DgB4rOx1ZJ" role="3clF47">
<node concept="3clFbF" id="3DgB4rOx2dS" role="3cqZAp">
<node concept="2OqwBi" id="3DgB4rOx2Ws" role="3clFbG">
<node concept="1rXfSq" id="3DgB4rOx2dR" role="2Oq$k0">
<ref role="37wK5l" node="3KV3FXjZXXV" resolve="getListContents" />
<node concept="37vLTw" id="3DgB4rOx2op" role="37wK5m">
<ref role="3cqZAo" node="3DgB4rOx2cu" resolve="list" />
</node>
</node>
<node concept="liA8E" id="3DgB4rOx3D5" role="2OqNvi">
<ref role="37wK5l" to="33ny:~List.size()" resolve="size" />
</node>
</node>
</node>
</node>
<node concept="3Tm1VV" id="3DgB4rOx1MH" role="1B3o_S" />
<node concept="10Oyi0" id="3DgB4rOx1Zn" role="3clF45" />
<node concept="37vLTG" id="3DgB4rOx2cu" role="3clF46">
<property role="TrG5h" value="list" />
<node concept="3uibUv" id="3DgB4rOx2ct" role="1tU5fm">
<ref role="3uigEE" to="6exd:1bm7a6EXvsP" resolve="DataForm" />
</node>
</node>
</node>
<node concept="3Tm1VV" id="1qY0I4b_aeZ" role="1B3o_S" />
<node concept="2tJIrI" id="1qY0I4b_afU" role="jymVt" />
<node concept="3clFbW" id="1qY0I4b_b9w" role="jymVt">
@ -38314,126 +38331,6 @@
<node concept="1nLNMY" id="4btN1w5JqOL" role="1nK1Vg">
<property role="TrG5h" value="decl_GenericDeclaration" />
<node concept="3clFbS" id="4btN1w5JqOM" role="1nLNMH">
<node concept="3cpWs8" id="4btN1w5Jwb$" role="3cqZAp">
<node concept="3cpWsn" id="4btN1w5Jwb_" role="3cpWs9">
<property role="TrG5h" value="tvds" />
<node concept="2I9FWS" id="4btN1w5JwbA" role="1tU5fm">
<ref role="2I9WkF" to="tpee:g96euPO" resolve="TypeVariableDeclaration" />
</node>
<node concept="2OqwBi" id="4btN1w5JwbB" role="33vP2m">
<node concept="3A2sRY" id="4btN1w5JwbC" role="2Oq$k0">
<ref role="3A2yKK" node="4btN1w5Jtzw" resolve="gdecl" />
</node>
<node concept="3Tsc0h" id="4btN1w5JwbD" role="2OqNvi">
<ref role="3TtcxE" to="tpee:g96eVAe" resolve="typeVariableDeclaration" />
</node>
</node>
</node>
</node>
<node concept="3cpWs8" id="7NX8kJ7gY_9" role="3cqZAp">
<node concept="3cpWsn" id="7NX8kJ7gY_a" role="3cpWs9">
<property role="TrG5h" value="usedClsTypes" />
<node concept="A3Dl8" id="4ZxjFYHiFNQ" role="1tU5fm">
<node concept="3Tqbb2" id="4ZxjFYHiFNS" role="A3Ik2">
<ref role="ehGHo" to="tpee:g7uibYu" resolve="ClassifierType" />
</node>
</node>
<node concept="2OqwBi" id="4ZxjFYHiMjM" role="33vP2m">
<node concept="2OqwBi" id="4ZxjFYHiJKV" role="2Oq$k0">
<node concept="2OqwBi" id="4ZxjFYHiI6L" role="2Oq$k0">
<node concept="3A2sRY" id="7NX8kJ7gZF$" role="2Oq$k0">
<ref role="3A2yKK" node="4btN1w5Jtzw" resolve="gdecl" />
</node>
<node concept="32TBzR" id="4ZxjFYHiI_j" role="2OqNvi" />
</node>
<node concept="v3k3i" id="4ZxjFYHiL$r" role="2OqNvi">
<node concept="chp4Y" id="4ZxjFYHiLRx" role="v3oSu">
<ref role="cht4Q" to="tpee:g7uibYu" resolve="ClassifierType" />
</node>
</node>
</node>
<node concept="3QWeyG" id="4ZxjFYHiMLA" role="2OqNvi">
<node concept="2OqwBi" id="7NX8kJ7gY_b" role="576Qk">
<node concept="37vLTw" id="7NX8kJ7h0m_" role="2Oq$k0">
<ref role="3cqZAo" node="4btN1w5Jwb_" resolve="tvds" />
</node>
<node concept="3goQfb" id="7NX8kJ7gY_d" role="2OqNvi">
<node concept="1bVj0M" id="7NX8kJ7gY_e" role="23t8la">
<node concept="3clFbS" id="7NX8kJ7gY_f" role="1bW5cS">
<node concept="3clFbF" id="7NX8kJ7gY_g" role="3cqZAp">
<node concept="2OqwBi" id="7NX8kJ7gY_h" role="3clFbG">
<node concept="37vLTw" id="7NX8kJ7gY_i" role="2Oq$k0">
<ref role="3cqZAo" node="7NX8kJ7gY_m" resolve="it" />
</node>
<node concept="2Rf3mk" id="7NX8kJ7gY_j" role="2OqNvi">
<node concept="1xMEDy" id="7NX8kJ7gY_k" role="1xVPHs">
<node concept="chp4Y" id="7NX8kJ7gY_l" role="ri$Ld">
<ref role="cht4Q" to="tpee:g7uibYu" resolve="ClassifierType" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="Rh6nW" id="7NX8kJ7gY_m" role="1bW2Oz">
<property role="TrG5h" value="it" />
<node concept="2jxLKc" id="7NX8kJ7gY_n" role="1tU5fm" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3cpWs8" id="4ZxjFYHiGv6" role="3cqZAp">
<node concept="3cpWsn" id="4ZxjFYHiGv9" role="3cpWs9">
<property role="TrG5h" value="usedDecls" />
<node concept="2I9FWS" id="4ZxjFYHiGv4" role="1tU5fm">
<ref role="2I9WkF" to="tpee:g7pOWCK" resolve="Classifier" />
</node>
<node concept="2OqwBi" id="4ZxjFYHiCbX" role="33vP2m">
<node concept="ANE8D" id="4ZxjFYHiC$x" role="2OqNvi" />
<node concept="2OqwBi" id="4ZxjFYHiBER" role="2Oq$k0">
<node concept="2OqwBi" id="ZJPHcumEJg" role="2Oq$k0">
<node concept="2OqwBi" id="4ZxjFYHiwR8" role="2Oq$k0">
<node concept="37vLTw" id="7NX8kJ7gY_o" role="2Oq$k0">
<ref role="3cqZAo" node="7NX8kJ7gY_a" resolve="usedClsTypes" />
</node>
<node concept="3$u5V9" id="4ZxjFYHi$vL" role="2OqNvi">
<node concept="1bVj0M" id="4ZxjFYHi$vN" role="23t8la">
<node concept="3clFbS" id="4ZxjFYHi$vO" role="1bW5cS">
<node concept="3clFbF" id="4ZxjFYHi$$f" role="3cqZAp">
<node concept="2OqwBi" id="4ZxjFYHi$RV" role="3clFbG">
<node concept="37vLTw" id="4ZxjFYHi$$e" role="2Oq$k0">
<ref role="3cqZAo" node="4ZxjFYHi$vP" resolve="it" />
</node>
<node concept="3TrEf2" id="4ZxjFYHiAEf" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:g7uigIF" resolve="classifier" />
</node>
</node>
</node>
</node>
<node concept="Rh6nW" id="4ZxjFYHi$vP" role="1bW2Oz">
<property role="TrG5h" value="it" />
<node concept="2jxLKc" id="4ZxjFYHi$vQ" role="1tU5fm" />
</node>
</node>
</node>
</node>
<node concept="1VAtEI" id="ZJPHcumFbm" role="2OqNvi" />
</node>
<node concept="1KnU$U" id="4ZxjFYHiC3x" role="2OqNvi" />
</node>
</node>
</node>
</node>
<node concept="Oftf1" id="3vTJNooAwxm" role="3cqZAp">
<node concept="37vLTw" id="3vTJNooAwz8" role="Oftjs">
<ref role="3cqZAo" node="4ZxjFYHiGv9" resolve="usedDecls" />
</node>
</node>
<node concept="3clFbH" id="2uP4pFJq8s" role="3cqZAp" />
<node concept="1nLNNL" id="4btN1w5JxhS" role="3cqZAp">
<node concept="1nLNMm" id="4btN1w5JxhT" role="1nLNNK">
<node concept="3Aq93q" id="3R6X$QVFCXf" role="1nLNMb">

View File

@ -1962,6 +1962,11 @@
</node>
</node>
</node>
<node concept="1SiIV0" id="3DgB4rOyUPL" role="3bR37C">
<node concept="3bR9La" id="3DgB4rOyUPM" role="1SiIV1">
<ref role="3bR37D" to="ffeo:7Kfy9QB6KZM" resolve="closures.runtime" />
</node>
</node>
</node>
<node concept="1E1JtA" id="6$MmqWflz4E" role="2G$12L">
<property role="BnDLt" value="true" />