Changeset 8e90fd6
- Timestamp:
- Jan 18, 2025, 3:46:06 PM (8 months ago)
- Branches:
- master
- Children:
- d0b6712
- Parents:
- fa59c40 (diff), df56e25 (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:
-
- 2 added
- 1 deleted
- 35 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/LaTeXmacros/lstlang.sty
rfa59c40 r8e90fd6 8 8 %% Created On : Sat May 13 16:34:42 2017 9 9 %% Last Modified By : Peter A. Buhr 10 %% Last Modified On : Wed Jul 24 07:40:11 202411 %% Update Count : 4 510 %% Last Modified On : Fri Jan 17 14:29:52 2025 11 %% Update Count : 46 12 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13 13 … … 117 117 __auto_type, basetypeof, _Bool, bool, catch, catchResume, choose, coerce, cofor, corun, countof, _Complex, __complex, __complex__, 118 118 __const, __const__, continue, coroutine, _Decimal32, _Decimal64, _Decimal128, disable, dtype, enable, exception, __extension__, 119 fallthrough, f allthru, finally, fixup, __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64,119 fallthrough, finally, fixup, __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64, 120 120 _Float64x, _Float128, _Float128x, forall, fortran, ftype, generator, _Generic, _Imaginary, __imag, __imag__, inline, 121 121 __inline, __inline__, int128, __int128, __int128_t, __label__, monitor, mutex, _Noreturn, __builtin_offsetof, one_t, or, -
doc/papers/OOPSLA17/generic_types.tex
rfa59c40 r8e90fd6 66 66 morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto, 67 67 _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__, 68 fallthrough,f allthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert,68 fallthrough,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,one_t,otype,restrict,_Static_assert, 69 69 _Thread_local,throw,throwResume,trait,try,ttype,typeof,__typeof,__typeof__,zero_t}, 70 70 }% -
doc/papers/concurrency/Paper.tex
rfa59c40 r8e90fd6 162 162 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, 163 163 auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, 164 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, f allthru, finally,164 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally, 165 165 __float80, float80, __float128, float128, forall, ftype, generator, _Generic, _Imaginary, __imag, __imag__, 166 166 inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, -
doc/papers/general/Paper.tex
rfa59c40 r8e90fd6 143 143 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, 144 144 auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, 145 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, f allthru, finally,145 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally, 146 146 __float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__, 147 147 inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, -
doc/papers/llheap/Paper.tex
rfa59c40 r8e90fd6 108 108 _Alignas, _Alignof, __alignof, __alignof__, and, asm, __asm, __asm__, _Atomic, __attribute, __attribute__, 109 109 __auto_type, basetypeof, _Bool, catch, catchResume, choose, coerce, _Complex, __complex, __complex__, __const, __const__, 110 coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, f allthru, finally, fixup,110 coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, finally, fixup, 111 111 __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64, _Float64x, _Float128, _Float128x, 112 112 forall, fortran, generator, _Generic, _Imaginary, __imag, __imag__, inline, __inline, __inline__, int128, __int128, __int128_t, -
doc/refrat/keywords.tex
rfa59c40 r8e90fd6 11 11 %% Created On : Sun Aug 6 08:17:27 2017 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Fri Apr 6 15:16:11 201814 %% Update Count : 713 %% Last Modified On : Fri Jan 17 14:45:13 2025 14 %% Update Count : 8 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 \begin{tabular}{@{}llllll@{}} … … 28 28 ©exception© \\ 29 29 ©fallthrough© \\ 30 ©fallthru© \\31 30 \end{tabular} 32 31 & -
doc/refrat/refrat.tex
rfa59c40 r8e90fd6 11 11 %% Created On : Wed Apr 6 14:52:25 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Mon Oct 5 09:02:53 202014 %% Update Count : 11 013 %% Last Modified On : Fri Jan 17 14:45:04 2025 14 %% Update Count : 111 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 3348 3348 3349 3349 The ©choose© statement is the same as the ©switch© statement except control transfers to the end of the ©choose© statement at a ©case© or ©default© labeled statement. 3350 The ©fallthr u© statement is used to fall through to the next ©case© or ©default© labeled statement.3350 The ©fallthrough© statement is used to fall through to the next ©case© or ©default© labeled statement. 3351 3351 The following have identical meaning: 3352 3352 \begin{flushleft} … … 3366 3366 case 1: ... ; // exit 3367 3367 case 2: ... ; // exit 3368 case 3: ... ; fallthr u;3369 case 4: ... ; fallthr u;3368 case 3: ... ; fallthrough; 3369 case 4: ... ; fallthrough; 3370 3370 default: ... ; // exit 3371 3371 } -
doc/theses/aaron_moss_PhD/phd/cfa-macros.tex
rfa59c40 r8e90fd6 27 27 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, 28 28 auto, bool, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, 29 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, f allthru, finally,29 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, finally, 30 30 __float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__, 31 31 inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, -
doc/theses/andrew_beach_MMath/cfalab.sty
rfa59c40 r8e90fd6 76 76 choose, _Complex, __complex, __complex__, __const, __const__, 77 77 coroutine, disable, dtype, enable, exception, __extension__, 78 fallthrough, f allthru, finally, __float80, float80, __float128,78 fallthrough, finally, __float80, float80, __float128, 79 79 float128, forall, ftype, generator, _Generic, _Imaginary, __imag, 80 80 __imag__, inline, __inline, __inline__, __int128, int128, __label__, -
doc/theses/andrew_beach_MMath/features.tex
rfa59c40 r8e90fd6 822 822 control flow. 823 823 Because of this requirement, local control flow out of the finally block 824 is forbidden. The compiler precludes any @break@, @continue@, @fallthr u@ or824 is forbidden. The compiler precludes any @break@, @continue@, @fallthrough@ or 825 825 @return@ that causes control to leave the finally block. Other ways to leave 826 826 the finally block, such as a @longjmp@ or termination are much harder to check, -
doc/theses/fangren_yu_MMath/intro.tex
rfa59c40 r8e90fd6 518 518 519 519 \begin{enumerate} 520 \item 521 \item 522 \item 520 \item The \CFA compiler performance and capability have been greatly improved through recent development. The compilation time of various \CFA library units and test programs have been reduced from the order of minutes down to 10-20 seconds, which made it possible to develop and test more complicated \CFA programs that utilize sophisticated type system features. The details of compiler optimization work are covered in a previous technical report. 521 \item The thesis presents a systematic review of the new features that have been added to the \CFA language and its type system. Some of the more recent inclusions to \CFA such as tuples and generic structure types were not well tested when they were being developed, due to the limitation of compiler performance. Several issues coming from the interactions of various language features are identified and discussed in this thesis; some of them are now fully resolved, while others are given temporary fixes and need to be reworked in the future. 522 \item Finally, this thesis provides constructive ideas of fixing the outstanding issues in \CFA language design and implementation, and gives a path for future improvements to \CFA language and compiler. 523 523 \end{enumerate} 524 524 -
doc/uC++toCFA/uC++toCFA.tex
rfa59c40 r8e90fd6 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Fri Nov 15 09:55:34 202414 %% Update Count : 62 4913 %% Last Modified On : Fri Jan 17 07:39:09 2025 14 %% Update Count : 6284 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 197 197 198 198 199 \section{Stream I/O}200 201 \CFA output streams automatically separate values and insert a newline at the end of the print.202 \begin{cquote}203 \begin{tabular}{@{}l|l@{}}204 \begin{uC++}205 #include <@iostream@>206 using namespace std;207 int i; double d; char c;208 cin >> i >> d >> c;209 cout << i << ' ' << d << ' ' << c | endl;210 \end{uC++}211 &212 \begin{cfa}213 #include <@fstream.hfa@>214 215 int i; double d; char c;216 sin | i | d | c;217 sout | i | d | c218 \end{cfa}219 \end{tabular}220 \end{cquote}221 222 223 199 \section{Looping} 224 200 … … 240 216 for ( i; 0 @-@~ 10 ) { ... } 241 217 \end{cfa} 242 \\ 243 \hline 218 \end{tabular} 219 \end{cquote} 220 221 \begin{cquote} 222 \begin{tabular}{@{}l|l@{}} 244 223 \begin{uC++} 245 224 int i = 0 … … 253 232 @else@ { ... } // i == 10 254 233 \end{cfa} 255 \\ 256 \hline 234 \end{tabular} 235 \end{cquote} 236 237 \begin{cquote} 238 \begin{tabular}{@{}l|l@{}} 257 239 \begin{uC++} 258 240 @L1:@ for ( ;; ) { … … 271 253 } 272 254 } 255 \end{cfa} 256 \end{tabular} 257 \end{cquote} 258 259 260 \section{Stream I/O} 261 262 \CFA output streams automatically separate values and insert a newline at the end of the print. 263 \begin{cquote} 264 \begin{tabular}{@{}l|l@{}} 265 \begin{uC++} 266 #include <@iostream@> 267 using namespace std; 268 int i; double d; char c; 269 cin >> i >> d >> c; 270 cout << i << ' ' << d << ' ' << c << endl; 271 \end{uC++} 272 & 273 \begin{cfa} 274 #include <@fstream.hfa@> 275 276 int i; double d; char c; 277 sin | i | d | c; 278 sout | i | d | c 279 \end{cfa} 280 \end{tabular} 281 \end{cquote} 282 To disable/enable automatic newline at the end of printing, use @nlOff@/@nlOn@ and @nl@. 283 \begin{cquote} 284 \begin{tabular}{@{}l|l@{}} 285 \begin{uC++} 286 287 for ( int i = 0; i < 5; i += 1 ) cout << i << ' '; 288 cout << @endl@; 289 290 0 1 2 3 4 291 \end{uC++} 292 & 293 \begin{cfa} 294 sout | @nlOff@; // disable auto nl 295 for ( i; 5 ) sout | i; 296 sout | @nl@; 297 sout | @nlOn@; // reenable auto nl 298 0 1 2 3 4 299 \end{cfa} 300 \end{tabular} 301 \end{cquote} 302 Floating-point numbers without a fraction print with a decimal point, which can be disabled with @nodp@. 303 \begin{cquote} 304 \begin{tabular}{@{}l|l@{}} 305 \begin{uC++} 306 cout << 3.0 << ' ' << showpoint << setprecision(0) << 3.0 << endl; 307 3 3. 308 \end{uC++} 309 & 310 \begin{cfa} 311 sout | @nodp( 3.0 )@ | 3.0; 312 3 3. 273 313 \end{cfa} 274 314 \end{tabular} … … 291 331 if ( ... ) @_Throw@ E( /* initialization */ ); 292 332 ... 293 } @_CatchResume@( E & ) { ... // reference 294 } catch( E & ) { ... 295 } catch( ... ) { ... // catch any 296 } _Finally { ... 297 } 333 } @_CatchResume@( E & /* reference */ ) { ... } 334 catch( E & ) { ... } 335 catch( ... /* catch any */ ) { ... } 336 _Finally { ... } 298 337 \end{uC++} 299 338 & … … 308 347 if ( ... ) @throw@ @ExceptionInst@( E, /* intialization */ ); 309 348 ... 310 } @catchResume@( E * ) { ... // pointer 311 } catch( E * ) { ... 312 } catch( exception_t * ) { ... // catch any 313 } finally { ... 314 } 349 } @catchResume@( E @*@ /* pointer */ ) { ... } 350 catch( E * ) { ... } 351 catch( exception_t @*@ /* catch any */ ) { ... } 352 finally { ... } 315 353 \end{cfa} 316 354 \end{tabular} … … 330 368 ... suspend(); ... 331 369 } 332 } @_CatchResume@( E & ) { // reference 333 ... 334 } catch( E & ) { 335 ... 336 } 370 } @_CatchResume@( E & /* reference */ ) { ... } 371 catch( E & ) { ... } 337 372 } 338 373 \end{uC++} … … 346 381 ... suspendPoll ... 347 382 disable_ehm(); 348 } @catchResume@( E * ) { // pointer 349 ... 350 } catch( E & ) { 351 ... 352 } 383 } @catchResume@( E * ) { ... } 384 catch( E & ) { ... } 353 385 } 354 386 \end{cfa} … … 556 588 557 589 558 \section{Thread}559 560 \begin{cquote}561 \begin{tabular}{@{}l|ll@{}}562 \begin{uC++}563 564 @_Task@ T {565 // private task fields566 void main() {567 ... @_Resume E( ... ) _At partner@;568 ... @uThisTask();@ ...569 }570 public:571 };572 \end{uC++}573 &574 \begin{cfa}575 #include <$thread$.hfa>576 @thread@ T {577 // private task fields578 579 };580 void main( @T & t@ ) {581 ... @resumeAt( partner, ExceptionInst( E, ... )@ );582 ... @active_thread();@ ...583 }584 \end{cfa}585 \\586 \multicolumn{2}{@{}l@{}}{\lstinline{T t; // start thread in main routine}}587 \end{tabular}588 \end{cquote}589 590 591 590 \section{\lstinline{COBEGIN}/\lstinline{COFOR}} 592 591 … … 602 601 BEGIN osacquire( cout ) << "C" << endl; END 603 602 BEGIN osacquire( cout ) << "D" << endl; END 604 BEGIN osacquire( cout ) << "E" << endl; END605 603 @COEND@ 606 604 @COFOR@( i, 1, 10, … … 619 617 corun { mutex( sout ) sout | "C"; } 620 618 corun { mutex( sout ) sout | "D"; } 621 corun { mutex( sout ) sout | "E"; }622 619 } 623 620 @cofor@( i; 10 ) { … … 703 700 } 704 701 \end{cfa} 702 \end{tabular} 703 \end{cquote} 704 705 706 \section{Thread} 707 708 \begin{cquote} 709 \begin{tabular}{@{}l|ll@{}} 710 \begin{uC++} 711 712 @_Task@ T { 713 // private task fields 714 void main() { 715 ... @_Resume E( ... ) _At partner@; 716 ... @uThisTask();@ ... 717 } 718 public: 719 }; 720 \end{uC++} 721 & 722 \begin{cfa} 723 #include <$thread$.hfa> 724 @thread@ T { 725 // private task fields 726 727 }; 728 void main( @T & t@ ) { 729 ... @resumeAt( partner, ExceptionInst( E, ... )@ ); 730 ... @active_thread();@ ... 731 } 732 \end{cfa} 733 \\ 734 \multicolumn{2}{@{}l@{}}{\lstinline{T t; // start thread in main routine}} 705 735 \end{tabular} 706 736 \end{cquote} -
doc/user/user.tex
rfa59c40 r8e90fd6 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Sat Dec 7 16:53:37 202414 %% Update Count : 697 013 %% Last Modified On : Fri Jan 17 14:20:39 2025 14 %% Update Count : 6971 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 893 893 still works. 894 894 Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments. 895 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called \Indexc{choose}, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword \Indexc{fallthrough} /\-\Indexc{fallthru}, \eg:895 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called \Indexc{choose}, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword \Indexc{fallthrough}, \eg: 896 896 \begin{cfa} 897 897 ®choose® ( i ) { … … 901 901 case 5: 902 902 ... 903 ®fallthr u®; §\C{// explicit fall through}§903 ®fallthrough®; §\C{// explicit fall through}§ 904 904 case 7: 905 905 ... … … 911 911 Like the ©switch© statement, the ©choose© statement retains the fall-through semantics for a list of ©case© clauses. 912 912 An implicit ©break© is applied only at the end of the \emph{statements} following a ©case© clause. 913 An explicit ©fallthr u© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.913 An explicit ©fallthrough© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement. 914 914 As well, allowing an explicit ©break© from the ©choose© is a carry over from the ©switch© statement, and expected by C programmers. 915 915 \item … … 950 950 case 3: 951 951 if ( ... ) { 952 ... ®fallthr u;® // goto case 4952 ... ®fallthrough;® // goto case 4 953 953 } else { 954 954 ... … … 985 985 for ( ... ) { 986 986 // multi-level transfer 987 ... ®fallthr ucommon;®987 ... ®fallthrough common;® 988 988 } 989 989 ... … … 8053 8053 \begin{cquote} 8054 8054 \Indexc{basetypeof}, \Indexc{choose}, \Indexc{coroutine}, \Indexc{disable}, 8055 \Indexc{enable}, \Indexc{exception}, \Indexc{fallthrough}, \Indexc{fallthr u},8055 \Indexc{enable}, \Indexc{exception}, \Indexc{fallthrough}, \Indexc{fallthrough}, 8056 8056 \Indexc{finally}, \Indexc{fixup}, \Indexc{forall},\Indexc{generator}, 8057 8057 \Indexc{int128}, \Indexc{monitor}, \Indexc{mutex}, \Indexc{one_t}, … … 8079 8079 \Indexc{exception} \\ 8080 8080 \Indexc{fallthrough} \\ 8081 \Indexc{fallthr u}\\8081 \Indexc{fallthrough} \\ 8082 8082 \end{tabular} 8083 8083 & -
libcfa/src/concurrency/monitor.cfa
rfa59c40 r8e90fd6 9 9 // Author : Thierry Delisle 10 10 // Created On : Thd Feb 23 12:27:26 2017 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Nov 27 12:13:14 202413 // Update Count : 7 211 // Last Modified By : Kyoung Seo 12 // Last Modified On : Thd Jan 16 12:59:00 2025 13 // Update Count : 73 14 14 // 15 15 … … 922 922 static inline [thread$ *, int] search_entry_queue( const __waitfor_mask_t & mask, monitor$ * monitors [], __lock_size_t count ) { 923 923 __queue_t(thread$) & entry_queue = monitors[0]->entry_queue; 924 925 #if 0926 #if defined( __CFA_WITH_VERIFY__ )927 thread$ * last = 0p;928 #endif929 // For each thread in the entry-queue930 for ( thread$ ** thrd_it = &entry_queue.head; (*thrd_it) != 1p; thrd_it = &get_next(**thrd_it) ) {931 thread$ * curr = *thrd_it;932 933 /* paranoid */ verifyf( !last || last->user_link.next == curr, "search not making progress, from %p (%p) to %p",934 last, last->user_link.next, curr );935 /* paranoid */ verifyf( curr != last, "search not making progress, from %p to %p", last, curr );936 937 // For each acceptable check if it matches938 int i = 0;939 __acceptable_t * end = end(mask);940 __acceptable_t * begin = begin(mask);941 for ( __acceptable_t * it = begin; it != end; it++, i++ ) {942 // Check for match943 if ( *it == curr->monitors ) {944 // If match, return it after removeing it from the entry queue945 return [remove( entry_queue, thrd_it ), i];946 }947 }948 949 #if defined( __CFA_WITH_VERIFY__ )950 last = curr;951 #endif952 }953 #else954 924 // For each acceptable (respect lexical priority in waitfor statement) 955 __acceptable_t * it = end(mask); it--; // end is passed the last node, so backup 956 for ( int i = mask.size - 1; i >= 0; i -= 1, it-- ) { 925 int i = 0; 926 __acceptable_t * end = end(mask); 927 __acceptable_t * begin = begin(mask); 928 for ( __acceptable_t * it = begin; it != end; it++, i++ ) { 957 929 #if defined( __CFA_WITH_VERIFY__ ) 958 930 thread$ * last = 0p; … … 977 949 } // for 978 950 } // for 979 #endif980 951 return [0, -1]; 981 952 } -
src/AST/Expr.cpp
rfa59c40 r8e90fd6 122 122 123 123 bool VariableExpr::get_lvalue() const { 124 // It isn't always an lvalue, but it is never an rvalue.124 // Special case for enumeration labels (more literals than variables): 125 125 if(dynamic_cast<const ast::EnumInstType *>(var->get_type())) return !var->isMember; 126 // The remaining uses are either actual variables (lvalues) or function 127 // names which are a special value catagory that can be treated as 128 // lvalues in the places we are worried about. 126 129 return true; 127 130 } -
src/AST/Stmt.hpp
rfa59c40 r8e90fd6 9 9 // Author : Aaron B. Moss 10 10 // Created On : Wed May 8 13:00:00 2019 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Apr 5 10:34:00 202313 // Update Count : 3 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jan 17 14:18:56 2025 13 // Update Count : 38 14 14 // 15 15 … … 280 280 }; 281 281 282 // Branch control flow statement: goto ... or break or continue or fallthr u282 // Branch control flow statement: goto ... or break or continue or fallthrough 283 283 class BranchStmt final : public Stmt { 284 284 public: -
src/CodeGen/CodeGenerator.cpp
rfa59c40 r8e90fd6 9 9 // Author : Andrew Beach 10 10 // Created On : Tue Oct 17 15:54:00 2023 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Oct 25 18:28:00 202313 // Update Count : 011 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jan 17 14:19:22 2025 13 // Update Count : 1 14 14 // 15 15 … … 1092 1092 case ast::BranchStmt::FallThrough: 1093 1093 case ast::BranchStmt::FallThroughDefault: 1094 assertf( !options.genC, "fallthr ushould not reach code generation." );1095 output << "fallthr u";1094 assertf( !options.genC, "fallthrough should not reach code generation." ); 1095 output << "fallthrough"; 1096 1096 break; 1097 1097 default: 1098 1098 assertf( false, "Bad BranchStmt value." ); 1099 1099 } 1100 // Print branch target for labelled break/continue/fallthr uin debug mode.1100 // Print branch target for labelled break/continue/fallthrough in debug mode. 1101 1101 if ( !options.genC && stmt->kind != ast::BranchStmt::Goto ) { 1102 1102 if ( !stmt->target.empty() ) { -
src/Parser/StatementNode.cpp
rfa59c40 r8e90fd6 10 10 // Author : Rodolfo G. Esteves 11 11 // Created On : Sat May 16 14:59:41 2015 12 // Last Modified By : Peter A. Buhr13 // Last Modified On : Mon Sep 23 22:50:35 202414 // Update Count : 43 212 // Last Modified By : Kyoung Seo 13 // Last Modified On : Thd Jan 16 13:05:00 2025 14 // Update Count : 433 15 15 // 16 16 … … 351 351 delete targetExpr; 352 352 353 existing->clauses.insert( existing->clauses. begin(), clause );353 existing->clauses.insert( existing->clauses.end(), clause ); 354 354 355 355 return existing; -
src/Parser/lex.ll
rfa59c40 r8e90fd6 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Sun Dec 15 17:23:46 202413 * Update Count : 87 712 * Last Modified On : Fri Jan 17 14:36:16 2025 13 * Update Count : 878 14 14 */ 15 15 … … 273 273 extern { KEYWORD_RETURN(EXTERN); } 274 274 fallthrough { KEYWORD_RETURN(FALLTHROUGH); } // CFA 275 fallthru { KEYWORD_RETURN(FALLTHRU); } // CFA276 275 finally { QKEYWORD_RETURN(FINALLY); } // CFA 277 276 fixup { QKEYWORD_RETURN(FIXUP); } // CFA -
src/Parser/parser.yy
rfa59c40 r8e90fd6 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Dec 15 21:30:38 202413 // Update Count : 693 312 // Last Modified On : Fri Jan 17 14:35:08 2025 13 // Update Count : 6935 14 14 // 15 15 … … 377 377 %token ATTRIBUTE EXTENSION // GCC 378 378 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 379 %token CHOOSE FALLTHR U FALLTHROUGH WITH WHEN WAITFOR WAITUNTIL// CFA379 %token CHOOSE FALLTHROUGH WITH WHEN WAITFOR WAITUNTIL // CFA 380 380 %token CORUN COFOR 381 381 %token DISABLE ENABLE TRY THROW THROWRESUME AT // CFA … … 1680 1680 // whereas normal operator precedence yields goto (*i)+3; 1681 1681 { $$ = new StatementNode( build_computedgoto( $3 ) ); } 1682 // A semantic check is required to ensure fallthr uappears only in the body of a choose statement.1683 | fall_through_name ';'// CFA1682 // A semantic check is required to ensure fallthrough appears only in the body of a choose statement. 1683 | FALLTHROUGH ';' // CFA 1684 1684 { $$ = new StatementNode( build_branch( yylloc, ast::BranchStmt::FallThrough ) ); } 1685 | fall_through_name identifier_or_type_name ';'// CFA1685 | FALLTHROUGH identifier_or_type_name ';' // CFA 1686 1686 { $$ = new StatementNode( build_branch( yylloc, $2, ast::BranchStmt::FallThrough ) ); } 1687 | fall_through_name DEFAULT ';'// CFA1687 | FALLTHROUGH DEFAULT ';' // CFA 1688 1688 { $$ = new StatementNode( build_branch( yylloc, ast::BranchStmt::FallThroughDefault ) ); } 1689 1689 | CONTINUE ';' … … 1723 1723 | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume 1724 1724 { $$ = new StatementNode( build_resume_at( $2, $4 ) ); } 1725 ;1726 1727 fall_through_name: // CFA1728 FALLTHRU1729 | FALLTHROUGH1730 1725 ; 1731 1726 -
tests/concurrency/actors/dynamic.cfa
rfa59c40 r8e90fd6 37 37 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 38 38 Times = ato( argv[1] ); 39 if ( Times < 1 ) fallthr udefault;39 if ( Times < 1 ) fallthrough default; 40 40 } // if 41 41 case 1: // use defaults -
tests/concurrency/actors/executor.cfa
rfa59c40 r8e90fd6 41 41 if ( strcmp( argv[6], "d" ) != 0 ) { // default ? 42 42 BufSize = ato( argv[6] ); 43 if ( BufSize < 0 ) fallthr udefault;43 if ( BufSize < 0 ) fallthrough default; 44 44 } // if 45 45 case 6: 46 46 if ( strcmp( argv[5], "d" ) != 0 ) { // default ? 47 47 Batch = ato( argv[5] ); 48 if ( Batch < 1 ) fallthr udefault;48 if ( Batch < 1 ) fallthrough default; 49 49 } // if 50 50 case 5: 51 51 if ( strcmp( argv[4], "d" ) != 0 ) { // default ? 52 52 Processors = ato( argv[4] ); 53 if ( Processors < 1 ) fallthr udefault;53 if ( Processors < 1 ) fallthrough default; 54 54 } // if 55 55 case 4: 56 56 if ( strcmp( argv[3], "d" ) != 0 ) { // default ? 57 57 Rounds = ato( argv[3] ); 58 if ( Rounds < 1 ) fallthr udefault;58 if ( Rounds < 1 ) fallthrough default; 59 59 } // if 60 60 case 3: 61 61 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 62 62 Set = ato( argv[2] ); 63 if ( Set < 1 ) fallthr udefault;63 if ( Set < 1 ) fallthrough default; 64 64 } // if 65 65 case 2: 66 66 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 67 67 Actors = ato( argv[1] ); 68 if ( Actors < 1 || Actors <= Set || Actors % Set != 0 ) fallthr udefault;68 if ( Actors < 1 || Actors <= Set || Actors % Set != 0 ) fallthrough default; 69 69 } // if 70 70 case 1: // use defaults -
tests/concurrency/actors/matrixMultiply.cfa
rfa59c40 r8e90fd6 39 39 if ( strcmp( argv[4], "d" ) != 0 ) { // default ? 40 40 Processors = ato( argv[4] ); 41 if ( Processors < 1 ) fallthr udefault;41 if ( Processors < 1 ) fallthrough default; 42 42 } // if 43 43 case 4: 44 44 if ( strcmp( argv[3], "d" ) != 0 ) { // default ? 45 45 xr = ato( argv[3] ); 46 if ( xr < 1 ) fallthr udefault;46 if ( xr < 1 ) fallthrough default; 47 47 } // if 48 48 case 3: 49 49 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 50 50 xc = ato( argv[2] ); 51 if ( xc < 1 ) fallthr udefault;51 if ( xc < 1 ) fallthrough default; 52 52 } // if 53 53 case 2: 54 54 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 55 55 yc = ato( argv[1] ); 56 if ( yc < 1 ) fallthr udefault;56 if ( yc < 1 ) fallthrough default; 57 57 } // if 58 58 case 1: // use defaults -
tests/concurrency/actors/static.cfa
rfa59c40 r8e90fd6 34 34 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 35 35 Times = ato( argv[1] ); 36 if ( Times < 1 ) fallthr udefault;36 if ( Times < 1 ) fallthrough default; 37 37 } // if 38 38 case 1: // use defaults -
tests/concurrency/channels/barrier.cfa
rfa59c40 r8e90fd6 66 66 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 67 67 BarrierSize = ato( argv[2] ); 68 if ( Processors < 1 ) fallthr udefault;68 if ( Processors < 1 ) fallthrough default; 69 69 } // if 70 70 case 2: 71 71 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 72 72 Processors = ato( argv[1] ); 73 if ( Processors < 1 ) fallthr udefault;73 if ( Processors < 1 ) fallthrough default; 74 74 } // if 75 75 case 1: // use defaults -
tests/concurrency/channels/churn.cfa
rfa59c40 r8e90fd6 91 91 if ( strcmp( argv[3], "d" ) != 0 ) { // default ? 92 92 ChannelSize = ato( argv[3] ); 93 if ( ChannelSize < 1 ) fallthr udefault;93 if ( ChannelSize < 1 ) fallthrough default; 94 94 } // if 95 95 case 3: 96 96 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 97 97 Channels = ato( argv[2] ); 98 if ( Channels < 1 ) fallthr udefault;98 if ( Channels < 1 ) fallthrough default; 99 99 } // if 100 100 case 2: 101 101 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 102 102 Processors = ato( argv[1] ); 103 if ( Processors < 1 ) fallthr udefault;103 if ( Processors < 1 ) fallthrough default; 104 104 } // if 105 105 case 1: // use defaults -
tests/concurrency/channels/contend.cfa
rfa59c40 r8e90fd6 128 128 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 129 129 ChannelSize = ato( argv[2] ); 130 if ( ChannelSize < 1 ) fallthr udefault;130 if ( ChannelSize < 1 ) fallthrough default; 131 131 } // if 132 132 case 2: 133 133 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 134 134 Processors = ato( argv[1] ); 135 if ( Processors < 1 ) fallthr udefault;135 if ( Processors < 1 ) fallthrough default; 136 136 } // if 137 137 case 1: // use defaults -
tests/concurrency/channels/daisy_chain.cfa
rfa59c40 r8e90fd6 38 38 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 39 39 Tasks = ato( argv[2] ); 40 if ( Tasks < 1 ) fallthr udefault;40 if ( Tasks < 1 ) fallthrough default; 41 41 } // if 42 42 case 2: 43 43 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 44 44 Processors = ato( argv[1] ); 45 if ( Processors < 1 ) fallthr udefault;45 if ( Processors < 1 ) fallthrough default; 46 46 } // if 47 47 case 1: // use defaults -
tests/concurrency/channels/hot_potato.cfa
rfa59c40 r8e90fd6 43 43 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 44 44 Tasks = ato( argv[2] ); 45 if ( Tasks < 1 ) fallthr udefault;45 if ( Tasks < 1 ) fallthrough default; 46 46 } // if 47 47 case 2: 48 48 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 49 49 Processors = ato( argv[1] ); 50 if ( Processors < 1 ) fallthr udefault;50 if ( Processors < 1 ) fallthrough default; 51 51 } // if 52 52 case 1: // use defaults -
tests/concurrency/channels/pub_sub.cfa
rfa59c40 r8e90fd6 88 88 if ( strcmp( argv[2], "d" ) != 0 ) { // default ? 89 89 Tasks = ato( argv[2] ); 90 if ( Tasks < 1 ) fallthr udefault;90 if ( Tasks < 1 ) fallthrough default; 91 91 } // if 92 92 case 2: 93 93 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 94 94 Processors = ato( argv[1] ); 95 if ( Processors < 1 ) fallthr udefault;95 if ( Processors < 1 ) fallthrough default; 96 96 } // if 97 97 case 1: // use defaults -
tests/ctrl-flow/fallthrough.cfa
rfa59c40 r8e90fd6 10 10 // Created On : Wed Mar 14 10:06:25 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Dec 24 11:24:35 201813 // Update Count : 2 212 // Last Modified On : Fri Jan 17 14:09:49 2025 13 // Update Count : 23 14 14 // 15 15 … … 20 20 case 1: 21 21 sout | "case 1"; 22 fallthr u;22 fallthrough; 23 23 case 2: 24 24 sout | "case 2"; 25 fallthr u;26 sout | "did not fallthr u";27 if ( 7 ) fallthr ucommon2;28 fallthr ucommon1;25 fallthrough; 26 sout | "did not fallthrough"; 27 if ( 7 ) fallthrough common2; 28 fallthrough common1; 29 29 case 3: 30 30 sout | "case 3"; 31 fallthr udefault;32 fallthr ucommon1;31 fallthrough default; 32 fallthrough common1; 33 33 common1: 34 34 sout | "common1"; … … 36 36 case 4: 37 37 sout | "case 4"; 38 fallthr ucommon2;38 fallthrough common2; 39 39 case 5: 40 40 sout | "case 5"; 41 fallthr ucommon2;42 fallthr udefault;41 fallthrough common2; 42 fallthrough default; 43 43 case 6: 44 44 sout | "case 6"; 45 fallthr ucommon2;45 fallthrough common2; 46 46 common2: 47 47 sout | "common2"; … … 49 49 default: 50 50 sout | "default"; 51 fallthr u;51 fallthrough; 52 52 } // choose 53 53 … … 62 62 for ( int i = 0; i < 4; i += 1 ) { 63 63 sout | i; 64 if ( i == 2 ) fallthr ucommon;64 if ( i == 2 ) fallthrough common; 65 65 } // for 66 66 } // switch … … 73 73 } else { 74 74 sout | "check"; 75 fallthr ucommon;75 fallthrough common; 76 76 } // if 77 77 } // if 78 78 common: 79 79 sout | "common"; 80 fallthr u;80 fallthrough; 81 81 break; 82 82 default: 83 83 sout | "default"; 84 fallthr u;84 fallthrough; 85 85 } // switch 86 86 87 87 #if ERR1 88 88 // ERROR: fallthrough must be enclosed in switch or choose 89 fallthr u;89 fallthrough; 90 90 // ERROR: fallthrough must be enclosed in switch or choose 91 fallthr ucommon4;91 fallthrough common4; 92 92 // ERROR: fallthrough must be enclosed in switch or choose 93 fallthr udefault;93 fallthrough default; 94 94 choose ( 3 ) { 95 95 case 2: … … 98 98 case 1: 99 99 // ERROR: default is later, but in a different switch 100 fallthr udefault;100 fallthrough default; 101 101 // ERROR: common3 is later, but not at the same level as a case clause 102 fallthr ucommon3;102 fallthrough common3; 103 103 } 104 104 common3: ; … … 108 108 common4: 109 109 // ERROR: attempt to jump up with fallthrough 110 if ( 7 ) fallthr ucommon4;110 if ( 7 ) fallthrough common4; 111 111 // ERROR: attempt to jump up with fallthrough 112 fallthr udefault;112 fallthrough default; 113 113 } // choose 114 114 #endif -
tests/ctrl-flow/labelledExit.cfa
rfa59c40 r8e90fd6 10 10 // Created On : Wed Aug 10 07:29:39 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jun 5 10:07:34 202113 // Update Count : 1 312 // Last Modified On : Fri Jan 17 14:18:15 2025 13 // Update Count : 14 14 14 // 15 15 … … 131 131 break Choose; 132 132 } 133 fallthr u;133 fallthrough; 134 134 case 2: 135 135 i += 1; -
tests/exceptions/try-ctrl-flow.cfa
rfa59c40 r8e90fd6 81 81 } 82 82 83 void choose_fallthr u_in_finally() {83 void choose_fallthrough_in_finally() { 84 84 choose (1) { 85 85 case 1: 86 86 try {} finally { 87 fallthr u;87 fallthrough; 88 88 } 89 89 default: … … 105 105 } 106 106 107 void labelled_choose_fallthr u_in_finally() {107 void labelled_choose_fallthrough_in_finally() { 108 108 mainBlock: choose (1) { 109 109 case 1: 110 110 try {} finally { 111 fallthr umainBlock;111 fallthrough mainBlock; 112 112 } 113 113 case 2: … … 118 118 } 119 119 120 void choose_fallthr u_default_in_finally() {120 void choose_fallthrough_default_in_finally() { 121 121 choose (1) { 122 122 case 1: 123 123 try {} finally { 124 fallthr udefault;124 fallthrough default; 125 125 } 126 126 default: -
tests/quotedKeyword.cfa
rfa59c40 r8e90fd6 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 20:31:05 202313 // Update Count : 2 612 // Last Modified On : Fri Jan 17 14:10:32 2025 13 // Update Count : 27 14 14 // 15 15 … … 29 29 ``__attribute__, ``auto, ``_Bool, ``break, ``case, ``catch, ``catchResume, ``char, ``choose, ``_Complex, ``__complex, 30 30 ``__complex__, ``const, ``__const, ``__const__, ``continue, ``default, ``disable, ``do, ``double, ``dtype, ``else, 31 ``enable, ``enum, ``__extension__, ``extern, ``fallthr u, ``finally, ``float, ``__float128, ``for, ``forall, ``fortran,31 ``enable, ``enum, ``__extension__, ``extern, ``fallthrough, ``finally, ``float, ``__float128, ``for, ``forall, ``fortran, 32 32 ``ftype, ``_Generic, ``goto, ``if, ``_Imaginary, ``__imag, ``__imag__, ``inline, ``__inline, ``__inline__, ``int, 33 33 ``__int128, ``__label__, ``long, ``lvalue, ``_Noreturn, ``__builtin_offsetof, ``otype, ``register, ``restrict, -
tests/switch.cfa
rfa59c40 r8e90fd6 10 10 // Created On : Tue Jul 12 06:50:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jun 5 10:08:20 202113 // Update Count : 4 412 // Last Modified On : Fri Jan 17 14:10:12 2025 13 // Update Count : 45 14 14 // 15 15 … … 96 96 case 8~10: 97 97 f( 3 ); 98 fallthr u;98 fallthrough; 99 99 case 'd': 100 100 j = 5;
Note:
See TracChangeset
for help on using the changeset viewer.