summaryrefslogtreecommitdiff
path: root/include/zend.h
blob: 9804606ed85908941c247f750ad75546e1e8ba69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
 *  zend.h
 *
 *  zend namespace
 *
 *  @author Valeriy_Dmitriev <ufabiz@gmail.com>
 */

#ifndef PHPCPP_ZEND_INCLUDE_C_H_
#define PHPCPP_ZEND_INCLUDE_C_H_

/**
 *  Namespace Php
 */
namespace Php {

    /**
     *  collection of Zend constants
     */
    namespace Zend {

        /**
         *  access types (flags)
         *  see Zend/zend_compile.h
         */
        
        /**
         *  access types for methods and properties
         *  (method flags)
         */
        enum class AccMemb {
            //  method flags (types):
            STATIC                  ,//= ZEND_ACC_STATIC,                    //0x01
            ABSTRACT                ,//= ZEND_ACC_ABSTRACT,                  //0x02
            FINAL                   ,//= ZEND_ACC_FINAL,                     //0x04
            //IMPLEMENTED_ABSTRACT    ,//= ZEND_ACC_IMPLEMENTED_ABSTRACT,      //0x08
            //method flag (bc only), any method that has this flag can be used statically and non statically.
            //ALLOW_STATIC            ,//= ZEND_ACC_ALLOW_STATIC,              //0x10000                

            // method flags (visibility)
            // The order of those must be kept - public < protected < private
            PUBLIC                  ,//= ZEND_ACC_PUBLIC,             //0x100
            PROTECTED               ,//= ZEND_ACC_PROTECTED,                 //0x200
            PRIVATE                 ,//= ZEND_ACC_PRIVATE,                   //0x400
            PPP_MASK                ,//= ZEND_ACC_PPP_MASK,                  //(ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE)                

            // method flags (special method detection)
            //CTOR                    ,//= ZEND_ACC_CTOR,                      //0x2000
            //DTOR                    ,//= ZEND_ACC_DTOR,                      //0x4000
            //CLONE                   ,//= ZEND_ACC_CLONE,                     //0x8000

            //shadow of parent's private method/property
            //SHADOW                  ,//= ZEND_ACC_SHADOW                       //0x20000

            // additional field for designation flag CONSTANT. Not in the Zend engine
            CONSTANT                ,//= 0                                     //0
        };

        /**
         *  access types for classes
         *  (class flags)
         */
        enum class AccClass {
            NOSET                   ,//=      ..       ,                       //0
            // ZEND_ACC_IMPLICIT_ABSTRACT_CLASS is used for abstract classes (since it is set by any abstract method even interfaces MAY have it set, too).
            //IMPLICIT_ABSTRACT       ,//= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS,     //0x10
            //ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by using the keyword.
            ABSTRACT                ,//= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS,     //0x20
            FINAL                   ,//= ZEND_ACC_FINAL_CLASS,                 //0x40
            INTERFACE               ,//= ZEND_ACC_INTERFACE,                   //0x80

            //class implement interface(s) flag,
            //IMPLEMENT_INTERFACES    ,//= ZEND_ACC_IMPLEMENT_INTERFACES,         //0x80000
            //IMPLEMENT_TRAITS        ,//= ZEND_ACC_IMPLEMENT_TRAITS,             //0x400000
        };


    }
/**
 *  End of namespace Php
 */
}

#endif  /* PHPCPP_ZEND_INCLUDE_C_H_ */