private CapnpType _ResolveImport(CapnpImport import) { if (_GetImportContents == null) throw new Exception("import attempted but no way to resolve it"); var source = _GetImportContents(import.File); var importedType = import.Type; var importParser = new CapnpParser(source); var parsedSource = importParser.Parse(); parsedSource = importParser.ProcessParsedSource(parsedSource, _GetImportContents); // No type specified, so return the module for later perusal. if (importedType == null) return parsedSource; if (importedType is CapnpReference) { var @ref = (CapnpReference)importedType; return parsedSource.ResolveFullName(@ref.FullName); } else Debug.Assert(false); return importedType; }
protected internal override CapnpType VisitImport(CapnpImport import) { throw new InvalidOperationException("unexpected remaining import"); }
protected internal virtual CapnpType VisitImport(CapnpImport import) { import.Type = Visit(import.Type); return import; }