Changes in / [8dac2cc:64bc131]


Ignore:
Files:
6 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • doc/generic_types/generic_types.tex

    r8dac2cc r64bc131  
    10201020While \CC provides good backwards compatibility with C, it has a steep learning curve for many of its extensions.
    10211021For example, polymorphism is provided via three disjoint mechanisms: overloading, inheritance, and templates.
    1022 The overloading is restricted because resolution does not use the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
     1022The overloading is restricted because resolution does not using the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
    10231023In contrast, \CFA has a single facility for polymorphic code supporting type-safe separate-compilation of polymorphic functions and generic (opaque) types, which uniformly leverage the C procedural paradigm.
    10241024The key mechanism to support separate compilation is \CFA's \emph{explicit} use of assumed properties for a type.
  • doc/rob_thesis/thesis.bib

    • Property mode changed from 100644 to 100755
  • src/InitTweak/FixInit.cc

    r8dac2cc r64bc131  
    656656                                unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) );
    657657                                if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
    658                                         stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
     658                                        stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
    659659                                }
    660660                                if ( addDeref.count( unqExpr->get_id() ) ) {
     
    668668                        stmtsToAdd.splice( stmtsToAdd.end(), fixer.stmtsToAdd );
    669669                        unqMap[unqExpr->get_id()] = unqExpr;
    670                         if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
    671                                 stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
    672                         } else { // remember dtors for last instance of unique expr
    673                                 dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
    674                         }
    675670                        if ( UntypedExpr * deref = dynamic_cast< UntypedExpr * >( unqExpr->get_expr() ) ) {
     671                                if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
     672                                        stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
     673                                } else { // remember dtors for last instance of unique expr
     674                                        dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
     675                                }
    676676                                // unique expression is now a dereference, because the inner expression is an lvalue returning function call.
    677677                                // Normalize the expression by dereferencing the unique expression, rather than the inner expression
Note: See TracChangeset for help on using the changeset viewer.