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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Copyright (c) 2022 PHPER Framework Team
// PHPER is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan
// PSL v2. You may obtain a copy of Mulan PSL v2 at:
//          http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.

/// PHP echo.
///
/// # Examples
///
/// ```no_test
/// phper::echo!("Hello, {}!", message)
/// ```
#[macro_export]
macro_rules! echo {
    ($($arg:tt)*) => ({
        $crate::output::echo(std::format!($($arg)*))
    })
}

/// PHP error logging, will exit the request.
///
/// # Examples
///
/// ```no_test
/// phper::errro!("Hello, {}!", message)
/// ```
#[macro_export]
macro_rules! error {
    ($($arg:tt)*) => ({
        $crate::output::log($crate::output::LogLevel::Error, std::format!($($arg)*))
    })
}

/// PHP warning logging.
///
/// # Examples
///
/// ```no_test
/// phper::warning!("Hello, {}!", message)
/// ```
#[macro_export]
macro_rules! warning {
    ($($arg:tt)*) => ({
        $crate::output::log($crate::output::LogLevel::Warning, std::format!($($arg)*))
    })
}

/// PHP notice logging.
///
/// # Examples
///
/// ```no_test
/// phper::notice!("Hello, {}!", message)
/// ```
#[macro_export]
macro_rules! notice {
    ($($arg:tt)*) => ({
        $crate::output::log($crate::output::LogLevel::Notice, std::format!($($arg)*))
    })
}

/// PHP deprecated logging.
///
/// # Examples
///
/// ```no_test
/// phper::deprecated!("Hello, {}!", message)
/// ```
#[macro_export]
macro_rules! deprecated {
    ($($arg:tt)*) => ({
        $crate::output::log($crate::output::LogLevel::Deprecated, std::format!($($arg)*))
    })
}

/// Equivalent to the php `CG`.
#[macro_export]
macro_rules! cg {
    ($x:ident) => {
        $crate::sys::compiler_globals.$x
    };
}

/// Equivalent to the php `EG`.
#[macro_export]
macro_rules! eg {
    ($x:ident) => {
        $crate::sys::executor_globals.$x
    };
}

/// Equivalent to the php `PG`.
#[macro_export]
macro_rules! pg {
    ($x:ident) => {
        $crate::sys::core_globals.$x
    };
}

/// Equivalent to the php `SG`.
#[macro_export]
macro_rules! sg {
    ($x:ident) => {
        $crate::sys::sapi_globals.$x
    };
}