Changes in / [1eba452:96a10cdd]
- Location:
- src
- Files:
-
- 1 deleted
- 19 edited
-
Parser/parser.h (modified) (4 diffs)
-
Parser/parser.yy (modified) (1 diff)
-
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/parser.h
r1eba452 r96a10cdd 1 /* A Bison parser, made by GNU Bison 3.0.2. */1 /* A Bison parser, made by GNU Bison 2.5. */ 2 2 3 3 /* Bison interface for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2013Free Software Foundation, Inc.6 4 5 Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. 6 7 7 This program is free software: you can redistribute it and/or modify 8 8 it under the terms of the GNU General Public License as published by 9 9 the Free Software Foundation, either version 3 of the License, or 10 10 (at your option) any later version. 11 11 12 12 This program is distributed in the hope that it will be useful, 13 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 15 GNU General Public License for more details. 16 16 17 17 You should have received a copy of the GNU General Public License 18 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ … … 27 27 Bison output files to be licensed under the GNU General Public 28 28 License without this special exception. 29 29 30 30 This special exception was added by the Free Software Foundation in 31 31 version 2.2 of Bison. */ 32 32 33 #ifndef YY_YY_PARSER_PARSER_H_INCLUDED 34 # define YY_YY_PARSER_PARSER_H_INCLUDED 35 /* Debug traces. */ 36 #ifndef YYDEBUG 37 # define YYDEBUG 1 38 #endif 39 #if YYDEBUG 40 extern int yydebug; 41 #endif 42 43 /* Token type. */ 33 34 /* Tokens. */ 44 35 #ifndef YYTOKENTYPE 45 36 # define YYTOKENTYPE 46 enum yytokentype 47 { 48 TYPEDEF = 258, 49 AUTO = 259, 50 EXTERN = 260, 51 REGISTER = 261, 52 STATIC = 262, 53 INLINE = 263, 54 FORTRAN = 264, 55 CONST = 265, 56 VOLATILE = 266, 57 RESTRICT = 267, 58 FORALL = 268, 59 LVALUE = 269, 60 VOID = 270, 61 CHAR = 271, 62 SHORT = 272, 63 INT = 273, 64 LONG = 274, 65 FLOAT = 275, 66 DOUBLE = 276, 67 SIGNED = 277, 68 UNSIGNED = 278, 69 VALIST = 279, 70 BOOL = 280, 71 COMPLEX = 281, 72 IMAGINARY = 282, 73 TYPEOF = 283, 74 LABEL = 284, 75 ENUM = 285, 76 STRUCT = 286, 77 UNION = 287, 78 OTYPE = 288, 79 FTYPE = 289, 80 DTYPE = 290, 81 TRAIT = 291, 82 SIZEOF = 292, 83 OFFSETOF = 293, 84 ATTRIBUTE = 294, 85 EXTENSION = 295, 86 IF = 296, 87 ELSE = 297, 88 SWITCH = 298, 89 CASE = 299, 90 DEFAULT = 300, 91 DO = 301, 92 WHILE = 302, 93 FOR = 303, 94 BREAK = 304, 95 CONTINUE = 305, 96 GOTO = 306, 97 RETURN = 307, 98 CHOOSE = 308, 99 DISABLE = 309, 100 ENABLE = 310, 101 FALLTHRU = 311, 102 TRY = 312, 103 CATCH = 313, 104 CATCHRESUME = 314, 105 FINALLY = 315, 106 THROW = 316, 107 THROWRESUME = 317, 108 AT = 318, 109 ASM = 319, 110 ALIGNAS = 320, 111 ALIGNOF = 321, 112 ATOMIC = 322, 113 GENERIC = 323, 114 NORETURN = 324, 115 STATICASSERT = 325, 116 THREADLOCAL = 326, 117 IDENTIFIER = 327, 118 QUOTED_IDENTIFIER = 328, 119 TYPEDEFname = 329, 120 TYPEGENname = 330, 121 ATTR_IDENTIFIER = 331, 122 ATTR_TYPEDEFname = 332, 123 ATTR_TYPEGENname = 333, 124 INTEGERconstant = 334, 125 FLOATINGconstant = 335, 126 CHARACTERconstant = 336, 127 STRINGliteral = 337, 128 ZERO = 338, 129 ONE = 339, 130 ARROW = 340, 131 ICR = 341, 132 DECR = 342, 133 LS = 343, 134 RS = 344, 135 LE = 345, 136 GE = 346, 137 EQ = 347, 138 NE = 348, 139 ANDAND = 349, 140 OROR = 350, 141 ELLIPSIS = 351, 142 MULTassign = 352, 143 DIVassign = 353, 144 MODassign = 354, 145 PLUSassign = 355, 146 MINUSassign = 356, 147 LSassign = 357, 148 RSassign = 358, 149 ANDassign = 359, 150 ERassign = 360, 151 ORassign = 361, 152 ATassign = 362, 153 THEN = 363 154 }; 37 /* Put the tokens into the symbol table, so that GDB and other debuggers 38 know about them. */ 39 enum yytokentype { 40 TYPEDEF = 258, 41 AUTO = 259, 42 EXTERN = 260, 43 REGISTER = 261, 44 STATIC = 262, 45 INLINE = 263, 46 FORTRAN = 264, 47 CONST = 265, 48 VOLATILE = 266, 49 RESTRICT = 267, 50 FORALL = 268, 51 LVALUE = 269, 52 VOID = 270, 53 CHAR = 271, 54 SHORT = 272, 55 INT = 273, 56 LONG = 274, 57 FLOAT = 275, 58 DOUBLE = 276, 59 SIGNED = 277, 60 UNSIGNED = 278, 61 VALIST = 279, 62 BOOL = 280, 63 COMPLEX = 281, 64 IMAGINARY = 282, 65 TYPEOF = 283, 66 LABEL = 284, 67 ENUM = 285, 68 STRUCT = 286, 69 UNION = 287, 70 OTYPE = 288, 71 FTYPE = 289, 72 DTYPE = 290, 73 TRAIT = 291, 74 SIZEOF = 292, 75 OFFSETOF = 293, 76 ATTRIBUTE = 294, 77 EXTENSION = 295, 78 IF = 296, 79 ELSE = 297, 80 SWITCH = 298, 81 CASE = 299, 82 DEFAULT = 300, 83 DO = 301, 84 WHILE = 302, 85 FOR = 303, 86 BREAK = 304, 87 CONTINUE = 305, 88 GOTO = 306, 89 RETURN = 307, 90 CHOOSE = 308, 91 DISABLE = 309, 92 ENABLE = 310, 93 FALLTHRU = 311, 94 TRY = 312, 95 CATCH = 313, 96 CATCHRESUME = 314, 97 FINALLY = 315, 98 THROW = 316, 99 THROWRESUME = 317, 100 AT = 318, 101 ASM = 319, 102 ALIGNAS = 320, 103 ALIGNOF = 321, 104 ATOMIC = 322, 105 GENERIC = 323, 106 NORETURN = 324, 107 STATICASSERT = 325, 108 THREADLOCAL = 326, 109 IDENTIFIER = 327, 110 QUOTED_IDENTIFIER = 328, 111 TYPEDEFname = 329, 112 TYPEGENname = 330, 113 ATTR_IDENTIFIER = 331, 114 ATTR_TYPEDEFname = 332, 115 ATTR_TYPEGENname = 333, 116 INTEGERconstant = 334, 117 FLOATINGconstant = 335, 118 CHARACTERconstant = 336, 119 STRINGliteral = 337, 120 ZERO = 338, 121 ONE = 339, 122 ARROW = 340, 123 ICR = 341, 124 DECR = 342, 125 LS = 343, 126 RS = 344, 127 LE = 345, 128 GE = 346, 129 EQ = 347, 130 NE = 348, 131 ANDAND = 349, 132 OROR = 350, 133 ELLIPSIS = 351, 134 MULTassign = 352, 135 DIVassign = 353, 136 MODassign = 354, 137 PLUSassign = 355, 138 MINUSassign = 356, 139 LSassign = 357, 140 RSassign = 358, 141 ANDassign = 359, 142 ERassign = 360, 143 ORassign = 361, 144 ATassign = 362, 145 THEN = 363 146 }; 155 147 #endif 156 148 /* Tokens. */ … … 262 254 #define THEN 363 263 255 264 /* Value type. */ 256 257 258 265 259 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 266 typedef union YYSTYPE YYSTYPE; 267 union YYSTYPE 260 typedef union YYSTYPE 268 261 { 269 #line 115 "parser.yy" /* yacc.c:1909 */ 262 263 /* Line 2068 of yacc.c */ 264 #line 115 "parser.yy" 270 265 271 266 Token tok; … … 284 279 bool flag; 285 280 286 #line 287 "Parser/parser.h" /* yacc.c:1909 */ 287 }; 281 282 283 /* Line 2068 of yacc.c */ 284 #line 285 "Parser/parser.h" 285 } YYSTYPE; 288 286 # define YYSTYPE_IS_TRIVIAL 1 287 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 289 288 # define YYSTYPE_IS_DECLARED 1 290 289 #endif 291 290 292 293 291 extern YYSTYPE yylval; 294 292 295 int yyparse (void); 296 297 #endif /* !YY_YY_PARSER_PARSER_H_INCLUDED */ 293 -
src/Parser/parser.yy
r1eba452 r96a10cdd 827 827 { $$ = new StatementNode( build_while( $3, $5 ) ); } 828 828 | DO statement WHILE '(' comma_expression ')' ';' 829 { $$ = new StatementNode( build_while( $5, $2 , true) ); }829 { $$ = new StatementNode( build_while( $5, $2 ) ); } 830 830 | FOR '(' push for_control_expression ')' statement 831 831 { $$ = new StatementNode( build_for( $4, $6 ) ); } -
src/examples/gc_no_raii/bug-repro/field.c
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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
r1eba452 r96a10cdd 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.