Commit Graph

2762 Commits

Author SHA1 Message Date
Grigorii Kirgizov 61dccfd2d9 BL types: simplify array typing & fix minor errors 2020-12-15 17:51:27 +03:00
Grigorii Kirgizov 4292709c3b Fix incremental clearing of Dispatcher state
It wasn't complete. Now `DispatchingFront.forget(occ)`
additionally triggers removal of invalid ReteNodes.
2020-12-15 17:51:27 +03:00
Grigorii Kirgizov 35335e3d15 Avoid storing DispatchingFront in SessionParts -- it can be stale
ConstraintsProcessing can reassign front internally,
so SessionParts can store a stale one.
2020-12-15 17:51:27 +03:00
Grigorii Kirgizov f051e6bf19 Avoid null nodes in UpdatesRecorder. Caused erroneous invalidation of null-origin rules. 2020-12-15 17:51:27 +03:00
Grigorii Kirgizov c455514325 Get more precise info on invalidated nodes (fixes MPSCR-82)
Get information on invalidated nodes from EvaluateStep & incr processing
instead of UpdatesRecorder, which has only partial info and can't handle
all cases.
2020-12-15 17:51:23 +03:00
Grigorii Kirgizov 88067571d0 Provide as eval result tags of invalidated rules. for MPSCR-82
Relevant for Incremental strategy.
Allows to more precisely track invalidated types of nodes.
Type of node is invalidated if rules with this origin
were invalidated during incremental processing.
2020-12-15 17:51:23 +03:00
Grigorii Kirgizov b4c441a41e Add few incremental tests, tried reproduce MPSCR-82
Unsuccessfully. Algorithm is ok, problem is in UpdatesRecorder.
2020-12-15 17:51:23 +03:00
Fedor Isakov 8dd43190b4 Switch to finding aspect clique for subject node in local typechecking
During generation, the imports set of a transient model doesn't always
reflect the actual set of imported languages.
2020-12-15 13:32:54 +01:00
Fedor Isakov 1acd35baca SModel types: support conversion of SConcept to concept<> type 2020-12-15 13:30:13 +01:00
Fedor Isakov c7dd00bb7e Sequence types: support covariant subtyping of sequence<> type 2020-12-15 13:29:24 +01:00
Fedor Isakov 034f7afa98 BL types: add rules for NPE-safe comparison operators 2020-12-15 13:28:44 +01:00
Fedor Isakov 03be7f19b5 Optimize processing of static rules
Avoid evaluating templates and producing rules on null
input and all required closure of this input, which effectively
constitutes the static collection of rules that are only
dependent on chosen aspect clique.
2020-12-13 22:09:31 +01:00
Fedor Isakov 159de90e6f Exclude free floating nodes from required set
Required nodes w/o a model, or "free floating" nodes
are excluded from the required set.
Instead all their valid references are processed.
2020-12-12 13:48:15 +01:00
Fedor Isakov c5fed5f2e0 BL and closure types: add necessary explicit dependencies. Fix tests.
In order to ensure properly functioning incremental typechecking
some explicit dependencies are to be declared.
2020-12-11 12:03:17 +01:00
Fedor Isakov d4f0c9741f Enable reuse of locally calculated types.
Typechecking results cache is consulted on a request to
locally calculate the type.
2020-12-11 12:03:17 +01:00
Fedor Isakov 415590f2b2 Minor optimization: memoize calculation of functional methods. 2020-12-11 12:03:17 +01:00
Fedor Isakov 5813704d9e Optimize application of rule templates via RulesPlanHandlder.
Avoid calling template's code if cached evaluation results are
not invalidated.
Keep information on required nodes (dependencies) together with
the list of produced rule ids.
2020-12-11 12:03:16 +01:00
Fedor Isakov c7eaa1dbf3 Clean up ProgramEvaluator API. Straighten up passing of session token. Drop RulesDiff usages. 2020-12-08 22:57:36 +01:00
Fedor Isakov 2ee4c30233 Add explicit dependencies to required sources. 2020-12-08 22:57:35 +01:00
Fedor Isakov ffe1a241bf Implement require(All) statement to call overloaded require methods.
The statement require(All) now invokes the overloaded require
method with the first parameter the input node.
2020-12-08 22:57:35 +01:00
Fedor Isakov 4eab445aa9 Introduce overloaded "require" methods to keep track of dependencies.
TemplateApplicationSession allows to invoke require with the
input node as the first parameter, which is then forwarded as
a "requirement" (TODO: rename to dependency).
2020-12-08 22:57:35 +01:00
Fedor Isakov 616c39ae38 Fix incremental test launcher
The use of ProgramProducer and other stuff have new requirements.
The program is now produced incrementally, with UpdatesRecorder
playing a major role in keeping track of changes.
2020-12-08 22:57:35 +01:00
Fedor Isakov e026674fb2 Introduce a means to clear invalidated rules in RulesPlanHandler.
In incremental mode all rules need to be moved to validated set
after all invalidated rules have been dropped.
2020-12-08 22:57:35 +01:00
Fedor Isakov 0ff05e39e7 Fix UpdatesRecorder to construct the transitive changes closure.
The changed set is processed transitively using "required"
association. (TODO: rename to dependency).
2020-12-08 12:52:13 +01:00
Fedor Isakov 8918b0afd8 Refactor RulesPlanHandler, introduce RulesPlan. Drop unused class.
Refactor the rules producing line to run via newly introduced RulesPlan.

Correctly process new and dropped rules.
2020-12-08 12:52:13 +01:00
Fedor Isakov 59db13bf41 Simplify UpdatesRecorder implementation. Fix input processing by ProgramFactory.
Move invalidation logic inside UpdatesRecorder from elsewhere.
Drop type parameters.
Avoid recording dependencies for null input.

ProgramFactory: always process input, not only the first time
2020-12-08 12:50:36 +01:00
Fedor Isakov da9814a18d Deprecate RulesDiff, introduce replacement methods in Program. 2020-12-06 19:00:43 +01:00
Fedor Isakov d637bed114 Enable cache data to be accesible with an Object key. Drop usages of PreambleSet.
PreambleSet exists only to allow to multiplex cached values by
query. There is no need for this now that the key can be a compound one.
2020-12-06 16:14:28 +01:00
Fedor Isakov e2926d8433 Enable reuse of RulesPlanHandler. 2020-12-06 10:52:11 +01:00
Fedor Isakov 64a8b71d24 Enable RulesPlanHandler to incrementally update rules. 2020-12-05 13:37:04 +01:00
Fedor Isakov b31b5be38f Refactor ProgramBuilder to a helper inner class. 2020-12-04 12:13:30 +01:00
Fedor Isakov 5413c78b0a Refactor and cleanup RulesPlanHandler. Ensure single mapping node->rules. 2020-12-04 12:13:30 +01:00
Fedor Isakov dcfe56c004 Deprecate RulesList, prepare to drop the class. 2020-12-03 20:17:47 +01:00
Fedor Isakov e7bb65ecff Refactoring in program producing: drop usages of RulesList, simplify code. 2020-12-03 20:16:11 +01:00
Fedor Isakov b35aab4912 Minor types optimization: change memoizer key. 2020-12-01 22:50:01 +01:00
Fedor Isakov f6123273d4 Minor refactoring: drop usages of Program.rulesLists() method. 2020-12-01 21:55:17 +01:00
Fedor Isakov c6152abdc2 Fix RuleBuilder not processing macro's input concept.
A query may be invoked without the input node, thus dispatching
macros by the specified concept. The concept must be taken into
account when calculating the "diff", so that the old (stale)
rules don't override the updated ones.
2020-11-29 00:20:15 +01:00
Fedor Isakov 60f59a7a80 Fix BL types: anonymous class creator has optional ref to constructor. 2020-11-29 00:16:51 +01:00
Fedor Isakov ac6972106b Fix memleak in LogicalState. Ensure processing machinery gets properly shut down on session end.
Clearing the controller field in LogicalState is not enough,
apparently some instances are leaked before the session
gets terminated.
2020-11-27 11:13:38 +01:00
Fedor Isakov 010e6cdc61 Minor refactoring: use Queries strategy for local typechecking too. 2020-11-27 10:06:09 +01:00
Fedor Isakov 4165c320ff Avoid throwing NPE on opening project, unload is called on an uninitialized plugin. 2020-11-24 13:48:42 +01:00
Fedor Isakov 044b707b77 Implement handlers for typeOf query in all types aspects. 2020-11-24 13:41:25 +01:00
Fedor Isakov 73f610b597 Introduce new kind of typechecking query, typeOf, having a subject.
This query kind is to be used in local typechecking.
The idea is to do away with constraints that are not essential for
typechecking a single node, thus making local type computation faster.
2020-11-24 13:41:25 +01:00
Fedor Isakov acc3167e21 A bunch of optimizations and minor refactorings.
Consolidate options, configure all from typechecking plugin.
Introduce a computable option to control using traces.

Introduce shared state to be used at generation time.
Drop repository cache holder, replace with a field in state.
Fix singleton type collector.

Fix memory leak in strategy by cleaning it up after execution.
2020-11-24 13:41:25 +01:00
Fedor Isakov 5ce60c1398 Minor refactoring in typechecking service component: simplify code. 2020-11-24 13:41:25 +01:00
Fedor Isakov 4d79fbf263 Fix various issues arizing during generation time.
Avoid dereferencing DynamicReference from OriginIndex as it involves typechecking computation.
Aviod enqueing type nodes with TypesModelHandler during generation,
a workaround for "mature" references unable to be resolved
if target is in a transient (unpublished) model. (MPS-32709)
Ensure "local" typeof computation is used when queries a created with null root.
2020-11-24 13:41:25 +01:00
Fedor Isakov a6fe5327ff Rebuild project. 2020-11-24 13:41:24 +01:00
Fedor Isakov 8691da9ad7 Update build script. 2020-11-24 13:41:24 +01:00
Fedor Isakov f313c1af9a Smodel types: support (unchecked) conversion classifier to node/nodeptr. 2020-11-24 13:41:24 +01:00
Fedor Isakov 80d2152df1 BL types: support as and instanceof 2020-11-24 13:41:24 +01:00