Exemplo n.º 1
0
 public ScriptSharpRuntimeLibrary(IScriptSharpMetadataImporter metadataImporter, IErrorReporter errorReporter, Func <ITypeParameter, string> getTypeParameterName, Func <ITypeReference, JsExpression> createTypeReferenceExpression)
 {
     _metadataImporter              = metadataImporter;
     _errorReporter                 = errorReporter;
     _getTypeParameterName          = getTypeParameterName;
     _createTypeReferenceExpression = createTypeReferenceExpression;
 }
Exemplo n.º 2
0
        private string Process(IList <JsStatement> stmts, IScriptSharpMetadataImporter metadata = null, INamer namer = null, IAssembly mainAssembly = null)
        {
            var obj       = new DefaultLinker(metadata ?? new MockScriptSharpMetadataImporter(), namer ?? new MockNamer());
            var processed = obj.Process(stmts, mainAssembly ?? new Mock <IAssembly>().Object);

            return(string.Join("", processed.Select(s => OutputFormatter.Format(s, allowIntermediates: false))));
        }
 public ScriptSharpOOPEmulator(ICompilation compilation, IScriptSharpMetadataImporter metadataImporter, IRuntimeLibrary runtimeLibrary, IErrorReporter errorReporter)
 {
     _metadataImporter = metadataImporter;
     _runtimeLibrary   = runtimeLibrary;
     _errorReporter    = errorReporter;
     _compilation      = compilation;
 }
 public ScriptSharpRuntimeLibrary(IScriptSharpMetadataImporter metadataImporter, IErrorReporter errorReporter, Func<ITypeParameter, string> getTypeParameterName, Func<ITypeReference, JsExpression> createTypeReferenceExpression)
 {
     _metadataImporter = metadataImporter;
     _errorReporter = errorReporter;
     _getTypeParameterName = getTypeParameterName;
     _createTypeReferenceExpression = createTypeReferenceExpression;
 }
 private ImportVisitor(IScriptSharpMetadataImporter metadataImporter, INamer namer, IAssembly mainAssembly, HashSet <string> usedSymbols)
 {
     _metadataImporter = metadataImporter;
     _namer            = namer;
     _mainAssembly     = mainAssembly;
     _usedSymbols      = usedSymbols;
     _moduleAliases    = new Dictionary <string, string>();
 }
 public ScriptSharpOOPEmulator(ICompilation compilation, IScriptSharpMetadataImporter metadataImporter, IRuntimeLibrary runtimeLibrary, INamer namer, IErrorReporter errorReporter)
 {
     _metadataImporter = metadataImporter;
     _runtimeLibrary   = runtimeLibrary;
     _namer            = namer;
     _errorReporter    = errorReporter;
     _compilation      = compilation;
     _systemType       = new JsTypeReferenceExpression(_compilation.FindType(KnownTypeCode.Type).GetDefinition());
 }
        protected string Process(IEnumerable<JsType> types, IScriptSharpMetadataImporter metadataImporter = null)
        {
            metadataImporter = metadataImporter ?? new MockScriptSharpMetadataImporter();

            IProjectContent proj = new CSharpProjectContent();
            proj = proj.AddAssemblyReferences(new[] { Common.Mscorlib });
            var comp = proj.CreateCompilation();
            var er = new MockErrorReporter(true);
            var obj = new OOPEmulator.ScriptSharpOOPEmulator(metadataImporter, er);
            Assert.That(er.AllMessages, Is.Empty, "Should not have errors");
            var rewritten = obj.Rewrite(types, comp);
            return string.Join("", rewritten.Select(s => OutputFormatter.Format(s, allowIntermediates: true)));
        }
        protected string Process(IEnumerable<JsType> types, IScriptSharpMetadataImporter metadataImporter = null, IErrorReporter errorReporter = null, IMethod entryPoint = null)
        {
            metadataImporter = metadataImporter ?? new MockScriptSharpMetadataImporter();

            IProjectContent proj = new CSharpProjectContent();
            proj = proj.AddAssemblyReferences(new[] { Common.Mscorlib });
            var comp = proj.CreateCompilation();
            bool verifyNoErrors = errorReporter == null;
            errorReporter = errorReporter ?? new MockErrorReporter();
            var obj = new OOPEmulator.ScriptSharpOOPEmulator(comp, metadataImporter, new MockRuntimeLibrary(), new MockNamer(), errorReporter);
            if (verifyNoErrors)
                Assert.That(((MockErrorReporter)errorReporter).AllMessages, Is.Empty, "Should not have errors");

            var rewritten = obj.Process(types, comp, entryPoint);
            return string.Join("", rewritten.Select(s => OutputFormatter.Format(s, allowIntermediates: true)));
        }
        protected string Process(IEnumerable <JsType> types, IScriptSharpMetadataImporter metadataImporter = null)
        {
            metadataImporter = metadataImporter ?? new MockScriptSharpMetadataImporter();

            IProjectContent proj = new CSharpProjectContent();

            proj = proj.AddAssemblyReferences(new[] { Common.Mscorlib });
            var comp = proj.CreateCompilation();
            var er   = new MockErrorReporter(true);
            var obj  = new OOPEmulator.ScriptSharpOOPEmulator(comp, metadataImporter, new MockRuntimeLibrary(), er);

            Assert.That(er.AllMessages, Is.Empty, "Should not have errors");
            var rewritten = obj.Rewrite(types, comp);

            return(string.Join("", rewritten.Select(s => OutputFormatter.Format(s, allowIntermediates: true))));
        }
Exemplo n.º 10
0
            public static IList <JsStatement> Process(IScriptSharpMetadataImporter metadataImporter, INamer namer, IAssembly mainAssembly, IList <JsStatement> statements)
            {
                var usedSymbols = UsedSymbolsGatherer.Analyze(statements);
                var importer    = new ImportVisitor(metadataImporter, namer, mainAssembly, usedSymbols);
                var body        = statements.Select(s => importer.VisitStatement(s, null)).ToList();

                if (metadataImporter.IsAsyncModule)
                {
                    body.Insert(0, new JsVariableDeclarationStatement("exports", JsExpression.ObjectLiteral()));
                    body.Add(new JsReturnStatement(JsExpression.Identifier("exports")));

                    var pairs = new[] { new KeyValuePair <string, string>("mscorlib", namer.GetVariableName("_", usedSymbols)) }.Concat(importer._moduleAliases.OrderBy(x => x.Key)).ToList();

                    body = new List <JsStatement> {
                        new JsExpressionStatement(
                            JsExpression.Invocation(
                                JsExpression.Identifier("define"),
                                JsExpression.ArrayLiteral(pairs.Select(p => JsExpression.String(p.Key))),
                                JsExpression.FunctionDefinition(
                                    pairs.Select(p => p.Value),
                                    new JsBlockStatement(body)
                                    )
                                )
                            )
                    };
                }
                else if (importer._moduleAliases.Count > 0)
                {
                    // If we require any module, we require mscorlib. This should work even if we are a leaf module that doesn't include any other module because our parent script will do the mscorlib require for us.
                    body.InsertRange(0, new[] { (JsStatement) new JsExpressionStatement(JsExpression.Invocation(JsExpression.Identifier("require"), JsExpression.String("mscorlib"))) }
                                     .Concat(importer._moduleAliases.OrderBy(x => x.Key)
                                             .Select(x => new JsVariableDeclarationStatement(
                                                         x.Value,
                                                         JsExpression.Invocation(
                                                             JsExpression.Identifier("require"),
                                                             JsExpression.String(x.Key))))
                                             .ToList()));
                }
                return(body);
            }
 protected void AssertCorrect(string expected, IScriptSharpMetadataImporter metadataImporter, IMethod entryPoint, params JsType[] types)
 {
     AssertCorrect(expected, (IEnumerable <JsType>)types, metadataImporter, entryPoint);
 }
 private string Process(IList<JsStatement> stmts, IScriptSharpMetadataImporter metadata = null, INamer namer = null, IAssembly mainAssembly = null)
 {
     var obj = new DefaultLinker(metadata ?? new MockScriptSharpMetadataImporter(), namer ?? new MockNamer());
     var processed = obj.Process(stmts, mainAssembly ?? new Mock<IAssembly>().Object);
     return string.Join("", processed.Select(s => OutputFormatter.Format(s, allowIntermediates: false)));
 }
        protected void Prepare(string source, bool minimizeNames = true, bool expectErrors = false)
        {
            IProjectContent project = new CSharpProjectContent();
            var parser = new CSharpParser();

            using (var rdr = new StringReader(source)) {
                var pf = new CSharpParsedFile("File.cs");
                var cu = parser.Parse(rdr, pf.FileName);
                cu.AcceptVisitor(new TypeSystemConvertVisitor(pf));
                project = project.UpdateProjectContent(null, pf);
            }
            project = project.AddAssemblyReferences(new[] { Common.Mscorlib });

            var compilation = project.CreateCompilation();

            errorReporter = new MockErrorReporter(!expectErrors);
            Metadata = new MetadataImporter.ScriptSharpMetadataImporter(minimizeNames);

            Metadata.Prepare(compilation.GetAllTypeDefinitions(), compilation.MainAssembly, errorReporter);

            AllErrors = errorReporter.AllMessages.ToList().AsReadOnly();
            AllErrorTexts = errorReporter.AllMessagesText.ToList().AsReadOnly();
            if (expectErrors) {
                AllErrorTexts.Should().NotBeEmpty("Compile should have generated errors");
            }
            else {
                AllErrorTexts.Should().BeEmpty("Compile should not generate errors");
            }

            AllTypes = compilation.MainAssembly.TopLevelTypeDefinitions.SelectMany(SelfAndNested).ToDictionary(t => t.ReflectionName);
        }
Exemplo n.º 14
0
 public DefaultLinker(IScriptSharpMetadataImporter metadataImporter, INamer namer)
 {
     _metadataImporter = metadataImporter;
     _namer            = namer;
 }
 protected void AssertCorrect(string expected, IScriptSharpMetadataImporter metadataImporter, params JsType[] types)
 {
     AssertCorrect(expected, (IEnumerable<JsType>)types, metadataImporter);
 }
        protected void AssertCorrect(string expected, IEnumerable<JsType> types, IScriptSharpMetadataImporter metadataImporter = null)
        {
            var actual = Process(types, metadataImporter);

            Assert.That(actual.Replace("\r\n", "\n"), Is.EqualTo(expected.Replace("\r\n", "\n")));
        }
 public ScriptSharpRuntimeLibrary(IScriptSharpMetadataImporter metadataImporter, Func<ITypeReference, JsExpression> createTypeReferenceExpression)
 {
     _metadataImporter = metadataImporter;
     _createTypeReferenceExpression = createTypeReferenceExpression;
 }
        protected void AssertCorrect(string expected, IEnumerable <JsType> types, IScriptSharpMetadataImporter metadataImporter = null, IMethod entryPoint = null)
        {
            var actual = Process(types, metadataImporter: metadataImporter, entryPoint: entryPoint);

            Assert.That(actual.Replace("\r\n", "\n"), Is.EqualTo(expected.Replace("\r\n", "\n")));
        }
 public ScriptSharpOOPEmulator(IScriptSharpMetadataImporter metadataImporter, IRuntimeLibrary runtimeLibrary, IErrorReporter errorReporter)
 {
     _metadataImporter = metadataImporter;
     _runtimeLibrary = runtimeLibrary;
     _errorReporter = errorReporter;
 }
 public ScriptSharpOOPEmulator(IScriptSharpMetadataImporter metadataImporter, IErrorReporter errorReporter)
 {
     _metadataImporter = metadataImporter;
     _errorReporter = errorReporter;
 }