Changes in / [38d70ab:b38225d]


Ignore:
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • doc/working/resolver_design.md

    r38d70ab rb38225d  
    9191## Conversion Costs ##
    9292Each possible resolution of an expression has a _cost_ tuple consisting of
    93 the following components:
    94 1. _unsafe_ conversion cost: summed degree of unsafe conversions; unlike CFA03, this is not a simple count of conversions (for symmetry with the safe conversions)
    95 2. _polymorphic unifications_: count of parameters and return values bound to some polymorphic type for boxing
    96 3. _type variables_: number of polymorphic type variables bound
    97 4. negated _type specializations_: Each type assertion specializes the polymorphism, thus decreasing the cost; nested polymorphic types (e.g. `T*`) are also counted as specializations
    98 5. _safe_ conversions: summed degree of safe conversions
    99 6. _qualifier_ conversions: summed degree of qualifier and reference conversions
     93the following components: _unsafe_ conversion cost, _polymorphic_
     94specialization cost, _safe_ conversion cost, a count of _explicit_
     95conversions, and _qualifier_ conversion cost.
    10096These components are lexically-ordered and can be summed element-wise;
    10197summation starts at `(0, 0, 0, 0, 0)`.
    102 
    103 **TODO** update below for consistency with this
    10498
    10599### Lvalue and Qualifier Conversions ###
  • src/libcfa/iostream

    r38d70ab rb38225d  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug  9 16:42:47 2017
    13 // Update Count     : 131
     12// Last Modified On : Fri Jul  7 08:35:59 2017
     13// Update Count     : 118
    1414//
    1515
     
    4646}; // ostream
    4747
    48 // trait writeable( otype T ) {
    49 //      forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    50 // }; // writeable
    51 
    52 trait writeable( otype T, dtype ostype | ostream( ostype ) ) {
    53         ostype * ?|?( ostype *, T );
     48trait writeable( otype T ) {
     49        forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    5450}; // writeable
    5551
     
    8177
    8278// tuples
    83 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype * ?|?( ostype *, Params ); } )
    84 ostype * ?|?( ostype * os, T arg, Params rest );
     79forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } ) ostype * ?|?( ostype * os, T arg, Params rest );
    8580
    8681// manipulators
     
    9590
    9691// writes the range [begin, end) to the given stream
    97 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
    98 void write( iterator_type begin, iterator_type end, ostype * os );
     92forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     93void write( iterator_type begin, iterator_type end, os_type *os );
    9994
    100 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
    101 void write_reverse( iterator_type begin, iterator_type end, ostype * os );
     95forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     96void write_reverse( iterator_type begin, iterator_type end, os_type *os );
    10297
    10398//---------------------------------------
  • src/libcfa/iostream.c

    r38d70ab rb38225d  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug  9 16:46:51 2017
    13 // Update Count     : 401
     12// Last Modified On : Sun Jul 16 21:12:03 2017
     13// Update Count     : 398
    1414//
    1515
     
    193193
    194194// tuples
    195 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype * ?|?( ostype *, Params ); } )
     195forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } )
    196196ostype * ?|?( ostype * os, T arg, Params rest ) {
    197197        os | arg;                                                                                       // print first argument
     
    256256//---------------------------------------
    257257
    258 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
    259 void write( iterator_type begin, iterator_type end, ostype * os ) {
    260         void print( elt_type i ) { os | i; }
     258forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     259void write( iteratortype begin, iteratortype end, ostype * os ) {
     260        void print( elttype i ) { os | i; }
    261261        for_each( begin, end, print );
    262262} // ?|?
    263263
    264 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
    265 void write_reverse( iterator_type begin, iterator_type end, ostype * os ) {
    266         void print( elt_type i ) { os | i; }
     264forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
     265void write_reverse( iteratortype begin, iteratortype end, ostype * os ) {
     266        void print( elttype i ) { os | i; }
    267267        for_each_reverse( begin, end, print );
    268268} // ?|?
  • src/tests/div.c

    r38d70ab rb38225d  
    1111// Created On       : Tue Aug  8 16:28:43 2017
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Aug  9 17:09:40 2017
    14 // Update Count     : 16
     13// Last Modified On : Tue Aug  8 18:02:44 2017
     14// Update Count     : 14
    1515//
    1616
     
    2828        sout | "div" | div( s1, s2 ) | endl;
    2929        T t1 = { 13 }, t2 = { 5 };
    30         sout | "div" | div( t1, t2 ) | endl;                            // polymorphic div
     30        [t1, t2] = div( t1, t2 );                                                       // polymorphic div
     31        sout | "div" | t1 | t2 | endl;
     32//      sout | "div" | div( t1, t2 ) | endl;
    3133} // main
    3234
Note: See TracChangeset for help on using the changeset viewer.