public EdgeBuildingSyntaxVisitor(SemanticModel semanticModel, TypeSystem typeSystem, TypeSystem.Builder typeSystemBuilder, SyntaxToNodeMapping mapping, CancellationToken cancellationToken) : base(semanticModel, typeSystemBuilder, cancellationToken) { this.typeSystem = typeSystem; this.typeSystemBuilder = typeSystemBuilder; this.mapping = mapping; this.operationVisitor = new EdgeBuildingOperationVisitor(this, typeSystem, typeSystemBuilder); }
private void CreateEdges(SyntaxTree syntaxTree, CancellationToken cancellationToken) { var semanticModel = compilation.GetSemanticModel(syntaxTree); var tsBuilder = new TypeSystem.Builder(typeSystem); var visitor = new EdgeBuildingSyntaxVisitor(semanticModel, typeSystem, tsBuilder, typeSystem.GetMapping(syntaxTree), cancellationToken); visitor.Visit(syntaxTree.GetRoot(cancellationToken)); lock (typeSystem) { tsBuilder.Flush(typeSystem); } }
private void CreateNodes(SyntaxTree syntaxTree, CancellationToken cancellationToken) { var semanticModel = compilation.GetSemanticModel(syntaxTree); var tsBuilder = new TypeSystem.Builder(typeSystem); var visitor = new NodeBuildingSyntaxVisitor(semanticModel, tsBuilder, cancellationToken); visitor.Visit(syntaxTree.GetRoot(cancellationToken)); lock (typeSystem) { typeSystem.RegisterNodes(syntaxTree, visitor.Mapping); tsBuilder.Flush(typeSystem); } }
private void CreateEdges(SyntaxTree syntaxTree, CancellationToken cancellationToken) { var semanticModel = compilation.GetSemanticModel(syntaxTree); var tsBuilder = new TypeSystem.Builder(typeSystem); var mapping = typeSystem.GetMapping(syntaxTree); var visitor = new EdgeBuildingSyntaxVisitor(semanticModel, typeSystem, tsBuilder, mapping, cancellationToken); visitor.Visit(syntaxTree.GetRoot(cancellationToken)); foreach (var cref in mapping.CrefSyntaxes) { visitor.HandleCref(cref); } lock (typeSystem) { tsBuilder.Flush(typeSystem); } }
public void JoinWith(Snapshot snapshot, TypeSystem.Builder tsBuilder, EdgeLabel edgeLabel) { if (unreachable) { RestoreSnapshot(snapshot); return; } else if (snapshot.Unreachable) { return; // no-op } Debug.Assert(!unreachable && !snapshot.Unreachable); thisPath = Join(thisPath, snapshot.ThisPath); locals = JoinDict(locals.ToImmutable(), snapshot.Locals); ImmutableDictionary <ISymbol, PathNode> .Builder JoinDict(ImmutableDictionary <ISymbol, PathNode> a, ImmutableDictionary <ISymbol, PathNode> b) { ImmutableDictionary <ISymbol, PathNode> .Builder newDict = emptyMembers.ToBuilder(); foreach (var(local, pathFromSnapshot) in b) { if (a.TryGetValue(local, out var pathFromThis)) { newDict[local] = Join(pathFromThis, pathFromSnapshot); } } return(newDict); } PathNode Join(PathNode a, PathNode b) { var newMembers = JoinDict(a.Members, b.Members); var newNullability = tsBuilder.Join(a.Nullability, b.Nullability, edgeLabel); return(new PathNode(newNullability, newMembers.ToImmutable())); } }
public NodeBuildingSyntaxVisitor(SemanticModel semanticModel, TypeSystem.Builder typeSystem, CancellationToken cancellationToken) : base(semanticModel, typeSystem, cancellationToken) { }
protected GraphBuildingSyntaxVisitor(SemanticModel semanticModel, TypeSystem.Builder typeSystem, CancellationToken cancellationToken) { this.semanticModel = semanticModel; this.typeSystem = typeSystem; this.cancellationToken = cancellationToken; }