Changeset 8676
- Timestamp:
- 01/15/06 08:51:18 (3 years ago)
- Location:
- src
- Files:
-
- 5 modified
-
Data/Yaml/Syck.hsc (modified) (3 diffs)
-
Pugs/CodeGen.hs (modified) (1 diff)
-
Pugs/Prim/Yaml.hs (modified) (1 diff)
-
syck/emitter.c (modified) (3 diffs)
-
syck/syck_st.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Data/Yaml/Syck.hsc
r8675 r8676 11 11 import Data.IORef 12 12 import Data.Word (Word8) 13 import qualified Data.FastPackedString as P13 -- import qualified Data.FastPackedString as P 14 14 import Foreign.Ptr 15 15 import Foreign.StablePtr … … 86 86 outPtr <- fmap castStablePtrToPtr (newStablePtr out) 87 87 #{poke SyckEmitter, bonus} emitter outPtr 88 #{poke SyckEmitter, style} emitter scalarFold 88 89 syck_output_handler emitter =<< mkOutputCallback outputCallback 89 90 syck_emitter_handler emitter =<< mkEmitterCallback emitterCallback … … 99 100 out <- deRefStablePtr (castPtrToStablePtr outPtr) 100 101 str <- peekCStringLen (buf, fromIntegral len) 102 #{poke SyckEmitter, headless} emitter (1 :: CInt) 101 103 modifyIORef out (++ str) 102 104 -
src/Pugs/CodeGen.hs
r8675 r8676 77 77 case norm s of 78 78 ('!':key) -> do 79 putStrLn$ "*** The backend '" ++ s ++ "' is deprecated."80 putStrLn$ " Please use '" ++ key ++ "' instead."79 hPutStrLn stderr $ "*** The backend '" ++ s ++ "' is deprecated." 80 hPutStrLn stderr $ " Please use '" ++ key ++ "' instead." 81 81 Map.lookup key generators 82 82 key -> Map.lookup key generators -
src/Pugs/Prim/Yaml.hs
r8675 r8676 66 66 rv <- liftIO (emitYaml obj) 67 67 either (fail . ("YAML Emit Error: "++)) 68 (return . VStr ) rv68 (return . VStr . decodeUTF8) rv 69 69 70 70 strNode :: String -> YamlNode -
src/syck/emitter.c
r6793 r8676 412 412 else 413 413 { 414 char *an = S_ALLOC_N( char, strlen( anchor_name ) + 2 ); 415 sprintf( an, "*%s", anchor_name ); 416 syck_emitter_write( e, an, strlen( anchor_name ) + 1 ); 414 char *an; 415 if (anchor_name == NULL) { 416 an = S_ALLOC_N( char, x+2 ); 417 sprintf(an, "*%d", x); 418 } 419 else { 420 an = S_ALLOC_N( char, strlen( anchor_name ) + 2 ); 421 sprintf( an, "*%s", anchor_name ); 422 } 423 424 syck_emitter_write( e, an, strlen( an ) ); 417 425 free( an ); 418 426 … … 759 767 for( i = 0; i < len; i++ ) 760 768 { 761 if( (src[i] < 0x20) || (0x7E < src[i]) ) 769 if( (e->style == scalar_fold) 770 ? ((src[i] < 0x20) && (0 < src[i])) 771 : ((src[i] < 0x20) || (0x7E < src[i])) ) 762 772 { 763 773 syck_emitter_write( e, "\\", 1 ); … … 1218 1228 */ 1219 1229 st_insert( e->anchors, (st_data_t)oid, (st_data_t)anchor_name ); 1230 1231 /* XXX - Added by Audrey Tang to handle self-recursive structures - XXX */ 1232 return 0; 1220 1233 } 1221 1234 } -
src/syck/syck_st.c
r7592 r8676 1 1 /* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ 2 2 3 /* static charsccsid[] = "@(#) st.c 5.1 89/12/14 Crucible"; */4 5 #include " ghcconfig.h"3 /* static char sccsid[] = "@(#) st.c 5.1 89/12/14 Crucible"; */ 4 5 #include "config.h" 6 6 #include <stdio.h> 7 7 #include <stdlib.h> … … 80 80 */ 81 81 static long primes[] = { 82 8 + 3,83 16 + 3,84 32 + 5,85 64 + 3,86 128 + 3,87 256 + 27,88 512 + 9,89 1024 + 9,90 2048 + 5,91 4096 + 3,92 8192 + 27,93 16384 + 43,94 32768 + 3,95 65536 + 45,96 131072 + 29,97 262144 + 3,98 524288 + 21,99 1048576 + 7,100 2097152 + 17,101 4194304 + 15,102 8388608 + 9,103 16777216 + 43,104 33554432 + 35,105 67108864 + 15,106 134217728 + 29,107 268435456 + 3,108 536870912 + 11,109 1073741824 + 85,110 082 8 + 3, 83 16 + 3, 84 32 + 5, 85 64 + 3, 86 128 + 3, 87 256 + 27, 88 512 + 9, 89 1024 + 9, 90 2048 + 5, 91 4096 + 3, 92 8192 + 27, 93 16384 + 43, 94 32768 + 3, 95 65536 + 45, 96 131072 + 29, 97 262144 + 3, 98 524288 + 21, 99 1048576 + 7, 100 2097152 + 17, 101 4194304 + 15, 102 8388608 + 9, 103 16777216 + 43, 104 33554432 + 35, 105 67108864 + 15, 106 134217728 + 29, 107 268435456 + 3, 108 536870912 + 11, 109 1073741824 + 85, 110 0 111 111 }; 112 112 … … 119 119 #if 0 120 120 for (i=3; i<31; i++) { 121 if ((1<<i) > size) return 1<<i;121 if ((1<<i) > size) return 1<<i; 122 122 } 123 123 return -1; … … 126 126 127 127 for (i = 0, newsize = MINSIZE; 128 i < sizeof(primes)/sizeof(primes[0]);129 i++, newsize <<= 1)128 i < sizeof(primes)/sizeof(primes[0]); 129 i++, newsize <<= 1) 130 130 { 131 if (newsize > size) return primes[i];131 if (newsize > size) return primes[i]; 132 132 } 133 133 /* Ran out of polynomials */ 134 return -1; /* should raise exception */134 return -1; /* should raise exception */ 135 135 #endif 136 136 } … … 158 158 #ifdef HASH_LOG 159 159 if (init_st == 0) { 160 init_st = 1;161 atexit(stat_col);162 } 163 #endif 164 165 size = new_size(size); /* round up to prime number */160 init_st = 1; 161 atexit(stat_col); 162 } 163 #endif 164 165 size = new_size(size); /* round up to prime number */ 166 166 167 167 tbl = alloc(st_table); … … 215 215 216 216 for(i = 0; i < table->num_bins; i++) { 217 ptr = table->bins[i];218 while (ptr != 0) {219 next = ptr->next;220 free(ptr);221 ptr = next;222 }217 ptr = table->bins[i]; 218 while (ptr != 0) { 219 next = ptr->next; 220 free(ptr); 221 ptr = next; 222 } 223 223 } 224 224 free(table->bins); … … 239 239 ptr = (table)->bins[bin_pos];\ 240 240 if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\ 241 COLLISION;\242 while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\243 ptr = ptr->next;\244 }\245 ptr = ptr->next;\241 COLLISION;\ 242 while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\ 243 ptr = ptr->next;\ 244 }\ 245 ptr = ptr->next;\ 246 246 }\ 247 247 } while (0) … … 260 260 261 261 if (ptr == 0) { 262 return 0;262 return 0; 263 263 } 264 264 else { 265 if (value != 0) *value = ptr->record;266 return 1;265 if (value != 0) *value = ptr->record; 266 return 1; 267 267 } 268 268 } … … 272 272 st_table_entry *entry;\ 273 273 if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\ 274 rehash(table);\274 rehash(table);\ 275 275 bin_pos = hash_val % table->num_bins;\ 276 276 }\ … … 299 299 300 300 if (ptr == 0) { 301 ADD_DIRECT(table, key, value, hash_val, bin_pos);302 return 0;301 ADD_DIRECT(table, key, value, hash_val, bin_pos); 302 return 0; 303 303 } 304 304 else { 305 ptr->record = value;306 return 1;305 ptr->record = value; 306 return 1; 307 307 } 308 308 } … … 333 333 334 334 for(i = 0; i < old_num_bins; i++) { 335 ptr = table->bins[i];336 while (ptr != 0) {337 next = ptr->next;338 hash_val = ptr->hash % new_num_bins;339 ptr->next = new_bins[hash_val];340 new_bins[hash_val] = ptr;341 ptr = next;342 }335 ptr = table->bins[i]; 336 while (ptr != 0) { 337 next = ptr->next; 338 hash_val = ptr->hash % new_num_bins; 339 ptr->next = new_bins[hash_val]; 340 new_bins[hash_val] = ptr; 341 ptr = next; 342 } 343 343 } 344 344 free(table->bins); … … 357 357 new_table = alloc(st_table); 358 358 if (new_table == 0) { 359 return 0;359 return 0; 360 360 } 361 361 362 362 *new_table = *old_table; 363 363 new_table->bins = (st_table_entry**) 364 Calloc((unsigned)num_bins, sizeof(st_table_entry*));364 Calloc((unsigned)num_bins, sizeof(st_table_entry*)); 365 365 366 366 if (new_table->bins == 0) { 367 free(new_table);368 return 0;367 free(new_table); 368 return 0; 369 369 } 370 370 371 371 for(i = 0; i < num_bins; i++) { 372 new_table->bins[i] = 0;373 ptr = old_table->bins[i];374 while (ptr != 0) {375 entry = alloc(st_table_entry);376 if (entry == 0) {377 free(new_table->bins);378 free(new_table);379 return 0;380 }381 *entry = *ptr;382 entry->next = new_table->bins[i];383 new_table->bins[i] = entry;384 ptr = ptr->next;385 }372 new_table->bins[i] = 0; 373 ptr = old_table->bins[i]; 374 while (ptr != 0) { 375 entry = alloc(st_table_entry); 376 if (entry == 0) { 377 free(new_table->bins); 378 free(new_table); 379 return 0; 380 } 381 *entry = *ptr; 382 entry->next = new_table->bins[i]; 383 new_table->bins[i] = entry; 384 ptr = ptr->next; 385 } 386 386 } 387 387 return new_table; … … 402 402 403 403 if (ptr == 0) { 404 if (value != 0) *value = 0;405 return 0;404 if (value != 0) *value = 0; 405 return 0; 406 406 } 407 407 408 408 if (EQUAL(table, *key, ptr->key)) { 409 table->bins[hash_val] = ptr->next;410 table->num_entries--;411 if (value != 0) *value = ptr->record;412 *key = ptr->key;413 free(ptr);414 return 1;409 table->bins[hash_val] = ptr->next; 410 table->num_entries--; 411 if (value != 0) *value = ptr->record; 412 *key = ptr->key; 413 free(ptr); 414 return 1; 415 415 } 416 416 417 417 for(; ptr->next != 0; ptr = ptr->next) { 418 if (EQUAL(table, ptr->next->key, *key)) {419 tmp = ptr->next;420 ptr->next = ptr->next->next;421 table->num_entries--;422 if (value != 0) *value = tmp->record;423 *key = tmp->key;424 free(tmp);425 return 1;426 }418 if (EQUAL(table, ptr->next->key, *key)) { 419 tmp = ptr->next; 420 ptr->next = ptr->next->next; 421 table->num_entries--; 422 if (value != 0) *value = tmp->record; 423 *key = tmp->key; 424 free(tmp); 425 return 1; 426 } 427 427 } 428 428 … … 444 444 445 445 if (ptr == 0) { 446 if (value != 0) *value = 0;447 return 0;446 if (value != 0) *value = 0; 447 return 0; 448 448 } 449 449 450 450 for(; ptr != 0; ptr = ptr->next) { 451 if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {452 table->num_entries--;453 *key = ptr->key;454 if (value != 0) *value = ptr->record;455 ptr->key = ptr->record = never;456 return 1;457 }451 if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) { 452 table->num_entries--; 453 *key = ptr->key; 454 if (value != 0) *value = ptr->record; 455 ptr->key = ptr->record = never; 456 return 1; 457 } 458 458 } 459 459 … … 491 491 492 492 for(i = 0; i < table->num_bins; i++) { 493 last = 0;494 for(ptr = table->bins[i]; ptr != 0;) {495 retval = (*func)(ptr->key, ptr->record, arg);496 switch (retval) {497 case ST_CONTINUE:498 last = ptr;499 ptr = ptr->next;500 break;501 case ST_STOP:502 return;503 case ST_DELETE:504 tmp = ptr;505 if (last == 0) {506 table->bins[i] = ptr->next;507 }508 else {509 last->next = ptr->next;510 }511 ptr = ptr->next;512 free(tmp);513 table->num_entries--;514 }515 }493 last = 0; 494 for(ptr = table->bins[i]; ptr != 0;) { 495 retval = (*func)(ptr->key, ptr->record, arg); 496 switch (retval) { 497 case ST_CONTINUE: 498 last = ptr; 499 ptr = ptr->next; 500 break; 501 case ST_STOP: 502 return; 503 case ST_DELETE: 504 tmp = ptr; 505 if (last == 0) { 506 table->bins[i] = ptr->next; 507 } 508 else { 509 last->next = ptr->next; 510 } 511 ptr = ptr->next; 512 free(tmp); 513 table->num_entries--; 514 } 515 } 516 516 } 517 517 } … … 527 527 528 528 while ((c = *string++) != '\0') { 529 h = ( h << 4 ) + c;530 if ( g = h & 0xF0000000 )531 h ^= g >> 24;532 h &= ~g;529 h = ( h << 4 ) + c; 530 if ( g = h & 0xF0000000 ) 531 h ^= g >> 24; 532 h &= ~g; 533 533 } 534 534 return h; … … 537 537 538 538 while ((c = *string++) != '\0') { 539 val = val*33 + c;539 val = val*33 + c; 540 540 } 541 541 … … 556 556 557 557 while ((c = *string++) != '\0') { 558 val = val*997 + c;558 val = val*997 + c; 559 559 } 560 560
