Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Calendar
  - Forums
  - IRC
  - Community Discord
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Security Team
  - Donate
  - Sponsors
- Resources
  - Tour
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - run.dlang.io
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

# dmd.dclass

Defines a class declaration.

Specification Classes

Authors:
Walter Bright
License:
Boost License 1.0

Source dclass.d

Documentation https://dlang.org/phobos/dmd_dclass.html

Coverage https://codecov.io/gh/dlang/dmd/src/master/src/dmd/dclass.d

struct `BaseClass`;
  bool `fillVtbl`(ClassDeclaration `cd`, FuncDeclarations* `vtbl`, int `newinstance`);
    Fill in vtbl[] for base class based on member functions of class cd.

    Input vtbl if !=NULL, fill it in newinstance !=0 means all entries must be filled in by members of cd, not members of any base classes of cd.

    Returns:
    true if any entries were filled in by members of cd (not exclusively by base classes)
class `ClassDeclaration`: dmd.aggregate.AggregateDeclaration;
  bool `stack`;
    true if this is a scope class
  int `cppDtorVtblIndex`;
    if this is a C++ class, this is the slot reserved for the virtual destructor
  Baseok `baseok`;
    set the progress of base classes resolving
  ObjcClassDeclaration `objc`;
    Data for a class declaration that is needed for the Objective-C integration.
  final bool `isBaseOf2`(ClassDeclaration `cd`);
    Determine if 'this' is a base class of cd. This is used to detect circular inheritance only.
  bool `isBaseOf`(ClassDeclaration `cd`, int* `poffset`);
    Determine if 'this' is a base class of cd.
  final const bool `isBaseInfoComplete`();
    Determine if 'this' has complete base class information. This is used to detect forward references in covariant overloads.
  final ClassDeclaration `searchBase`(Identifier `ident`);
    Search base classes in depth-first, left-to-right order for a class or interface named 'ident'. Stops at first found. Does not look for additional matches.
    Parameters:

    Identifier `ident` | identifier to search for

    Returns:
    ClassDeclaration if found, null if not
  final bool `hasMonitor`();
    Returns:
    true if there's a __monitor field
  final FuncDeclaration `findFunc`(Identifier `ident`, TypeFunction `tf`);
    Find virtual function matching identifier and type. Used to build virtual function tables for interface implementations.
    Parameters:

    Identifier `ident` | function's identifier
    TypeFunction `tf` | function's type

    Returns:
    function symbol if found, null if not

    Errors prints error message if more than one match

  final const bool `isCOMclass`();
  final bool `isAbstract`();
  const int `vtblOffset`();
    Determine if slot 0 of the vtbl[] is reserved for something else. For class objects, yes, this is where the classinfo ptr goes. For COM interfaces, no. For non-COM interfaces, yes, this is where the Interface ptr goes.
    Returns:
    0 vtbl[0] is first virtual function pointer 1 vtbl[0] is classinfo/interfaceinfo pointer
  const const(char)* `kind`();
  final void `addLocalClass`(ClassDeclarations* `aclasses`);
class `InterfaceDeclaration`: dmd.dclass.ClassDeclaration;
  bool `isBaseOf`(ClassDeclaration `cd`, int* `poffset`);
    Determine if 'this' is a base class of cd. (Actually, if it is an interface supported by cd)

    Output *poffset offset to start of class OFFSET_RUNTIME must determine offset at runtime

    Returns:
    false not a base true is a base
  const const(char)* `kind`();
  const int `vtblOffset`();
    Determine if slot 0 of the vtbl[] is reserved for something else. For class objects, yes, this is where the ClassInfo ptr goes. For COM interfaces, no. For non-COM interfaces, yes, this is where the Interface ptr goes.

Copyright © 1999-2020 by the D Language Foundation | Page generated by Ddoc on Mon May 11 10:58:00 2020