Skip to content

Commit

Permalink
[php] Use -prefix setting in type declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
ojwb committed Jan 20, 2022
1 parent c417250 commit d43f28a
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
8 changes: 5 additions & 3 deletions Examples/test-suite/php/prefix_runme.php
Expand Up @@ -2,15 +2,17 @@

require "tests.php";

// No new functions
check::functions(array());
// New functions
check::functions(array('self'));
// New classes
check::classes(array('ProjectBar','ProjectFoo'));
check::classes(array('Project','ProjectBar','ProjectFoo'));
// No new vars
check::globals(array());

$f = new ProjectFoo();
// This resulted in "Fatal error: Class 'Foo' not found"
$f->get_self();

Project::self(new ProjectBar());

check::done();
10 changes: 10 additions & 0 deletions Examples/test-suite/prefix.i
Expand Up @@ -15,6 +15,16 @@ public:
// __set and __isset methods weren't getting the prefix.
class Bar : public Foo {
public:
Bar *get_self() {
return this;
}
};

// This failed in git pre 4.1.0 with PHP 8.x because we weren't adding the
// prefix to class names in type declarations. Error was at extension load
// time:
//
// Fatal error: Bar must be registered before ProjectBar in Unknown on line 0
Bar* self(Bar* bar) { return bar->get_self(); }

%}
1 change: 1 addition & 0 deletions Source/Modules/php.cxx
Expand Up @@ -246,6 +246,7 @@ class PHPTypes {
Append(result, c);
} else {
if (Len(classtypes) > 0) Append(classtypes, "|");
Append(classtypes, prefix);
Append(classtypes, i.item);
}
prev = i.item;
Expand Down

0 comments on commit d43f28a

Please sign in to comment.