Changes in / [101e0bd:5b639ee]
- Location:
- src
- Files:
-
- 1 added
- 1 deleted
- 18 edited
-
Parser/DeclarationNode.cc (modified) (3 diffs)
-
Parser/parser.cc (added)
-
examples/gc_no_raii/bug-repro/field.c (modified) (2 diffs)
-
examples/gc_no_raii/bug-repro/oddtype.c (deleted)
-
examples/gc_no_raii/src/gcpointers.c (modified) (6 diffs)
-
examples/gc_no_raii/src/gcpointers.h (modified) (3 diffs)
-
examples/gc_no_raii/src/internal/card_table.h (modified) (4 diffs)
-
examples/gc_no_raii/src/internal/collector.c (modified) (6 diffs)
-
examples/gc_no_raii/src/internal/collector.h (modified) (1 diff)
-
examples/gc_no_raii/src/internal/memory_pool.c (modified) (10 diffs)
-
examples/gc_no_raii/src/internal/memory_pool.h (modified) (2 diffs)
-
examples/gc_no_raii/src/internal/object_header.c (modified) (11 diffs)
-
examples/gc_no_raii/src/internal/object_header.h (modified) (4 diffs)
-
examples/gc_no_raii/src/internal/state.c (modified) (7 diffs)
-
examples/gc_no_raii/src/internal/state.h (modified) (1 diff)
-
examples/gc_no_raii/src/tools/checks.h (modified) (3 diffs)
-
examples/gc_no_raii/src/tools/print.c (modified) (1 diff)
-
examples/gc_no_raii/src/tools/print.h (modified) (1 diff)
-
examples/gc_no_raii/test/badlll.c (modified) (3 diffs)
-
tests/avltree/avl_test.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/DeclarationNode.cc
r101e0bd r5b639ee 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 14 23:13:28 201613 // Update Count : 50212 // Last Modified On : Mon Sep 12 21:03:18 2016 13 // Update Count : 491 14 14 // 15 15 … … 383 383 } 384 384 385 static void addQualifiersToType( TypeData *&src, TypeData *dst ) { 386 if ( src && dst ) { 387 if ( src->forall && dst->kind == TypeData::Function ) { 388 if ( dst->forall ) { 389 dst->forall->appendList( src->forall ); 390 } else { 391 dst->forall = src->forall; 392 } // if 393 src->forall = 0; 394 } // if 395 if ( dst->base ) { 396 addQualifiersToType( src, dst->base ); 397 } else if ( dst->kind == TypeData::Function ) { 398 dst->base = src; 399 src = 0; 400 } else { 401 dst->qualifiers |= src->qualifiers; 402 } // if 403 } // if 404 } 405 385 406 void appendError( string & dst, const string & src ) { 386 407 if ( src.empty() ) return; … … 424 445 } // DeclarationNode::copyStorageClasses 425 446 426 static void addQualifiersToType( TypeData *&src, TypeData *dst ) { 427 if ( src->forall && dst->kind == TypeData::Function ) { 428 if ( dst->forall ) { 429 dst->forall->appendList( src->forall ); 447 DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) { 448 if ( q ) { 449 checkStorageClasses( q ); 450 copyStorageClasses( q ); 451 if ( q->type ) { 452 if ( ! type ) { 453 type = new TypeData; 454 } else { 455 checkQualifiers( q->type, type ); 456 } // if 457 addQualifiersToType( q->type, type ); 458 if ( q->type && q->type->forall ) { 459 if ( type->forall ) { 460 type->forall->appendList( q->type->forall ); 461 } else { 462 if ( type->kind == TypeData::Aggregate ) { 463 type->aggregate.params = q->type->forall; 464 // change implicit typedef from TYPEDEFname to TYPEGENname 465 typedefTable.changeKind( type->aggregate.name, TypedefTable::TG ); 466 } else { 467 type->forall = q->type->forall; 468 } // if 469 } // if 470 q->type->forall = 0; 471 } // if 472 } // if 473 } // if 474 delete q; 475 return this; 476 } 477 478 static void addTypeToType( TypeData *&src, TypeData *&dst ) { 479 if ( src && dst ) { 480 if ( src->forall && dst->kind == TypeData::Function ) { 481 if ( dst->forall ) { 482 dst->forall->appendList( src->forall ); 483 } else { 484 dst->forall = src->forall; 485 } // if 486 src->forall = 0; 487 } // if 488 if ( dst->base ) { 489 addTypeToType( src, dst->base ); 430 490 } else { 431 dst->forall = src->forall; 432 } // if 433 src->forall = 0; 434 } // if 435 if ( dst->base ) { 436 addQualifiersToType( src, dst->base ); 437 } else if ( dst->kind == TypeData::Function ) { 438 dst->base = src; 439 src = 0; 440 } else { 441 dst->qualifiers |= src->qualifiers; 442 } // if 443 } // addQualifiersToType 444 445 DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) { 446 if ( ! q ) return this; 447 448 checkStorageClasses( q ); 449 copyStorageClasses( q ); 450 451 if ( ! q->type ) { delete q; return this; } 452 453 if ( ! type ) { 454 // type = new TypeData; 455 type = q->type; 456 return this; 457 } // if 458 459 checkQualifiers( q->type, type ); 460 addQualifiersToType( q->type, type ); 461 462 if ( q->type->forall ) { 463 if ( type->forall ) { 464 type->forall->appendList( q->type->forall ); 465 } else { 466 if ( type->kind == TypeData::Aggregate ) { 467 type->aggregate.params = q->type->forall; 468 // change implicit typedef from TYPEDEFname to TYPEGENname 469 typedefTable.changeKind( type->aggregate.name, TypedefTable::TG ); 470 } else { 471 type->forall = q->type->forall; 472 } // if 473 } // if 474 q->type->forall = 0; 475 } // if 476 delete q; 477 return this; 478 } // addQualifiers 479 480 static void addTypeToType( TypeData *&src, TypeData *&dst ) { 481 if ( src->forall && dst->kind == TypeData::Function ) { 482 if ( dst->forall ) { 483 dst->forall->appendList( src->forall ); 484 } else { 485 dst->forall = src->forall; 486 } // if 487 src->forall = 0; 488 } // if 489 if ( dst->base ) { 490 addTypeToType( src, dst->base ); 491 } else { 492 switch ( dst->kind ) { 493 case TypeData::Unknown: 494 src->qualifiers |= dst->qualifiers; 495 dst = src; 496 src = 0; 497 break; 498 case TypeData::Basic: 499 dst->qualifiers |= src->qualifiers; 500 if ( src->kind != TypeData::Unknown ) { 501 assert( src->kind == TypeData::Basic ); 502 503 if ( dst->basictype == DeclarationNode::NoBasicType ) { 504 dst->basictype = src->basictype; 505 } else if ( src->basictype != DeclarationNode::NoBasicType ) 506 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::basicTypeName[ src->basictype ] + " in type: ", src ); 507 508 if ( dst->complextype == DeclarationNode::NoComplexType ) { 509 dst->complextype = src->complextype; 510 } else if ( src->complextype != DeclarationNode::NoComplexType ) 511 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::complexTypeName[ src->complextype ] + " in type: ", src ); 512 513 if ( dst->signedness == DeclarationNode::NoSignedness ) { 514 dst->signedness = src->signedness; 515 } else if ( src->signedness != DeclarationNode::NoSignedness ) 516 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::signednessName[ src->signedness ] + " in type: ", src ); 517 518 if ( dst->length == DeclarationNode::NoLength ) { 519 dst->length = src->length; 520 } else if ( dst->length == DeclarationNode::Long && src->length == DeclarationNode::Long ) { 521 dst->length = DeclarationNode::LongLong; 522 } else if ( src->length != DeclarationNode::NoLength ) 523 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::lengthName[ src->length ] + " in type: ", src ); 524 } // if 525 break; 526 default: 527 switch ( src->kind ) { 528 case TypeData::Aggregate: 529 case TypeData::Enum: 530 dst->base = new TypeData( TypeData::AggregateInst ); 531 dst->base->aggInst.aggregate = src; 532 if ( src->kind == TypeData::Aggregate ) { 533 dst->base->aggInst.params = maybeClone( src->aggregate.actuals ); 534 } // if 535 dst->base->qualifiers |= src->qualifiers; 491 switch ( dst->kind ) { 492 case TypeData::Unknown: 493 src->qualifiers |= dst->qualifiers; 494 dst = src; 536 495 src = 0; 537 496 break; 497 case TypeData::Basic: 498 dst->qualifiers |= src->qualifiers; 499 if ( src->kind != TypeData::Unknown ) { 500 assert( src->kind == TypeData::Basic ); 501 502 if ( dst->basictype == DeclarationNode::NoBasicType ) { 503 dst->basictype = src->basictype; 504 } else if ( src->basictype != DeclarationNode::NoBasicType ) 505 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::basicTypeName[ src->basictype ] + " in type: ", src ); 506 507 if ( dst->complextype == DeclarationNode::NoComplexType ) { 508 dst->complextype = src->complextype; 509 } else if ( src->complextype != DeclarationNode::NoComplexType ) 510 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::complexTypeName[ src->complextype ] + " in type: ", src ); 511 512 if ( dst->signedness == DeclarationNode::NoSignedness ) { 513 dst->signedness = src->signedness; 514 } else if ( src->signedness != DeclarationNode::NoSignedness ) 515 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::signednessName[ src->signedness ] + " in type: ", src ); 516 517 if ( dst->length == DeclarationNode::NoLength ) { 518 dst->length = src->length; 519 } else if ( dst->length == DeclarationNode::Long && src->length == DeclarationNode::Long ) { 520 dst->length = DeclarationNode::LongLong; 521 } else if ( src->length != DeclarationNode::NoLength ) 522 throw SemanticError( std::string( "conflicting type specifier " ) + DeclarationNode::lengthName[ src->length ] + " in type: ", src ); 523 } // if 524 break; 538 525 default: 539 if ( dst->forall ) { 540 dst->forall->appendList( src->forall ); 541 } else { 542 dst->forall = src->forall; 543 } // if 544 src->forall = 0; 545 dst->base = src; 546 src = 0; 526 switch ( src->kind ) { 527 case TypeData::Aggregate: 528 case TypeData::Enum: 529 dst->base = new TypeData( TypeData::AggregateInst ); 530 dst->base->aggInst.aggregate = src; 531 if ( src->kind == TypeData::Aggregate ) { 532 dst->base->aggInst.params = maybeClone( src->aggregate.actuals ); 533 } // if 534 dst->base->qualifiers |= src->qualifiers; 535 src = 0; 536 break; 537 default: 538 if ( dst->forall ) { 539 dst->forall->appendList( src->forall ); 540 } else { 541 dst->forall = src->forall; 542 } // if 543 src->forall = 0; 544 dst->base = src; 545 src = 0; 546 } // switch 547 547 } // switch 548 } // switch548 } // if 549 549 } // if 550 550 } -
src/examples/gc_no_raii/bug-repro/field.c
r101e0bd r5b639ee 62 62 { 63 63 struct gc_object_header* object; 64 #if ndef NDEBUG64 #if _DEBUG 65 65 intptr_t lower_limit; 66 66 intptr_t upper_limit; … … 71 71 gc_pool_object_iterator* const this, 72 72 void* start_object 73 #if ndef NDEBUG73 #if _DEBUG 74 74 , intptr_t pool_start 75 75 , intptr_t pool_end -
src/examples/gc_no_raii/src/gcpointers.c
r101e0bd r5b639ee 14 14 gc_object_header* obj = gc_get_object_for_ref(gc_get_state(), (void*)this); 15 15 check(obj); 16 check( is_valid(obj));17 check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || !obj->type_chain);16 check(gc_obj_is_valide(obj)); 17 check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || obj->type_chain == NULL); 18 18 this->next = obj->type_chain; 19 19 obj->type_chain = this; 20 check( is_valid(obj));20 check(obj->is_valide()); 21 21 } 22 22 else … … 24 24 gc_object_header* obj = gc_get_object_ptr((void*)this->ptr); 25 25 check(obj); 26 check(is_valid(obj)); 27 check(!obj->root_chain || this->ptr == obj->root_chain->ptr); 28 check(!obj->root_chain || gc_is_managed(this) == gc_is_managed(obj->root_chain)); 26 check(gc_obj_is_valide(obj)); 27 check(gc_is_managed(this) == gc_is_managed(obj->root_chain) || obj->root_chain == NULL); 29 28 this->next = obj->root_chain; 30 29 obj->root_chain = this; 31 check( is_valid(obj));30 check(gc_obj_is_valide(obj)); 32 31 } 33 32 } … … 70 69 } 71 70 72 gcpointer_t ?=?(gcpointer_t* this, gcpointer_trhs)71 gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs) 73 72 { 74 unregister_ptr(this);75 this->ptr = rhs.ptr;76 register_ptr(this);73 if(this != rhs) 74 { 75 unregister_ptr(this); 77 76 78 return *this; 77 this->ptr = rhs->ptr; 78 79 register_ptr(this); 80 } 81 82 return this; 79 83 } 80 84 81 85 //Logical operators 82 bool gcpointer_equal( const gcpointer_t* this, constgcpointer_t* rhs)86 bool gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs) 83 87 { 84 88 return this->ptr == rhs->ptr; 85 89 } 86 90 87 bool gcpointer_not_equal( const gcpointer_t* this, constgcpointer_t* rhs)91 bool gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs) 88 92 { 89 93 return this->ptr != rhs->ptr; 90 94 } 91 95 92 bool gcpointer_null( constgcpointer_t* this)96 bool gcpointer_null(gcpointer_t* this) 93 97 { 94 98 return this->ptr == (intptr_t)NULL; 95 99 } 96 97 #ifndef NDEBUG98 bool is_valid(const gcpointer_t* this) {99 if(gcpointer_null(this)) return true;100 101 gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);102 check(obj);103 check(is_valid(obj));104 check(!obj->root_chain || this->ptr == obj->root_chain->ptr);105 106 if( !gc_is_managed(this))107 {108 check( !(this->next) || this->ptr == this->next->ptr );109 }110 111 return true;112 }113 #endif114 100 115 101 forall(otype T) void ?{}(gcpointer(T)* this) { … … 121 107 } 122 108 123 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T) other) {124 (&this->internal) { other .internal };109 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other) { 110 (&this->internal) { other->internal }; 125 111 } 126 112 … … 129 115 } 130 116 131 forall(otype T) gcpointer(T) ?=?(gcpointer(T)* this, gcpointer(T) rhs) { 132 this->internal = rhs.internal; 133 return *this; 134 } 117 // forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs); 135 118 // 136 119 // forall(otype T) T *?(gcpointer(T) this); … … 141 124 // 142 125 // //Logical operators 143 forall(otype T) int ?!=?(gcpointer(T) this, int zero) {144 return this.internal.ptr != 0;145 }146 126 // forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs); 147 127 // forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs); -
src/examples/gc_no_raii/src/gcpointers.h
r101e0bd r5b639ee 3 3 #include <stdbool.h> 4 4 #include <stdint.h> 5 6 forall(dtype T)7 struct gcpointer;8 5 9 6 struct gcpointer_t … … 17 14 void ?{}(gcpointer_t* this, gcpointer_t other); 18 15 void ^?{}(gcpointer_t* this); 19 gcpointer_t ?=?(gcpointer_t*this, gcpointer_t rhs);16 gcpointer_t* ?=?(gcpointer_t this, gcpointer_t rhs); 20 17 21 18 //Logical operators 22 19 bool gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs); 23 20 bool gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs); 24 bool gcpointer_null( constgcpointer_t* this);21 bool gcpointer_null(gcpointer_t* this); 25 22 26 27 #ifndef NDEBUG 28 bool is_valid(const gcpointer_t* this); 29 #endif 30 31 forall(dtype T) 23 forall(otype T) 32 24 struct gcpointer 33 25 { … … 38 30 forall(otype T) void ?{}(gcpointer(T)* this); 39 31 forall(otype T) void ?{}(gcpointer(T)* this, void* address); 40 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T) other);32 forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other); 41 33 forall(otype T) void ^?{}(gcpointer(T)* this); 42 forall(otype T) gcpointer(T) ?=?(gcpointer(T) *this, gcpointer(T) rhs);34 forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs); 43 35 44 36 45 //forall(otype T) T *?(gcpointer(T) this);37 forall(otype T) T *?(gcpointer(T) this); 46 38 forall(otype T) T* get(gcpointer(T)* this); 47 39 48 40 //Logical operators 49 forall(otype T) int ?!=?(gcpointer(T) this, int zero);50 41 forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs); 51 42 forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs); -
src/examples/gc_no_raii/src/internal/card_table.h
r101e0bd r5b639ee 1 1 #pragma once 2 3 #include <stdlib> 2 4 3 5 #include "globals.h" … … 7 9 { 8 10 size_t card = ( ((intptr_t)address) & CARDS_OFFSET_MASK ) >> CARDS_SIZE_EXP; 9 checkf(card < CARDS_COUNT, (const char*)"%lu %lu = (%lx & %lx) >> %lu\n", (size_t)CARDS_COUNT, (size_t)card, (size_t)address, (size_t)CARDS_OFFSET_MASK, (size_t)CARDS_SIZE_EXP);10 11 check(card < CARDS_COUNT); 11 12 return card; … … 18 19 }; 19 20 20 static inline void ctor _card(card_table_t* const this)21 static inline void ctor(card_table_t* const this) 21 22 { 22 23 this->count = 0; 23 24 } 24 25 25 static inline void dtor _card(card_table_t* const this)26 static inline void dtor(card_table_t* const this) 26 27 { 27 28 … … 47 48 else 48 49 { 49 check(card == this->count);50 check(card == count); 50 51 this->count++; 51 52 this->cards_start[card] = object; -
src/examples/gc_no_raii/src/internal/collector.c
r101e0bd r5b639ee 25 25 gc_object_header* obj = gc_get_object_ptr((void*)target->ptr); 26 26 27 check( is_valid(obj));27 check(gc_is_valide(obj)); 28 28 29 29 gcpointer_t** prev_next_ptr = managed ? &obj->type_chain : &obj->root_chain; … … 38 38 void* gc_allocate(size_t target_size) 39 39 { 40 //sout | "Allocating " | target_size | " bytes" | endl;40 sout | "Allocating " | target_size | " bytes" | endl; 41 41 42 42 size_t size = gc_compute_size(target_size + sizeof(gc_object_header)); 43 43 44 //sout | "Object header size: " | sizeof(gc_object_header) | " bytes" | endl;45 //sout | "Actual allocation size: " | size | " bytes" | endl;44 sout | "Object header size: " | sizeof(gc_object_header) | " bytes" | endl; 45 sout | "Actual allocation size: " | size | " bytes" | endl; 46 46 47 47 check(size < POOL_SIZE_BYTES); … … 60 60 if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size); 61 61 62 checkf( (int) 0, "ERROR: allocation in new pool failed");62 checkf(false, "ERROR: allocation in new pool failed"); 63 63 64 64 return NULL; … … 67 67 void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size) 68 68 { 69 intptr_t data = ((intptr_t)block) + sizeof(gc_object_header);69 void* data = (void*)(((intptr_t)block) + sizeof(gc_object_header)); 70 70 void* header = block; 71 71 72 check( data> ((intptr_t)block));73 check( data>= ((intptr_t)header));74 check( gc_is_aligned( (void*)data ));75 check( data + target_size <= ((intptr_t)block) + actual_size);72 check(((intptr_t)data) > ((intptr_t)block)); 73 check(((intptr_t)data) >= ((intptr_t)header)); 74 check(is_aligned(data)); 75 check(((intptr_t)data) + target_size <= ((intptr_t)block) + actual_size); 76 76 77 77 gc_object_header* obj = placement_ctor(header, actual_size); 78 78 79 79 (void)obj; //remove unsused warning since this is for debug 80 check(obj == g c_get_object_ptr( (void*)data));80 check(obj == get_object_ptr(data)); 81 81 82 82 gc_register_allocation(gc_get_state(), actual_size); 83 83 84 return (void*)data;84 return data; 85 85 } 86 86 … … 119 119 check(!ptr->forward); 120 120 check(!ptr->is_forwarded); 121 check(gc_ pool_is_from_space(gc_pool_of(ptr)));121 check(gc_is_from_space(gc_pool_of(ptr))); 122 122 123 123 gc_memory_pool* pool = gc_pool_of(ptr)->mirror; … … 143 143 check(((intptr_t)field) < ((intptr_t)((intptr_t)object) + object->size)); 144 144 145 check(gc_is_in_to_space(gc_get_state(), & field->ptr));145 check(gc_is_in_to_space(gc_get_state(), &type->ptr)); 146 146 147 147 intptr_t* ref = &field->ptr; -
src/examples/gc_no_raii/src/internal/collector.h
r101e0bd r5b639ee 1 1 #pragma once 2 2 3 #include <stdlib .h>3 #include <stdlib> 4 4 5 5 #include "tools.h" -
src/examples/gc_no_raii/src/internal/memory_pool.c
r101e0bd r5b639ee 1 1 #include "memory_pool.h" 2 2 3 extern "C" { 4 #include <stdlib.h> 5 #include <string.h> 6 } 3 #include <stdlib> 7 4 8 #include "collector.h"9 5 #include "object_header.h" 10 6 … … 19 15 card_table_t* new = (card_table_t*)malloc(sizeof(card_table_t)); 20 16 this->cards = new; 21 ctor _card(this->cards);17 ctor(this->cards); 22 18 23 19 this->end_p = ((uint8_t*)this) + size; 24 20 this->free_p = this->start_p; 25 21 26 check( gc_pool_of( (void*)this) == this);22 check(gc_pool_of(this) == this); 27 23 check(this->cards); 28 24 gc_reset_pool(this); … … 31 27 void dtor(gc_memory_pool *const this) 32 28 { 33 dtor _card(this->cards);29 dtor(this->cards); 34 30 free(this->cards); 35 31 } … … 38 34 { 39 35 this->free_p = this->start_p; 40 #if ndef NDEBUG41 memset(this->start_p, 0xCD, gc_pool_ size_total(this));36 #if _DEBUG 37 memset(this->start_p, 0xCD, gc_pool_total_size(this)); 42 38 #endif 43 39 … … 45 41 reset(this->cards); 46 42 47 check(gc_pool_size_left(this) == gc_pool_ size_total(this));43 check(gc_pool_size_left(this) == gc_pool_total_size(this)); 48 44 } 49 45 … … 62 58 } 63 59 64 void ?{}( gc_pool_object_iterator* this, 60 void ctor( 61 gc_pool_object_iterator* const this, 65 62 struct gc_object_header* start_object 66 #if ndef NDEBUG63 #if _DEBUG 67 64 , intptr_t pool_start 68 65 , intptr_t pool_end … … 71 68 { 72 69 this->object = start_object; 73 #if ndef NDEBUG70 #if _DEBUG 74 71 this->lower_limit = pool_start; 75 72 this->upper_limit = pool_end; 76 73 #endif 77 74 78 check( ((intptr_t)start_object) >= this->lower_limit );79 check( ((intptr_t)start_object) <= this->upper_limit );75 check( ((intptr_t)start_object) >= lower_limit ); 76 check( ((intptr_t)start_object) <= upper_limit ); 80 77 } 81 82 void ^?{}( gc_pool_object_iterator* this ) {}83 78 84 79 gc_pool_object_iterator gc_pool_iterator_for(gc_memory_pool* const this, void* member) … … 86 81 size_t card = card_of(member); 87 82 intptr_t member_add = (intptr_t)member; 88 intptr_t start_obj; 83 void* start_obj; 84 intptr_t start_obj_add; 89 85 90 86 do 91 87 { 92 88 check(card < CARDS_COUNT); 93 start_obj = (intptr_t)object_at(this->cards, card);89 start_obj = object_at(this->cards, card); 94 90 check(card != 0 || start_obj); 95 91 card--; 92 start_obj_add = (intptr_t)start_obj; 96 93 } 97 while(start_obj > member_add || !(start_obj));94 while(start_obj_add > member_add || start_obj_add != 0); 98 95 99 check( start_obj);100 96 check(start_obj); 97 101 98 struct gc_object_header* start_obj_typed = (struct gc_object_header*)start_obj; 102 99 103 return (gc_pool_object_iterator) { 104 start_obj_typed 105 #ifndef NDEBUG 100 gc_pool_object_iterator it; 101 ctor( &it, 102 start_obj_typed, 103 #if _DEBUG 106 104 , (intptr_t)this->start_p 107 105 , (intptr_t)this->free_p 108 106 #endif 109 }; 107 ); 108 return it; 110 109 } 111 110 … … 118 117 { 119 118 struct gc_object_header* start_obj = (struct gc_object_header*)this->start_p; 120 return (gc_pool_object_iterator) { 121 start_obj 122 #ifndef NDEBUG 119 gc_pool_object_iterator it; 120 ctor( &it, 121 start_obj, 122 #if _DEBUG 123 123 , (intptr_t)this->start_p 124 124 , (intptr_t)this->free_p 125 125 #endif 126 }; 126 ); 127 return it; 127 128 } 128 129 129 130 gc_pool_object_iterator end(gc_memory_pool* const this) 130 131 { 131 return (gc_pool_object_iterator) { 132 (struct gc_object_header*)this->free_p 133 #ifndef NDEBUG 132 gc_pool_object_iterator it; 133 ctor( &it, 134 (struct gc_object_header*)this->free_p, 135 #if _DEBUG 134 136 , (intptr_t)this->start_p 135 137 , (intptr_t)this->free_p 136 138 #endif 137 }; 139 ); 140 return it; 138 141 } 139 142 … … 142 145 struct gc_object_header* object = it->object; 143 146 intptr_t next_ptr = ((intptr_t)object) + object->size; 144 check(next_ptr > it->lower_limit);145 check(next_ptr <= it->upper_limit);147 check(next_ptr > lower_limit); 148 check(next_ptr <= upper_limit); 146 149 147 150 struct gc_object_header* next_obj = ((struct gc_object_header*)next_ptr); 148 check(next_ptr == it->upper_limit || is_valid(next_obj));151 check(next_ptr == upper_limit || is_valide(next_obj)); 149 152 150 153 it->object = next_obj; -
src/examples/gc_no_raii/src/internal/memory_pool.h
r101e0bd r5b639ee 39 39 { 40 40 struct gc_object_header* object; 41 #if ndef NDEBUG41 #if _DEBUG 42 42 intptr_t lower_limit; 43 43 intptr_t upper_limit; … … 46 46 47 47 48 void ?{}( gc_pool_object_iterator* this, 48 void ctor( 49 gc_pool_object_iterator* const this, 49 50 struct gc_object_header* start_object 50 #if ndef NDEBUG51 #if _DEBUG 51 52 , intptr_t pool_start 52 53 , intptr_t pool_end 53 54 #endif 54 55 ); 55 56 void ^?{}( gc_pool_object_iterator* this );57 56 58 57 bool ?!=?(const gc_pool_object_iterator lhs, const gc_pool_object_iterator rhs); -
src/examples/gc_no_raii/src/internal/object_header.c
r101e0bd r5b639ee 3 3 #include <stdint.h> 4 4 5 #include "collector.h"6 5 #include "globals.h" 7 6 #include "gcpointers.h" … … 9 8 void ctor(gc_object_header* const this, size_t inSize) 10 9 { 11 #if ndef NDEBUG10 #if _DEBUG 12 11 this->canary_start = CANARY_VALUE; 13 12 #endif … … 19 18 this->is_forwarded = false; 20 19 21 #if ndef NDEBUG20 #if _DEBUG 22 21 this->canary_end = CANARY_VALUE; 23 22 #endif … … 26 25 void copy_ctor(gc_object_header* const this, const gc_object_header* const other) 27 26 { 28 #if ndef NDEBUG27 #if _DEBUG 29 28 this->canary_start = CANARY_VALUE; 30 29 #endif … … 36 35 this->is_forwarded = false; 37 36 38 #if ndef NDEBUG37 #if _DEBUG 39 38 this->canary_end = CANARY_VALUE; 40 39 #endif … … 43 42 while(root) 44 43 { 45 check(g c_get_object_ptr( (void*)root->ptr) == other);44 check(get_object_ptr(root->ptr) == other); 46 45 root->ptr = ((intptr_t)this) + sizeof(gc_object_header); 47 46 48 check(g c_get_object_ptr( (void*)root->ptr) == this);47 check(get_object_ptr(root->ptr) == this); 49 48 root = root->next; 50 49 } … … 57 56 58 57 size_t offset = (intptr_t)type - (intptr_t)other; 59 check(offset < this->size);58 check(offset < size); 60 59 61 60 gcpointer_t* member_ptr = (gcpointer_t*)( (intptr_t)this + offset ); … … 64 63 65 64 size_t next_offset = type->next ? (intptr_t)type->next - (intptr_t)other : 0; 66 check(next_offset < this->size);65 check(next_offset < size); 67 66 68 67 gcpointer_t* next_ptr = type->next ? (gcpointer_t*)((intptr_t)this + next_offset) : NULL; … … 74 73 } 75 74 76 check(is_valid (this));75 check(is_valide(this)); 77 76 } 78 77 79 #if ndef NDEBUG80 bool is_valid (const gc_object_header* const this)78 #if _DEBUG 79 bool is_valide(const gc_object_header* const this) 81 80 { 82 check( (intptr_t)this->canary_start == (intptr_t)CANARY_VALUE);83 check( (intptr_t)this->canary_end == (intptr_t)CANARY_VALUE);81 check(this->canary_start == CANARY_VALUE); 82 check(this->canary_end == CANARY_VALUE); 84 83 85 check(this->is_forwarded == ( (intptr_t)this->forward != (intptr_t)NULL));84 check(this->is_forwarded == (this->forward != nullptr)); 86 85 87 86 check(this->size < POOL_SIZE_BYTES); … … 90 89 while(root) 91 90 { 92 check f(gc_get_object_ptr( (void*)root->ptr ) == this, (const char*)"Expected %lX got %lX\n", gc_get_object_ptr( (void*)root->ptr ),this);91 check(get_object_ptr(root->ptr) == this); 93 92 94 93 root = root->next; 95 94 } 96 95 97 gcpointer_t* type = t his->type_chain;96 gcpointer_t* type = type_chain; 98 97 while(type) 99 98 { 100 99 check((intptr_t)type > (intptr_t)this); 101 check((intptr_t)type < (intptr_t)(( (intptr_t)this) + this->size));100 check((intptr_t)type < (intptr_t)((intptr_t)this + size)); 102 101 103 102 type = type->next; … … 106 105 return true; 107 106 } 108 #else109 #error blarg110 107 #endif -
src/examples/gc_no_raii/src/internal/object_header.h
r101e0bd r5b639ee 7 7 #include "tools.h" 8 8 9 #if ndef NDEBUG10 static void* const CANARY_VALUE = (void*)0xCAFEBABACAFEBABA;9 #if DEBUG 10 static const long unsigned int CANARY_VALUE = 0xCAFEBABACAFEBABA; 11 11 #endif 12 12 … … 16 16 struct gc_object_header 17 17 { 18 #if ndef NDEBUG18 #if DEBUG 19 19 void* canary_start; 20 20 #endif … … 26 26 bool is_forwarded; 27 27 28 #if ndef NDEBUG28 #if DEBUG 29 29 void* canary_end; 30 30 #endif … … 47 47 return this; 48 48 } 49 50 #ifndef NDEBUG51 bool is_valid(const gc_object_header* const this);52 #endif -
src/examples/gc_no_raii/src/internal/state.c
r101e0bd r5b639ee 21 21 void gc_state_calc_usage(gc_state *const this); 22 22 23 #if ndef NDEBUG23 #if DEBUG 24 24 bool gc_state_roots_match(gc_state *const this); 25 25 bool gc_state_no_from_space_ref(gc_state *const this); … … 76 76 gc_object_header* gc_get_object_for_ref(gc_state* state, void* member) 77 77 { 78 volatile int stage = 0;79 78 intptr_t target = ((intptr_t)member); 80 79 if(!gc_is_in_heap(state, member)) return NULL; 81 stage++;82 80 83 81 gc_memory_pool* pool = gc_pool_of(member); 84 stage++;85 82 gc_pool_object_iterator it = gc_pool_iterator_for(pool, member); 86 stage++;87 83 gc_pool_object_iterator end = end(pool); 88 stage++;89 84 90 85 while(it != end) 91 86 { 92 87 gc_object_header* object = *it; 93 check(object);94 check( is_valid(object) );95 88 { 96 89 intptr_t start = ((intptr_t)object); … … 101 94 } 102 95 } 103 stage++;104 96 ++it; 105 97 } 106 98 107 checkf( (int) 0, "is_in_heap() and iterator_for() return inconsistent data");99 checkf(false, "is_in_heap() and iterator_for() return inconsistent data"); 108 100 abort(); 109 101 return NULL; … … 184 176 this->from_code = (~this->from_code) & 0x01; 185 177 186 #if ndef NDEBUG178 #if _DEBUG 187 179 { 188 180 gc_memory_pool* pool = this->from_space; … … 259 251 } 260 252 261 #if ndef NDEBUG253 #if _DEBUG 262 254 bool gc_state_roots_match(gc_state* const this) 263 255 { … … 273 265 size += object->size; 274 266 275 gcpointer_ t* ptr = object->root_chain;267 gcpointer_base* ptr = object->root_chain; 276 268 while(ptr) 277 269 { 278 check(g c_get_object_ptr( (void*)ptr->ptr) == object);279 ptr = ptr-> next;270 check(get_object_ptr(ptr->m_ptr) == object); 271 ptr = ptr->m_next; 280 272 } 281 273 } 282 274 283 checkf(size + gc_pool_size_left(pool) == gc_pool_size_total(pool), 284 (const char*)"expected %lu + %lu == %lu\n", 285 (size_t)size, 286 (size_t)gc_pool_size_left(pool), 287 (size_t)gc_pool_size_total(pool)); 275 check(size + gc_pool_size_used(pool) == gc_pool_size_total(pool)); 288 276 289 277 pool = pool->next; … … 298 286 while(pool) 299 287 { 300 void** potential_ref = (void**)pool-> start_p;301 while(potential_ref < (void**)pool-> free_p)288 void** potential_ref = (void**)pool->m_start; 289 while(potential_ref < (void**)pool->m_free) 302 290 { 303 291 check(!gc_is_in_heap(this, *potential_ref)); -
src/examples/gc_no_raii/src/internal/state.h
r101e0bd r5b639ee 38 38 static inline bool gc_needs_collect(gc_state* state) 39 39 { 40 //sout | "Used Space: " | state->used_space | " bytes" | endl;40 sout | "Used Space: " | state->used_space | " bytes" | endl; 41 41 return state->used_space * 2 > state->total_space; 42 42 } -
src/examples/gc_no_raii/src/tools/checks.h
r101e0bd r5b639ee 1 1 #pragma once 2 2 3 #ifdef NDEBUG 4 5 #define check(x) 6 7 #define checkf(x, format, ...) 8 9 #warning no debug checks 10 11 #else 3 #if _DEBUG 12 4 13 5 #include <stdlib.h> … … 18 10 printf("CHECK failed : %s at %s:%i\n", #x, __FILE__, __LINE__);\ 19 11 abort();\ 20 }}while( (int)0)\12 }}while(0)\ 21 13 22 14 #define checkf(x, ...) do {\ … … 25 17 printf(__VA_ARGS__);\ 26 18 abort();\ 27 }}while( (int)0 )\ 19 }}while(0)\ 20 21 #else 22 23 #define check(x) 24 25 #define checkf(x, format, ...) 28 26 29 27 #endif //NO_CHECKS -
src/examples/gc_no_raii/src/tools/print.c
r101e0bd r5b639ee 1 1 #include "tools.h" 2 2 3 #if ndef NDEBUG4 //ofstream *sout = ofstream_stdout();3 #if _DEBUG 4 ofstream *sout = ofstream_stdout(); 5 5 #endif -
src/examples/gc_no_raii/src/tools/print.h
r101e0bd r5b639ee 1 1 #pragma once 2 2 3 // #ifndef NDEBUG4 // 5 //#include <fstream>6 // 7 //#define DEBUG_OUT(x) sout | x | endl;8 // 9 //#else3 #if _DEBUG 4 5 #include <fstream> 6 7 #define DEBUG_OUT(x) sout | x | endl; 8 9 #else 10 10 11 11 #define DEBUG_OUT(x) 12 12 13 //#endif //NO_CHECKS13 #endif //NO_CHECKS -
src/examples/gc_no_raii/test/badlll.c
r101e0bd r5b639ee 1 1 #include "gc.h" 2 3 #include <stdio.h>4 2 5 3 struct List_t … … 9 7 }; 10 8 9 void ?{}(List_t* this); 10 List_t* ?=?(List_t* this, List_t* rhs); 11 11 12 typedef gcpointer(List_t) LLL; 12 13 13 #define MAX (1024 * 1 )14 #define MAX (1024 * 1024) 14 15 15 LLL buildLLL(int sz) 16 // LLL buildLLL(int sz) 17 void bla() 16 18 { 17 int i = 0; 18 LLL ll0; 19 20 gcmalloc( &ll0 ); 21 List_t* ll0_ptr = get( &ll0 ); 22 ll0_ptr->val = i; 23 LLL lll = ll0; 24 25 for (i = 1; i < sz; i++) 26 { 27 LLL llc; 28 gcmalloc( &llc ); 29 List_t* llc_ptr = get( &llc ); 30 llc_ptr->val = i; 31 List_t* lll_ptr = get( &lll ); 32 lll_ptr->next = llc; 33 34 lll = llc; 35 } 36 37 check(is_valid( &ll0.internal )); 38 39 return ll0; 19 int i; 20 // LLL ll0;//, lll, llc; 21 // 22 // ll0 = gcmalloc(); 23 // ll0->val = 0; 24 // lll = ll0; 25 // 26 // for (i = 1; i < sz; i++) 27 // { 28 // llc = gcmalloc(); 29 // llc->val = i; 30 // lll->next = llc; 31 // lll = llc; 32 // } 33 // 34 // return ll0; 40 35 } 41 42 void testLLL(LLL lll) 43 { 44 unsigned char *counted; 45 46 counted = (unsigned char *) calloc(MAX, sizeof(unsigned char)); 47 while (lll) 48 { 49 List_t* lll_ptr = get( &lll ); 50 counted[lll_ptr->val]++; 51 if (counted[lll_ptr->val] > 1) 52 { 53 fprintf(stderr, "ERROR! Encountered %d twice!\n", lll_ptr->val); 54 exit(1); 55 } 56 lll = lll_ptr->next; 57 } 58 59 return; 60 } 36 // 37 // void testLLL(LLL lll) 38 // { 39 // unsigned char *counted; 40 // 41 // counted = (unsigned char *) calloc(MAX, sizeof(unsigned char)); 42 // while (lll) 43 // { 44 // counted[lll->val]++; 45 // if (counted[lll->val] > 1) 46 // { 47 // fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val); 48 // exit(1); 49 // } 50 // lll = lll->next; 51 // } 52 // 53 // return; 54 // } 61 55 62 56 int main(void) … … 64 58 LLL mylll; 65 59 66 mylll = buildLLL(MAX);67 68 testLLL(mylll);60 // mylll = buildLLL(MAX); 61 // 62 // testLLL(mylll); 69 63 70 64 return 0; -
src/tests/avltree/avl_test.c
r101e0bd r5b639ee 14 14 15 15 // int -> int 16 tree(int, int) * imap = create(-1, (int)0);16 tree(int, int) * imap = create(-1, 0); 17 17 insert(&imap, 12, 13); 18 18 insert(&imap, 2, 3);
Note:
See TracChangeset
for help on using the changeset viewer.