Ignore:
Timestamp:
Feb 25, 2016, 10:04:11 AM (9 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
8bb59af
Parents:
61a4875
Message:

vectors have almost no bugs left

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/examples/gc_no_raii/src/gcpointers.c

    r61a4875 reb38dd5  
    11#include "gcpointers.h"
    22
    3 #include "gc.h"
     3// #include "gc.h"
    44#include "internal/collector.h"
    5 //#include "internal/object_header.h"
     5// #include "internal/object_header.h"
    66// #include "internal/state.h"
    7 /*
    8 void register_ptr(gcpointer_t* this)
    9 {
    10         // if(gcpointer_null(this)) return;
    11         //
    12         // _Bool managed = gc_is_managed(this);
    13         //
    14         // if(managed)
    15         // {
    16         //      gc_object_header* obj = gc_get_object_for_ref(gc_get_state(), (void*)this);
    17         //      check(obj);
    18         //      check(gc_obj_is_valide(obj));
    19         //      check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || obj->type_chain == NULL);
    20         //      this->next = obj->type_chain;
    21         //      obj->type_chain = this;
    22         //      check(obj->is_valide());
    23         // }
    24         // else
    25         // {
    26         //      gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);
    27         //      check(obj);
    28         //      check(gc_obj_is_valide(obj));
    29         //      check(gc_is_managed(this) == gc_is_managed(obj->root_chain) || obj->root_chain == NULL);
    30         //      this->next = obj->root_chain;
    31         //      obj->root_chain = this;
    32         //      check(gc_obj_is_valide(obj));
    33         // }
    34 }
    357
    36 void unregister_ptr(gcpointer_t* this)
    37 {
    38         // if(gcpointer_null(this)) return;
    39         //
    40         // gcpointer_t** prev_next_ptr = gc_find_previous_ref(this);
    41         // check((*prev_next_ptr) == this);
    42         //
    43         // (*prev_next_ptr) = this->next;
    44 }
    45 
    46 void gcpointer_ctor(gcpointer_t* this)
    47 {
    48         this->ptr = (intptr_t)NULL;
    49         this->next = NULL;
    50 }
    51 
    52 void gcpointer_ctor(gcpointer_t* this, void* address)
    53 {
    54         this->ptr = (intptr_t)address;
    55         this->next = NULL;
    56 
    57         register_ptr(this);
    58 }
    59 
    60 void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other)
    61 {
    62         this->ptr = other->ptr;
    63         this->next = NULL;
    64 
    65         register_ptr(this);
    66 }
    67 
    68 void gcpointer_dtor(gcpointer_t* this)
    69 {
    70         unregister_ptr(this);
    71 }
    72 
    73 gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs)
    74 {
    75         if(this != rhs)
    76         {
    77                 unregister_ptr(this);
    78 
    79                 this->ptr = rhs->ptr;
    80 
    81                 register_ptr(this);
    82         }
    83 
    84         return this;
    85 }
    86 
    87 //Logical operators
    88 int gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs)
    89 {
    90         return this->ptr == rhs->ptr;
    91 }
    92 
    93 int gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs)
    94 {
    95         return this->ptr != rhs->ptr;
    96 }
    97 
    98 int gcpointer_null(gcpointer_t* this)
    99 {
    100         return this->ptr == (intptr_t)NULL;
    101 }*/
     8// void register_ptr(gcpointer_t* this)
     9// {
     10//      if(gcpointer_null(this)) return;
     11//
     12//      _Bool managed = gc_is_managed(this);
     13//
     14//      if(managed)
     15//      {
     16//              gc_object_header* obj = gc_get_object_for_ref(gc_get_state(), (void*)this);
     17//              check(obj);
     18//              check(gc_obj_is_valide(obj));
     19//              check(gc_is_managed(this) == gc_is_managed(obj->type_chain) || obj->type_chain == NULL);
     20//              this->next = obj->type_chain;
     21//              obj->type_chain = this;
     22//              check(obj->is_valide());
     23//      }
     24//      else
     25//      {
     26//              gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);
     27//              check(obj);
     28//              check(gc_obj_is_valide(obj));
     29//              check(gc_is_managed(this) == gc_is_managed(obj->root_chain) || obj->root_chain == NULL);
     30//              this->next = obj->root_chain;
     31//              obj->root_chain = this;
     32//              check(gc_obj_is_valide(obj));
     33//      }
     34// }
     35//
     36// void unregister_ptr(gcpointer_t* this)
     37// {
     38//      if(gcpointer_null(this)) return;
     39//
     40//      gcpointer_t** prev_next_ptr = gc_find_previous_ref(this);
     41//      check((*prev_next_ptr) == this);
     42//
     43//      (*prev_next_ptr) = this->next;
     44// }
     45//
     46// void gcpointer_ctor(gcpointer_t* this)
     47// {
     48//      this->ptr = (intptr_t)NULL;
     49//      this->next = NULL;
     50// }
     51//
     52// void gcpointer_ctor(gcpointer_t* this, void* address)
     53// {
     54//      this->ptr = (intptr_t)address;
     55//      this->next = NULL;
     56//
     57//      register_ptr(this);
     58// }
     59//
     60// void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other)
     61// {
     62//      this->ptr = other->ptr;
     63//      this->next = NULL;
     64//
     65//      register_ptr(this);
     66// }
     67//
     68// void gcpointer_dtor(gcpointer_t* this)
     69// {
     70//      unregister_ptr(this);
     71// }
     72//
     73// gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs)
     74// {
     75//      if(this != rhs)
     76//      {
     77//              unregister_ptr(this);
     78//
     79//              this->ptr = rhs->ptr;
     80//
     81//              register_ptr(this);
     82//      }
     83//
     84//      return this;
     85// }
     86//
     87// //Logical operators
     88// int gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs)
     89// {
     90//      return this->ptr == rhs->ptr;
     91// }
     92//
     93// int gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs)
     94// {
     95//      return this->ptr != rhs->ptr;
     96// }
     97//
     98// int gcpointer_null(gcpointer_t* this)
     99// {
     100//      return this->ptr == (intptr_t)NULL;
     101// }
Note: See TracChangeset for help on using the changeset viewer.