diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-02-09 15:40:06 +0100 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-02-13 12:50:45 +0100 |
commit | a3b38b7781622babb5ca68c621367770a65012fa (patch) | |
tree | 32ba65cb98047efa6ed8f86b327903ce647c008f /gcc/d/dmd/dmodule.c | |
parent | 0f3a743b688f4845e1798eed9b2e2284e891da11 (diff) | |
download | gcc-a3b38b7781622babb5ca68c621367770a65012fa.zip gcc-a3b38b7781622babb5ca68c621367770a65012fa.tar.gz gcc-a3b38b7781622babb5ca68c621367770a65012fa.tar.bz2 |
d: Merge upstream dmd 7132b3537
Splits out all semantic passes for Dsymbol, Type, and TemplateParameter
nodes into Visitors in separate files, and the copyright years of all
sources have been updated.
Reviewed-on: https://github.com/dlang/dmd/pull/12190
gcc/d/ChangeLog:
* dmd/MERGE: Merge upstream dmd 7132b3537.
* Make-lang.in (D_FRONTEND_OBJS): Add d/dsymbolsem.o, d/semantic2.o,
d/semantic3.o, and d/templateparamsem.o.
* d-compiler.cc (Compiler::genCmain): Update calls to semantic
entrypoint functions.
* d-lang.cc (d_parse_file): Likewise.
* typeinfo.cc (make_frontend_typeinfo): Likewise.
Diffstat (limited to 'gcc/d/dmd/dmodule.c')
-rw-r--r-- | gcc/d/dmd/dmodule.c | 123 |
1 files changed, 4 insertions, 119 deletions
diff --git a/gcc/d/dmd/dmodule.c b/gcc/d/dmd/dmodule.c index 95c263f..a2b01f5 100644 --- a/gcc/d/dmd/dmodule.c +++ b/gcc/d/dmd/dmodule.c @@ -1,6 +1,6 @@ /* Compiler implementation of the D programming language - * Copyright (C) 1999-2020 by The D Language Foundation, All Rights Reserved + * Copyright (C) 1999-2021 by The D Language Foundation, All Rights Reserved * written by Walter Bright * http://www.digitalmars.com * Distributed under the Boost Software License, Version 1.0. @@ -34,8 +34,6 @@ Dsymbols Module::deferred2; // deferred Dsymbol's needing semantic2() run on the Dsymbols Module::deferred3; // deferred Dsymbol's needing semantic3() run on them unsigned Module::dprogress; -StringExp *semanticString(Scope *sc, Expression *exp, const char *s); - void Module::_init() { modules = new DsymbolTable(); @@ -815,113 +813,6 @@ void Module::importAll(Scope *) sc->pop(); // 2 pops because Scope::createGlobal() created 2 } -void Module::semantic(Scope *) -{ - if (semanticRun != PASSinit) - return; - - //printf("+Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent); - semanticRun = PASSsemantic; - - // Note that modules get their own scope, from scratch. - // This is so regardless of where in the syntax a module - // gets imported, it is unaffected by context. - Scope *sc = _scope; // see if already got one from importAll() - if (!sc) - { - Scope::createGlobal(this); // create root scope - } - - //printf("Module = %p, linkage = %d\n", sc->scopesym, sc->linkage); - - // Pass 1 semantic routines: do public side of the definition - for (size_t i = 0; i < members->length; i++) - { - Dsymbol *s = (*members)[i]; - - //printf("\tModule('%s'): '%s'.semantic()\n", toChars(), s->toChars()); - s->semantic(sc); - runDeferredSemantic(); - } - - if (userAttribDecl) - { - userAttribDecl->semantic(sc); - } - - if (!_scope) - { - sc = sc->pop(); - sc->pop(); // 2 pops because Scope::createGlobal() created 2 - } - semanticRun = PASSsemanticdone; - //printf("-Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent); -} - -void Module::semantic2(Scope*) -{ - //printf("Module::semantic2('%s'): parent = %p\n", toChars(), parent); - if (semanticRun != PASSsemanticdone) // semantic() not completed yet - could be recursive call - return; - semanticRun = PASSsemantic2; - - // Note that modules get their own scope, from scratch. - // This is so regardless of where in the syntax a module - // gets imported, it is unaffected by context. - Scope *sc = Scope::createGlobal(this); // create root scope - //printf("Module = %p\n", sc.scopesym); - - // Pass 2 semantic routines: do initializers and function bodies - for (size_t i = 0; i < members->length; i++) - { - Dsymbol *s = (*members)[i]; - s->semantic2(sc); - } - - if (userAttribDecl) - { - userAttribDecl->semantic2(sc); - } - - sc = sc->pop(); - sc->pop(); - semanticRun = PASSsemantic2done; - //printf("-Module::semantic2('%s'): parent = %p\n", toChars(), parent); -} - -void Module::semantic3(Scope*) -{ - //printf("Module::semantic3('%s'): parent = %p\n", toChars(), parent); - if (semanticRun != PASSsemantic2done) - return; - semanticRun = PASSsemantic3; - - // Note that modules get their own scope, from scratch. - // This is so regardless of where in the syntax a module - // gets imported, it is unaffected by context. - Scope *sc = Scope::createGlobal(this); // create root scope - //printf("Module = %p\n", sc.scopesym); - - // Pass 3 semantic routines: do initializers and function bodies - for (size_t i = 0; i < members->length; i++) - { - Dsymbol *s = (*members)[i]; - //printf("Module %s: %s.semantic3()\n", toChars(), s->toChars()); - s->semantic3(sc); - - runDeferredSemantic2(); - } - - if (userAttribDecl) - { - userAttribDecl->semantic3(sc); - } - - sc = sc->pop(); - sc->pop(); - semanticRun = PASSsemantic3done; -} - /********************************** * Determine if we need to generate an instance of ModuleInfo * for this Module. @@ -1074,7 +965,7 @@ void Module::runDeferredSemantic() { Dsymbol *s = todo[i]; - s->semantic(NULL); + dsymbolSemantic(s, NULL); //printf("deferred: %s, parent = %s\n", s->toChars(), s->parent->toChars()); } //printf("\tdeferred.length = %d, len = %d, dprogress = %d\n", deferred.length, len, dprogress); @@ -1094,7 +985,7 @@ void Module::runDeferredSemantic2() { Dsymbol *s = (*a)[i]; //printf("[%d] %s semantic2a\n", i, s->toPrettyChars()); - s->semantic2(NULL); + semantic2(s, NULL); if (global.errors) break; @@ -1112,7 +1003,7 @@ void Module::runDeferredSemantic3() Dsymbol *s = (*a)[i]; //printf("[%d] %s semantic3a\n", i, s->toPrettyChars()); - s->semantic3(NULL); + semantic3(s, NULL); if (global.errors) break; @@ -1296,12 +1187,6 @@ bool Package::isAncestorPackageOf(const Package * const pkg) const return isAncestorPackageOf(pkg->parent->isPackage()); } -void Package::semantic(Scope *) -{ - if (semanticRun < PASSsemanticdone) - semanticRun = PASSsemanticdone; -} - /**************************************************** * Input: * packages[] the pkg1.pkg2 of pkg1.pkg2.mod |