コード例 #1
0
        public static ResolutionContext CreateCurrentContext()
        {
            Document doc = null;

            DispatchService.GuiSyncDispatch(() => doc = Ide.IdeApp.Workbench.ActiveDocument);
            if (doc != null)
            {
                var ddoc = doc.ParsedDocument as ParsedDModule;
                if (ddoc != null)
                {
                    var ast = ddoc.DDom;
                    if (ast != null)
                    {
                        IStatement stmt;
                        var        caret = new D_Parser.Dom.CodeLocation(doc.Editor.Caret.Column, doc.Editor.Caret.Line);
                        var        bn    = DResolver.SearchBlockAt(ast, caret, out stmt);
                        var        dbn   = bn as DBlockNode;
                        if (stmt == null && dbn != null)
                        {
                            //TODO: If inside an expression statement, search the nearest function call or template instance expression - and try to evaluate that one.

                            if (dbn.StaticStatements.Count != 0)
                            {
                                foreach (var ss in dbn.StaticStatements)
                                {
                                    if (caret >= ss.Location && caret <= ss.EndLocation)
                                    {
                                        stmt = ss;
                                        break;
                                    }
                                }
                            }
                        }

                        var ed = DResolverWrapper.CreateEditorData(doc);
                        return(new ResolutionContext(ed.ParseCache, new ConditionalCompilationFlags(ed), bn, stmt));
                    }
                }
            }
            return(new ResolutionContext(DResolverWrapper.CreateCacheList(),
                                         new ConditionalCompilationFlags(VersionIdEvaluation.GetOSAndCPUVersions(), 1, true), null));
        }
コード例 #2
0
 public int ToOffset(D_Parser.Dom.CodeLocation loc)
 {
     return(doc.LocationToOffset(loc.Line, loc.Column));
 }
コード例 #3
0
 protected TemplateParameter(int nameHash, CodeLocation nameLoc, DNode par)
 {
     NameHash     = nameHash;
     NameLocation = nameLoc;
     Parent       = par;
 }
コード例 #4
0
 protected TemplateParameter(string name, CodeLocation nameLoc, DNode par) : this(name != null ? name.GetHashCode() : 0, nameLoc, par)
 {
     Strings.Add(name);
 }
コード例 #5
0
 public TemplateTupleParameter(string name, CodeLocation nameLoc, DNode parent) : base(name, nameLoc, parent)
 {
 }
コード例 #6
0
 public TemplateAliasParameter(int name, CodeLocation nameLoc, DNode parent) : base(name, nameLoc, parent)
 {
 }
コード例 #7
0
 public TemplateTypeParameter(int nameHash, CodeLocation nameLoc, DNode parent) : base(nameHash, nameLoc, parent)
 {
 }