Changeset 264 for trunk/ext/php
- Timestamp:
- 07/08/2007 14:57:08 (17 months ago)
- Location:
- trunk/ext/php
- Files:
-
- 4 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/ext/php/TODO
r263 r264 9 9 load: 10 10 - "Add support for datatypes": 11 - "float#base60"12 11 - merge 13 12 - "timestamp#iso8601" -
trunk/ext/php/config.m4
r246 r264 20 20 done 21 21 fi 22 22 23 23 if test -z "$SYCK_DIR"; then 24 24 AC_MSG_RESULT([not found]) … … 42 42 -L$SYCK_DIR/lib 43 43 ]) 44 44 45 45 PHP_NEW_EXTENSION(syck, phpext.c, $ext_shared) 46 PHP_ADD_EXTENSION_DEP(syck, hash) 47 PHP_ADD_EXTENSION_DEP(syck, spl) 46 48 47 49 PHP_SUBST(SYCK_SHARED_LIBADD) -
trunk/ext/php/phpext.c
r263 r264 36 36 { 37 37 TSRMLS_FETCH(); 38 #if defined(HAVE_SPL) && ((PHP_MAJOR_VERSION > 5) || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 1)) 38 39 39 if (!spl_ce_RuntimeException) { 40 40 zend_class_entry **pce; … … 47 47 return spl_ce_RuntimeException; 48 48 } 49 #endif 50 #if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION < 2) 51 return zend_exception_get_default(); 52 #else 49 53 50 return zend_exception_get_default(TSRMLS_C); 54 #endif55 51 } 56 52 … … 129 125 }; 130 126 131 #if ZEND_MODULE_API_NO >= 20050922132 127 static zend_module_dep syck_deps[] = { 133 # ifdef HAVE_SPL134 128 ZEND_MOD_REQUIRED("spl") 135 # endif 129 ZEND_MOD_REQUIRED("hash") 136 130 {NULL, NULL, NULL} 137 131 }; 138 #endif139 132 140 133 zend_module_entry syck_module_entry = { 141 #if ZEND_MODULE_API_NO >= 20050922142 134 STANDARD_MODULE_HEADER_EX, NULL, 143 135 syck_deps, 144 #else145 STANDARD_MODULE_HEADER,146 #endif147 136 "syck", 148 137 syck_functions, … … 275 264 276 265 ZVAL_DOUBLE(o, f); 277 } else if (strcmp(n->type_id, "float#sixty") == 0) { 278 double f; 266 } else if (strcmp(n->type_id, "float#base60") == 0) { 267 char *ptr, *end; 268 long multiplier = 1; 269 double total = 0; 270 279 271 syck_str_blow_away_commas(n); 280 f = strtod(n->data.str->ptr, NULL); 281 282 ZVAL_DOUBLE(o, f); 272 ptr = n->data.str->ptr; 273 end = n->data.str->ptr + n->data.str->len; 274 275 while (end > ptr) { 276 double bnum = 0; 277 char *colon = end - 1; 278 while (colon >= ptr && *colon != ':') { 279 colon--; 280 } 281 282 if (colon >= ptr && *colon == ':') 283 *colon = '\0'; 284 285 bnum = strtod(colon + 1, NULL); 286 total += bnum * multiplier; 287 multiplier *= 60; 288 end = colon; 289 } 290 291 ZVAL_DOUBLE(o, total); 283 292 } else if (strcmp(n->type_id, "float#nan") == 0) { 284 293 ZVAL_DOUBLE(o, nanphp()); -
trunk/ext/php/phpunit-tests/TestLoad.php
r263 r264 90 90 $this->assertSame(syck_load('99.0'), 99.0); 91 91 $this->assertSame(syck_load('!float 99'), 99.0); 92 $this->assertSame(syck_load('190:20:30.15'), 6.8523015e+5); 92 93 } 93 94