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); }
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); }
public static string GetFileName(this AstNode node) { var region = node.GetRegion(); if (region.IsEmpty) { return(null); } return(region.FileName); }
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; }
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); }