Changeset 8dac2cc
- Timestamp:
- May 12, 2017, 10:46:51 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- c429ec2
- Parents:
- 64bc131 (diff), f5abbd7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 6 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/generic_types/generic_types.tex
r64bc131 r8dac2cc 1020 1020 While \CC provides good backwards compatibility with C, it has a steep learning curve for many of its extensions. 1021 1021 For example, polymorphism is provided via three disjoint mechanisms: overloading, inheritance, and templates. 1022 The overloading is restricted because resolution does not us ingthe 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.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. 1023 1023 In 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. 1024 1024 The 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
100755
to100644
-
Property
mode
changed from
-
src/InitTweak/FixInit.cc
r64bc131 r8dac2cc 656 656 unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) ); 657 657 if ( unqCount[ unqExpr->get_id() ] == 0 ) { // insert destructor after the last use of the unique expression 658 stmtsToAdd .splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );658 stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] ); 659 659 } 660 660 if ( addDeref.count( unqExpr->get_id() ) ) { … … 668 668 stmtsToAdd.splice( stmtsToAdd.end(), fixer.stmtsToAdd ); 669 669 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 } 670 675 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 expression672 stmtsToAdd.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );673 } else { // remember dtors for last instance of unique expr674 dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;675 }676 676 // unique expression is now a dereference, because the inner expression is an lvalue returning function call. 677 677 // Normalize the expression by dereferencing the unique expression, rather than the inner expression
Note: See TracChangeset
for help on using the changeset viewer.