1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 7 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2018 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Authors: Marcus Boerger <helly@php.net> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 #ifdef HAVE_CONFIG_H 20 # include "config.h" 21 #endif 22 23 #include "php.h" 24 #include "php_ini.h" 25 #include "ext/standard/info.h" 26 #include "zend_interfaces.h" 27 28 #include "php_spl.h" 29 #include "spl_functions.h" 30 #include "spl_engine.h" 31 32 #include "spl_array.h" 33 34 /* {{{ spl_instantiate */ spl_instantiate(zend_class_entry * pce,zval * object)35PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object) 36 { 37 object_init_ex(object, pce); 38 } 39 /* }}} */ 40 spl_offset_convert_to_long(zval * offset)41PHPAPI zend_long spl_offset_convert_to_long(zval *offset) /* {{{ */ 42 { 43 zend_ulong idx; 44 45 try_again: 46 switch (Z_TYPE_P(offset)) { 47 case IS_STRING: 48 if (ZEND_HANDLE_NUMERIC(Z_STR_P(offset), idx)) { 49 return idx; 50 } 51 break; 52 case IS_DOUBLE: 53 return (zend_long)Z_DVAL_P(offset); 54 case IS_LONG: 55 return Z_LVAL_P(offset); 56 case IS_FALSE: 57 return 0; 58 case IS_TRUE: 59 return 1; 60 case IS_REFERENCE: 61 offset = Z_REFVAL_P(offset); 62 goto try_again; 63 case IS_RESOURCE: 64 return Z_RES_HANDLE_P(offset); 65 } 66 return -1; 67 } 68 /* }}} */ 69 70 /* 71 * Local variables: 72 * tab-width: 4 73 * c-basic-offset: 4 74 * End: 75 * vim600: fdm=marker 76 * vim: noet sw=4 ts=4 77 */ 78