1 /** 2 * Declarations for back-end functions that the front-end invokes. 3 * 4 * This 'glues' either the DMC or GCC back-end to the front-end. 5 * 6 * Copyright: Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved 7 * Authors: $(LINK2 https://www.digitalmars.com, Walter Bright) 8 * License: $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 9 * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/gluelayer.d, _gluelayer.d) 10 * Documentation: https://dlang.org/phobos/dmd_gluelayer.html 11 * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/gluelayer.d 12 */ 13 14 module dmd.gluelayer; 15 16 import dmd.dmodule; 17 import dmd.dscope; 18 import dmd.dsymbol; 19 import dmd.mtype; 20 import dmd.statement; 21 import dmd.root.file; 22 23 version (NoBackend) 24 { 25 struct Symbol; 26 struct code; 27 struct block; 28 struct Blockx; 29 struct elem; 30 struct TYPE; 31 alias type = TYPE; 32 33 extern (C++) 34 { 35 // iasm 36 Statement asmSemantic(AsmStatement s, Scope* sc) 37 { 38 sc.func.hasReturnExp = 8; 39 return null; 40 } 41 42 // toir 43 void toObjFile(Dsymbol ds, bool multiobj) {} 44 45 extern(C++) abstract class ObjcGlue 46 { 47 static void initialize() {} 48 } 49 } 50 } 51 else version (MARS) 52 { 53 public import dmd.backend.cc : block, Blockx, Symbol; 54 public import dmd.backend.type : type; 55 public import dmd.backend.el : elem; 56 public import dmd.backend.code_x86 : code; 57 58 extern (C++) 59 { 60 Statement asmSemantic(AsmStatement s, Scope* sc); 61 62 void toObjFile(Dsymbol ds, bool multiobj); 63 64 extern(C++) abstract class ObjcGlue 65 { 66 static void initialize(); 67 } 68 } 69 } 70 else version (IN_GCC) 71 { 72 extern (C++) union tree_node; 73 74 alias Symbol = tree_node; 75 alias code = tree_node; 76 alias type = tree_node; 77 78 extern (C++) 79 { 80 Statement asmSemantic(AsmStatement s, Scope* sc); 81 void toObjFile(Dsymbol ds, bool multiobj); 82 } 83 84 // stubs 85 extern(C++) abstract class ObjcGlue 86 { 87 static void initialize() {} 88 } 89 } 90 else 91 static assert(false, "Unsupported compiler backend");