Changeset dd53f75
- Timestamp:
- Oct 1, 2020, 2:41:36 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 2c3562d, 615767b
- Parents:
- b4b63e8 (diff), 17b6fc9 (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:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/fangren_yu_COOP_S20/Report.tex
rb4b63e8 rdd53f75 13 13 \usepackage{latexsym} % \Box glyph 14 14 \usepackage{mathptmx} % better math font with "times" 15 \usepackage{appendix} 15 16 \usepackage[usenames]{color} 16 17 \input{common} % common CFA document macros 17 18 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref} 18 19 \usepackage{breakurl} 20 \urlstyle{sf} 21 22 % reduce spacing 23 \setlist[itemize]{topsep=5pt,parsep=0pt}% global 24 \setlist[enumerate]{topsep=5pt,parsep=0pt}% global 19 25 20 26 \usepackage[pagewise]{lineno} … … 112 118 \begin{itemize} 113 119 \item 114 type declaration: @struct@, @union@, @typedef@ or type parameter (see Appendix A.1)120 type declaration: @struct@, @union@, @typedef@ or type parameter (see \VRef[Appendix]{s:KindsTypeParameters}) 115 121 \item 116 122 variable declaration … … 374 380 375 381 \subsubsection{Source: \lstinline{AST/SymbolTable.hpp}} 382 383 376 384 \subsubsection{Source: \lstinline{SymTab/Indexer.h}} 377 385 … … 526 534 Each pair of compatible branch expression types produce a possible interpretation, and the cost is defined as the sum of the expression costs plus the sum of conversion costs to the common type. 527 535 536 528 537 \subsection{Conversion and Application Cost} 529 There were some unclear parts in the previous documentation of cost system, as described in the Moss thesis \cite{Moss19}, section 4.1.2. Some clarification are presented in this section. 538 539 There were some unclear parts in the previous documentation in the cost system, as described in the Moss thesis~\cite{Moss19}, section 4.1.2. 540 Some clarification are presented in this section. 530 541 531 542 \begin{enumerate} 532 543 \item 533 Conversion to a type denoted by parameter may incur additional cost if the match is not exact. For example, if a function is declared to accept @(T, T)@ and receives @(int, long)@, @T@ is deducted @long@ and an additional widening conversion cost is added for @int@ to @T@. 534 535 \item 536 The specialization level of a function is the sum of the least depth of an appearance of type parameter (counting pointers, references and parameterized types), plus the number of assertions. A higher specialization level is favored if conversion cost of arguments are equal. 537 538 \item 539 Coercion of pointer types is only allowed in explicit cast expressions; the only allowed implicit pointer casts are adding qualifiers to the base type and cast to @void*@, and those counts as safe conversions. Note that implicit cast from @void*@ to other pointer types is no longer valid, as opposed to standard C. 540 544 Conversion to a type denoted by parameter may incur additional cost if the match is not exact. 545 For example, if a function is declared to accept @(T, T)@ and receives @(int, long)@, @T@ is deducted @long@ and an additional widening conversion cost is added for @int@ to @T@. 546 547 \item 548 The specialization level of a function is the sum of the least depth of an appearance of a type parameter (counting pointers, references and parameterized types), plus the number of assertions. 549 A higher specialization level is favoured if argument conversion costs are equal. 550 551 \item 552 Coercion of pointer types is only allowed in explicit cast expressions; 553 the only allowed implicit pointer casts are adding qualifiers to the base type and cast to @void*@, and these counts as safe conversions. 554 Note that implicit cast from @void *@ to other pointer types is no longer valid, as opposed to standard C. 541 555 \end{enumerate} 542 556 … … 556 570 At the call site, implicit parameters are automatically inserted by the compiler. 557 571 558 Implementation of implicit parameters is discussed in Appendix A.3.572 Implementation of implicit parameters is discussed in \VRef[Appendix]{s:ImplementationParametricFunctions}. 559 573 560 574 \section{Tests} … … 597 611 It is suggested to run performance tests with optimization (@g++@ flag @-O3@). 598 612 613 614 \begin{appendices}[toc,titletoc] 599 615 \section{Appendix} 600 616 617 601 618 \subsection{Kinds of Type Parameters} 602 The type parameters in a @forall@ clause has three different kinds: 603 \begin{enumerate} 604 \item 605 @dtype@: any data type (built-in or user defined). There is also a difference between opaque types (incomplete types, those with only a forward declaration) and concrete types. Only concrete types can be directly used as a variable type. \CFA provides the @otype@ shorthand to require a type parameter as concrete, which also implicitly asserts the existence of its constructor and destructor\footnote{\CFA implements the same automatic resource management (RAII) semantics as \CC.}. 606 \item 607 @ftype@: any function type. Since @ftype@ does not provide any information about parameter types of a function, it is rarely used. The main purpose of introducing @ftype@ is to disallow a function to match a pointer overload, since variables and functions can have the same names. 608 \item 609 @ttype@: tuple (variadic) type. @ttype@ parameter may only appear as type of the last parameter in a function, and it provides a type-safe way to implement variadic functions. Note however, that it has certain restrictions, as described in the implementation section below. 610 619 \label{s:KindsTypeParameters} 620 621 A type parameter in a @forall@ clause has three possible kinds: 622 \begin{enumerate}[listparindent=0pt] 623 \item 624 @dtype@: any data type (built-in or user defined). 625 626 There is also a difference between opaque types (incomplete types, \ie those with only a forward declaration) and concrete types. 627 Only concrete types can be directly used as a variable type. 628 629 \CFA provides the @otype@ shorthand to require a type parameter be concrete, which also implicitly asserts the existence of its default and copy constructors, assignment, and destructor\footnote{\CFA implements the same automatic resource management (RAII) semantics as \CC.}. 630 \item 631 @ftype@: any function type. 632 633 @ftype@ provides two purposes: 634 \begin{itemize} 635 \item 636 Differentiate function pointer from data pointer because (in theory) some systems have different sizes for these pointers. 637 \item 638 Disallow a function pointer to match an overloaded data pointer, since variables and functions can have the same names. 639 \end{itemize} 640 641 \item 642 @ttype@: tuple (variadic) type. 643 644 @ttype@ parameter may only appear as type of the last parameter in a function, and it provides a type-safe way to implement variadic functions. 645 Note however, that it has certain restrictions, as described in the implementation section below. 611 646 \end{enumerate} 612 647 648 613 649 \subsection{GNU C Nested Functions} 614 650 … … 616 652 617 653 In ISO C, function definitions are not allowed to be nested. GCC allows nested functions with full lexical scoping. The following example is taken from GCC documentation\footnote{\url{https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html}}: 618 619 \begin{C++} 620 bar (int *array, int offset, int size) 621 { 622 int access (int *array, int index) 623 { return array[index + offset]; } 624 int i; 625 /* ... */ 626 for (i = 0; i < size; i++) 627 /* ... */ access (array, i) /* ... */ 654 \begin{C++} 655 void bar( int * array, int offset, int size ) { 656 int access( int * array, int index ) { return array[index + offset]; } 657 int i; 658 /* ... */ 659 for ( i = 0; i < size; i++ ) 660 /* ... */ access (array, i) /* ... */ 628 661 } 629 662 \end{C++} 630 631 GCC nested functions behave identically to \CC lambda functions with default by-reference capture (stack-allocated, lifetime ends upon exiting the block declared in), while also possible to be passed as arguments with standard function pointer types. 663 GCC nested functions behave identically to \CC lambda functions with default by-reference capture (stack-allocated, lifetime ends upon exiting the declared block), while also possible to be passed as arguments with standard function pointer types. 664 632 665 633 666 \subsection{Implementation of Parametric Functions} 634 \CFA implements parametric functions using the implicit parameter approach: required assertions are passed to the callee by function pointers; size of a parametric type must also be known if referenced directly (i.e. not as a pointer). 667 \label{s:ImplementationParametricFunctions} 668 669 \CFA implements parametric functions using the implicit parameter approach: required assertions are passed to the callee by function pointers; 670 size of a parametric type must also be known if referenced directly (\ie not as a pointer). 635 671 636 672 The implementation is similar to the one from Scala\footnote{\url{https://www.scala-lang.org/files/archive/spec/2.13/07-implicits.html}}, with some notable differences in resolution: … … 641 677 The parameter (assertion) name must match the actual declarations. 642 678 \item 643 Currently, assertions are all functions. Note that since \CFA has variable overloading, implicit value parameters might also be supported in the future. 679 Currently, assertions are all functions. 680 Note that since \CFA has variable overloading, implicit value parameters might also be supported in the future. 644 681 \end{enumerate} 645 682 646 683 For example, the \CFA function declaration 647 648 684 \begin{cfa} 649 forall( otype T | {int foo(T, int);})685 forall( otype T | { int foo( T, int ); } ) 650 686 int bar(T); 651 687 \end{cfa} 652 653 688 after implicit parameter expansion, has the actual signature\footnote{\textbf{otype} also requires the type to have constructor and destructor, which are the first two function pointers preceding the one for \textbf{foo}.} 654 655 \begin{C++} 656 int bar(T, size_t, void (*)(T&), void (*)(T&), int (*)(T, int)); 657 \end{C++} 658 659 The implicit parameter approach has an apparent issue: when the satisfying declaration is also parametric, it may require its own implicit parameters too. That also causes the supplied implicit parameter to have a different \textbf{actual} type than the \textbf{nominal} type, so it cannot be passed directly. Therefore, a wrapper with matching actual type must be created, and here it is where GCC nested function isused internally by the compiler.689 \begin{C++} 690 int bar( T, size_t, void (*)(T&), void (*)(T&), int (*)(T, int) ); 691 \end{C++} 692 The implicit parameter approach has an apparent issue: when the satisfying declaration is also parametric, it may require its own implicit parameters too. 693 That also causes the supplied implicit parameter to have a different \textbf{actual} type than the \textbf{nominal} type, so it cannot be passed directly. 694 Therefore, a wrapper with matching actual type must be created, and it is here where GCC nested functions are used internally by the compiler. 660 695 661 696 Consider the following program: … … 663 698 int assertion(int); 664 699 665 forall (otype T | {int assertion(T);})700 forall( otype T | { int assertion(T); } ) 666 701 void foo(T); 667 702 668 forall (otype T | {void foo(T);})703 forall(otype T | { void foo(T); } ) 669 704 void bar(T t) { 670 705 foo(t); 671 706 } 672 707 \end{cfa} 673 674 \CFA compiler translates the program to non-parametric form\footnote{In the final code output, T needs to be replaced by an opaque type, and arguments must be accessed by a frame pointer offset table, due to the unknown sizes. The presented code here is simplified for better understanding.} 675 708 The \CFA compiler translates the program to non-parametric form\footnote{In the final code output, \lstinline@T@ needs to be replaced by an opaque type, and arguments must be accessed by a frame pointer offset table, due to the unknown sizes. The presented code here is simplified for better understanding.} 676 709 \begin{C++} 677 710 // ctor, dtor and size arguments are omitted … … 682 715 } 683 716 \end{C++} 684 685 717 However, when @bar(1)@ is called, @foo@ cannot be directly provided as an argument: 686 687 718 \begin{C++} 688 719 bar(1, foo); // WRONG: foo has different actual type 689 720 \end{C++} 690 691 721 and an additional step is required: 692 693 722 \begin{C++} 694 723 { 695 724 void _foo_wrapper(int t) { 696 foo( t, assertion);725 foo( t, assertion ); 697 726 } 698 bar( 1, _foo_wrapper);727 bar( 1, _foo_wrapper ); 699 728 } 700 729 \end{C++} 701 702 Nested assertions and implicit parameter creation may continue indefinitely. This is a limitation of implicit parameter implementation. In particular, polymorphic variadic recursion must be structural (i.e. number of arguments decreases in any possible recursive calls), otherwise code generation gets into an infinite loop. \CFA compiler sets a limit on assertion depth and reports an error if assertion resolution does not terminate within the limit. 730 Nested assertions and implicit parameter creation may continue indefinitely. 731 This issue is a limitation of implicit parameter implementation. 732 In particular, polymorphic variadic recursion must be structural (\ie the number of arguments decreases in any possible recursive calls), otherwise code generation gets into an infinite loop. 733 The \CFA compiler sets a limit on assertion depth and reports an error if assertion resolution does not terminate within the limit (as for \lstinline[language=C++]@templates@ in \CC). 734 \end{appendices} 703 735 704 736 \bibliographystyle{plain} -
libcfa/src/limits.cfa
rb4b63e8 rdd53f75 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 1 16:22:51 201813 // Update Count : 7 412 // Last Modified On : Wed Sep 30 22:56:32 2020 13 // Update Count : 76 14 14 // 15 15 … … 23 23 // Integral Constants 24 24 25 constsigned char MIN = SCHAR_MIN;26 constunsigned char MIN = 0;27 constshort int MIN = SHRT_MIN;28 constunsigned short int MIN = 0;29 constint MIN = INT_MIN;30 constunsigned int MIN = 0;31 constlong int MIN = LONG_MIN;32 constunsigned long int MIN = 0;33 constlong long int MIN = LLONG_MIN;34 constunsigned long long int MIN = 0;25 signed char MIN = SCHAR_MIN; 26 unsigned char MIN = 0; 27 short int MIN = SHRT_MIN; 28 unsigned short int MIN = 0; 29 int MIN = INT_MIN; 30 unsigned int MIN = 0; 31 long int MIN = LONG_MIN; 32 unsigned long int MIN = 0; 33 long long int MIN = LLONG_MIN; 34 unsigned long long int MIN = 0; 35 35 36 constsigned char MAX = SCHAR_MAX;37 constunsigned char MAX = UCHAR_MAX;38 constshort int MAX = SHRT_MAX;39 constunsigned short int MAX = USHRT_MAX;40 constint MAX = INT_MAX;41 constunsigned int MAX = UINT_MAX;42 constlong int MAX = LONG_MAX;43 constunsigned long int MAX = ULONG_MAX;44 constlong long int MAX = LLONG_MAX;45 constunsigned long long int MAX = ULLONG_MAX;36 signed char MAX = SCHAR_MAX; 37 unsigned char MAX = UCHAR_MAX; 38 short int MAX = SHRT_MAX; 39 unsigned short int MAX = USHRT_MAX; 40 int MAX = INT_MAX; 41 unsigned int MAX = UINT_MAX; 42 long int MAX = LONG_MAX; 43 unsigned long int MAX = ULONG_MAX; 44 long long int MAX = LLONG_MAX; 45 unsigned long long int MAX = ULLONG_MAX; 46 46 47 47 // Floating-Point Constants 48 48 49 constfloat MIN = FLT_MIN;50 constdouble MIN = DBL_MIN;51 constlong double MIN = LDBL_MIN;52 constfloat _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;53 constdouble _Complex MIN = DBL_MIN + DBL_MIN * I;54 constlong double _Complex MIN = LDBL_MIN + LDBL_MIN * I;49 float MIN = FLT_MIN; 50 double MIN = DBL_MIN; 51 long double MIN = LDBL_MIN; 52 float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I; 53 double _Complex MIN = DBL_MIN + DBL_MIN * I; 54 long double _Complex MIN = LDBL_MIN + LDBL_MIN * I; 55 55 56 constfloat MAX = FLT_MAX;57 constdouble MAX = DBL_MAX;58 constlong double MAX = LDBL_MAX;59 constfloat _Complex MAX = FLT_MAX + FLT_MAX * I;60 constdouble _Complex MAX = DBL_MAX + DBL_MAX * I;61 constlong double _Complex MAX = LDBL_MAX + LDBL_MAX * I;56 float MAX = FLT_MAX; 57 double MAX = DBL_MAX; 58 long double MAX = LDBL_MAX; 59 float _Complex MAX = FLT_MAX + FLT_MAX * I; 60 double _Complex MAX = DBL_MAX + DBL_MAX * I; 61 long double _Complex MAX = LDBL_MAX + LDBL_MAX * I; 62 62 63 const float PI = (float)M_PI;// pi64 const float PI_2 = (float)M_PI_2;// pi / 265 const float PI_4 = (float)M_PI_4;// pi / 466 const float _1_PI = (float)M_1_PI;// 1 / pi67 const float _2_PI = (float)M_2_PI;// 2 / pi68 const float _2_SQRT_PI = (float)M_2_SQRTPI;// 2 / sqrt(pi)63 float PI = (float)M_PI; // pi 64 float PI_2 = (float)M_PI_2; // pi / 2 65 float PI_4 = (float)M_PI_4; // pi / 4 66 float _1_PI = (float)M_1_PI; // 1 / pi 67 float _2_PI = (float)M_2_PI; // 2 / pi 68 float _2_SQRT_PI = (float)M_2_SQRTPI; // 2 / sqrt(pi) 69 69 70 const double PI = M_PI;// pi71 const double PI_2 = M_PI_2;// pi / 272 const double PI_4 = M_PI_4;// pi / 473 const double _1_PI = M_1_PI;// 1 / pi74 const double _2_PI = M_2_PI;// 2 / pi75 const double _2_SQRT_PI = M_2_SQRTPI;// 2 / sqrt(pi)70 double PI = M_PI; // pi 71 double PI_2 = M_PI_2; // pi / 2 72 double PI_4 = M_PI_4; // pi / 4 73 double _1_PI = M_1_PI; // 1 / pi 74 double _2_PI = M_2_PI; // 2 / pi 75 double _2_SQRT_PI = M_2_SQRTPI; // 2 / sqrt(pi) 76 76 77 const long double PI = M_PIl;// pi78 const long double PI_2 = M_PI_2l;// pi / 279 const long double PI_4 = M_PI_4l;// pi / 480 const long double _1_PI = M_1_PIl;// 1 / pi81 const long double _2_PI = M_2_PIl;// 2 / pi82 const long double _2_SQRT_PI = M_2_SQRTPIl;// 2 / sqrt(pi)77 long double PI = M_PIl; // pi 78 long double PI_2 = M_PI_2l; // pi / 2 79 long double PI_4 = M_PI_4l; // pi / 4 80 long double _1_PI = M_1_PIl; // 1 / pi 81 long double _2_PI = M_2_PIl; // 2 / pi 82 long double _2_SQRT_PI = M_2_SQRTPIl; // 2 / sqrt(pi) 83 83 84 const float _Complex PI = (float)M_PI + 0.0_iF;// pi85 const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;// pi / 286 const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;// pi / 487 const float _Complex _1_PI = (float)M_1_PI + 0.0_iF;// 1 / pi88 const float _Complex _2_PI = (float)M_2_PI + 0.0_iF;// 2 / pi89 constfloat _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)84 float _Complex PI = (float)M_PI + 0.0_iF; // pi 85 float _Complex PI_2 = (float)M_PI_2 + 0.0_iF; // pi / 2 86 float _Complex PI_4 = (float)M_PI_4 + 0.0_iF; // pi / 4 87 float _Complex _1_PI = (float)M_1_PI + 0.0_iF; // 1 / pi 88 float _Complex _2_PI = (float)M_2_PI + 0.0_iF; // 2 / pi 89 float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi) 90 90 91 const double _Complex PI = M_PI + 0.0_iD;// pi92 const double _Complex PI_2 = M_PI_2 + 0.0_iD;// pi / 293 const double _Complex PI_4 = M_PI_4 + 0.0_iD;// pi / 494 const double _Complex _1_PI = M_1_PI + 0.0_iD;// 1 / pi95 const double _Complex _2_PI = M_2_PI + 0.0_iD;// 2 / pi96 const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD;// 2 / sqrt(pi)91 double _Complex PI = M_PI + 0.0_iD; // pi 92 double _Complex PI_2 = M_PI_2 + 0.0_iD; // pi / 2 93 double _Complex PI_4 = M_PI_4 + 0.0_iD; // pi / 4 94 double _Complex _1_PI = M_1_PI + 0.0_iD; // 1 / pi 95 double _Complex _2_PI = M_2_PI + 0.0_iD; // 2 / pi 96 double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD; // 2 / sqrt(pi) 97 97 98 const long double _Complex PI = M_PIl + 0.0_iL;// pi99 const long double _Complex PI_2 = M_PI_2l + 0.0_iL;// pi / 2100 const long double _Complex PI_4 = M_PI_4l + 0.0_iL;// pi / 4101 const long double _Complex _1_PI = M_1_PIl + 0.0_iL;// 1 / pi102 const long double _Complex _2_PI = M_2_PIl + 0.0_iL;// 2 / pi103 constlong double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)98 long double _Complex PI = M_PIl + 0.0_iL; // pi 99 long double _Complex PI_2 = M_PI_2l + 0.0_iL; // pi / 2 100 long double _Complex PI_4 = M_PI_4l + 0.0_iL; // pi / 4 101 long double _Complex _1_PI = M_1_PIl + 0.0_iL; // 1 / pi 102 long double _Complex _2_PI = M_2_PIl + 0.0_iL; // 2 / pi 103 long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi) 104 104 105 const float E = (float)M_E;// e106 const float LOG2_E = (float)M_LOG2E;// log_2(e)107 const float LOG10_E = (float)M_LOG10E;// log_10(e)108 const float LN_2 = (float)M_LN2;// log_e(2)109 const float LN_10 = (float)M_LN10;// log_e(10)110 const float SQRT_2 = (float)M_SQRT2;// sqrt(2)111 const float _1_SQRT_2 = (float)M_SQRT1_2;// 1 / sqrt(2)105 float E = (float)M_E; // e 106 float LOG2_E = (float)M_LOG2E; // log_2(e) 107 float LOG10_E = (float)M_LOG10E; // log_10(e) 108 float LN_2 = (float)M_LN2; // log_e(2) 109 float LN_10 = (float)M_LN10; // log_e(10) 110 float SQRT_2 = (float)M_SQRT2; // sqrt(2) 111 float _1_SQRT_2 = (float)M_SQRT1_2; // 1 / sqrt(2) 112 112 113 const double E = M_E;// e114 const double LOG2_E = M_LOG2E;// log_2(e)115 const double LOG10_E = M_LOG10E;// log_10(e)116 const double LN_2 = M_LN2;// log_e(2)117 const double LN_10 = M_LN10;// log_e(10)118 const double SQRT_2 = M_SQRT2;// sqrt(2)119 const double _1_SQRT_2 = M_SQRT1_2;// 1 / sqrt(2)113 double E = M_E; // e 114 double LOG2_E = M_LOG2E; // log_2(e) 115 double LOG10_E = M_LOG10E; // log_10(e) 116 double LN_2 = M_LN2; // log_e(2) 117 double LN_10 = M_LN10; // log_e(10) 118 double SQRT_2 = M_SQRT2; // sqrt(2) 119 double _1_SQRT_2 = M_SQRT1_2; // 1 / sqrt(2) 120 120 121 const long double E = M_El;// e122 const long double LOG2_E = M_LOG2El;// log_2(e)123 const long double LOG10_E = M_LOG10El;// log_10(e)124 const long double LN_2 = M_LN2l;// log_e(2)125 const long double LN_10 = M_LN10l;// log_e(10)126 const long double SQRT_2 = M_SQRT2l;// sqrt(2)127 const long double _1_SQRT_2 = M_SQRT1_2l;// 1 / sqrt(2)121 long double E = M_El; // e 122 long double LOG2_E = M_LOG2El; // log_2(e) 123 long double LOG10_E = M_LOG10El; // log_10(e) 124 long double LN_2 = M_LN2l; // log_e(2) 125 long double LN_10 = M_LN10l; // log_e(10) 126 long double SQRT_2 = M_SQRT2l; // sqrt(2) 127 long double _1_SQRT_2 = M_SQRT1_2l; // 1 / sqrt(2) 128 128 129 const float _Complex E = M_E + 0.0_iF;// e130 const float _Complex LOG2_E = M_LOG2E + 0.0_iF;// log_2(e)131 const float _Complex LOG10_E = M_LOG10E + 0.0_iF;// log_10(e)132 const float _Complex LN_2 = M_LN2 + 0.0_iF;// log_e(2)133 const float _Complex LN_10 = M_LN10 + 0.0_iF;// log_e(10)134 const float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;// sqrt(2)135 const float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;// 1 / sqrt(2)129 float _Complex E = M_E + 0.0_iF; // e 130 float _Complex LOG2_E = M_LOG2E + 0.0_iF; // log_2(e) 131 float _Complex LOG10_E = M_LOG10E + 0.0_iF; // log_10(e) 132 float _Complex LN_2 = M_LN2 + 0.0_iF; // log_e(2) 133 float _Complex LN_10 = M_LN10 + 0.0_iF; // log_e(10) 134 float _Complex SQRT_2 = M_SQRT2 + 0.0_iF; // sqrt(2) 135 float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF; // 1 / sqrt(2) 136 136 137 const double _Complex E = M_E + 0.0_iD;// e138 const double _Complex LOG2_E = M_LOG2E + 0.0_iD;// log_2(e)139 const double _Complex LOG10_E = M_LOG10E + 0.0_iD;// log_10(e)140 const double _Complex LN_2 = M_LN2 + 0.0_iD;// log_e(2)141 const double _Complex LN_10 = M_LN10 + 0.0_iD;// log_e(10)142 const double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;// sqrt(2)143 const double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;// 1 / sqrt(2)137 double _Complex E = M_E + 0.0_iD; // e 138 double _Complex LOG2_E = M_LOG2E + 0.0_iD; // log_2(e) 139 double _Complex LOG10_E = M_LOG10E + 0.0_iD; // log_10(e) 140 double _Complex LN_2 = M_LN2 + 0.0_iD; // log_e(2) 141 double _Complex LN_10 = M_LN10 + 0.0_iD; // log_e(10) 142 double _Complex SQRT_2 = M_SQRT2 + 0.0_iD; // sqrt(2) 143 double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD; // 1 / sqrt(2) 144 144 145 const long double _Complex E = M_El + 0.0_iL;// e146 const long double _Complex LOG2_E = M_LOG2El + 0.0_iL;// log_2(e)147 const long double _Complex LOG10_E = M_LOG10El + 0.0_iL;// log_10(e)148 const long double _Complex LN_2 = M_LN2l + 0.0_iL;// log_e(2)149 const long double _Complex LN_10 = M_LN10l + 0.0_iL;// log_e(10)150 const long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;// sqrt(2)151 const long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL;// 1 / sqrt(2)145 long double _Complex E = M_El + 0.0_iL; // e 146 long double _Complex LOG2_E = M_LOG2El + 0.0_iL; // log_2(e) 147 long double _Complex LOG10_E = M_LOG10El + 0.0_iL; // log_10(e) 148 long double _Complex LN_2 = M_LN2l + 0.0_iL; // log_e(2) 149 long double _Complex LN_10 = M_LN10l + 0.0_iL; // log_e(10) 150 long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL; // sqrt(2) 151 long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL; // 1 / sqrt(2) 152 152 153 153 // Local Variables: // -
libcfa/src/limits.hfa
rb4b63e8 rdd53f75 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 1 16:20:54 201813 // Update Count : 1 312 // Last Modified On : Wed Sep 30 22:56:35 2020 13 // Update Count : 15 14 14 // 15 15 … … 18 18 // Integral Constants 19 19 20 extern constsigned char MIN;21 extern constunsigned char MIN;22 extern constshort int MIN;23 extern constunsigned short int MIN;24 extern constint MIN;25 extern constunsigned int MIN;26 extern constlong int MIN;27 extern constunsigned long int MIN;28 extern constlong long int MIN;29 extern constunsigned long long int MIN;20 extern signed char MIN; 21 extern unsigned char MIN; 22 extern short int MIN; 23 extern unsigned short int MIN; 24 extern int MIN; 25 extern unsigned int MIN; 26 extern long int MIN; 27 extern unsigned long int MIN; 28 extern long long int MIN; 29 extern unsigned long long int MIN; 30 30 31 extern constsigned char MAX;32 extern constunsigned char MAX;33 extern constshort int MAX;34 extern constunsigned short int MAX;35 extern constint MAX;36 extern constunsigned int MAX;37 extern constlong int MAX;38 extern constunsigned long int MAX;39 extern constlong long int MAX;40 extern constunsigned long long int MAX;31 extern signed char MAX; 32 extern unsigned char MAX; 33 extern short int MAX; 34 extern unsigned short int MAX; 35 extern int MAX; 36 extern unsigned int MAX; 37 extern long int MAX; 38 extern unsigned long int MAX; 39 extern long long int MAX; 40 extern unsigned long long int MAX; 41 41 42 42 // Floating-Point Constants 43 43 44 extern constfloat MIN;45 extern constdouble MIN;46 extern constlong double MIN;47 extern constfloat _Complex MIN;48 extern constdouble _Complex MIN;49 extern constlong double _Complex MIN;44 extern float MIN; 45 extern double MIN; 46 extern long double MIN; 47 extern float _Complex MIN; 48 extern double _Complex MIN; 49 extern long double _Complex MIN; 50 50 51 extern constfloat MAX;52 extern constdouble MAX;53 extern constlong double MAX;54 extern constfloat _Complex MAX;55 extern constdouble _Complex MAX;56 extern constlong double _Complex MAX;51 extern float MAX; 52 extern double MAX; 53 extern long double MAX; 54 extern float _Complex MAX; 55 extern double _Complex MAX; 56 extern long double _Complex MAX; 57 57 58 extern const float PI;// pi59 extern const float PI_2;// pi / 260 extern const float PI_4;// pi / 461 extern const float _1_PI;// 1 / pi62 extern const float _2_PI;// 2 / pi63 extern const float _2_SQRT_PI;// 2 / sqrt(pi)58 extern float PI; // pi 59 extern float PI_2; // pi / 2 60 extern float PI_4; // pi / 4 61 extern float _1_PI; // 1 / pi 62 extern float _2_PI; // 2 / pi 63 extern float _2_SQRT_PI; // 2 / sqrt(pi) 64 64 65 extern const double PI;// pi66 extern const double PI_2;// pi / 267 extern const double PI_4;// pi / 468 extern const double _1_PI;// 1 / pi69 extern const double _2_PI;// 2 / pi70 extern const double _2_SQRT_PI;// 2 / sqrt(pi)65 extern double PI; // pi 66 extern double PI_2; // pi / 2 67 extern double PI_4; // pi / 4 68 extern double _1_PI; // 1 / pi 69 extern double _2_PI; // 2 / pi 70 extern double _2_SQRT_PI; // 2 / sqrt(pi) 71 71 72 extern const long double PI;// pi73 extern const long double PI_2;// pi / 274 extern const long double PI_4;// pi / 475 extern const long double _1_PI;// 1 / pi76 extern const long double _2_PI;// 2 / pi77 extern const long double _2_SQRT_PI;// 2 / sqrt(pi)72 extern long double PI; // pi 73 extern long double PI_2; // pi / 2 74 extern long double PI_4; // pi / 4 75 extern long double _1_PI; // 1 / pi 76 extern long double _2_PI; // 2 / pi 77 extern long double _2_SQRT_PI; // 2 / sqrt(pi) 78 78 79 extern const float _Complex PI;// pi80 extern const float _Complex PI_2;// pi / 281 extern const float _Complex PI_4;// pi / 482 extern const float _Complex _1_PI;// 1 / pi83 extern const float _Complex _2_PI;// 2 / pi84 extern const float _Complex _2_SQRT_PI;// 2 / sqrt(pi)79 extern float _Complex PI; // pi 80 extern float _Complex PI_2; // pi / 2 81 extern float _Complex PI_4; // pi / 4 82 extern float _Complex _1_PI; // 1 / pi 83 extern float _Complex _2_PI; // 2 / pi 84 extern float _Complex _2_SQRT_PI; // 2 / sqrt(pi) 85 85 86 extern const double _Complex PI;// pi87 extern const double _Complex PI_2;// pi / 288 extern const double _Complex PI_4;// pi / 489 extern const double _Complex _1_PI;// 1 / pi90 extern const double _Complex _2_PI;// 2 / pi91 extern const double _Complex _2_SQRT_PI;// 2 / sqrt(pi)86 extern double _Complex PI; // pi 87 extern double _Complex PI_2; // pi / 2 88 extern double _Complex PI_4; // pi / 4 89 extern double _Complex _1_PI; // 1 / pi 90 extern double _Complex _2_PI; // 2 / pi 91 extern double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 92 92 93 extern const long double _Complex PI;// pi94 extern const long double _Complex PI_2;// pi / 295 extern const long double _Complex PI_4;// pi / 496 extern const long double _Complex _1_PI;// 1 / pi97 extern const long double _Complex _2_PI;// 2 / pi98 extern const long double _Complex _2_SQRT_PI;// 2 / sqrt(pi)93 extern long double _Complex PI; // pi 94 extern long double _Complex PI_2; // pi / 2 95 extern long double _Complex PI_4; // pi / 4 96 extern long double _Complex _1_PI; // 1 / pi 97 extern long double _Complex _2_PI; // 2 / pi 98 extern long double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 99 99 100 extern const float E;// e101 extern const float LOG2_E;// log_2(e)102 extern const float LOG10_E;// log_10(e)103 extern const float LN_2;// log_e(2)104 extern const float LN_10;// log_e(10)105 extern const float SQRT_2;// sqrt(2)106 extern const float _1_SQRT_2;// 1 / sqrt(2)100 extern float E; // e 101 extern float LOG2_E; // log_2(e) 102 extern float LOG10_E; // log_10(e) 103 extern float LN_2; // log_e(2) 104 extern float LN_10; // log_e(10) 105 extern float SQRT_2; // sqrt(2) 106 extern float _1_SQRT_2; // 1 / sqrt(2) 107 107 108 extern const double E;// e109 extern const double LOG2_E;// log_2(e)110 extern const double LOG10_E;// log_10(e)111 extern const double LN_2;// log_e(2)112 extern const double LN_10;// log_e(10)113 extern const double SQRT_2;// sqrt(2)114 extern const double _1_SQRT_2;// 1 / sqrt(2)108 extern double E; // e 109 extern double LOG2_E; // log_2(e) 110 extern double LOG10_E; // log_10(e) 111 extern double LN_2; // log_e(2) 112 extern double LN_10; // log_e(10) 113 extern double SQRT_2; // sqrt(2) 114 extern double _1_SQRT_2; // 1 / sqrt(2) 115 115 116 extern const long double E;// e117 extern const long double LOG2_E;// log_2(e)118 extern const long double LOG10_E;// log_10(e)119 extern const long double LN_2;// log_e(2)120 extern const long double LN_10;// log_e(10)121 extern const long double SQRT_2;// sqrt(2)122 extern const long double _1_SQRT_2;// 1/sqrt(2)116 extern long double E; // e 117 extern long double LOG2_E; // log_2(e) 118 extern long double LOG10_E; // log_10(e) 119 extern long double LN_2; // log_e(2) 120 extern long double LN_10; // log_e(10) 121 extern long double SQRT_2; // sqrt(2) 122 extern long double _1_SQRT_2; // 1/sqrt(2) 123 123 124 extern const float _Complex E;// e125 extern const float _Complex LOG2_E;// log_2(e)126 extern const float _Complex LOG10_E;// log_10(e)127 extern const float _Complex LN_2;// log_e(2)128 extern const float _Complex LN_10;// log_e(10)129 extern const float _Complex SQRT_2;// sqrt(2)130 extern const float _Complex _1_SQRT_2;// 1 / sqrt(2)124 extern float _Complex E; // e 125 extern float _Complex LOG2_E; // log_2(e) 126 extern float _Complex LOG10_E; // log_10(e) 127 extern float _Complex LN_2; // log_e(2) 128 extern float _Complex LN_10; // log_e(10) 129 extern float _Complex SQRT_2; // sqrt(2) 130 extern float _Complex _1_SQRT_2; // 1 / sqrt(2) 131 131 132 extern const double _Complex E;// e133 extern const double _Complex LOG2_E;// log_2(e)134 extern const double _Complex LOG10_E;// log_10(e)135 extern const double _Complex LN_2;// log_e(2)136 extern const double _Complex LN_10;// log_e(10)137 extern const double _Complex SQRT_2;// sqrt(2)138 extern const double _Complex _1_SQRT_2;// 1 / sqrt(2)132 extern double _Complex E; // e 133 extern double _Complex LOG2_E; // log_2(e) 134 extern double _Complex LOG10_E; // log_10(e) 135 extern double _Complex LN_2; // log_e(2) 136 extern double _Complex LN_10; // log_e(10) 137 extern double _Complex SQRT_2; // sqrt(2) 138 extern double _Complex _1_SQRT_2; // 1 / sqrt(2) 139 139 140 extern const long double _Complex E;// e141 extern const long double _Complex LOG2_E;// log_2(e)142 extern const long double _Complex LOG10_E;// log_10(e)143 extern const long double _Complex LN_2;// log_e(2)144 extern const long double _Complex LN_10;// log_e(10)145 extern const long double _Complex SQRT_2;// sqrt(2)146 extern const long double _Complex _1_SQRT_2;// 1 / sqrt(2)140 extern long double _Complex E; // e 141 extern long double _Complex LOG2_E; // log_2(e) 142 extern long double _Complex LOG10_E; // log_10(e) 143 extern long double _Complex LN_2; // log_e(2) 144 extern long double _Complex LN_10; // log_e(10) 145 extern long double _Complex SQRT_2; // sqrt(2) 146 extern long double _Complex _1_SQRT_2; // 1 / sqrt(2) 147 147 148 148 // Local Variables: // -
src/GenPoly/InstantiateGeneric.cc
rb4b63e8 rdd53f75 172 172 InstantiationMap< AggregateDecl, AggregateDecl > instantiations; 173 173 /// Set of types which are dtype-only generic (and therefore have static layout) 174 ScopedSet< AggregateDecl*> dtypeStatics;174 std::set<AggregateDecl *> dtypeStatics; 175 175 /// Namer for concrete types 176 176 UniqueName typeNamer; … … 505 505 void GenericInstantiator::beginScope() { 506 506 instantiations.beginScope(); 507 dtypeStatics.beginScope();508 507 } 509 508 510 509 void GenericInstantiator::endScope() { 511 510 instantiations.endScope(); 512 dtypeStatics.endScope();513 511 } 514 512 -
tests/zombies/Rank2.c
rb4b63e8 rdd53f75 1 int ?=?( int *, int );2 forall(dtype DT) DT * ?=?( DT * *, DT * );1 int ?=?( int &, int ); 2 forall(dtype DT) DT * ?=?( DT *&, DT * ); 3 3 4 4 void a() { … … 11 11 void h( int *null ); 12 12 forall( otype T ) T id( T ); 13 forall( dtype T ) T *0;14 int 0;13 // forall( dtype T ) T *0; 14 // int 0; 15 15 h( id( id( id( 0 ) ) ) ); 16 16 } -
tests/zombies/Tuple.c
rb4b63e8 rdd53f75 46 46 [ 3, 5 ]; 47 47 [ a, b ] = 3; 48 //[ a, b ] = [ 4.6 ];48 [ a, b ] = [ 4.6 ]; 49 49 [ a, b ] = 4.6; 50 50 [ a, b ] = [ c, d ] = [ 3, 5 ]; … … 59 59 [ a, b ] = t1 = [ c, d ]; 60 60 [ a, b ] = t1 = t2 = [ c, d ]; 61 //t1 = [ 3, 4 ] = [ 3, 4 ] = t1 = [ 3, 4 ];61 t1 = [ 3, 4 ] = [ 3, 4 ] = t1 = [ 3, 4 ]; 62 62 63 63 s.[ f1, i.[ f2, f3 ], f4 ] = [ 11, 12, 13, 3.14159 ]; … … 65 65 // [ a, , b, ] = h( 3, 3, 0, "abc" ); /* ignore some results */ 66 66 sp->[ f4, f1 ] = sp->[ f1, f4 ]; 67 printf( "expecting 3, 17, 23, 4; got % d, %d, %d, %d\n", s.[ f4, i.[ f3, f2 ], f1 ] );67 printf( "expecting 3, 17, 23, 4; got %g, %d, %d, %d\n", s.[ f4, i.[ f3, f2 ], f1 ] ); 68 68 rc = 0; 69 69 } -
tests/zombies/abstype.c
rb4b63e8 rdd53f75 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jun 14 14:27:48 201613 // Update Count : 912 // Last Modified On : Wed Sep 30 13:55:47 2020 13 // Update Count : 10 14 14 // 15 15 … … 21 21 } 22 22 23 forall( otype T ) lvalueT *?( T * );23 forall( otype T ) T *?( T * ); 24 24 int ?++( int * ); 25 25 int ?=?( int *, int ); -
tests/zombies/constructors.c
rb4b63e8 rdd53f75 1 int fred() { 1 #include <fstream.hfa> 2 #include <stdlib.hfa> 3 4 int main() { 2 5 // initialize basic structure 3 6 struct S { 4 7 int i, j, k; 5 8 }; 6 void ?{}( S *s ) { s->i = 1, s->k = 2; } // default constructor7 void ?{}( S *s, int i, int k ) { s->i = i, s->k = k; } // 2 parameter constructor8 void ?{}( S *s, S c ) { *s = c; }// copy constructor9 void ^?{}( S *s ) { s->i = 0, s->k = 0; } // default destructor10 void ^?{}( S *s, int i ) { s->i = i, s->k = i; } // 1 parameter destructor9 void ?{}( S & s ) { s.i = 1, s.k = 2; } // default constructor 10 void ?{}( S & s, int i, int k ) { s.i = i, s.k = k; } // 2 parameter constructor 11 void ?{}( S & s, S c ) { /* s @= c */ s.[i,j,k] = c.[i,j,k]; } // copy constructor 12 void ^?{}( S & s ) { s.i = 0, s.k = 0; } // default destructor 13 void ^?{}( S & s, int i ) { s.i = i, s.k = i; } // 1 parameter destructor 11 14 { 12 S s1; // default constructor13 S s2 = { 3, 7 }; // 2 parameter constructor14 S s3 @= { .k:3, .i:7 }; // 2 parameter C initialization15 ?{}( &s3, 2, 5 );// explicit 2 parameter constructor16 ^?{}( &s1 );// explicit call to default destructor15 S s1; // default constructor 16 S s2 = { 3, 7 }; // 2 parameter constructor 17 S s3 @= { .k:3, .i:7 }; // 2 parameter C initialization 18 ?{}( s3, 2, 5 ); // explicit 2 parameter constructor 19 ^?{}( s1 ); // explicit call to default destructor 17 20 } // implicit call to default destructor for s2, explicit call s1, no call for s3 18 S s4 @= {}; // no default construction19 ( &s4){ 2, 5 };// explicit 2 parameter constructor20 ^s4{ 3 }; // explicit call to 1 parameter destructor21 S s4 @= {}; // no default construction 22 (s4){ 2, 5 }; // explicit 2 parameter constructor 23 ^s4{ 3 }; // explicit call to 1 parameter destructor 21 24 22 25 // initialize pointer to a basic structure 23 26 24 void ?{}( S * *s ) { *s = malloc(); (*s)->i = 1, (*s)->k = 2; } // default constructor25 void ?{}( S * *s, int i, int k ) { *s = malloc(); (*s)->i = i, (*s)->k = k; } // 2 parameter constructor26 void ^?{}( S * *s ) { (*s)->i = 0, (*s)->k = 0; free( *s ); *s = 0; } // default destructor27 void ?{}( S *& s ) { s = malloc(); s->i = 1, (*s).k = 2; } // default constructor 28 void ?{}( S *& s, int i, int k ) { s = malloc(); (*s).i = i, (*s).k = k; } // 2 parameter constructor 29 void ^?{}( S *& s ) { (*s).i = 0, (*s).k = 0; free( s ); &s = 0p; } // default destructor 27 30 { 28 S *ps1; // default constructor 29 S *ps2 = { 3, 7 }; // 2 parameter constructor 30 S *ps3 @= 0; // C initialization 31 S *ps4 @= {}; // no default construction 31 S * ps1; // default constructor 32 S * ps2 = { 3, 7 }; // 2 parameter constructor 33 sout | ps1 | ps2; 34 35 S * ps3 @= 0p; // C initialization 36 S * ps4 @= { 3 }; // no default construction 37 sout | ps3 | ps4; 38 39 ?{}( ps3, 2, 5 ); // explicit 2 parameter constructor 40 (ps4){ 2, 5 }; // explicit 2 parameter constructor 41 sout | ps3 | ps4; 42 43 ^?{}( ps3 ); // explicit call to default destructor 44 ^ps4{}; // explicit call to default destructor 45 sout | ps3 | ps4; 32 46 } // implicit call to default destructor for ps2 and ps1, checks ordering of explicit destructor calls 33 34 ?{}( &ps3, 2, 5 ); // explicit 2 parameter constructor35 (&ps4){ 2, 5 }; // explicit 2 parameter constructor36 37 ^?{}( &ps3 ); // explicit call to default destructor38 ^ps4{}; // explicit call to default destructor39 47 40 48 // initialize complex structure … … 44 52 }; 45 53 46 void ?{}( T *t ) {} // default constructor => implicitly call constructor for field s 47 void ?{}( T *t, int i, int k ) { (&t->s){ i, k }; } // 2 parameter constructor => explicitly call constructor for field s 48 void ?{}( T *t, S c ) { (&t->s){ c }; } // 1 parameter constructor => explicitly call copy constructor for field s 49 void ^?{}( T *s, int i ) {} // destructor => implicitly call destructor for field s 54 void ?{}( T & t ) {} // default constructor => implicitly call constructor for field s 55 void ?{}( T & t, int i, int k ) { (t.s){ i, k }; } // 2 parameter constructor => explicitly call constructor for field s 56 void ?{}( T & t, S c ) { (t.s){ c }; }// 1 parameter constructor => explicitly call copy constructor for field s 57 void ^?{}( T & s ) {} // destructor => implicitly call destructor for field s 58 void ^?{}( T & s, int i ) {}// destructor => implicitly call destructor for field s 50 59 { 51 S s; // default constructor 52 T t1; // default constructor 53 T t2 = { s }; // 1 parameter constructor 54 ^?{}( &t1 ); // explicit call to default destructor => implicit call to t1.s's destructor 60 S s; // default constructor 61 T t1; // default constructor 62 T t2 = { s }; // 1 parameter constructor 63 ^?{}( t1, 3 ); // explicit call to default destructor => implicit call to t1.s's destructor 64 T t3; // default constructor 65 T t4 @= { { 1, 3 } }; // C initialization 66 (t4){ 2, 5 }; // explicit 2 parameter constructor 55 67 } // implicit call to default destructor for t2 and implicit call for s; 56 T t3; // default constructor57 T t4 @= { { 1, 3 } }; // C initialization58 (&t4){ 2, 5 }; // explicit 2 parameter constructor59 68 60 69 T *pt = malloc(){ 3, 4 }; // common usage -
tests/zombies/includes.c
rb4b63e8 rdd53f75 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Nov 15 23:06:24 201713 // Update Count : 59 712 // Last Modified On : Wed Sep 30 13:59:18 2020 13 // Update Count : 598 14 14 // 15 15 … … 24 24 #if 1 25 25 #define _GNU_SOURCE 26 #include <a.out.h> 27 #include <aio.h> 28 #include <aliases.h> 29 #include <alloca.h> 30 #include <ansidecl.h> 31 #include <ar.h> 32 #include <argp.h> 33 #include <argz.h> 34 #include <assert.h> 35 //#include <bfd.h> 36 // #include <bfdlink.h> // keyword with 37 #include <byteswap.h> 38 #include <bzlib.h> 39 #include <cblas.h> 40 #include <cblas_f77.h> 41 #include <complex.h> 42 #include <com_err.h> 43 #include <cpio.h> 44 #include <crypt.h> 45 #include <ctype.h> 46 #include <curses.h> 47 #include <dialog.h> 48 #include <dirent.h> 49 #include <dis-asm.h> 50 #include <dlfcn.h> 51 #include <dlg_colors.h> 52 #include <dlg_config.h> 53 #include <dlg_keys.h> 54 #include <elf.h> 55 #include <endian.h> 56 #include <envz.h> 57 #include <err.h> 58 #include <errno.h> 59 #include <error.h> 60 #include <eti.h> 61 #include <evdns.h> 62 #include <event.h> 26 // #include <a.out.h> 27 // #include <aio.h> 28 // #include <aliases.h> 29 // #include <alloca.h> 30 // #include <ansidecl.h> 31 // #include <ar.h> 32 // #include <argp.h> 33 // #include <argz.h> 34 // #include <assert.h> 35 // #include <bfd.h> 36 // #include <bfdlink.h> // keyword with 37 // #include <byteswap.h> 38 // #include <bzlib.h> 39 // #include <cblas.h> 40 // #include <cblas_f77.h> 41 // #include <complex.h> 42 // #include <com_err.h> 43 // #include <cpio.h> 44 45 // #include <crypt.h> 46 // #include <ctype.h> 47 // #include <curses.h> 48 // #include <dialog.h> 49 // #include <dirent.h> 50 // #include <dis-asm.h> 51 // #include <dlfcn.h> 52 // #include <dlg_colors.h> 53 // #include <dlg_config.h> 54 // #include <dlg_keys.h> 55 // #include <elf.h> 56 // #include <endian.h> 57 // #include <envz.h> 58 // #include <err.h> 59 // #include <errno.h> 60 // #include <error.h> 61 // #include <eti.h> 62 // #include <evdns.h> 63 // #include <event.h> 63 64 64 65 // #include <evhttp.h> 65 66 // #include <sys/queue.h> 66 // #include <evrpc.h> // evrpc.h depends on sys/queue.h67 // #include <evrpc.h> // evrpc.h depends on sys/queue.h 67 68 // #include <evutil.h> 68 69 // #include <execinfo.h> … … 80 81 // #include <fts.h> 81 82 // #include <ftw.h> 83 82 84 // #include <gconv.h> 83 85 // #include <getopt.h> … … 89 91 // #include <gshadow.h> 90 92 // #include <gssapi.h> 91 // #include <hwloc.h>// keyword thread (setjmp)93 #include <hwloc.h> // keyword thread (setjmp) 92 94 // #include <iconv.h> 93 95 // #include <idna.h>
Note: See TracChangeset
for help on using the changeset viewer.