do_operation ZEND_BOOL_NOT not invoked
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- C
- Star
- 40.4k
- Fork
- 8.1k
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 96
Mô tả
Description
The object handler do_operation is not invoked for the opcode ZEND_BOOL_NOT.
With the supporting code for PHP 8.2 ext/zend_test https://github.com/ranvis/php-src/commit/2c542eef94de90b20b6e8d86ebeafee5408b12c9,
the following code:
<?php
$a = new DoOperationNoCast(5);
var_dump(!$a);
Resulted in this output:
bool(false)
But I expected this output instead:
object(DoOperationNoCast)#2 (1) {
["val":"DoOperationNoCast":private]=>
int(0)
}
The code !$obj is evaluated as !(bool)$obj instead.
This appears to have been introduced on PHP 7.0, the commit https://github.com/php/php-src/commit/e6180ebb640408c7ded804f5f65282122a059ddb.
PHP Version
dev-PHP-8.2
Operating System
irrelevant
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách truy vết cách trình thông dịch PHP xử lý opcode ZEND_BOOL_NOT và object handler do_operation, sử dụng mã hỗ trợ ext/zend_test và thay đổi được liên kết của PHP 7.0 làm ngữ cảnh. Chạy ví dụ DoOperationNoCast được cung cấp trên PHP 8.2 và xác minh rằng handler được gọi, đồng thời kết quả khớp với đầu ra object mong đợi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, php
- Lĩnh vực
- compilers
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100