/// <summary> /// Initializes a new instance of the <see cref="PdbLocalScope"/> class. /// </summary> /// <param name="function">Function that contains this scope.</param> /// <param name="block">Block symbol read from PDB.</param> /// <param name="parent">Parent scope.</param> internal PdbLocalScope(PdbFunction function, BlockSymbol block, PdbLocalScope parent = null) { Function = function; Block = block; Parent = parent; childrenCache = SimpleCache.CreateStruct(() => { IEnumerable <BlockSymbol> blocks = Block.Children.OfType <BlockSymbol>(); int count = blocks.Count(); IPdbLocalScope[] children = new IPdbLocalScope[count]; int i = 0; foreach (BlockSymbol b in blocks) { children[i++] = new PdbLocalScope(Function, b, this); } return(children); }); constantsCache = SimpleCache.CreateStruct(() => { IEnumerable <ConstantSymbol> symbols = Block.Children.OfType <ConstantSymbol>(); int count = symbols.Count(); IPdbLocalConstant[] constants = new IPdbLocalConstant[count]; int i = 0; foreach (ConstantSymbol symbol in symbols) { constants[i++] = new PdbLocalConstant(this, symbol); } return(constants); }); variablesCache = SimpleCache.CreateStruct(() => { IEnumerable <AttributeSlotSymbol> slots = Block.Children.OfType <AttributeSlotSymbol>(); int count = slots.Count(); IPdbLocalVariable[] variables = new IPdbLocalVariable[count]; int i = 0; foreach (AttributeSlotSymbol slot in slots) { variables[i++] = new PdbLocalVariable(this, slot); } return(variables); }); }
/// <summary> /// Initializes a new instance of the <see cref="PdbSequencePoint"/> class. /// </summary> /// <param name="function">Function that contains this sequence point.</param> /// <param name="source">Source file that contains this sequence point.</param> /// <param name="line">Parsed line object that describes this sequence point.</param> internal PdbSequencePoint(PdbFunction function, PdbSource source, LinesSubsection.Line line) { Function = function; Source = source; Line = line; }