Commit Graph

56 Commits

Author SHA1 Message Date
Nikita Popov
3ae995f03c Tweak uncaught exception message display
This implements a reduced variant of #1226 with just the following
change:

-Fatal error: Uncaught exception 'EngineException' with message 'Call to private method foo::bar() from context ''' in %s:%d
+Fatal error: Uncaught EngineException: Call to private method foo::bar() from context '' in %s:%d

The '' wrapper around messages is very weird if the exception
message itself contains ''. Futhermore having the message wrapped
in '' doesn't work for the "and defined" suffix of
TypeExceptions.
2015-05-17 18:47:06 +02:00
Nikita Popov
c9f27ee422 Display EngineExceptions like ordinary exceptions
TypeException stays as-is for now because it uses messages that are
incompatible with the way exception messages are displayed.

closure_038.phpt and a few others now show that we're generating
too many exceptions for compound operations on undefined properties
-- this needs to be fixed in a followup.
2015-05-15 23:40:32 +02:00
Nikita Popov
8d00385871 Reclassify E_STRICT notices
Per RFC https://wiki.php.net/rfc/reclassify_e_strict

While reviewing this, found that there are still three E_STRICTs
left in libraries - need to discuss those.
2015-04-01 11:17:55 +02:00
Nikita Popov
6ef9216269 Finish PHP 4 constructor deprecation 2015-03-31 17:55:27 +02:00
Guilherme Blanco
d51fb69c01 Removed parsing support traits to have extends and implements. 2015-01-09 15:45:02 +01:00
Julien Pauli
ebe755f149 Merge branch 'PHP-5.6'
* PHP-5.6:
  Updated NEWS
  Updated NEWS
  Fixed Bug #65576 (Constructor from trait conflicts with inherited constructor)

Conflicts:
	Zend/zend_compile.c
2014-12-12 16:14:24 +01:00
Kévin Dunglas
ee226b961c Fixed Bug #65576 (Constructor from trait conflicts with inherited constructor) 2014-12-12 14:58:23 +01:00
Veres Lajos
4b9535341a typo fixes - https://github.com/vlajos/misspell_fixer 2014-11-19 20:23:00 +00:00
Veres Lajos
8d86597d73 non living code related typo fixes 2013-08-04 16:05:36 -07:00
Xinchen Hui
9a44a9806c Fixed bug #64235 (Insteadof not work for class method in 5.4.11)
As we discussed with stefan, we think previous of allowing use with
classes is a bug, should be forbided, anyway, the error message should
be improved.
2013-02-21 18:18:41 +08:00
Dmitry Stogov
42437dd870 Fixed bug #64070 (Inheritance with Traits failed with error) 2013-02-18 16:07:51 +04:00
Dmitry Stogov
7e2629635b spelling 2012-12-25 16:21:25 +04:00
Dmitry Stogov
3f8c729e69 Traits refactoring 2012-12-25 10:23:08 +04:00
Dmitry Stogov
c8f47a8e7c Fixed bug #61998 (Using traits with method aliases appears to result in crash during execution) 2012-05-21 13:46:07 +04:00
Stefan Marr
ffded0020b Fixed Bug #61052 (Missing error check in trait 'insteadof' clause) 2012-03-04 19:34:19 +00:00
Stefan Marr
34fe62619d Fixed Bug #60911 (Confusing error message when extending traits) 2012-03-04 18:33:33 +00:00
Stefan Marr
60dfd64bf2 Fixed Bug #60717 (Order of traits in use statement can cause a fatal error)
# Compatibility is now correctly checked in both directions.
# Introduced helper method for the test.
2012-03-04 18:26:11 +00:00
Dmitry Stogov
3299a2673c Fixed Bug #60809 (TRAITS - PHPDoc Comment Style Bug)
Fixed some other traits related bugs (uninitialized variable, return => continue)
Removed some trait related redundant code and variables
2012-01-20 12:30:57 +00:00
Dmitry Stogov
b515bfbdfb Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants in methods defined in traits are delayed till run-time. This approach also made possible to use __CLASS__ constant as default value for traits properties and method arguments. 2012-01-17 08:09:13 +00:00
Stefan Marr
3dc9f0abe6 Fixed inconsistent and broken handling of private properties in traits.
# The handling of private properties in classes is now consistent with private properties in traits.
# Perviously, privates could cause strict warnings, are were not properly merged into the class when
# the parent class had a private property of the same name. Now, we introduce it without notice,
# since it is a new and independent property, just like in normal classes.
# This problem was diagnosed while working on Bug #60536.
2011-12-17 14:26:39 +00:00
Stefan Marr
db0888dfc1 Fixed Bug #60369 Crash with static property in trait 2011-11-23 21:24:34 +00:00
Stefan Marr
76772dc20d Fixes Bug #54441 (Handling of changing modifiers on a trait alias)
# this now results also in a compilation error, since it would open the door for inconsistencies, and violates the DRY principle.
2011-11-18 13:49:07 +00:00
Stefan Marr
c5ba229617 Fixed Bug #60165 (Aliasing unexisting trait should throw/trigger the exception/error)
- aliases that are not actually matching anything are treated as errors now. This
  will make sure that all methods that are expected to be in a class are actually
  there, or in case a trait changed for instance, that the code breaks already
  on composition
- Precedence declarations are also checked to ensure that the method
  which is supposed to take precedence actually exists, however,
  the other traits mentioned in the declaration are not regarded.
  We are more lenient here, since this avoids unnecessary fragility.
- fixed another seamingly unrelated test which broke in the progress
  but wasn't clear before either.
2011-11-17 21:04:15 +00:00
Stefan Marr
7334dfd7eb Fixed Bug #60217 (Requiring the same method from different traits)
- also added test to check for inconsistent abstract method definitions, they need to be compatible
2011-11-05 01:46:40 +00:00
Stefan Marr
4591498df7 Fixed Bug #60153 (Interface method prototypes not enforced when implementd via traits.)
# Moved the freeing of overriden functions to a point after the check.
# The new check comes after the normal inheritance check to give the first check
# the opportunity to abort with a more detailed error.
# Also fixed a small type in an unrelated test.
2011-11-01 15:25:24 +00:00
Stefan Marr
9b0d73af1d Added missing consistency check for abstract methods required by one trait and implemented by another. 2011-11-01 13:42:53 +00:00
Stefan Marr
b5f15ef561 Fixed Bug #60145 (Usage of trait's use statement inside interfaces not properly checked.) 2011-11-01 00:39:10 +00:00
Stefan Marr
2e5d5e5ac6 Fixed Bug #60173 (Wrong error message on reflective trait instantiation) 2011-10-31 22:59:00 +00:00
Stefan Marr
e14354af21 Fixed Bug #55554 (Legacy constructors not handled properly) [TRAITS] [DOC]
# The handling of legacy constructors defined by traits was corrected.
# They are now properly registered and used on instantiation.
# The situation for conflicting legacy and __construct constructors is
# mostly identical. If they are defined in the class, they override conflicts
# and do not collide. However, in case different styles are mixed, between
# class and trait definition, we assume a programmer's mistake and report
# a collision.
#
# BTW: +1 for all the fixed tests! `make test` is fun again.
2011-10-09 11:13:27 +00:00
Xinchen Hui
c58f254354 Improve the warning message of incompatible arguments. (#55719)
And fix tests related.
2011-09-23 15:08:11 +00:00
Stefan Marr
117e072941 Fixed bug #55524 Traits should not be able to extend a class
# also used the Z_STRVAL where it seemed appropriate
2011-08-29 15:53:46 +00:00
Stefan Marr
4a51ea4b81 Bug #55424 Fatal error when calling a method from a trait that is defined in parent class and required by using an abstract method in the trait.
# The method got unconditionally deleted from the class, since it was assumed that we override it, but we did not in case of abstract methods coming from a trait. Thus, dont delete when we try to merge in an abstract method.
2011-08-15 22:16:58 +00:00
Stefan Marr
0500cffb2e Fixed Bug #55355: Inheritance chain was not regarded when checking whether the abstract method of a trait is satisfied. 2011-08-15 11:16:18 +00:00
Stefan Marr
f2ed1242d6 Fixed Bug #55372 Incorrect handling of literals led to memory corruption.
# Dmitry you might want to review this patch, since I split up zend_add_literal
# and added a version for post-pass_two() usage.
2011-08-15 09:54:06 +00:00
Stefan Marr
65cbcb3be9 Fixed Bug #55214 use of __CLASS__ within trait returns trait name not class name [TRAITS] [DOC] 2011-07-31 18:18:56 +00:00
Stefan Marr
0158804a15 Added __TRAIT__ magic constant [TRAITS] [DOC]
# __TRAIT__ behaves like __CLASS__ more or less but is constraint to traits.
# Since traits are not types, there are not many valid use cases, and trying
# to use __TRAIT__ to make traits more like classes is discouraged.
2011-07-31 17:39:30 +00:00
Stefan Marr
858164624d Fixed test which was assuming that E_STRICT is not on by default. 2011-07-31 16:15:40 +00:00
Stefan Marr
9f66085649 Fixed bug in the handling of conflicting property initializers for traits.
# Bug was uncovered by discussion in http://news.php.net/php.internals/54129
# Forgot to check the actual value of the initializer comparison, only checked
# whether comparison was successful which is not enough.
2011-07-23 13:48:07 +00:00
Stefan Marr
52b81b8566 Added test case which was only added to trunk, bug seems to be fixed already. 2011-07-23 13:42:58 +00:00
Stefan Marr
8ba00176f1 Fixed a inconsitent condition for aliasing traits.
- missed a failing Traits test, but is now fixed, and the bug covered by a dedicated test
# Should always comment conditions that go over more than two lines :-/
2011-05-13 20:28:34 +00:00
Stefan Marr
7357867bac Added strict handling of properties in traits.
# This is the first attempt to implement the properties as discussed on the mailinglist.
# RFC is not updated to reflect this changes, yet.
2010-12-20 00:52:40 +00:00
Stefan Marr
1d2a63da5f Changed collision warning for Traits to fatal error.
#This change is made to have all possible cases of collisions consistently handled as fatal errors.
#The reason to have it fatal is that most likely something changed unexpectedly and needs urgent attention by the developer, since it will fail eventually anyway for instance because the expected method is missing in the class.
#Discussed in this thread: http://marc.info/?l=php-internals&m=129155790226876
2010-12-12 16:48:02 +00:00
Stefan Marr
4cc45507da Fixed problem reported by Patrick ALLAERT. Trait method was not applied properly when fully qualified. 2010-11-18 17:59:04 +00:00
Stefan Marr
6ad5c889a1 Added tests to for static support of traits.
# This was not tested and documented yet.
# Updated documentation in the RFC http://wiki.php.net/rfc/horizontalreuse
2010-11-17 23:05:20 +00:00
Stefan Marr
e6bd5368ad Fixed issue with statics in traits.
#Please review this change, I moved the routine which copies statics from the closure code to zend_variables.c
#Please also have a look to check whether the TSRMLS_DC is correct, and whether it fits with the rest in zend_variables, because there you are using some macro magic and I am not exactly sure what the reason is for that.
2010-06-08 15:56:36 +00:00
Johannes Schlüter
0262fdf3e9 - A method called like a trait is no constructor 2010-05-29 20:01:08 +00:00
Felipe Pena
a7c129af16 - Fix typo (take 3! thanks Chris and Tony) 2010-05-07 17:57:09 +00:00
Felipe Pena
91c46fd26e - Fix error message wording (Kalle) 2010-05-07 17:18:49 +00:00
Felipe Pena
c95b4ace40 - Fixed ZEND_VERIFY_ABSTRACT_CLASS order when using traits
# It's the last one now, thus the traits can be used to implement interfaces
2010-05-07 16:29:15 +00:00
Felipe Pena
74fe9dd89e - Fixed magic method and constructor copy for traits 2010-05-07 13:55:27 +00:00