1 2 /* Compiler implementation of the D programming language 3 * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved 4 * written by Walter Bright 5 * http://www.digitalmars.com 6 * Distributed under the Boost Software License, Version 1.0. 7 * http://www.boost.org/LICENSE_1_0.txt 8 * https://github.com/dlang/dmd/blob/master/src/dmd/import.h 9 */ 10 11 #pragma once 12 13 #include "dsymbol.h" 14 15 class Identifier; 16 struct Scope; 17 class Module; 18 class Package; 19 class AliasDeclaration; 20 21 class Import : public Dsymbol 22 { 23 public: 24 /* static import aliasId = pkg1.pkg2.id : alias1 = name1, alias2 = name2; 25 */ 26 27 Identifiers *packages; // array of Identifier's representing packages 28 Identifier *id; // module Identifier 29 Identifier *aliasId; 30 int isstatic; // !=0 if static import 31 Prot protection; 32 33 // Pairs of alias=name to bind into current namespace 34 Identifiers names; 35 Identifiers aliases; 36 37 Module *mod; 38 Package *pkg; // leftmost package/module 39 40 AliasDeclarations aliasdecls; // corresponding AliasDeclarations for alias=name pairs 41 42 Import(Loc loc, Identifiers *packages, Identifier *id, Identifier *aliasId, 43 int isstatic); 44 void addAlias(Identifier *name, Identifier *alias); 45 const char *kind() const; 46 Prot prot(); 47 Dsymbol *syntaxCopy(Dsymbol *s); // copy only syntax trees 48 void load(Scope *sc); 49 void importAll(Scope *sc); 50 void semantic(Scope *sc); 51 void semantic2(Scope *sc); 52 Dsymbol *toAlias(); 53 void addMember(Scope *sc, ScopeDsymbol *sds); 54 void setScope(Scope* sc); 55 Dsymbol *search(const Loc &loc, Identifier *ident, int flags = SearchLocalsOnly); 56 bool overloadInsert(Dsymbol *s); 57 isImport()58 Import *isImport() { return this; } accept(Visitor * v)59 void accept(Visitor *v) { v->visit(this); } 60 }; 61