Esempio n. 1
0
        public IOrType <IProject <TAssembly, TBacking>, IReadOnlyList <IError> > Parse <TAssembly, TBacking>(string text, IReadOnlyList <TAssembly> dependencies, string name)
            where TAssembly : IAssembly <TBacking>
        {
            var tokenizer = new Tokenizer(StaticSymbolsRegistry.SymbolsRegistry.Symbols.Except(new[] { SymbolsRegistry.StaticSubtractSymbol }).ToArray());
            var tokens    = tokenizer.Tokenize(text);

            var elementMatchingContest = new ElementMatchingContext();

            var scopePopulator = elementMatchingContest.ParseFile(tokens);

            var dependencyConverter = new DependencyConverter();

            var problem = new Tpn.TypeProblem2(new WeakScopeConverter(), scopePopulator, prob => {
                foreach (var dependency in dependencies)
                {
                    var type = prob.builder.CreateTypeExternalType(prob.Dependency, new WeakTypeDefinitionConverter(), dependency.Scope);

                    foreach (var memberPair in dependency.Scope.Members)
                    {
                        var innerType = ConvertType(prob.builder, type, OrType.Make <IVerifiableType, IError>(memberPair.Type));
                        innerType.Switch(x =>
                        {
                            prob.builder.CreatePublicMember(type, type, memberPair.Key, OrType.Make <IKey, IError>(x));
                        }, y =>
                        {
                            prob.builder.CreatePublicMember(type, memberPair.Key, y);
                        });
                    }
                    prob.builder.CreatePrivateMember(prob.Dependency, dependency.Key, OrType.Make <Tpn.TypeProblem2.MethodType, Tpn.TypeProblem2.Type, Tpn.TypeProblem2.Object, Tpn.TypeProblem2.OrType, Tpn.TypeProblem2.InferredType, Tpn.TypeProblem2.GenericTypeParameter, IError>(type));
                }
            });


            var populateScopeContex = new SetUpContext(problem.builder);
            var referanceResolver   = scopePopulator.Run(problem.ModuleRoot, populateScopeContex).Resolve;

            var solution = problem.Solve();

            var rootScope = referanceResolver.Run(solution, new List <Tpn.ITypeProblemNode>()
            {
                problem.Dependency,
                problem.ModuleRoot
            }).GetValue();

            var errors = rootScope.Validate().ToArray();

            if (errors.Any())
            {
                return(OrType.Make <IProject <TAssembly, TBacking>, IReadOnlyList <IError> >(errors));
            }

            var dependencyScope = problem.Dependency.Converter.Convert(solution, problem.Dependency, Array.Empty <Tpn.ITypeProblemNode>()).Is2OrThrow();


            var context = TransformerExtensions.NewConversionContext();

            return(OrType.Make <IProject <TAssembly, TBacking>, IReadOnlyList <IError> >(new Project <TAssembly, TBacking>(rootScope.Convert(context), dependencies, dependencyScope.Convert(context))));
        }
Esempio n. 2
0
        internal static WeakRootScope ConvertToWeak(FileToken fileToken)
        {
            var elementMatchingContest = new ElementMatchingContext();

            var scopePopulators = elementMatchingContest.ParseFile(fileToken);

            var problem = new Tpn.TypeProblem2(new WeakScopeConverter(), scopePopulators, _ => { });

            var populateScopeContex = new SetUpContext(problem.builder);
            var referanceResolver   = scopePopulators.Run(problem.ModuleRoot, populateScopeContex).Resolve;

            var solution = problem.Solve();

            var res = referanceResolver.Run(solution, new List <Tpn.ITypeProblemNode>());

            return(res.GetValue());
        }
Esempio n. 3
0
 public Tpn.TypeProblem2.Object InitizeForTypeProblem(Tpn.TypeProblem2 typeProblem2)
 {
     key     = new ImplicitKey(Guid.NewGuid());
     myScope = typeProblem2.builder.CreateObjectOrModule(typeProblem2.Dependency, key, new WeakRootConverter(assignmentsBox, entryBox), new WeakScopeConverter());
     return(myScope);
 }