Commit Graph

564 Commits

Author SHA1 Message Date
Andi Gutmans
4f77a021ce - Don't allow passing NULL to type hinted parameter. 2004-05-11 14:28:40 +00:00
Andi Gutmans
399073f9d4 - Fixed bug #27923. foreach() without a key should not check if the key
- is a reference (Adam)
2004-04-23 21:53:46 +00:00
Zeev Suraski
242aa98b0a Restore fatal error in case a method that's supposed to implement an
interface/abstract method, breaks its prototype
2004-04-21 08:44:37 +00:00
Marcus Boerger
aea24b2a79 Force destructors to have empty signatures 2004-03-26 20:05:35 +00:00
Andi Gutmans
e3eb8bdd78 - If __construct() is defined then it will always take precedence over
- old style constructors.
2004-03-25 18:00:50 +00:00
Andi Gutmans
34667c4b58 - Fix bug 2004-03-22 15:51:07 +00:00
Andi Gutmans
ed6cbcb480 - Change redefinition of constructor from E_COMPILE_ERROR to E_STRICT. 2004-03-18 08:52:51 +00:00
Stanislav Malyshev
c18c5be1e0 fix typo 2004-03-17 11:10:37 +00:00
Zeev Suraski
e2a5ebf597 Add ability to disable JIT for a particular auto global 2004-03-16 19:46:04 +00:00
Andi Gutmans
6a31fb9bb0 - Fix problem when using old-style constructors it wasn't being inherited
correctly.
2004-03-16 15:22:44 +00:00
Marcus Boerger
50ee116f08 Clearify the different method/class flags (as discussed with Andi). 2004-03-09 16:38:37 +00:00
Andi Gutmans
0fc9d5861d - Nuke unused code. 2004-03-09 15:27:39 +00:00
Andi Gutmans
2af86692ea - Fix some small problems I introduce in last patch. 2004-03-05 17:18:34 +00:00
Andi Gutmans
74775aa41a - Finally fix the following:
$xml_mem = simplexml_load_string('<bookbody><part><chapter><page>1</page></chapter></part></bookbody>');
/* The following works fine */
foreach ($xml_mem->part as $part) {
  foreach($part->chapter->page as $page) {
 print $page;
  }
}
/* The following segfaults */
foreach ($xml_mem->part as $part) {
  foreach($part->chapter as $chapter) { // Difference here from previous example
 print $chapter;
  }
}
2004-03-05 13:04:21 +00:00
Stanislav Malyshev
78a36b50a1 Disallow redefining ctors and cleanup 2004-03-04 10:02:59 +00:00
Andi Gutmans
41b7211539 - Fix leaks (although there might be still a problem here). 2004-03-02 11:03:48 +00:00
Andi Gutmans
576e16b03f - Fix crash in:
<?php
  class Foo {
    public $attributes=  array();

    function export() {
      foreach ($this->attributes as $name => $attr) {
      }
    }
  }

  $f= new Foo();
  $f->export();
?>
2004-03-02 08:28:12 +00:00
Andi Gutmans
63e263f32a - Change prototype isA check not to check the constructor.
- Only give an E_STRICT for non-isA compliant code as opposed to
  E_COMPILE_ERROR.
2004-02-29 18:25:50 +00:00
Marcus Boerger
f449c8fdf7 Fixes for abstract classes/methods 2004-02-27 09:14:55 +00:00
Zeev Suraski
62e921f824 Fix leak in foreach ($o->mthd()->arr) 2004-02-25 17:23:50 +00:00
Zeev Suraski
7086634a0b - Improve ARG_INFO() macros to support supplying required_num_args
- Initial fix for foreach($o->mthd()->arr) crash (now leaks)
2004-02-25 14:56:45 +00:00
Zeev Suraski
eb6fd52e21 - Rename compatiblity mode to zend.ze2_compatibility_mode (it doesn't only affect auto-clone).
- Perform implementation checks even with simple inheritance (off when
  compatibility mode is enabled).
- Restore default arguments in interfaces and handle it correctly.
- Move registration of internal classes later in the startup sequence
  in order to have INI options available.
2004-02-25 10:57:10 +00:00
Zeev Suraski
36a751840d - Abstract methods cannot have defaults for arguments
- Make function foo($a, $b=null) satisfy both foo($a) and foo($a, $b)
  prototypes
2004-02-25 09:25:37 +00:00
Marcus Boerger
b0ef896f0e Bugfix #27227 Mixed case class names causes Fatal Error in Constructor call 2004-02-16 00:34:23 +00:00
Zeev Suraski
e7e0f7d4b4 - Check return-by-reference bit when implementing interface prototypes
- Add infrastructure for built-in functions to hint whether they
  return by reference or not.  It is NOT currently used for anything,
  except for interface prototypes (you can use it to request that the
  function that implements your prototype returns by reference or
  doesn't return by reference).
  For downwards compatibility - by default, interface prototypes are
  agnostic as to whether the function that implements them returns
  by reference or not.  Use ZEND_BEGIN_ARG_INFO_EX() with
  ZEND_RETURN_VALUE/ZEND_RETURN_REFERENCE to change that.
- Fix ArrayAccess::getOffset() to conduct additional checks.
  If your getOffset() should work with multidimensional arrays - it
  must return by reference.
2004-02-12 13:49:55 +00:00
Marcus Boerger
c6cbafa273 Fix: <interface> [extends <interface> [, <ineterface>]* ] 2004-02-11 22:13:39 +00:00
Zeev Suraski
c01c44c2e2 Fix bug #26802 (the right aspects of it found by Marcus, anyway :) 2004-02-11 10:51:05 +00:00
Andi Gutmans
91ee6c0ceb - Nuke more unused code 2004-02-10 11:44:17 +00:00
Andi Gutmans
041b5dc2f7 - Remove junk 2004-02-10 10:44:09 +00:00
Ilia Alshanetsky
157a4e289a Fixed bug #27145 (Unmangle private/protected property names before printing
then inside error messages).
2004-02-05 02:16:08 +00:00
Zeev Suraski
d3c9467432 Fixlet 2004-02-04 18:24:44 +00:00
Zeev Suraski
bab3acc37b Fix handling of $this in some cases 2004-02-04 17:57:48 +00:00
Zeev Suraski
52b5f3fea1 Handle additional cases 2004-02-04 17:10:44 +00:00
Zeev Suraski
c5d842279c Reinstate early-binding for classes.
Note that this is available for downwards compatibility only - and it doesn't
work if you use new features (namely, interfaces).  Generally, people should
declare their classes before using them, but we just didn't want hell to break
loose (c)
2004-02-04 16:30:15 +00:00
Zeev Suraski
3df50001e1 - Improve $this assignment detection and generalize some code in zend_compile.c 2004-02-04 14:25:25 +00:00
Zeev Suraski
e1fc3963ee -Error out when trying to re-assign $this 2004-02-04 13:56:41 +00:00
Zeev Suraski
3ac58bffcf - Small fixes 2004-02-04 11:56:07 +00:00
Marcus Boerger
60a4a48e4e Fix Warning 2004-02-03 21:13:04 +00:00
Zeev Suraski
e4db2fb890 Remove unused variable 2004-02-03 15:51:09 +00:00
Zeev Suraski
e1bf9cc4c2 Remove redundant code 2004-02-03 14:31:07 +00:00
Zeev Suraski
848d4aed8a Perform a bitwise copy of the object even when __clone() is defined.
__clone() is back to not requiring any arguments, as $that is no longer
needed ($this already contains a copy of the original object, by the time
we __clone() is executed).
Calling the parent clone is done using parent::__clone()
2004-02-03 12:36:13 +00:00
Zeev Suraski
9e60cb553f Rewrote exception support. Fixes a few limitations and bugs in the old
implementation, and allows exceptions to 'fire' much earlier than before.

Instructions on how to use the new mechanism will follow on internals@
shortly...

Note - this (most probably) breaks the current implementation of
set_exception_handler()
2004-02-03 12:17:09 +00:00
Zeev Suraski
8e30d96ad8 Redesign the clone() feature to fix some fundamental flaws in the previous
implementation.

Using clone directly is now done using
$replica = clone $src;

Clone methods must now be declared as follows:
function __clone($that)
{
}

Clone methods in derived classes can call the __clone method of their parent
classes using parent::__clone($that)
2004-02-02 12:28:19 +00:00
Zeev Suraski
d45541b4fb Tweak checks to detect some additional cases.
Reorder checks to make more sense.
2004-01-28 22:27:39 +00:00
Zeev Suraski
be7d41b905 - Error message fix
- Prevent inheritance of the same constant from two interfaces
2004-01-28 11:53:52 +00:00
Zeev Suraski
a7ff369cac Fixlets 2004-01-28 10:52:27 +00:00
Zeev Suraski
2adaa11f2f Prevent classes from implementing interfaces that have the same function 2004-01-28 10:25:45 +00:00
Zeev Suraski
673e6e23e7 Code relayout 2004-01-28 09:13:41 +00:00
Marcus Boerger
3ca44539a1 Switch from ZEND_ACC_DYNAMIC to ZEND_ACC_ALLOW_STATIC and disallow calling
internal non-static methods statically.
# As discussed with Zeev:
# - For BC standard userspace methods allow this with an E_STRICT message.
# - If you want to implement an internal method taht can be called both
#   statically and non-statically then use flag ZEND_ACC_ALLOW_STATIC.
# - Magic user space methods __*() cannot and __construct, __destruct,
# __clone can never be called statically.
2004-01-24 16:59:24 +00:00
Marcus Boerger
6020ffd007 Simplify detection of methods that must be called dynamic (with object) 2004-01-23 22:04:42 +00:00