Skip to content

Commit 6db8ef2

Browse files
committed
fix(macro): fix self_ reference when multiple method arguments supplied
Refs: #504
1 parent 43ed2ca commit 6db8ef2

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

crates/macros/src/impl_.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ impl<'a> ParsedImpl<'a> {
229229
{
230230
// `self_: &[mut] ZendClassObject<Self>`
231231
// Need to remove arg from argument list
232-
func.args.typed.pop();
232+
func.args.typed.remove(0);
233233
MethodReceiver::ZendClassObject
234234
} else {
235235
modifiers.insert(MethodModifier::Static);

tests/src/integration/class/class.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
assert($class->getString() === 'lorem ipsum');
1111
$class->setString('dolor et');
1212
assert($class->getString() === 'dolor et');
13+
$class->selfRef("foo");
14+
assert($class->getString() === 'Changed to foo');
1315

1416
assert($class->getNumber() === 2022);
1517
$class->setNumber(2023);

tests/src/integration/class/mod.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#![allow(clippy::unused_self)]
2-
use ext_php_rs::{convert::IntoZval, prelude::*, types::Zval, zend::ce};
2+
use ext_php_rs::{
3+
convert::IntoZval,
4+
prelude::*,
5+
types::{ZendClassObject, Zval},
6+
zend::ce,
7+
};
38

49
/// Doc comment
510
/// Goes here
@@ -36,6 +41,14 @@ impl TestClass {
3641
pub fn static_call(name: String) -> String {
3742
format!("Hello {name}")
3843
}
44+
45+
pub fn self_ref(
46+
self_: &mut ZendClassObject<TestClass>,
47+
val: String,
48+
) -> &mut ZendClassObject<TestClass> {
49+
self_.string = format!("Changed to {val}");
50+
self_
51+
}
3952
}
4053

4154
#[php_function]

0 commit comments

Comments
 (0)