Ejemplo n.º 1
0
        public bool TryGetSymbolTable(string key, out DogeSymbolTable?symbolTable)
        {
            var split = key.Split('.');

            return(split.Length > 1
                ? TryGetSymbolTable(split, out symbolTable)
                : SymbolTables.TryGetValue(key, out symbolTable));
        }
Ejemplo n.º 2
0
 public DogeSymbolTable GetOrAddSymbolTable(string key, DogeSymbolTableType symbolTableType) =>
 SymbolTables.TryGetValue(key, out var newSymbolTable)
         ? newSymbolTable
         : (SymbolTables[key]
                = new DogeSymbolTable(
                      key,
                      FullName.With(key),
                      symbolTableType,
                      this));
Ejemplo n.º 3
0
        public bool TryGetSymbolTable(ICollection <string> key, out DogeSymbolTable?symbolTable)
        {
            var first = key.First();

            if (key.Count == 1)
            {
                return(TryGetSymbolTable(first, out symbolTable));
            }

            if (SymbolTables.TryGetValue(first, out var value))
            {
                return(value.TryGetSymbolTable(key.Skip(1).ToArray(), out symbolTable));
            }

            symbolTable = null;
            return(false);
        }
Ejemplo n.º 4
0
        public IEnumerable <DogeSymbol> ResolveSymbolCandidates(IList <string> name,
                                                                Predicate <DogeSymbol> symbolConditions,
                                                                Predicate <DogeSymbolTableType> symbolTableTypeCondition)
        {
            var candidates =
                SymbolTables
                .Where(x =>
                       symbolTableTypeCondition(x.Value.SymbolTableType))
                .SelectMany(x =>
                            x.Value.ResolveSymbolCandidates(name, symbolConditions, symbolTableTypeCondition));

            if (symbolTableTypeCondition(SymbolTableType))
            {
                candidates = candidates
                             .Concat(Symbols
                                     .Select(x => x.Value)
                                     .Where(x =>
                                            x.FullName.EndsWith(name) &&
                                            symbolConditions(x)));
            }

            return(candidates);
        }
Ejemplo n.º 5
0
 void ImplReadEndNest() {
     NestedBinXml nested = this.prevNameInfo;
     this.symbolTables = nested.symbolTables;
     this.docState = nested.docState;
     this.prevNameInfo = nested.next;
 }
Ejemplo n.º 6
0
 public NestedBinXml(SymbolTables symbolTables, int docState, NestedBinXml next) {
     this.symbolTables = symbolTables;
     this.docState = docState;
     this.next = next;
 }
 private void ImplReadEndNest()
 {
     NestedBinXml prevNameInfo = this.prevNameInfo;
     this.symbolTables = prevNameInfo.symbolTables;
     this.docState = prevNameInfo.docState;
     this.prevNameInfo = prevNameInfo.next;
 }
Ejemplo n.º 8
0
 private void ImplReadEndNest()
 {
     NestedBinXml nested = _prevNameInfo;
     _symbolTables = nested.symbolTables;
     _docState = nested.docState;
     _prevNameInfo = nested.next;
 }
Ejemplo n.º 9
0
 public SymbolTableManager(SymbolTables tables)
 {
     this.tables       = tables;
     this.currentTable = null;
 }
Ejemplo n.º 10
0
 public SymbolTableBuildingVisitor()
 {
     this.symbolTables = new SymbolTables();
     this.currentTable = null;
     this.hook         = new ErrorHook();
 }