Skip to content

Commit 6344e42

Browse files
committed
Add phper-sys macros.
1 parent 94cf9ef commit 6344e42

File tree

9 files changed

+177
-13
lines changed

9 files changed

+177
-13
lines changed

phper-sys/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "phper-sys"
3-
version = "0.1.0"
3+
version = "0.0.1"
44
authors = ["__JM_Joy__ <[email protected]>"]
55
edition = "2018"
66
description = "PHP binding."

phper-sys/src/lib.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,13 @@
22
#![allow(non_camel_case_types)]
33
#![allow(non_snake_case)]
44

5-
use std::os::raw::c_char;
5+
#[macro_use]
6+
mod macros;
7+
mod zend;
68

79
include!(concat!(env!("OUT_DIR"), "/php_bindings.rs"));
810

9-
impl Default for _zend_function_entry {
10-
fn default() -> Self {
11-
Self {
12-
fname: 0 as *const c_char,
13-
handler: None,
14-
arg_info: 0 as *const _zend_internal_arg_info,
15-
num_args: 0,
16-
flags: 0,
17-
}
18-
}
19-
}
11+
pub use crate::zend::*;
2012

2113
#[repr(C)]
2214
pub struct zend_function_entry_wrapper(pub *const zend_function_entry);

phper-sys/src/macros.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
macro_rules! pub_use_mod {
2+
($i: ident) => {
3+
mod $i;
4+
pub use self::$i::*;
5+
};
6+
}

phper-sys/src/zend/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pub_use_mod!(zend_alloc);
2+
pub_use_mod!(zend_api);
3+
pub_use_mod!(zend_compile);
4+
pub_use_mod!(zend_string);
5+
pub_use_mod!(zend_types);

phper-sys/src/zend/zend_alloc.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#[macro_export]
2+
macro_rules! emalloc {
3+
($size: expr) => {
4+
$crate::_emalloc($size)
5+
};
6+
}
7+
8+
#[macro_export]
9+
macro_rules! efree {
10+
($ptr: expr) => {
11+
$crate::_efree($ptr)
12+
};
13+
}

phper-sys/src/zend/zend_api.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#[macro_export]
2+
macro_rules! zend_fe_end {
3+
() => {
4+
$crate::zend_function_entry {
5+
fname: 0 as *const c_char,
6+
handler: None,
7+
arg_info: 0 as *const $crate::zend_internal_arg_info,
8+
num_args: 0,
9+
flags: 0,
10+
}
11+
};
12+
}

phper-sys/src/zend/zend_compile.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#[macro_export]
2+
macro_rules! zend_call_num_args {
3+
($call: expr) => {
4+
(*$call).This.u2.num_args
5+
};
6+
}

phper-sys/src/zend/zend_string.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#[macro_export]
2+
macro_rules! zstr_is_interned {
3+
($s: expr) => {
4+
$crate::gc_flags!($s) as u32 & ::phper_sys::IS_STR_INTERNED != 0
5+
};
6+
}

phper-sys/src/zend/zend_types.rs

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#[macro_export]
2+
macro_rules! gc_flags {
3+
($p: expr) => {
4+
(*$p).gc.u.v.flags
5+
};
6+
}
7+
8+
#[macro_export]
9+
macro_rules! z_type_info {
10+
($zval: expr) => {
11+
$zval.u1.type_info
12+
};
13+
}
14+
15+
#[macro_export]
16+
macro_rules! z_type_info_p {
17+
($zval_p: expr) => {
18+
$crate::z_type_info!(*$zval_p)
19+
};
20+
}
21+
22+
#[macro_export]
23+
macro_rules! z_lval {
24+
($zval: expr) => {
25+
$zval.value.lval
26+
};
27+
}
28+
29+
#[macro_export]
30+
macro_rules! z_lval_p {
31+
($zval_p: expr) => {
32+
$crate::z_lval!(*$zval_p)
33+
};
34+
}
35+
36+
#[macro_export]
37+
macro_rules! z_dval {
38+
($zval: expr) => {
39+
$zval.value.dval
40+
};
41+
}
42+
43+
#[macro_export]
44+
macro_rules! z_dval_p {
45+
($zval_p: expr) => {
46+
$crate::z_dval!(*$zval_p)
47+
};
48+
}
49+
50+
#[macro_export]
51+
macro_rules! zval_null {
52+
($z: expr) => {
53+
$crate::z_type_info!($z) = $crate::IS_NULL;
54+
};
55+
}
56+
57+
#[macro_export]
58+
macro_rules! zval_false {
59+
($z: expr) => {
60+
$crate::z_type_info!($z) = $crate::IS_FALSE;
61+
};
62+
}
63+
64+
#[macro_export]
65+
macro_rules! zval_true {
66+
($z: expr) => {
67+
$crate::z_type_info!($z) = $crate::IS_TRUE;
68+
};
69+
}
70+
71+
#[macro_export]
72+
macro_rules! zval_bool {
73+
($z: expr, $b: expr) => {
74+
let $b: bool = $b;
75+
$crate::z_type_info!($z) = if $b { $crate::IS_TRUE } else { $crate::IS_FALSE };
76+
};
77+
}
78+
79+
#[macro_export]
80+
macro_rules! zval_long {
81+
($z: expr, $l: expr) => {
82+
let $z: *mut $crate::zval = $z;
83+
$crate::z_lval_p($z) = $l;
84+
$crate::z_type_info!($z) = $crate::IS_LONG;
85+
};
86+
}
87+
88+
#[macro_export]
89+
macro_rules! zval_double {
90+
($z: expr, $d: expr) => {
91+
let $z: *mut $crate::zval = $z;
92+
$crate::z_lval_p($z) = $l;
93+
$crate::z_type_info!($z) = $crate::IS_DOUBLE;
94+
};
95+
}
96+
97+
#[macro_export]
98+
macro_rules! z_str {
99+
($zval: expr) => {
100+
($zval).value.str
101+
};
102+
}
103+
104+
#[macro_export]
105+
macro_rules! z_str_p {
106+
($zval_p: expr) => {
107+
$crate::z_str!(*$zval_p)
108+
};
109+
}
110+
111+
#[macro_export]
112+
macro_rules! zval_str {
113+
($z: expr, $s: expr) => {
114+
let $z: *mut $crate::zval = $z;
115+
let $s: *mut $crate::zend_string = $s;
116+
$crate::z_str_p!($z) = $s;
117+
$crate::z_type_info_p!($z) = if $crate::zstr_is_interned!(__s) {
118+
::phper_sys::IS_INTERNED_STRING_EX
119+
} else {
120+
::phper_sys::IS_STRING_EX
121+
} as u32;
122+
};
123+
}
124+

0 commit comments

Comments
 (0)