public NodeStateTable <T> GetLatestStateTableForNode <T>(IIncrementalGeneratorNode <T> source) { // if we've already evaluated a node during this build, we can just return the existing result if (_tableBuilder.ContainsKey(source)) { return((NodeStateTable <T>)_tableBuilder[source]); } // get the previous table, if there was one for this node NodeStateTable <T> previousTable = _previousTable.GetStateTableOrEmpty <T>(source); // request the node update its state based on the current driver table and store the new result var newTable = source.UpdateStateTable(this, previousTable, _cancellationToken); _tableBuilder[source] = newTable; return(newTable); }
public Builder(SyntaxReceiverInputNode owner, DriverStateTable driverStateTable, bool trackIncrementalSteps) { _owner = owner; _nodeStateTable = driverStateTable.GetStateTableOrEmpty <ISyntaxContextReceiver?>(_owner).ToBuilder(stepName: null, trackIncrementalSteps); try { _receiver = owner._receiverCreator(); } catch (Exception e) { throw new UserFunctionException(e); } if (_receiver is object) { _walker = new GeneratorSyntaxWalker(_receiver); } }
public Builder(SyntaxInputNode <T> owner, DriverStateTable table) { _owner = owner; _filterTable = table.GetStateTableOrEmpty <SyntaxNode>(_owner._filterKey).ToBuilder(); _transformTable = table.GetStateTableOrEmpty <T>(_owner).ToBuilder(); }
public Builder(SyntaxInputNode <T> owner, DriverStateTable table, bool trackIncrementalSteps) { _owner = owner; _filterTable = table.GetStateTableOrEmpty <SyntaxNode>(_owner._filterKey).ToBuilder(stepName: null, trackIncrementalSteps); _transformTable = table.GetStateTableOrEmpty <T>(_owner).ToBuilder(_owner.Name, trackIncrementalSteps); }