Example #1
0
        JNode _Visit(AstNode node)
        {
            if (CompilerConfig.Current.EnableLogging)
            {
                var region = node.GetRegion();
                if (region != null && !region.IsEmpty)
                {
                    Log.Debug(String.Format("JsCodeImporter: Visit AstNode: {0}", ToDebug(node)));
                }
            }
            if (BeforeConvertCsToJsAstNode != null)
            {
                BeforeConvertCsToJsAstNode(node);
            }
            var node2 = node.AcceptVisitor(this);

            if (node2 != null)
            {
                var ex = node2.Ex(true);
                if (ex.AstNode == null)
                {
                    ex.AstNode = node;
                }
            }
            if (AfterConvertCsToJsAstNode != null)
            {
                AfterConvertCsToJsAstNode(node, node2);
            }
            return(node2);
        }
Example #2
0
        JsNode _Visit(AstNode node)
        {
            if (CompilerConfiguration.Current.EnableLogging)
            {
                var region = node.GetRegion();
                if (!region.IsEmpty)
                {
                    Log.Debug(String.Format("JsCodeImporter: Visit AstNode: {0}", ToDebug(node)));
                }
            }
            if (BeforeConvertCsToJsAstNode != null)
            {
                BeforeConvertCsToJsAstNode(node);
            }
            var node2 = node.AcceptVisitor(this);

            if (node2 != null)
            {
                if (node2.Annotation <AstNode>() == null)
                {
                    node2.AddAnnotation(node);
                }
            }
            if (AfterConvertCsToJsAstNode != null)
            {
                AfterConvertCsToJsAstNode(node, node2);
            }
            return(node2);
        }
Example #3
0
        public static string GetFileName(this AstNode node)
        {
            var region = node.GetRegion();

            if (region.IsEmpty)
            {
                return(null);
            }
            return(region.FileName);
        }
Example #4
0
        string ToDebug(AstNode node)
        {
            if (node == null)
            {
                return(null);
            }
            var region = node.GetRegion();

            if (region != null && !region.IsEmpty)
            {
                return(String.Format("{1}: [{2}, {3}] - {0}", node.GetType().Name, region.FileName, region.BeginLine, region.BeginColumn));
            }
            return(node.GetType().Name);
        }
		bool CheckResult(AstNode node)
		{
			ResolveResult expectedResult = resolveAllResolver.Resolve(node);
			ResolveResult actualResult = resolver.Resolve(node);
			if (IsEqualResolveResult(expectedResult, actualResult))
				return true;
			Console.WriteLine("Different resolve results for '{0}' at {1} in {2}:", node, node.StartLocation, node.GetRegion().FileName);
			Console.WriteLine(" expected: " + expectedResult);
			Console.WriteLine(" actual:   " + actualResult);
			return false;
		}
		bool CheckStateAfter(AstNode node)
		{
			var expectedState = resolveAllResolver.GetResolverStateAfter(node);
			var actualState = resolver.GetResolverStateAfter(node);
			if (IsEqualResolverState(expectedState, actualState))
				return true;
			Console.WriteLine("Different resolver states after '{0}' at {1} in {2}.", node, node.StartLocation, node.GetRegion().FileName);
			return false;
		}
Example #7
0
        public IEnumerable <JsType> Compile(PreparedCompilation compilation)
        {
            _compilation = compilation.Compilation;

            _types = new Dictionary <ITypeDefinition, JsClass>();
            _constructorDeclarations = new HashSet <Tuple <ConstructorDeclaration, CSharpAstResolver> >();
            _instanceInitStatements  = new Dictionary <JsClass, List <JsStatement> >();

            foreach (var f in compilation.SourceFiles)
            {
                try {
                    _resolver = new CSharpAstResolver(_compilation, f.SyntaxTree, f.ParsedFile);
                    _resolver.ApplyNavigator(new ResolveAllNavigator());
                    f.SyntaxTree.AcceptVisitor(this);
                }
                catch (Exception ex) {
                    _errorReporter.Region = _currentNode.GetRegion();
                    _errorReporter.InternalError(ex);
                }
            }

            // Handle constructors. We must do this after we have visited all the compilation units because field initializer (which change the InstanceInitStatements and StaticInitStatements) might appear anywhere.
            foreach (var n in _constructorDeclarations)
            {
                try {
                    _resolver = n.Item2;
                    HandleConstructorDeclaration(n.Item1);
                }
                catch (Exception ex) {
                    _errorReporter.Region = n.Item1.GetRegion();
                    _errorReporter.InternalError(ex);
                }
            }

            // Add default constructors where needed.
            foreach (var toAdd in _types.Where(t => t.Value != null).SelectMany(kvp => kvp.Key.GetConstructors().Where(c => c.IsSynthetic).Select(c => new { jsClass = kvp.Value, c })))
            {
                try {
                    MaybeAddDefaultConstructorToType(toAdd.jsClass, toAdd.c);
                }
                catch (Exception ex) {
                    _errorReporter.Region = toAdd.c.Region;
                    _errorReporter.InternalError(ex, "Error adding default constructor to type");
                }
            }

            _types.Values.Where(t => t != null).ForEach(t => t.Freeze());

            var enums = new List <JsType>();

            foreach (var e in _compilation.MainAssembly.TopLevelTypeDefinitions.SelectMany(SelfAndNested).Where(t => t.Kind == TypeKind.Enum))
            {
                try {
                    enums.Add(ConvertEnum(e.GetDefinition()));
                }
                catch (Exception ex) {
                    _errorReporter.Region = e.GetDefinition().Region;
                    _errorReporter.InternalError(ex);
                }
            }

            return(_types.Values.Concat(enums).Where(t => t != null));
        }
        bool CheckStateAfter(AstNode node)
        {
            var expectedState = resolveAllResolver.GetResolverStateAfter(node);
            var actualState   = resolver.GetResolverStateAfter(node);

            if (IsEqualResolverState(expectedState, actualState))
            {
                return(true);
            }
            Console.WriteLine("Different resolver states after '{0}' at {1} in {2}.", node, node.StartLocation, node.GetRegion().FileName);
            return(false);
        }
        bool CheckResult(AstNode node)
        {
            ResolveResult expectedResult = resolveAllResolver.Resolve(node);
            ResolveResult actualResult   = resolver.Resolve(node);

            if (IsEqualResolveResult(expectedResult, actualResult))
            {
                return(true);
            }
            Console.WriteLine("Different resolve results for '{0}' at {1} in {2}:", node, node.StartLocation, node.GetRegion().FileName);
            Console.WriteLine(" expected: " + expectedResult);
            Console.WriteLine(" actual:   " + actualResult);
            return(false);
        }
 public void PrintInvocation(AstNode invocation)
 {
     Console.WriteLine("new_Line:" + invocation.GetRegion().Begin.Line + "  Invocation: " + invocation.GetText().ToString());
 }
 private void AddVariable(AstNode variableNode, string variableName)
 {
     var resolveResult = _resolver.Resolve(variableNode);
     if (!(resolveResult is LocalResolveResult)) {
         _errorReporter.InternalError("Variable " + variableName + " does not resolve to a local (resolves to " + (resolveResult != null ? resolveResult.ToString() : "null") + ")", variableNode.GetRegion().FileName, variableNode.StartLocation);
         return;
     }
     AddVariable(((LocalResolveResult)resolveResult).Variable);
 }