Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Forums
  - IRC
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Donate
- Resources
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - 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

Compiler implementation of the D programming language.
Authors:
Walter Bright
License:
Boost License 1.0

Source: 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)
enum `ClassKind`: int;
  The `ClassKind` enum is used in ClassDeclaration AST nodes to specify the linkage type of the class or if it is an anonymous class. If the class is anonymous it is also considered to be a D class.
  `d`
    the class is a `d`(efault) class
  `cpp`
    the class is a C++ interface
  `objc`
    the class is an Objective-C class/interface
class `ClassDeclaration`: dmd.aggregate.AggregateDeclaration;
  bool `stack`;
    `true` if this is a scope class
  ClassKind `classKind`;
    specifies whether this is a D, C++, Objective-C or anonymous class/interface
  Baseok `baseok`;
    set the progress of base classes resolving
  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 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-2018 by the D Language Foundation | Page generated by Ddoc on Wed Feb 7 19:52:22 2018