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 extern(C++) abstract class ObjcGlue 43 { 44 static void initialize() {} 45 } 46 } 47 } 48 else version (IN_GCC) 49 { 50 extern (C++) union tree_node; 51 52 alias Symbol = tree_node; 53 alias code = tree_node; 54 alias type = tree_node; 55 56 extern (C++) 57 { 58 Statement asmSemantic(AsmStatement s, Scope* sc); 59 } 60 61 // stubs 62 extern(C++) abstract class ObjcGlue 63 { 64 static void initialize() {} 65 } 66 } 67 else 68 { 69 public import dmd.backend.cc : block, Blockx, Symbol; 70 public import dmd.backend.type : type; 71 public import dmd.backend.el : elem; 72 public import dmd.backend.code_x86 : code; 73 public import dmd.iasm : asmSemantic; 74 public import dmd.objc_glue : ObjcGlue; 75 }