Commit Graph

2479 Commits

Author SHA1 Message Date
Fedor Isakov 5f6ea9e6c1 Fix NPE in checking rule. 2020-05-25 11:03:39 +02:00
Fedor Isakov fc10afdae0 Fix typo in typechecking rule. 2020-05-25 11:03:39 +02:00
Fedor Isakov d4c2e6f303 Fix property constraint for when splice is present. 2020-05-25 11:03:39 +02:00
Fedor Isakov 35b09d3e2e Fix build script and regenerate. 2020-05-25 11:03:39 +02:00
Fedor Isakov b4a5b4cec4 Refactor various utilities into facade class.
Introduce HierarchyGraph and its specialization,
ClassHierarchyGraph, as a facade to all tasks related to
finding paths and LUB of types.
2020-05-25 11:03:39 +02:00
Fedor Isakov 1aa5608b34 Move files for wrongly placed coderulesExt lang. 2020-05-23 15:25:59 +02:00
Grigorii Kirgizov 6f9337e5cf minor: consider error() term in containedIn relation
This term marks that somewhere error has been already handled
and serves to avoid further errors.
2020-05-22 22:37:48 +03:00
Grigorii Kirgizov 00dc426f43 Consider case of NestedNewExpression for class creators (MPSCR-29) 2020-05-22 22:36:10 +03:00
Grigorii Kirgizov a4901bb730 Change signature of `typeVarBound` constraint to treat it as principal
Recent commit with change to def of pr. constraint
made typeVarBound non-principal. so fix it.
2020-05-22 21:40:03 +03:00
Grigorii Kirgizov 400198f965 Adjust principal constraints analysis to not consider node refs wrapped in terms
It makes definition of principal constraint clearer:
principal constraint is a constraint that has at least one arg
of type node<> and passes to it ruleOrigin in at least one rule.

Such constraints are most likely meant to define relations
of nodes to terms, e.g. `typeOf` -- which is what we're interested in.

At the same time semantics of values inside terms is less defined.
TermFeatures are also untyped, and so complete analysis of
ValueFeatures would require full code traversal of coderules program
to find out whether a value feature is used to carry smth of `node` type.

Relevant to MPSCR-62.
2020-05-22 21:40:03 +03:00
Grigorii Kirgizov 1aa07397d4 minor: document one type inference rule to avoid confusion 2020-05-22 21:39:15 +03:00
Grigorii Kirgizov 42f0d06063 Refactor duplicate code for checking method call into call macro
Also typecheck method call arguments with macro instead of a rule
2020-05-22 21:39:15 +03:00
Grigorii Kirgizov c3cf1e5111 Complete type inference for closure params wit inst macro, add tests, fix few minor issues
Related to MPSCR-20 & MPSCR-29.
2020-05-22 21:39:14 +03:00
Grigorii Kirgizov fe58f39b56 Introduce macro for type scheme instantiation, refactor existing rules with it
Now rules concerned with generics handle type vars from enclosing scope.
Complete typechecking of BaseMethodCall: consider static/nonstatic cases.
Complete typechecking for class creators, handling type vars from cls & ctor.
Refactor rules for EnumConstantDeccl & ClassifierType.
Related to MPSCR-20 & MPSCR-29.
2020-05-22 21:38:55 +03:00
Grigorii Kirgizov 4e43c924c6 Inherit classifier term from `parameterized` and migrate ListFeature role usages 2020-05-21 16:38:44 +03:00
Grigorii Kirgizov 1ac16ed0b9 Fix left usages of classifier term to explicitly provide type parameters 2020-05-21 16:38:39 +03:00
Grigorii Kirgizov e2b3c21b2f Change semantics of implicit ListFeature: treat as wildcard, not as empty list
Motivation is that implicit (non-overriden) list features must unify
with list of any length. Consider an example:
`classifier(cls: node-ptr/A/) = classifier(cls: node-ptr/A/ param: [B,C])`
With previous approach it would fail, which seems counter-intuitive to me.
So, if empty list (e.g. of type parameters) is meant, then it must be
specified explicitly.

There's one thing to remember, though: such wildcard list features
won't match with MetaLogicalArrays in rule heads.
(e.g. see dpromote_* rules and consider what happens when
a classifier with unbound `parameter` feature comes in)
2020-05-21 16:38:36 +03:00
Grigorii Kirgizov 3a99a1569a Add typechecking for AlternativeType. Move & refactor genDecl macro a bit.
Introduce common 'parameterized(child typeParams)' term
to allow unifying processing of GenericDeclarations.
Collect type variables from enclosing GenericDeclaration.
Will be needed to simplify instantiation of nested generic decls
(e.g. generic method inside generic class) using `genDecl`
machinery instead of TypeVarSubstitution.
2020-05-21 16:38:30 +03:00
Grigorii Kirgizov 3047926ce4 Fix typechecking for vararg param decls: treat them as arrays. 2020-05-21 16:31:41 +03:00
Grigorii Kirgizov 9bbcf6ecef Allow terms to inherit features from ancestor terms
Avoides the need to exactly duplicate features of ancestors.
Opens possibility to match on super-terms
with partially provided (overriden) features.

For example, suppose there's `typeParameterized(child: param)`
term which is extended by `classifier` and `methodSignature`.
Then it becomes possible to write a common rule for both terms,
matching on `typeParameterized(param=[Smth])`.
2020-05-21 16:31:36 +03:00
Grigorii Kirgizov 8b07402d48 Refactor checking type arguments into call macro. Fix type decls for checkArgs rules 2020-05-21 16:31:34 +03:00
Grigorii Kirgizov 9051e71f84 Handle case of type vars having other type vars as bounds for inference
Also uncomment hasBound_check rule which now is required
to check such type vars when their bounds become ground.
2020-05-21 16:31:27 +03:00
Grigorii Kirgizov 08743b444c Avoid producing typeOf in checkVariableDecl for unknown types (types without macros) 2020-05-21 16:31:18 +03:00
Grigorii Kirgizov ac2e3f97d2 Add typechecking for implicitly typed closure arg, add tests 2020-05-14 20:07:01 +03:00
Grigorii Kirgizov 36606e5740 Add a test for AspectClique for the case of asepct with branches 2020-05-11 15:20:37 +03:00
Fedor Isakov 9c234cac2a Quickfix: add support for AlternativeType. 2020-05-09 16:05:48 +02:00
Fedor Isakov 2ab4ae24d2 Switch to using MPS 2020.1 RC for build. 2020-05-09 15:22:03 +02:00
Fedor Isakov 82f0229aca Rebuild project. 2020-05-09 15:08:47 +02:00
Fedor Isakov da43822154 Manually migrate try statements that were not auto-migrated. 2020-05-09 15:07:06 +02:00
Fedor Isakov 14780b5561 Apply automatic migrations. 2020-05-09 15:04:25 +02:00
Fedor Isakov d1163fc883 Open and rebuild the project with MPS 2020.1. 2020-05-09 15:02:20 +02:00
Fedor Isakov f3b16186e6 Fix build scripts and regenerate. 2020-05-09 10:54:18 +02:00
Fedor Isakov acd6234415 Force save all. 2020-05-09 10:54:18 +02:00
Fedor Isakov c4fc687f76 Refactor and simplify code in AspectClique. Write tests.
Treat a language and its sidekick (if any) as a single vertex.
Add all extended languages to the pool before building the graph.
Drop dubious invariant check.
Fix the second pass in findAspectCliques ingnoring the fact
that there might be leafs without aspects.
2020-05-09 10:53:40 +02:00
Fedor Isakov 5bac140e61 Drop unnecessary test languages. 2020-05-07 10:23:04 +02:00
Fedor Isakov f2bcaffccc Revert "Upd coderules buildscript, regen build.xml"
This reverts commit 6b826334
2020-05-07 10:18:16 +02:00
Fedor Isakov 65429c800e Test for AspectClique. Use test model instead of real languages. 2020-05-07 10:16:55 +02:00
Fedor Isakov 4744081e36 Refactor AspectLookup and related interfaces for testability.
Simplify interfaces, abstract away the direct dependency
on LanguageRutime, make the code in AspectClique testable.
2020-05-07 10:16:53 +02:00
Fedor Isakov aa2785cc7a Document procedure to diagnose gradle build failure. 2020-05-07 08:40:28 +02:00
Grigorii Kirgizov 6b82633450 Upd coderules buildscript, regen build.xml 2020-05-07 02:37:35 +03:00
Grigorii Kirgizov cd3e56c16a Handle case of language cycles in AspectClique, add simple test with lang cycle (MPSCR-60) 2020-05-07 02:21:26 +03:00
Grigorii Kirgizov e7d23f9b6d Redefine how Aspect Cliques are found (fixes MPSCR-60)
Now algorithm for finding aspect cliques includes 3 stages:
1) topological sort (as before)
2) bottom-up pass with initial assignment of clique ids (as before)
3) top-down pass (i.e. in reverse topo sort order) (added stage)

The 3rd stage handles case when hierarchy of langs with
required aspect include branching point (with no join further down),
as in the case of closuresExt & collectionsExt both extending blExt,
but unrelated to each other (neither extends the other).
2020-05-07 01:28:14 +03:00
Grigorii Kirgizov bb5412230a Fix topo sort in Aspect Clique and add check for graph acyclicity (MPSCR-60) 2020-05-07 01:28:14 +03:00
Grigorii Kirgizov e1af32b97c Add tests for closuresExt concerned with yield and sequence, reproduces MPSCR-60 2020-05-07 01:28:14 +03:00
Grigorii Kirgizov e6b1fe12a7 Don't generate main closureLiteral rule when there's error with return vs. yield 2020-05-07 01:28:14 +03:00
Fedor Isakov 76991aabe7 Fix dependencies among rule tables.
Observing the invariant: whenever a constraint is used in
rule's head, the rule table containing it must extend the
one that constraint.

Also drop unused constraint from the head in ConversionFunctionIFace.
2020-05-05 16:23:13 +02:00
Fedor Isakov 2c363f85f4 Tidy up helper methods contract, drop unnecessary method.
BaseHelper.getListContents() accepts a dataform that must be
an instance of ListNode or be resolved to one via DataFormUtil.ground().
2020-05-05 15:58:48 +02:00
Fedor Isakov 587711a3e8 Drop deprecated class and its usages. 2020-05-05 15:58:48 +02:00
Fedor Isakov 6904af04ce Drop instances of deprecated concept. 2020-05-05 15:58:48 +02:00
Fedor Isakov d3a72049e8 Drop deprecated stuff from coderules lang. 2020-05-05 15:58:48 +02:00