Changes in / [bead1cf:da6032af]
- Files:
-
- 7 edited
-
doc/theses/aaron_moss_PhD/phd/background.tex (modified) (1 diff)
-
doc/theses/aaron_moss_PhD/phd/resolution-heuristics.tex (modified) (1 diff)
-
driver/cfa.cc (modified) (4 diffs)
-
libcfa/src/concurrency/coroutine.cfa (modified) (1 diff)
-
src/Concurrency/Keywords.cc (modified) (2 diffs)
-
src/Concurrency/Waitfor.cc (modified) (4 diffs)
-
src/main.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/aaron_moss_PhD/phd/background.tex
rbead1cf rda6032af 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} \label{implicit-conv-sec}215 \subsection{Implicit Conversions} 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
rbead1cf rda6032af 2 2 \label{resolution-chap} 3 3 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 4 Talk about the resolution heuristics. This is the bulk of the thesis. 12 5 13 6 % Discuss changes to cost model, as promised in Ch. 2 14 15 % Mention relevance of work to C++20 concepts -
driver/cfa.cc
rbead1cf rda6032af 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 15 20:56:03 201913 // Update Count : 2 8012 // Last Modified On : Fri Sep 14 23:02:59 2018 13 // Update Count : 277 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 libraries387 args[nargs] = libs[i];388 nargs += 1;389 } // for390 391 386 if ( link ) { 392 387 args[nargs] = "-Xlinker"; … … 419 414 nargs += 1; 420 415 args[nargs] = "-lrt"; 421 nargs += 1;422 args[nargs] = "-lm";423 416 nargs += 1; 424 417 } // if … … 505 498 args[nargs] = ( *new string( string("-B") + Bprefix ) ).c_str(); 506 499 nargs += 1; 500 args[nargs] = "-lm"; 501 nargs += 1; 507 502 } else { 508 503 cerr << argv[0] << " error, compiler \"" << compiler_name << "\" unsupported." << endl; 509 504 exit( EXIT_FAILURE ); 510 505 } // if 506 507 for ( int i = 0; i < nlibs; i += 1 ) { // copy non-user libraries after all user libraries 508 args[nargs] = libs[i]; 509 nargs += 1; 510 } // for 511 511 512 512 args[nargs] = NULL; // terminate with NULL -
libcfa/src/concurrency/coroutine.cfa
rbead1cf rda6032af 83 83 84 84 void ^?{}(coroutine_desc& this) { 85 if(this.state != Halted && this.state != Start) {85 if(this.state != Halted) { 86 86 coroutine_desc * src = TL_GET( this_coroutine ); 87 87 coroutine_desc * dst = &this; -
src/Concurrency/Keywords.cc
rbead1cf rda6032af 575 575 576 576 //in reverse order : 577 // monitor_ dtor_guard_t __guard = { __monitors, func };577 // monitor_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
rbead1cf rda6032af 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; 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(); 73 87 } 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: 88 case 1: 89 { 90 baz(); 91 } 92 case 2: 93 signal(a); 85 94 { 86 b ar();95 break; 87 96 } 88 case 1:89 {90 baz();91 }92 case 2:93 signal(a);94 {95 break;96 }97 }98 97 } 99 98 } … … 556 555 new ConstantExpr( Constant::from_ulong( i++ ) ), 557 556 { 558 new CompoundStmt({ 559 clause.statement, 560 new BranchStmt( 561 "", 562 BranchStmt::Break 563 ) 564 }) 557 clause.statement, 558 new BranchStmt( 559 "", 560 BranchStmt::Break 561 ) 565 562 } 566 563 ) … … 573 570 new ConstantExpr( Constant::from_int( -2 ) ), 574 571 { 575 new CompoundStmt({ 576 waitfor->timeout.statement, 577 new BranchStmt( 578 "", 579 BranchStmt::Break 580 ) 581 }) 572 waitfor->timeout.statement, 573 new BranchStmt( 574 "", 575 BranchStmt::Break 576 ) 582 577 } 583 578 ) … … 590 585 new ConstantExpr( Constant::from_int( -1 ) ), 591 586 { 592 new CompoundStmt({ 593 waitfor->orelse.statement, 594 new BranchStmt( 595 "", 596 BranchStmt::Break 597 ) 598 }) 587 waitfor->orelse.statement, 588 new BranchStmt( 589 "", 590 BranchStmt::Break 591 ) 599 592 } 600 593 ) -
src/main.cc
rbead1cf rda6032af 10 10 // Created On : Fri May 15 23:12:02 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 26 08:11:19201813 // Update Count : 49 912 // Last Modified On : Wed Jun 6 15:51:47 2018 13 // Update Count : 498 14 14 // 15 15 … … 371 371 } 372 372 } catch(const std::exception& e) { 373 std::cerr << "Un caught Exception \"" << e.what() << "\"\n";373 std::cerr << "Unaught Exception \"" << e.what() << "\"\n"; 374 374 } 375 375 return 1;
Note:
See TracChangeset
for help on using the changeset viewer.