Ignore:
Timestamp:
May 12, 2016, 10:14:36 AM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
aaron-thesis, arm-eh, 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, resolv-new, with_gc
Children:
bf5a70da
Parents:
273080f
Message:

added some basic tests and modified compilation to support them

File:
1 edited

Legend:

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

    r273080f rf1e42c1  
    11#pragma once
    22
     3#include <stdbool.h>
    34#include <stdint.h>
    45
     
    1011
    1112void gcpointer_ctor(gcpointer_t* this);
    12 void gcpointer_ctor(gcpointer_t* ptr, int null);
    1313void gcpointer_ctor(gcpointer_t* this, void* address);
    1414void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other);
    15 
    1615void gcpointer_dtor(gcpointer_t* this);
    17 
    1816gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs);
    1917
    2018//Logical operators
    21 int gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs);
    22 int gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs);
    23 int gcpointer_null(gcpointer_t* this);
     19bool gcpointer_equal(gcpointer_t* this, gcpointer_t* rhs);
     20bool gcpointer_not_equal(gcpointer_t* this, gcpointer_t* rhs);
     21bool gcpointer_null(gcpointer_t* this);
     22
     23forall(otype T)
     24struct gcpointer
     25{
     26        gcpointer_t internal;
     27};
     28
     29forall(otype T)
     30static inline void ctor(gcpointer(T)* this)
     31{
     32        gcpointer_ctor(&this->internal);
     33}
     34
     35// forall(otype T)
     36// static inline void ctor(gcpointer(T)* this, int null)
     37// {
     38//      gcpointer_ctor(&this->internal, NULL);
     39// }
     40
     41forall(otype T)
     42static inline void ctor(gcpointer(T)* this, void* address)
     43{
     44        gcpointer_ctor(&this->internal, address);
     45}
     46
     47forall(otype T)
     48static inline void ctor(gcpointer(T)* this, gcpointer(T)* other)
     49{
     50        gcpointer_ctor(&this->internal, other);
     51}
     52
     53forall(otype T)
     54static inline void dtor(gcpointer(T)* this)
     55{
     56        gcpointer_dtor(&this->internal);
     57}
     58
     59forall(otype T)
     60static inline gcpointer(T)* ?=?(gcpointer(T)* this, gcpointer(T)* rhs)
     61{
     62        gcpointer_assign(&this->internal, &rhs->internal);
     63        return this;
     64}
     65
     66forall(otype T)
     67static inline T *?(gcpointer(T) this)
     68{
     69        return *(T*)this.internal.ptr;
     70}
     71
     72//Logical operators
     73forall(otype T)
     74static inline int ?!=?(gcpointer(T) this, gcpointer(T) rhs)
     75{
     76        return this.internal.ptr != rhs.internal.ptr;
     77}
     78
     79forall(otype T)
     80static inline int ?==?(gcpointer(T) this, gcpointer(T) rhs)
     81{
     82        return !(this == rhs);
     83}
     84
     85forall(otype T)
     86extern struct gcpointer(T) 0;
Note: See TracChangeset for help on using the changeset viewer.