Home | History | Annotate | only in /src/external/gpl3/gcc.old/dist/gcc/d/dmd
Up to higher level directory
NameDateSize
access.d07-Sep-202512.7K
aggregate.d07-Sep-202526.9K
aggregate.h07-Sep-202511.4K
aliasthis.d07-Sep-20256.7K
aliasthis.h07-Sep-2025863
apply.d07-Sep-20255.1K
argtypes.c09-Apr-202114.7K
arrayop.d07-Sep-202510.8K
arraytypes.d07-Sep-20252.1K
arraytypes.h07-Sep-20251.9K
ast_node.d07-Sep-2025923
ast_node.h07-Sep-2025499
astcodegen.d07-Sep-20254.3K
astenums.d07-Sep-202513.5K
attrib.d07-Sep-202547.4K
attrib.h07-Sep-20256.9K
blockexit.d07-Sep-202517.3K
boostlicense.txt09-Apr-20211.3K
builtin.d07-Sep-20251.1K
canthrow.d07-Sep-20257.9K
chkformat.d07-Sep-202541.2K
clone.d07-Sep-202555.9K
common/25-Feb-2026
compiler.d07-Sep-20251.9K
compiler.h07-Sep-20251K
cond.d07-Sep-202530.3K
cond.h07-Sep-20252.2K
constfold.d07-Sep-202552.1K
cparse.d07-Sep-2025158.3K
cppmangle.d07-Sep-202580K
ctfe.h07-Sep-20251.6K
ctfeexpr.d07-Sep-202567.4K
ctorflow.d07-Sep-20256.1K
dcast.d07-Sep-2025122.3K
dclass.d07-Sep-202535.6K
declaration.d07-Sep-202572.6K
declaration.h07-Sep-202528.5K
delegatize.d07-Sep-20258.4K
denum.d07-Sep-20259K
dimport.d07-Sep-202511.3K
dinterpret.d07-Sep-2025247.2K
dmacro.d07-Sep-202514.8K
dmangle.d07-Sep-202537.1K
dmodule.d07-Sep-202550.3K
doc.d07-Sep-2025178.2K
doc.h07-Sep-2025417
dscope.d07-Sep-202526.5K
dstruct.d07-Sep-202518.2K
dsymbol.d07-Sep-202582.7K
dsymbol.h07-Sep-202515.2K
dsymbolsem.d07-Sep-2025249.3K
dtemplate.d07-Sep-2025292.1K
dtoh.d07-Sep-202599.6K
dversion.d07-Sep-20255.4K
entity.d07-Sep-2025147.6K
enum.h07-Sep-20252.2K
errors.d07-Sep-202514K
errors.h07-Sep-20252.7K
escape.d07-Sep-202577K
expression.d07-Sep-2025210.5K
expression.h07-Sep-202533.7K
expressionsem.d07-Sep-2025447.9K
file_manager.d07-Sep-20258.9K
foreachvar.d07-Sep-20258.6K
func.d07-Sep-2025137.6K
globals.d07-Sep-202523.5K
globals.h07-Sep-202515.3K
gluelayer.d07-Sep-20252.1K
hdrgen.d07-Sep-2025112.2K
hdrgen.h07-Sep-2025595
iasm.d07-Sep-20251.5K
iasmgcc.d07-Sep-202514.9K
id.d07-Sep-202513.7K
id.h07-Sep-2025418
identifier.d07-Sep-202510K
identifier.h07-Sep-20251.1K
impcnvtab.d07-Sep-202516.2K
imphint.d07-Sep-20252.7K
import.h07-Sep-20251.6K
importc.d07-Sep-20259.9K
init.d07-Sep-20258.8K
init.h07-Sep-20252.7K
initsem.d07-Sep-202547.8K
inline.d07-Sep-20251.2K
intrange.d07-Sep-202527.3K
json.d07-Sep-202528.7K
json.h07-Sep-2025541
lambdacomp.d07-Sep-202513.6K
lexer.d07-Sep-202599.7K
mangle.h07-Sep-20251K
MERGE07-Sep-2025154
module.h07-Sep-20256.1K
mtype.d07-Sep-2025207.5K
mtype.h07-Sep-202524.5K
mustuse.d07-Sep-20256.5K
nogc.d07-Sep-20257K
nspace.d07-Sep-20255.2K
nspace.h07-Sep-2025986
ob.d07-Sep-202578.3K
objc.d07-Sep-202526.3K
objc.h07-Sep-20252.5K
opover.d07-Sep-202568.5K
optimize.d07-Sep-202546.9K
parse.d07-Sep-2025316K
parsetimevisitor.d07-Sep-202517K
permissivevisitor.d07-Sep-2025949
printast.d07-Sep-20255.6K
README.md07-Sep-202530.5K
res/25-Feb-2026
root/25-Feb-2026
safe.d07-Sep-20257.3K
sapply.d07-Sep-20254.1K
scope.h07-Sep-20255.7K
semantic2.d07-Sep-202525.9K
semantic3.d07-Sep-202565.7K
sideeffect.d07-Sep-202513.2K
statement.d07-Sep-202554.8K
statement.h07-Sep-202520.7K
statement_rewrite_walker.d07-Sep-20254.4K
statementsem.d07-Sep-2025165.9K
staticassert.d07-Sep-20251.8K
staticassert.h07-Sep-2025791
staticcond.d07-Sep-202512.9K
stmtstate.d07-Sep-20253.8K
target.d07-Sep-202515.1K
target.h07-Sep-20256.8K
template.h07-Sep-20259.9K
templateparamsem.d07-Sep-20255.9K
tokens.d07-Sep-202524.8K
tokens.h07-Sep-20257.5K
traits.d07-Sep-202567K
transitivevisitor.d07-Sep-202529.6K
typesem.d07-Sep-2025163.9K
typinf.d07-Sep-20258.4K
utils.d07-Sep-20257.1K
VERSION07-Sep-20259
version.h07-Sep-20251,019
visitor.d07-Sep-202510K
visitor.h07-Sep-202526.5K

README.md

      1 # DMD Source code
      2 
      3 This is the source code to the DMD compiler
      4 for the D Programming Language defined in the documents at
      5 https://dlang.org/
      6 
      7 These sources are free, they are redistributable and modifiable
      8 under the terms of the Boost Software License, Version 1.0.
      9 The terms of this license are in the file boostlicense.txt,
     10 or see https://www.boost.org/LICENSE_1_0.txt.
     11 
     12 If a particular file has a different license in it, that overrides
     13 this license for that file.
     14 
     15 -Walter Bright
     16 
     17 ## Directory structure
     18 
     19 | Folder                                                                   | Purpose                                                                                                                                                                                                       |
     20 |--------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
     21 | [dmd/](https://github.com/dlang/dmd/tree/master/src/dmd)                 | The dmd driver and front-end                                                                                                                                                                                  |
     22 | [dmd/backend/](https://github.com/dlang/dmd/tree/master/src/dmd/backend) | Code generation for x86 or x86-64. Shared by the [Digital Mars C compiler](https://github.com/DigitalMars/Compiler/), but not [LDC](https://github.com/ldc-developers/ldc) or [GDC](https://gdcproject.org/). |
     23 | [dmd/common/](https://github.com/dlang/dmd/tree/master/src/dmd/common)   | Code shared by the front-end and back-end                                                                                                                                                                     |
     24 | [dmd/root/](https://github.com/dlang/dmd/tree/master/src/dmd/root)       | Meant as a portable utility library, but ["it wasn't very good and the only project left using it is dmd"](https://github.com/dlang/dmd/pull/9844#issuecomment-498479516).                                    |
     25 
     26 DMD has a mostly flat directory structure, so this section aims to divide all source files into logical groups for easier navigation.
     27 The groups are roughly ordered by how late they appear in the compilation process.
     28 Note that these groups have no strict meaning, the category assignments are a bit subjective.
     29 
     30 ### Driver
     31 
     32 | File                                                                        | Purpose                                                               |
     33 |-----------------------------------------------------------------------------|-----------------------------------------------------------------------|
     34 | [mars.d](https://github.com/dlang/dmd/blob/master/src/dmd/mars.d)           | The entry point. Contains `main`.                                     |
     35 | [cli.d](https://github.com/dlang/dmd/blob/master/src/dmd/cli.d)             | Define the command line interface                                     |
     36 | [dmdparams.d](https://github.com/dlang/dmd/blob/master/src/dmd/dmdparams.d) | DMD-specific parameters                                               |
     37 | [globals.d](https://github.com/dlang/dmd/blob/master/src/dmd/globals.d)     | Define a structure storing command line options                       |
     38 | [dinifile.d](https://github.com/dlang/dmd/blob/master/src/dmd/dinifile.d)   | Parse settings from .ini file (`sc.ini` / `dmd.conf`)                 |
     39 | [vsoptions.d](https://github.com/dlang/dmd/blob/master/src/dmd/vsoptions.d) | Detect the Microsoft Visual Studio toolchain for linking              |
     40 | [frontend.d](https://github.com/dlang/dmd/blob/master/src/dmd/frontend.d)   | An interface for using DMD as a library                               |
     41 | [errors.d](https://github.com/dlang/dmd/blob/master/src/dmd/errors.d)       | Error reporting functionality                                         |
     42 | [target.d](https://github.com/dlang/dmd/blob/master/src/dmd/target.d)       | Manage target-specific parameters for cross-compiling (for LDC/GDC)   |
     43 | [compiler.d](https://github.com/dlang/dmd/blob/master/src/dmd/compiler.d)   | Describe a back-end compiler and implements compiler-specific actions |
     44 
     45 ### Lexing / parsing
     46 
     47 | File                                                                  | Purpose                                                              |
     48 |-----------------------------------------------------------------------|----------------------------------------------------------------------|
     49 | [lexer.d](https://github.com/dlang/dmd/blob/master/src/dmd/lexer.d)   | Convert source code into tokens for the D and ImportC parsers        |
     50 | [entity.d](https://github.com/dlang/dmd/blob/master/src/dmd/entity.d) | Define "\\&Entity;" escape sequence for strings / character literals |
     51 | [tokens.d](https://github.com/dlang/dmd/blob/master/src/dmd/tokens.d) | Define lexical tokens.                                               |
     52 | [parse.d](https://github.com/dlang/dmd/blob/master/src/dmd/parse.d)   | D parser, converting tokens into an Abstract Syntax Tree (AST)       |
     53 | [cparse.d](https://github.com/dlang/dmd/blob/master/src/dmd/cparse.d) | ImportC parser, converting tokens into an Abstract Syntax Tree (AST) |
     54 
     55 ### Semantic analysis
     56 
     57 **Symbols and declarations**
     58 
     59 | File                                                                            | Purpose                                                                                                          |
     60 |---------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
     61 | [dsymbol.d](https://github.com/dlang/dmd/blob/master/src/dmd/dsymbol.d)         | Base class for a D symbol, e.g. a variable, function, module, enum etc.                                          |
     62 | [identifier.d](https://github.com/dlang/dmd/blob/master/src/dmd/identifier.d)   | Represents the name of a `Dsymbol`                                                                               |
     63 | [id.d](https://github.com/dlang/dmd/blob/master/src/dmd/id.d)                   | Define strings for pre-defined identifiers (e.g. `sizeof`, `string`)                                             |
     64 | [dscope.d](https://github.com/dlang/dmd/blob/master/src/dmd/dscope.d)           | Define a 'scope' on which symbol lookup can be performed                                                         |
     65 | [dtemplate.d](https://github.com/dlang/dmd/blob/master/src/dmd/dtemplate.d)     | A template declaration or instance                                                                               |
     66 | [dmodule.d](https://github.com/dlang/dmd/blob/master/src/dmd/dmodule.d)         | Define a package and module                                                                                      |
     67 | [mtype.d](https://github.com/dlang/dmd/blob/master/src/dmd/mtype.d)             | Define expression types such as `int`, `char[]`, `void function()`                                               |
     68 | [arraytypes.d](https://github.com/dlang/dmd/blob/master/src/dmd/arraytypes.d)   | For certain Declaration nodes of type `T`, provides aliases for `Array!T`                                        |
     69 | [declaration.d](https://github.com/dlang/dmd/blob/master/src/dmd/declaration.d) | Misc. declarations of `alias`, variables, type tuples, `ClassInfo` etc.                                          |
     70 | [denum.d](https://github.com/dlang/dmd/blob/master/src/dmd/denum.d)             | Defines `enum` declarations and enum members                                                                     |
     71 | [attrib.d](https://github.com/dlang/dmd/blob/master/src/dmd/nogc.d)             | Declarations of 'attributes' such as `private`, `pragma()`, `immutable`, `@UDA`, `align`, `extern(C++)` and more |
     72 | [func.d](https://github.com/dlang/dmd/blob/master/src/dmd/func.d)               | Define a function declaration (includes function literals, `invariant`, `unittest`)                              |
     73 | [dversion.d](https://github.com/dlang/dmd/blob/master/src/dmd/dversion.d)       | Defines a version symbol, e.g. `version = ident`, `debug = ident`                                                |
     74 
     75 **AST nodes**
     76 
     77 | File                                                                              | Purpose                                                     |
     78 |-----------------------------------------------------------------------------------|-------------------------------------------------------------|
     79 | [ast_node.d](https://github.com/dlang/dmd/blob/master/src/dmd/ast_node.d)         | Define an abstract AST node class                           |
     80 | [astbase.d](https://github.com/dlang/dmd/blob/master/src/dmd/astbase.d)           | Namespace of AST nodes that can be produced by the parser   |
     81 | [astcodegen.d](https://github.com/dlang/dmd/blob/master/src/dmd/astcodegen.d)     | Namespace of AST nodes of a AST ready for code generation   |
     82 | [astenums.d](https://github.com/dlang/dmd/blob/master/src/dmd/astenums.d)         | Enums common to DMD and AST                                 |
     83 | [expression.d](https://github.com/dlang/dmd/blob/master/src/dmd/expression.d)     | Define expression AST nodes                                 |
     84 | [statement.d](https://github.com/dlang/dmd/blob/master/src/dmd/statement.d)       | Define statement AST nodes                                  |
     85 | [staticassert.d](https://github.com/dlang/dmd/blob/master/src/dmd/staticassert.d) | Define a `static assert` AST node                           |
     86 | [aggregate.d](https://github.com/dlang/dmd/blob/master/src/dmd/aggregate.d)       | Define an aggregate (`struct`, `union` or `class`) AST node |
     87 | [dclass.d](https://github.com/dlang/dmd/blob/master/src/dmd/dclass.d)             | Define a `class` AST node                                   |
     88 | [dstruct.d](https://github.com/dlang/dmd/blob/master/src/dmd/dstruct.d)           | Define a `struct` or `union` AST node                       |
     89 | [init.d](https://github.com/dlang/dmd/blob/master/src/dmd/init.d)                 | Define variable initializers                                |
     90 
     91 **AST visitors**
     92 
     93 | File                                                                                                      | Purpose                                                                          |
     94 |-----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
     95 | [parsetimevisitor.d](https://github.com/dlang/dmd/blob/master/src/dmd/parsetimevisitor.d)                 | General [visitor](https://en.wikipedia.org/wiki/Visitor_pattern) for AST nodes   |
     96 | [permissivevisitor.d](https://github.com/dlang/dmd/blob/master/src/dmd/permissivevisitor.d)               | Subclass of ParseTimeVisitor that does not `assert(0)` on unimplemented nodes    |
     97 | [strictvisitor.d](https://github.com/dlang/dmd/blob/master/src/dmd/strictvisitor.d)                       | Visitor that forces derived classes to implement `visit` for every possible node |
     98 | [visitor.d](https://github.com/dlang/dmd/blob/master/src/dmd/visitor.d)                                   | A visitor implementing `visit` for all nodes present in the compiler             |
     99 | [transitivevisitor.d](https://github.com/dlang/dmd/blob/master/src/dmd/transitivevisitor.d)               | Provide a mixin template with visit methods for the parse time AST               |
    100 | [apply.d](https://github.com/dlang/dmd/blob/master/src/dmd/apply.d)                                       | Depth-first expression visitor                                                   |
    101 | [sapply.d](https://github.com/dlang/dmd/blob/master/src/dmd/sapply.d)                                     | Depth-first statement visitor                                                    |
    102 | [statement_rewrite_walker.d](https://github.com/dlang/dmd/blob/master/src/dmd/statement_rewrite_walker.d) | Statement visitor that allows replacing the currently visited node               |
    103 
    104 **Semantic passes**
    105 
    106 | File                                                                                      | Purpose                                                           |
    107 |-------------------------------------------------------------------------------------------|-------------------------------------------------------------------|
    108 | [dsymbolsem.d](https://github.com/dlang/dmd/blob/master/src/dmd/dsymbolsem.d)             | Do semantic 1 pass (symbol identifiers/types)                     |
    109 | [semantic2.d](https://github.com/dlang/dmd/blob/master/src/dmd/semantic2.d)               | Do semantic 2 pass (symbol initializers)                          |
    110 | [semantic3.d](https://github.com/dlang/dmd/blob/master/src/dmd/semantic3.d)               | Do semantic 3 pass (function bodies)                              |
    111 | [inline.d](https://github.com/dlang/dmd/blob/master/src/dmd/inline.d)                     | Do inline pass (optimization pass that dmd does in the front-end) |
    112 | [inlinecost.d](https://github.com/dlang/dmd/blob/master/src/dmd/inlinecost.d)             | Compute the cost of inlining a function call.                     |
    113 | [expressionsem.d](https://github.com/dlang/dmd/blob/master/src/dmd/expressionsem.d)       | Do semantic analysis for expressions                              |
    114 | [statementsem.d](https://github.com/dlang/dmd/blob/master/src/dmd/statementsem.d)         | Do semantic analysis for statements                               |
    115 | [initsem.d](https://github.com/dlang/dmd/blob/master/src/dmd/initsem.d)                   | Do semantic analysis for initializers                             |
    116 | [templateparamsem.d](https://github.com/dlang/dmd/blob/master/src/dmd/templateparamsem.d) | Do semantic analysis for template parameters                      |
    117 | [typesem.d](https://github.com/dlang/dmd/blob/master/src/dmd/typesem.d)                   | Do semantic analysis for types                                    |
    118 
    119 **Semantic helpers**
    120 
    121 | File                                                                          | Purpose                                                                                    |
    122 |-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
    123 | [opover.d](https://github.com/dlang/dmd/blob/master/src/dmd/opover.d)         | Operator overloading                                                                       |
    124 | [clone.d](https://github.com/dlang/dmd/blob/master/src/dmd/dsymbolsem.d)      | Generate automatic `opEquals`, `opAssign` and constructors for structs                     |
    125 | [blockexit.d](https://github.com/dlang/dmd/blob/master/src/dmd/blockexit.d)   | Find out in what ways control flow can exit a block                                        |
    126 | [ctorflow.d](https://github.com/dlang/dmd/blob/master/src/dmd/ctorflow.d)     | Control flow in constructors                                                               |
    127 | [constfold.d](https://github.com/dlang/dmd/blob/master/src/dmd/constfold.d)   | Do constant folding of arithmetic expressions                                              |
    128 | [optimize.d](https://github.com/dlang/dmd/blob/master/src/dmd/optimize.d)     | Do constant folding more generally                                                         |
    129 | [dcast.d](https://github.com/dlang/dmd/blob/master/src/dmd/dcast.d)           | Implicit or explicit cast(), finding common types e.g. in `x ? a : b`, integral promotions |
    130 | [impcnvtab.d](https://github.com/dlang/dmd/blob/master/src/dmd/impcnvtab.d)   | Define an implicit conversion table for basic types                                        |
    131 | [importc.d](https://github.com/dlang/dmd/blob/master/src/dmd/importc.d)       | Helpers specific to ImportC                                                                |
    132 | [sideeffect.d](https://github.com/dlang/dmd/blob/master/src/dmd/sideeffect.d) | Extract side-effects of expressions for certain lowerings.                                 |
    133 | [mustuse.d](https://github.com/dlang/dmd/blob/master/src/dmd/mustuse.d)       | Helpers related to the `@mustuse` attribute                                                |
    134 
    135 
    136 **Compile Time Function Execution (CTFE)**
    137 
    138 | File                                                                          | Purpose                                                                             |
    139 |-------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
    140 | [dinterpret.d](https://github.com/dlang/dmd/blob/master/src/dmd/dinterpret.d) | CTFE entry point                                                                    |
    141 | [ctfeexpr.d](https://github.com/dlang/dmd/blob/master/src/dmd/ctfeexpr.d)     | CTFE for expressions involving pointers, slices, array concatenation etc.           |
    142 | [builtin.d](https://github.com/dlang/dmd/blob/master/src/dmd/builtin.d)       | Allow CTFE of certain external functions (`core.math`, `std.math` and `core.bitop`) |
    143 
    144 ### Specific language features
    145 
    146 **Attribute checks**
    147 
    148 | File                                                                      | Purpose                                |
    149 |---------------------------------------------------------------------------|----------------------------------------|
    150 | [nogc.d](https://github.com/dlang/dmd/blob/master/src/dmd/nogc.d)         | `@nogc` checks                         |
    151 | [safe.d](https://github.com/dlang/dmd/blob/master/src/dmd/safe.d)         | `@safe` checks                         |
    152 | [canthrow.d](https://github.com/dlang/dmd/blob/master/src/dmd/canthrow.d) | `nothrow` checks                       |
    153 | [escape.d](https://github.com/dlang/dmd/blob/master/src/dmd/escape.d)     | `scope` checks                         |
    154 | [access.d](https://github.com/dlang/dmd/blob/master/src/dmd/access.d)     | `public` / `private` checks            |
    155 | [ob.d](https://github.com/dlang/dmd/blob/master/src/dmd/ob.d)             | Ownership / borrowing (`@live`) checks |
    156 
    157 **Inline Assembly**
    158 
    159 | File                                                                    | Purpose                                   |
    160 |-------------------------------------------------------------------------|-------------------------------------------|
    161 | [iasm.d](https://github.com/dlang/dmd/blob/master/src/dmd/iasm.d)       | Inline assembly depending on the compiler |
    162 | [iasmdmd.d](https://github.com/dlang/dmd/blob/master/src/dmd/iasmdmd.d) | Inline assembly for DMD                   |
    163 | [iasmgcc.d](https://github.com/dlang/dmd/blob/master/src/dmd/iasmgcc.d) | Inline assembly for GDC                   |
    164 
    165 **Other**
    166 
    167 | File                                                                          | Purpose                                                                                     |
    168 |-------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|
    169 | [aliasthis.d](https://github.com/dlang/dmd/blob/master/src/dmd/aliasthis.d)   | Resolve implicit conversions for `alias X this`                                             |
    170 | [traits.d](https://github.com/dlang/dmd/blob/master/src/dmd/traits.d)         | `__traits()`                                                                                |
    171 | [lambdacomp.d](https://github.com/dlang/dmd/blob/master/src/dmd/lambdacomp.d) | `__traits(isSame, x => y, z => w)`                                                          |
    172 | [cond.d](https://github.com/dlang/dmd/blob/master/src/dmd/cond.d)             | Evaluate `static if`, `version` `debug `                                                    |
    173 | [staticcond.d](https://github.com/dlang/dmd/blob/master/src/dmd/staticcond.d) | Lazily evaluate static conditions for `static if`, `static assert` and template constraints |
    174 | [delegatize.d](https://github.com/dlang/dmd/blob/master/src/dmd/delegatize.d) | Converts expression to delegates for `lazy` parameters                                      |
    175 | [eh.d](https://github.com/dlang/dmd/blob/master/src/dmd/eh.d)                 | Generate tables for exception handling                                                      |
    176 | [nspace.d](https://github.com/dlang/dmd/blob/master/src/dmd/nspace.d)         | Namespace for `extern (C++, Module)`                                                        |
    177 | [intrange.d](https://github.com/dlang/dmd/blob/master/src/dmd/intrange.d)     | [Value range propagation](https://digitalmars.com/articles/b62.html)                        |
    178 | [dimport.d](https://github.com/dlang/dmd/blob/master/src/dmd/dimport.d)       | Renamed imports (`import aliasSymbol = pkg1.pkg2.symbol`)                                   |
    179 | [arrayop.d](https://github.com/dlang/dmd/blob/master/src/dmd/arrayop.d)       | Array operations (`a[] = b[] + c[]`)                                                        |
    180 | [typinf.d](https://github.com/dlang/dmd/blob/master/src/dmd/typinf.d)         | Generate typeinfo for `typeid()` (as well as internals)                                     |
    181 
    182 | File                                                                        | Purpose                                                                            |
    183 |-----------------------------------------------------------------------------|------------------------------------------------------------------------------------|
    184 | [chkformat.d](https://github.com/dlang/dmd/blob/master/src/dmd/chkformat.d) | Validate arguments with format specifiers for `printf` / `scanf` etc.              |
    185 | [imphint.d](https://github.com/dlang/dmd/blob/master/src/dmd/imphint.d)     | Give a suggestion to e.g. `import std.stdio` when `writeln` could not be resolved. |
    186 
    187 ### Library files
    188 
    189 | File                                                                          | Purpose                                              |
    190 |-------------------------------------------------------------------------------|------------------------------------------------------|
    191 | [lib.d](https://github.com/dlang/dmd/blob/master/src/dmd/lib.d)               | Abstract library class                               |
    192 | [libelf.d](https://github.com/dlang/dmd/blob/master/src/dmd/libelf.d)         | Library in ELF format (Unix)                         |
    193 | [libmach.d](https://github.com/dlang/dmd/blob/master/src/dmd/libmach.d)       | Library in Mach-O format (macOS)                     |
    194 | [libmscoff.d](https://github.com/dlang/dmd/blob/master/src/dmd/libmscoff.d)   | Library in COFF format (32/64-bit Windows)           |
    195 | [libomf.d](https://github.com/dlang/dmd/blob/master/src/dmd/libomf.d)         | Library in OMF format (legacy 32-bit Windows)        |
    196 | [scanelf.d](https://github.com/dlang/dmd/blob/master/src/dmd/scanelf.d)       | Extract symbol names from a library in ELF format    |
    197 | [scanmach.d](https://github.com/dlang/dmd/blob/master/src/dmd/scanmach.d)     | Extract symbol names from a library in Mach-O format |
    198 | [scanmscoff.d](https://github.com/dlang/dmd/blob/master/src/dmd/scanmscoff.d) | Extract symbol names from a library in COFF format   |
    199 | [scanomf.d](https://github.com/dlang/dmd/blob/master/src/dmd/scanomf.d)       | Extract symbol names from a library in OMF format    |
    200 
    201 ### Code generation / back-end interfacing
    202 
    203 | File                                                                                        | Purpose                                                                             |
    204 |---------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
    205 | [dmsc.d](https://github.com/dlang/dmd/blob/master/src/dmd/dmsc.d)                           | Configures and initializes the back-end                                             |
    206 | [toobj.d](https://github.com/dlang/dmd/blob/master/src/dmd/toobj.d)                         | Convert an AST that went through all semantic phases into an object file            |
    207 | [toir.d](https://github.com/dlang/dmd/blob/master/src/dmd/toir.d)                           | Convert Dsymbols intermediate representation                                        |
    208 | [e2ir.d](https://github.com/dlang/dmd/blob/master/src/dmd/e2ir.d)                           | Convert Expressions to intermediate representation                                  |
    209 | [s2ir.d](https://github.com/dlang/dmd/blob/master/src/dmd/s2ir.d)                           | Convert Statements to intermediate representation                                   |
    210 | [stmtstate.d](https://github.com/dlang/dmd/blob/master/src/dmd/stmtstate.d)                 | Used to help transform statement AST into flow graph                                |
    211 | [toctype.d](https://github.com/dlang/dmd/blob/master/src/dmd/toctype.d)                     | Convert a D type to a type the back-end understands                                 |
    212 | [tocsym.d](https://github.com/dlang/dmd/blob/master/src/dmd/tocsym.d)                       | Convert a D symbol to a symbol the linker understands (with mangled name)           |
    213 | [argtypes_x86.d](https://github.com/dlang/dmd/blob/master/src/dmd/argtypes_x86.d)           | Convert a D type into simple (register) types for the 32-bit x86 ABI                |
    214 | [argtypes_sysv_x64.d](https://github.com/dlang/dmd/blob/master/src/dmd/argtypes_sysv_x64.d) | 'argtypes' for the x86_64 System V ABI                                              |
    215 | [argtypes_aarch64.d](https://github.com/dlang/dmd/blob/master/src/dmd/argtypes_aarch64.d)   | 'argtypes' for the AArch64 ABI                                                      |
    216 | [glue.d](https://github.com/dlang/dmd/blob/master/src/dmd/glue.d)                           | Generate the object file for function declarations                                  |
    217 | [gluelayer.d](https://github.com/dlang/dmd/blob/master/src/dmd/gluelayer.d)                 | Declarations for back-end functions that the front-end invokes                      |
    218 | [todt.d](https://github.com/dlang/dmd/blob/master/src/dmd/todt.d)                           | Convert initializers into structures that the back-end will add to the data segment |
    219 | [tocvdebug.d](https://github.com/dlang/dmd/blob/master/src/dmd/tovcdebug.d)                 | Generate debug info in the CV4 debug format.                                        |
    220 | [objc.d](https://github.com/dlang/dmd/blob/master/src/dmd/objc.d)                           | Objective-C interfacing                                                             |
    221 | [objc_glue.d](https://github.com/dlang/dmd/blob/master/src/dmd/objc_glue.d)                 | Glue code for Objective-C interop.                                                  |
    222 
    223 **Name mangling**
    224 
    225 | File                                                                              | Purpose                                                          |
    226 |-----------------------------------------------------------------------------------|------------------------------------------------------------------|
    227 | [cppmangle.d](https://github.com/dlang/dmd/blob/master/src/dmd/cppmangle.d)       | C++ name mangling                                                |
    228 | [cppmanglewin.d](https://github.com/dlang/dmd/blob/master/src/dmd/cppmanglewin.d) | C++ name mangling for Windows                                    |
    229 | [dmangle.d](https://github.com/dlang/dmd/blob/master/src/dmd/dmangle.d)           | D [name mangling](https://dlang.org/spec/abi.html#name_mangling) |
    230 
    231 ### Linking
    232 
    233 | File                                                              | Purpose                                 |
    234 |-------------------------------------------------------------------|-----------------------------------------|
    235 | [link.d](https://github.com/dlang/dmd/blob/master/src/dmd/link.d) | Invoke the linker as a separate process |
    236 
    237 ### Special output
    238 
    239 | File                                                                  | Purpose                                                                                                 |
    240 |-----------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
    241 | [doc.d](https://github.com/dlang/dmd/blob/master/src/dmd/doc.d)       | [Documentation generation](https://dlang.org/spec/ddoc.html)                                            |
    242 | [dmacro.d](https://github.com/dlang/dmd/blob/master/src/dmd/dmacro.d) | DDoc macro processing                                                                                   |
    243 | [hdrgen.d](https://github.com/dlang/dmd/blob/master/src/dmd/hdrgen.d) | Convert an AST into D source code for `.di` header generation, as well as `-vcg-ast` and error messages |
    244 | [json.d](https://github.com/dlang/dmd/blob/master/src/dmd/json.d)     | Describe the module in a `.json` file for the `-X` flag                                                 |
    245 | [dtoh.d](https://github.com/dlang/dmd/blob/master/src/dmd/dtoh.d)     | C++ header generation from D source files                                                               |
    246 
    247 ### Utility
    248 
    249 Note: many other utilities are in [dmd/root](https://github.com/dlang/dmd/tree/master/src/dmd/root).
    250 
    251 | File                                                                              | Purpose                                           |
    252 |-----------------------------------------------------------------------------------|---------------------------------------------------|
    253 | [console.d](https://github.com/dlang/dmd/blob/master/src/dmd/console.d)           | Print error messages in color                     |
    254 | [file_manager.d](https://github.com/dlang/dmd/blob/master/src/dmd/file_manager.d) | Keep file contents in memory                      |
    255 | [utils.d](https://github.com/dlang/dmd/blob/master/src/dmd/utils.d)               | Utility functions related to files and file paths |
    256 
    257 | File                                                                            | Purpose                                                       |
    258 |---------------------------------------------------------------------------------|---------------------------------------------------------------|
    259 | [asttypename.d](https://github.com/dlang/dmd/blob/master/src/dmd/asttypename.d) | Print the internal name of an AST node (for debugging only)   |
    260 | [printast.d](https://github.com/dlang/dmd/blob/master/src/dmd/printast.d)       | Print the AST data structure                                  |
    261 | [foreachvar.d](https://github.com/dlang/dmd/blob/master/src/dmd/foreachvar.d)   | Used in `ob.d` to iterate over all variables in an expression |
    262