Changeset ec7f50a
- Timestamp:
- Jan 17, 2019, 3:39:33 PM (6 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- bead1cf
- Parents:
- bd78797 (diff), 273ff10 (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:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/aaron_moss_PhD/phd/background.tex
rbd78797 rec7f50a 213 213 The ability of types to begin or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters can lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships. 214 214 215 \subsection{Implicit Conversions} 215 \subsection{Implicit Conversions} \label{implicit-conv-sec} 216 216 217 217 In addition to the multiple interpretations of an expression produced by name overloading and polymorphic functions, for backward compatibility \CFA{} must support all of the implicit conversions present in C, producing further candidate interpretations for expressions. -
doc/theses/aaron_moss_PhD/phd/resolution-heuristics.tex
rbd78797 rec7f50a 2 2 \label{resolution-chap} 3 3 4 Talk about the resolution heuristics. This is the bulk of the thesis. 4 The main task of the \CFACC{} type-checker is \emph{expression resolution}, determining which declarations the identifiers in each expression correspond to. 5 Resolution is a straightforward task in C, as each declaration has a unique identifier, but in \CFA{} the name overloading features discussed in Section~\ref{overloading-sec} generate multiple candidate declarations for each identifier. 6 I refer to a given matching between identifiers and declarations in an expression as an \emph{interpretation}; an interpretation also includes information about polymorphic type bindings and implicit casts to support the \CFA{} features discussed in Sections~\ref{poly-func-sec} and~\ref{implicit-conv-sec}, each of which increase the proportion of feasible candidate interpretations. 7 To choose between feasible interpretations, \CFA{} defines a \emph{conversion cost} to rank interpretations; the expression resolution problem is thus to find the unique minimal-cost interpretation for an expression, reporting an error if no such interpretation exists. 8 9 \section{Conversion Cost} 10 11 5 12 6 13 % Discuss changes to cost model, as promised in Ch. 2 14 15 % Mention relevance of work to C++20 concepts -
driver/cfa.cc
rbd78797 rec7f50a 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Sep 14 23:02:59 201813 // Update Count : 2 7712 // Last Modified On : Tue Jan 15 20:56:03 2019 13 // Update Count : 280 14 14 // 15 15 … … 384 384 nargs += 1; 385 385 386 for ( int i = 0; i < nlibs; i += 1 ) { // copy non-user libraries after all user libraries 387 args[nargs] = libs[i]; 388 nargs += 1; 389 } // for 390 386 391 if ( link ) { 387 392 args[nargs] = "-Xlinker"; … … 414 419 nargs += 1; 415 420 args[nargs] = "-lrt"; 421 nargs += 1; 422 args[nargs] = "-lm"; 416 423 nargs += 1; 417 424 } // if … … 498 505 args[nargs] = ( *new string( string("-B") + Bprefix ) ).c_str(); 499 506 nargs += 1; 500 args[nargs] = "-lm";501 nargs += 1;502 507 } else { 503 508 cerr << argv[0] << " error, compiler \"" << compiler_name << "\" unsupported." << endl; 504 509 exit( EXIT_FAILURE ); 505 510 } // if 506 507 for ( int i = 0; i < nlibs; i += 1 ) { // copy non-user libraries after all user libraries508 args[nargs] = libs[i];509 nargs += 1;510 } // for511 511 512 512 args[nargs] = NULL; // terminate with NULL -
libcfa/src/concurrency/coroutine.cfa
rbd78797 rec7f50a 83 83 84 84 void ^?{}(coroutine_desc& this) { 85 if(this.state != Halted ) {85 if(this.state != Halted && this.state != Start) { 86 86 coroutine_desc * src = TL_GET( this_coroutine ); 87 87 coroutine_desc * dst = &this; -
src/Concurrency/Keywords.cc
rbd78797 rec7f50a 575 575 576 576 //in reverse order : 577 // monitor_ guard_t __guard = { __monitors, #, func };577 // monitor_dtor_guard_t __guard = { __monitors, func }; 578 578 body->push_front( 579 579 new DeclStmt( new ObjectDecl( … … 634 634 assert(generic_func); 635 635 636 // in reverse order :636 // in reverse order : 637 637 // monitor_guard_t __guard = { __monitors, #, func }; 638 638 body->push_front( -
src/Concurrency/Waitfor.cc
rbd78797 rec7f50a 66 66 void foo() { 67 67 while( true ) { 68 69 acceptable_t acceptables[3]; 70 if( a < 1 ) { 71 acceptables[0].func = f; 72 acceptables[0].mon = a; 73 } 74 acceptables[1].func = g; 75 acceptables[1].mon = a; 76 77 acceptables[2].func = f; 78 acceptables[2].mon = a; 79 acceptables[2].is_dtor = true; 80 81 int ret = waitfor_internal( acceptables, swagl() ); 82 83 switch( ret ) { 84 case 0: 85 { 86 bar(); 68 { 69 acceptable_t acceptables[3]; 70 if( a < 1 ) { 71 acceptables[0].func = f; 72 acceptables[0].mon = a; 87 73 } 88 case 1: 89 { 90 baz(); 74 acceptables[1].func = g; 75 acceptables[1].mon = a; 76 77 acceptables[2].func = f; 78 acceptables[2].mon = a; 79 acceptables[2].is_dtor = true; 80 81 int ret = waitfor_internal( acceptables, swagl() ); 82 83 switch( ret ) { 84 case 0: 85 { 86 bar(); 87 } 88 case 1: 89 { 90 baz(); 91 } 92 case 2: 93 signal(a); 94 { 95 break; 96 } 91 97 } 92 case 2:93 signal(a);94 {95 break;96 }97 98 } 98 99 } … … 555 556 new ConstantExpr( Constant::from_ulong( i++ ) ), 556 557 { 557 clause.statement, 558 new BranchStmt( 559 "", 560 BranchStmt::Break 561 ) 558 new CompoundStmt({ 559 clause.statement, 560 new BranchStmt( 561 "", 562 BranchStmt::Break 563 ) 564 }) 562 565 } 563 566 ) … … 570 573 new ConstantExpr( Constant::from_int( -2 ) ), 571 574 { 572 waitfor->timeout.statement, 573 new BranchStmt( 574 "", 575 BranchStmt::Break 576 ) 575 new CompoundStmt({ 576 waitfor->timeout.statement, 577 new BranchStmt( 578 "", 579 BranchStmt::Break 580 ) 581 }) 577 582 } 578 583 ) … … 585 590 new ConstantExpr( Constant::from_int( -1 ) ), 586 591 { 587 waitfor->orelse.statement, 588 new BranchStmt( 589 "", 590 BranchStmt::Break 591 ) 592 new CompoundStmt({ 593 waitfor->orelse.statement, 594 new BranchStmt( 595 "", 596 BranchStmt::Break 597 ) 598 }) 592 599 } 593 600 ) -
src/main.cc
rbd78797 rec7f50a 10 10 // Created On : Fri May 15 23:12:02 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jun 6 15:51:47201813 // Update Count : 49 812 // Last Modified On : Wed Dec 26 08:11:19 2018 13 // Update Count : 499 14 14 // 15 15 … … 371 371 } 372 372 } catch(const std::exception& e) { 373 std::cerr << "Un aught Exception \"" << e.what() << "\"\n";373 std::cerr << "Uncaught Exception \"" << e.what() << "\"\n"; 374 374 } 375 375 return 1;
Note: See TracChangeset
for help on using the changeset viewer.