Home | History | Annotate | Line # | Download | only in dmd
      1      1.1  mrg 
      2      1.1  mrg /* Compiler implementation of the D programming language
      3  1.1.1.2  mrg  * Copyright (C) 2015-2022 by The D Language Foundation, All Rights Reserved
      4      1.1  mrg  * written by Michel Fortin
      5  1.1.1.2  mrg  * https://www.digitalmars.com
      6      1.1  mrg  * Distributed under the Boost Software License, Version 1.0.
      7  1.1.1.2  mrg  * https://www.boost.org/LICENSE_1_0.txt
      8      1.1  mrg  * https://github.com/dlang/dmd/blob/master/src/dmd/objc.h
      9      1.1  mrg  */
     10      1.1  mrg 
     11      1.1  mrg #pragma once
     12      1.1  mrg 
     13  1.1.1.2  mrg #include "root/dsystem.h"
     14  1.1.1.2  mrg #include "arraytypes.h"
     15      1.1  mrg 
     16  1.1.1.2  mrg class AggregateDeclaration;
     17  1.1.1.2  mrg class AttribDeclaration;
     18      1.1  mrg class ClassDeclaration;
     19  1.1.1.2  mrg class FuncDeclaration;
     20  1.1.1.2  mrg class Identifier;
     21      1.1  mrg class InterfaceDeclaration;
     22  1.1.1.2  mrg 
     23      1.1  mrg struct Scope;
     24      1.1  mrg 
     25      1.1  mrg struct ObjcSelector
     26      1.1  mrg {
     27      1.1  mrg     const char *stringvalue;
     28      1.1  mrg     size_t stringlen;
     29      1.1  mrg     size_t paramCount;
     30      1.1  mrg 
     31      1.1  mrg     static void _init();
     32      1.1  mrg 
     33      1.1  mrg     ObjcSelector(const char *sv, size_t len, size_t pcount);
     34      1.1  mrg 
     35      1.1  mrg     static ObjcSelector *create(FuncDeclaration *fdecl);
     36      1.1  mrg };
     37      1.1  mrg 
     38  1.1.1.2  mrg struct ObjcClassDeclaration
     39  1.1.1.2  mrg {
     40  1.1.1.2  mrg     bool isMeta;
     41  1.1.1.2  mrg     bool isExtern;
     42  1.1.1.2  mrg 
     43  1.1.1.2  mrg     Identifier* identifier;
     44  1.1.1.2  mrg     ClassDeclaration* classDeclaration;
     45  1.1.1.2  mrg     ClassDeclaration* metaclass;
     46  1.1.1.2  mrg     DArray<FuncDeclaration*> methodList;
     47  1.1.1.2  mrg 
     48  1.1.1.2  mrg     bool isRootClass() const;
     49  1.1.1.2  mrg };
     50  1.1.1.2  mrg 
     51  1.1.1.2  mrg struct ObjcFuncDeclaration
     52  1.1.1.2  mrg {
     53  1.1.1.2  mrg     ObjcSelector* selector;
     54  1.1.1.2  mrg     VarDeclaration* selectorParameter;
     55  1.1.1.2  mrg     bool isOptional;
     56  1.1.1.2  mrg };
     57  1.1.1.2  mrg 
     58      1.1  mrg class Objc
     59      1.1  mrg {
     60      1.1  mrg public:
     61      1.1  mrg     static void _init();
     62      1.1  mrg 
     63      1.1  mrg     virtual void setObjc(ClassDeclaration* cd) = 0;
     64      1.1  mrg     virtual void setObjc(InterfaceDeclaration*) = 0;
     65  1.1.1.2  mrg     virtual const char *toPrettyChars(ClassDeclaration *cd, bool qualifyTypes) const = 0;
     66  1.1.1.2  mrg 
     67      1.1  mrg     virtual void setSelector(FuncDeclaration*, Scope* sc) = 0;
     68      1.1  mrg     virtual void validateSelector(FuncDeclaration* fd) = 0;
     69      1.1  mrg     virtual void checkLinkage(FuncDeclaration* fd) = 0;
     70  1.1.1.2  mrg     virtual bool isVirtual(const FuncDeclaration*) const = 0;
     71  1.1.1.2  mrg     virtual void setAsOptional(FuncDeclaration *fd, Scope *sc) const = 0;
     72  1.1.1.2  mrg     virtual void validateOptional(FuncDeclaration *fd) const = 0;
     73  1.1.1.2  mrg     virtual ClassDeclaration* getParent(FuncDeclaration*, ClassDeclaration*) const = 0;
     74  1.1.1.2  mrg     virtual void addToClassMethodList(FuncDeclaration*, ClassDeclaration*) const = 0;
     75  1.1.1.2  mrg     virtual AggregateDeclaration* isThis(FuncDeclaration* fd) = 0;
     76  1.1.1.2  mrg     virtual VarDeclaration* createSelectorParameter(FuncDeclaration*, Scope*) const = 0;
     77  1.1.1.2  mrg 
     78  1.1.1.2  mrg     virtual void setMetaclass(InterfaceDeclaration* id, Scope*) const = 0;
     79  1.1.1.2  mrg     virtual void setMetaclass(ClassDeclaration* id, Scope*) const = 0;
     80  1.1.1.2  mrg     virtual ClassDeclaration* getRuntimeMetaclass(ClassDeclaration* cd) = 0;
     81  1.1.1.2  mrg 
     82  1.1.1.2  mrg     virtual void addSymbols(AttribDeclaration*, ClassDeclarations*, ClassDeclarations*) const = 0;
     83  1.1.1.2  mrg     virtual void addSymbols(ClassDeclaration*, ClassDeclarations*, ClassDeclarations*) const = 0;
     84      1.1  mrg };
     85