- Timestamp:
- Mar 6, 2018, 12:11:11 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 520145b, e5d4e5c, e6c5e79
- Parents:
- 094476d (diff), 1feb535f (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. - Location:
- src
- Files:
-
- 2 added
- 2 deleted
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.impl.h
r094476d rcaa649b 2277 2277 } 2278 2278 2279 2279 //-------------------------------------------------------------------------- 2280 // TupleType 2280 2281 template< typename pass_type > 2281 2282 void PassVisitor< pass_type >::visit( TupleType * node ) { 2282 VISIT_BODY( node ); 2283 } 2284 2283 VISIT_START( node ); 2284 2285 maybeAccept_impl( node->forall, *this ); 2286 maybeAccept_impl( node->types, *this ); 2287 maybeAccept_impl( node->members, *this ); 2288 2289 VISIT_END( node ); 2290 } 2291 2292 template< typename pass_type > 2293 Type * PassVisitor< pass_type >::mutate( TupleType * node ) { 2294 MUTATE_START( node ); 2295 2296 maybeMutate_impl( node->forall, *this ); 2297 maybeMutate_impl( node->types, *this ); 2298 maybeMutate_impl( node->members, *this ); 2299 2300 MUTATE_END( Type, node ); 2301 } 2302 2303 //-------------------------------------------------------------------------- 2304 // TypeofType 2285 2305 template< typename pass_type > 2286 2306 void PassVisitor< pass_type >::visit( TypeofType * node ) { 2287 VISIT_BODY( node ); 2288 } 2289 2307 VISIT_START( node ); 2308 2309 assert( node->expr ); 2310 maybeAccept_impl( node->expr, *this ); 2311 2312 VISIT_END( node ); 2313 } 2314 2315 template< typename pass_type > 2316 Type * PassVisitor< pass_type >::mutate( TypeofType * node ) { 2317 MUTATE_START( node ); 2318 2319 assert( node->expr ); 2320 maybeMutate_impl( node->expr, *this ); 2321 2322 MUTATE_END( Type, node ); 2323 } 2324 2325 //-------------------------------------------------------------------------- 2326 // AttrType 2290 2327 template< typename pass_type > 2291 2328 void PassVisitor< pass_type >::visit( AttrType * node ) { 2292 VISIT_BODY( node ); 2293 } 2294 2329 VISIT_START( node ); 2330 2331 if ( node->isType ) { 2332 assert( node->type ); 2333 maybeAccept_impl( node->type, *this ); 2334 } else { 2335 assert( node->expr ); 2336 maybeAccept_impl( node->expr, *this ); 2337 } // if 2338 2339 VISIT_END( node ); 2340 } 2341 2342 template< typename pass_type > 2343 Type * PassVisitor< pass_type >::mutate( AttrType * node ) { 2344 MUTATE_START( node ); 2345 2346 if ( node->isType ) { 2347 assert( node->type ); 2348 maybeMutate_impl( node->type, *this ); 2349 } else { 2350 assert( node->expr ); 2351 maybeMutate_impl( node->expr, *this ); 2352 } // if 2353 2354 MUTATE_END( Type, node ); 2355 } 2356 2357 //-------------------------------------------------------------------------- 2358 // VarArgsType 2295 2359 template< typename pass_type > 2296 2360 void PassVisitor< pass_type >::visit( VarArgsType * node ) { 2297 VISIT_BODY( node ); 2298 } 2299 2361 VISIT_START( node ); 2362 2363 maybeAccept_impl( node->forall, *this ); 2364 2365 VISIT_END( node ); 2366 } 2367 2368 template< typename pass_type > 2369 Type * PassVisitor< pass_type >::mutate( VarArgsType * node ) { 2370 MUTATE_START( node ); 2371 2372 maybeMutate_impl( node->forall, *this ); 2373 2374 MUTATE_END( Type, node ); 2375 } 2376 2377 //-------------------------------------------------------------------------- 2378 // ZeroType 2300 2379 template< typename pass_type > 2301 2380 void PassVisitor< pass_type >::visit( ZeroType * node ) { 2302 VISIT_BODY( node ); 2303 } 2304 2381 VISIT_START( node ); 2382 2383 maybeAccept_impl( node->forall, *this ); 2384 2385 VISIT_END( node ); 2386 } 2387 2388 template< typename pass_type > 2389 Type * PassVisitor< pass_type >::mutate( ZeroType * node ) { 2390 MUTATE_START( node ); 2391 2392 maybeMutate_impl( node->forall, *this ); 2393 2394 MUTATE_END( Type, node ); 2395 } 2396 2397 //-------------------------------------------------------------------------- 2398 // OneType 2305 2399 template< typename pass_type > 2306 2400 void PassVisitor< pass_type >::visit( OneType * node ) { 2307 VISIT_BODY( node ); 2308 } 2309 2401 VISIT_START( node ); 2402 2403 maybeAccept_impl( node->forall, *this ); 2404 2405 VISIT_END( node ); 2406 } 2407 2408 template< typename pass_type > 2409 Type * PassVisitor< pass_type >::mutate( OneType * node ) { 2410 MUTATE_START( node ); 2411 2412 maybeMutate_impl( node->forall, *this ); 2413 2414 MUTATE_END( Type, node ); 2415 } 2416 2417 //-------------------------------------------------------------------------- 2418 // Designation 2310 2419 template< typename pass_type > 2311 2420 void PassVisitor< pass_type >::visit( Designation * node ) { 2312 2421 VISIT_START( node ); 2313 2422 2314 maybeAccept_impl( node-> get_designators(), *this );2423 maybeAccept_impl( node->designators, *this ); 2315 2424 2316 2425 VISIT_END( node ); … … 2321 2430 MUTATE_START( node ); 2322 2431 2323 maybeMutate_impl( node-> get_designators(), *this );2432 maybeMutate_impl( node->designators, *this ); 2324 2433 2325 2434 MUTATE_END( Designation, node ); … … 2332 2441 VISIT_START( node ); 2333 2442 2334 visitExpression( node-> get_value());2443 visitExpression( node->value ); 2335 2444 2336 2445 VISIT_END( node ); … … 2341 2450 MUTATE_START( node ); 2342 2451 2343 node-> set_value( mutateExpression( node->get_value() ));2452 node->value = mutateExpression( node->value ); 2344 2453 2345 2454 MUTATE_END( Initializer, node ); 2346 2455 } 2347 2456 2457 //-------------------------------------------------------------------------- 2458 // ListInit 2348 2459 template< typename pass_type > 2349 2460 void PassVisitor< pass_type >::visit( ListInit * node ) { 2350 VISIT_BODY( node ); 2351 } 2352 2461 VISIT_START( node ); 2462 2463 maybeAccept_impl( node->designations, *this ); 2464 maybeAccept_impl( node->initializers, *this ); 2465 2466 VISIT_END( node ); 2467 } 2468 2469 template< typename pass_type > 2470 Initializer * PassVisitor< pass_type >::mutate( ListInit * node ) { 2471 MUTATE_START( node ); 2472 2473 maybeMutate_impl( node->designations, *this ); 2474 maybeMutate_impl( node->initializers, *this ); 2475 2476 MUTATE_END( Initializer, node ); 2477 } 2478 2479 //-------------------------------------------------------------------------- 2480 // ConstructorInit 2353 2481 template< typename pass_type > 2354 2482 void PassVisitor< pass_type >::visit( ConstructorInit * node ) { 2355 VISIT_BODY( node ); 2356 } 2357 2483 VISIT_START( node ); 2484 2485 maybeAccept_impl( node->ctor, *this ); 2486 maybeAccept_impl( node->dtor, *this ); 2487 maybeAccept_impl( node->init, *this ); 2488 2489 VISIT_END( node ); 2490 } 2491 2492 template< typename pass_type > 2493 Initializer * PassVisitor< pass_type >::mutate( ConstructorInit * node ) { 2494 MUTATE_START( node ); 2495 2496 maybeMutate_impl( node->ctor, *this ); 2497 maybeMutate_impl( node->dtor, *this ); 2498 maybeMutate_impl( node->init, *this ); 2499 2500 MUTATE_END( Initializer, node ); 2501 } 2502 2503 //-------------------------------------------------------------------------- 2504 // Subrange 2358 2505 template< typename pass_type > 2359 2506 void PassVisitor< pass_type >::visit( Subrange * node ) { 2360 VISIT_BODY( node ); 2361 } 2362 2507 VISIT_START( node ); 2508 2509 VISIT_END( node ); 2510 } 2511 2512 template< typename pass_type > 2513 Subrange * PassVisitor< pass_type >::mutate( Subrange * node ) { 2514 MUTATE_START( node ); 2515 2516 MUTATE_END( Subrange, node ); 2517 } 2518 2519 //-------------------------------------------------------------------------- 2520 // Attribute 2363 2521 template< typename pass_type > 2364 2522 void PassVisitor< pass_type >::visit( Constant * node ) { 2365 VISIT_BODY( node ); 2366 } 2367 2523 VISIT_START( node ); 2524 2525 VISIT_END( node ); 2526 } 2527 2528 template< typename pass_type > 2529 Constant * PassVisitor< pass_type >::mutate( Constant * node ) { 2530 MUTATE_START( node ); 2531 2532 MUTATE_END( Constant, node ); 2533 } 2534 2535 //-------------------------------------------------------------------------- 2536 // Attribute 2368 2537 template< typename pass_type > 2369 2538 void PassVisitor< pass_type >::visit( Attribute * node ) { 2370 VISIT_BODY( node ); 2371 } 2372 2373 //--------------------------------------------------------------------------------------------------------------- 2374 2375 template< typename pass_type > 2376 Type * PassVisitor< pass_type >::mutate( TupleType * node ) { 2377 MUTATE_BODY( Type, node ); 2378 } 2379 2380 template< typename pass_type > 2381 Type * PassVisitor< pass_type >::mutate( TypeofType * node ) { 2382 MUTATE_BODY( Type, node ); 2383 } 2384 2385 template< typename pass_type > 2386 Type * PassVisitor< pass_type >::mutate( AttrType * node ) { 2387 MUTATE_BODY( Type, node ); 2388 } 2389 2390 template< typename pass_type > 2391 Type * PassVisitor< pass_type >::mutate( VarArgsType * node ) { 2392 MUTATE_BODY( Type, node ); 2393 } 2394 2395 template< typename pass_type > 2396 Type * PassVisitor< pass_type >::mutate( ZeroType * node ) { 2397 MUTATE_BODY( Type, node ); 2398 } 2399 2400 template< typename pass_type > 2401 Type * PassVisitor< pass_type >::mutate( OneType * node ) { 2402 MUTATE_BODY( Type, node ); 2403 } 2404 2405 template< typename pass_type > 2406 Initializer * PassVisitor< pass_type >::mutate( ListInit * node ) { 2407 MUTATE_BODY( Initializer, node ); 2408 } 2409 2410 template< typename pass_type > 2411 Initializer * PassVisitor< pass_type >::mutate( ConstructorInit * node ) { 2412 MUTATE_BODY( Initializer, node ); 2413 } 2414 2415 template< typename pass_type > 2416 Subrange * PassVisitor< pass_type >::mutate( Subrange * node ) { 2417 MUTATE_BODY( Subrange, node ); 2418 } 2419 2420 template< typename pass_type > 2421 Constant * PassVisitor< pass_type >::mutate( Constant * node ) { 2422 MUTATE_BODY( Constant, node ); 2539 VISIT_START( node ); 2540 2541 maybeAccept_impl( node->parameters, *this ); 2542 2543 VISIT_END( node ); 2423 2544 } 2424 2545 2425 2546 template< typename pass_type > 2426 2547 Attribute * PassVisitor< pass_type >::mutate( Attribute * node ) { 2427 MUTATE_BODY( Attribute, node ); 2428 } 2429 2548 MUTATE_START( node ); 2549 2550 maybeMutate_impl( node->parameters, *this ); 2551 2552 MUTATE_END( Attribute, node ); 2553 } 2554 2555 //-------------------------------------------------------------------------- 2556 // TypeSubstitution 2430 2557 template< typename pass_type > 2431 2558 TypeSubstitution * PassVisitor< pass_type >::mutate( TypeSubstitution * node ) { -
src/Common/SemanticError.cc
r094476d rcaa649b 14 14 // 15 15 16 #include <cstdarg> 16 17 #include <cstdio> // for fileno, stderr 17 18 #include <unistd.h> // for isatty … … 50 51 } 51 52 52 void SemanticWarningImpl( CodeLocation location, std::string msg ) { 53 namespace { 54 // convert format string and arguments into a single string 55 std::string fmtToString(const char * fmt, va_list ap) { 56 int size = 128; 57 while ( true ) { 58 char buf[size]; 59 va_list args; 60 va_copy( args, ap ); 61 int n = vsnprintf(&buf[0], size, fmt, args); 62 va_end( args ); 63 if ( n < size && n >= 0 ) return buf; 64 size *= 2; 65 } 66 assert( false ); 67 } 68 } 69 70 void SemanticWarningImpl( CodeLocation location, Warning, const char * const fmt, ... ) { 71 va_list args; 72 va_start(args, fmt); 73 std::string msg = fmtToString( fmt, args ); 74 va_end(args); 53 75 std::cerr << ErrorHelpers::bold() << location << ErrorHelpers::warning_str() << ErrorHelpers::reset_font() << msg << std::endl; 54 76 } -
src/Common/SemanticError.h
r094476d rcaa649b 37 37 38 38 constexpr const char * const WarningFormats[] = { 39 39 "self assignment of expression: %s", 40 40 }; 41 41 42 42 enum class Warning { 43 SelfAssignment, 43 44 NUMBER_OF_WARNINGS, //This MUST be the last warning 44 45 }; … … 49 50 ); 50 51 51 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[ id], __VA_ARGS__)52 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], __VA_ARGS__) 52 53 53 54 void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4))); … … 71 72 } 72 73 73 74 75 76 74 // Local Variables: // 77 75 // tab-width: 4 // -
src/Common/utility.h
r094476d rcaa649b 162 162 } 163 163 164 #define toCString( ... ) toString( __VA_ARGS__ ).c_str() 165 164 166 // replace element of list with all elements of another list 165 167 template< typename T > -
src/GenPoly/Specialize.cc
r094476d rcaa649b 200 200 } 201 201 202 struct EnvTrimmer {203 TypeSubstitution * env, * newEnv;204 EnvTrimmer( TypeSubstitution * env, TypeSubstitution * newEnv ) : env( env ), newEnv( newEnv ){}205 void previsit( TypeDecl * tyDecl ) {206 // transfer known bindings for seen type variables207 if ( Type * t = env->lookup( tyDecl->name ) ) {208 newEnv->add( tyDecl->name, t );209 }210 }211 };212 213 /// reduce environment to just the parts that are referenced in a given expression214 TypeSubstitution * trimEnv( ApplicationExpr * expr, TypeSubstitution * env ) {215 if ( env ) {216 TypeSubstitution * newEnv = new TypeSubstitution();217 PassVisitor<EnvTrimmer> trimmer( env, newEnv );218 expr->accept( trimmer );219 return newEnv;220 }221 return nullptr;222 }223 224 202 /// Generates a thunk that calls `actual` with type `funType` and returns its address 225 203 Expression * Specialize::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) { … … 265 243 } 266 244 267 appExpr-> set_env( trimEnv( appExpr, env ));245 appExpr->env = TypeSubstitution::newFromExpr( appExpr, env ); 268 246 if ( inferParams ) { 269 247 appExpr->get_inferParams() = *inferParams; -
src/InitTweak/FixInit.cc
r094476d rcaa649b 68 68 typedef std::unordered_map< int, int > UnqCount; 69 69 70 struct SelfAssignChecker { 71 void previsit( ApplicationExpr * appExpr ); 72 }; 73 70 74 struct InsertImplicitCalls : public WithTypeSubstitution { 71 75 /// wrap function application expressions as ImplicitCopyCtorExpr nodes so that it is easy to identify which … … 183 187 }; 184 188 185 class FixCopyCtors final : public WithStmtsToAdd, public WithShortCircuiting, public WithVisitorRef<FixCopyCtors> {189 class FixCopyCtors final : public WithStmtsToAdd, public WithShortCircuiting, public WithVisitorRef<FixCopyCtors>, public WithTypeSubstitution { 186 190 public: 187 191 FixCopyCtors( UnqCount & unqCount ) : unqCount( unqCount ){} … … 235 239 236 240 void fix( std::list< Declaration * > & translationUnit, const std::string & filename, bool inLibrary ) { 241 PassVisitor<SelfAssignChecker> checker; 242 acceptAll( translationUnit, checker ); 243 237 244 // fixes ConstructorInit for global variables. should happen before fixInitializers. 238 245 InitTweak::fixGlobalInit( translationUnit, filename, inLibrary ); … … 311 318 } 312 319 320 namespace { 321 // Relatively simple structural comparison for expressions, needed to determine 322 // if two expressions are "the same" (used to determine if self assignment occurs) 323 struct StructuralChecker { 324 Expression * stripCasts( Expression * expr ) { 325 // this might be too permissive. It's possible that only particular casts are relevant. 326 while ( CastExpr * cast = dynamic_cast< CastExpr * >( expr ) ) { 327 expr = cast->arg; 328 } 329 return expr; 330 } 331 332 void previsit( Expression * ) { 333 // anything else does not qualify 334 isSimilar = false; 335 } 336 337 template<typename T> 338 T * cast( Expression * node ) { 339 // all expressions need to ignore casts, so this bit has been factored out 340 return dynamic_cast< T * >( stripCasts( node ) ); 341 } 342 343 // ignore casts 344 void previsit( CastExpr * ) {} 345 346 void previsit( MemberExpr * memExpr ) { 347 if ( MemberExpr * otherMember = cast< MemberExpr >( other ) ) { 348 if ( otherMember->member == memExpr->member ) { 349 other = otherMember->aggregate; 350 return; 351 } 352 } 353 isSimilar = false; 354 } 355 356 void previsit( VariableExpr * varExpr ) { 357 if ( VariableExpr * otherVar = cast< VariableExpr >( other ) ) { 358 if ( otherVar->var == varExpr->var ) { 359 return; 360 } 361 } 362 isSimilar = false; 363 } 364 365 void previsit( AddressExpr * ) { 366 if ( AddressExpr * addrExpr = cast< AddressExpr >( other ) ) { 367 other = addrExpr->arg; 368 return; 369 } 370 isSimilar = false; 371 } 372 373 Expression * other = nullptr; 374 bool isSimilar = true; 375 }; 376 377 bool structurallySimilar( Expression * e1, Expression * e2 ) { 378 PassVisitor<StructuralChecker> checker; 379 checker.pass.other = e2; 380 e1->accept( checker ); 381 return checker.pass.isSimilar; 382 } 383 } 384 385 void SelfAssignChecker::previsit( ApplicationExpr * appExpr ) { 386 DeclarationWithType * function = getFunction( appExpr ); 387 if ( isAssignment( function ) ) { 388 if ( appExpr->args.size() == 2 ) { 389 // check for structural similarity (same variable use, ignore casts, etc. - but does not look too deeply, anything looking like a function is off limits) 390 if ( structurallySimilar( appExpr->args.front(), appExpr->args.back() ) ) { 391 SemanticWarning( appExpr->location, Warning::SelfAssignment, toCString( appExpr->args.front() ) ); 392 } 393 } 394 } 395 } 396 313 397 Expression * InsertImplicitCalls::postmutate( ApplicationExpr * appExpr ) { 314 398 if ( VariableExpr * function = dynamic_cast< VariableExpr * > ( appExpr->get_function() ) ) { … … 364 448 ResolvExpr::findVoidExpression( resolved, indexer ); 365 449 assert( resolved ); 366 if ( resolved-> get_env()) {450 if ( resolved->env ) { 367 451 // Extract useful information and discard new environments. Keeping them causes problems in PolyMutator passes. 368 env->add( *resolved-> get_env());369 delete resolved-> get_env();370 resolved-> set_env( nullptr );452 env->add( *resolved->env ); 453 delete resolved->env; 454 resolved->env = nullptr; 371 455 } // if 372 456 delete stmt; … … 550 634 // add destructors after current statement 551 635 for ( Expression * dtor : dtors ) { 636 // take relevant bindings from environment 637 assert( ! dtor->env ); 638 dtor->env = maybeClone( env ); 552 639 stmtsToAddAfter.push_back( new ExprStmt( dtor ) ); 553 640 } // for -
src/Makefile.in
r094476d rcaa649b 247 247 SynTree/driver_cfa_cpp-TypeDecl.$(OBJEXT) \ 248 248 SynTree/driver_cfa_cpp-Initializer.$(OBJEXT) \ 249 SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \250 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \251 249 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \ 252 250 SynTree/driver_cfa_cpp-Attribute.$(OBJEXT) \ … … 527 525 SynTree/FunctionDecl.cc SynTree/AggregateDecl.cc \ 528 526 SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \ 529 SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \ 530 SynTree/TypeSubstitution.cc SynTree/Attribute.cc \ 531 SynTree/VarExprReplacer.cc Tuples/TupleAssignment.cc \ 532 Tuples/TupleExpansion.cc Tuples/Explode.cc \ 533 Virtual/ExpandCasts.cc 527 SynTree/Initializer.cc SynTree/TypeSubstitution.cc \ 528 SynTree/Attribute.cc SynTree/VarExprReplacer.cc \ 529 Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \ 530 Tuples/Explode.cc Virtual/ExpandCasts.cc 534 531 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \ 535 532 ${cfa_cpplib_PROGRAMS}} … … 911 908 SynTree/driver_cfa_cpp-Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \ 912 909 SynTree/$(DEPDIR)/$(am__dirstamp) 913 SynTree/driver_cfa_cpp-Visitor.$(OBJEXT): SynTree/$(am__dirstamp) \914 SynTree/$(DEPDIR)/$(am__dirstamp)915 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \916 SynTree/$(DEPDIR)/$(am__dirstamp)917 910 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT): \ 918 911 SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp) … … 1053 1046 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-FunctionType.Po@am__quote@ 1054 1047 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Initializer.Po@am__quote@ 1055 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po@am__quote@1056 1048 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-NamedTypeDecl.Po@am__quote@ 1057 1049 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-ObjectDecl.Po@am__quote@ … … 1069 1061 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@ 1070 1062 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarExprReplacer.Po@am__quote@ 1071 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@1072 1063 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@ 1073 1064 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Po@am__quote@ … … 2478 2469 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2479 2470 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Initializer.obj `if test -f 'SynTree/Initializer.cc'; then $(CYGPATH_W) 'SynTree/Initializer.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Initializer.cc'; fi` 2480 2481 SynTree/driver_cfa_cpp-Visitor.o: SynTree/Visitor.cc2482 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Visitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo -c -o SynTree/driver_cfa_cpp-Visitor.o `test -f 'SynTree/Visitor.cc' || echo '$(srcdir)/'`SynTree/Visitor.cc2483 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po2484 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/Visitor.cc' object='SynTree/driver_cfa_cpp-Visitor.o' libtool=no @AMDEPBACKSLASH@2485 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2486 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Visitor.o `test -f 'SynTree/Visitor.cc' || echo '$(srcdir)/'`SynTree/Visitor.cc2487 2488 SynTree/driver_cfa_cpp-Visitor.obj: SynTree/Visitor.cc2489 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Visitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo -c -o SynTree/driver_cfa_cpp-Visitor.obj `if test -f 'SynTree/Visitor.cc'; then $(CYGPATH_W) 'SynTree/Visitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Visitor.cc'; fi`2490 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po2491 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/Visitor.cc' object='SynTree/driver_cfa_cpp-Visitor.obj' libtool=no @AMDEPBACKSLASH@2492 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2493 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Visitor.obj `if test -f 'SynTree/Visitor.cc'; then $(CYGPATH_W) 'SynTree/Visitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Visitor.cc'; fi`2494 2495 SynTree/driver_cfa_cpp-Mutator.o: SynTree/Mutator.cc2496 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Mutator.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo -c -o SynTree/driver_cfa_cpp-Mutator.o `test -f 'SynTree/Mutator.cc' || echo '$(srcdir)/'`SynTree/Mutator.cc2497 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po2498 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/Mutator.cc' object='SynTree/driver_cfa_cpp-Mutator.o' libtool=no @AMDEPBACKSLASH@2499 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2500 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.o `test -f 'SynTree/Mutator.cc' || echo '$(srcdir)/'`SynTree/Mutator.cc2501 2502 SynTree/driver_cfa_cpp-Mutator.obj: SynTree/Mutator.cc2503 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Mutator.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`2504 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po2505 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/Mutator.cc' object='SynTree/driver_cfa_cpp-Mutator.obj' libtool=no @AMDEPBACKSLASH@2506 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2507 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`2508 2471 2509 2472 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc -
src/Parser/ExpressionNode.cc
r094476d rcaa649b 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 27 22:51:55 201713 // Update Count : 7 8112 // Last Modified On : Sat Mar 3 18:22:33 2018 13 // Update Count : 796 14 14 // 15 15 … … 58 58 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; } 59 59 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; } 60 static inline bool checkB( char c ) { return c == 'b' || c == 'B'; } 60 61 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; } 61 62 … … 116 117 117 118 unsigned long long int v; // converted integral value 118 size_t last = str.length() - 1; // last characterof constant119 size_t last = str.length() - 1; // last subscript of constant 119 120 Expression * ret; 120 121 … … 129 130 } // if 130 131 131 if ( str[0] == '0' ) { // octal/hex constant ? 132 // Cannot be "0" 133 134 if ( str[0] == '0' ) { // radix character ? 132 135 dec = false; 133 if ( last != 0 && checkX( str[1] ) ) {// hex constant ?136 if ( checkX( str[1] ) ) { // hex constant ? 134 137 sscanf( (char *)str.c_str(), "%llx", &v ); 138 //printf( "%llx %llu\n", v, v ); 139 } else if ( checkB( str[1] ) ) { // binary constant ? 140 v = 0; 141 for ( unsigned int i = 2;; i += 1 ) { // compute value 142 if ( str[i] == '1' ) v |= 1; 143 if ( i == last ) break; 144 v <<= 1; 145 } // for 135 146 //printf( "%llx %llu\n", v, v ); 136 147 } else { // octal constant -
src/Parser/lex.ll
r094476d rcaa649b 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Thu Feb 22 18:11:27201813 * Update Count : 6 3712 * Last Modified On : Sat Mar 3 18:38:16 2018 13 * Update Count : 640 14 14 */ 15 15 … … 77 77 %} 78 78 79 binary [0-1] 79 80 octal [0-7] 80 81 nonzero [1-9] … … 103 104 nonzero_digits ({nonzero})|({nonzero}({decimal}|"_")*{decimal}) 104 105 decimal_constant {nonzero_digits}{integer_suffix_opt} 106 107 binary_digits ({binary})|({binary}({binary}|"_")*{binary}) 108 binary_prefix "0"[bB]"_"? 109 binary_constant {binary_prefix}{binary_digits}{integer_suffix_opt} 105 110 106 111 hex_digits ({hex})|({hex}({hex}|"_")*{hex}) … … 315 320 316 321 /* numeric constants */ 322 {binary_constant} { NUMERIC_RETURN(INTEGERconstant); } 323 {octal_constant} { NUMERIC_RETURN(INTEGERconstant); } 317 324 {decimal_constant} { NUMERIC_RETURN(INTEGERconstant); } 318 {octal_constant} { NUMERIC_RETURN(INTEGERconstant); }319 325 {hex_constant} { NUMERIC_RETURN(INTEGERconstant); } 320 326 {floating_decimal} { NUMERIC_RETURN(FLOATING_DECIMALconstant); } // must appear before floating_constant -
src/ResolvExpr/Resolver.cc
r094476d rcaa649b 788 788 stmtExpr->accept( resolver ); 789 789 stmtExpr->computeResult(); 790 // xxx - aggregate the environments from all statements? Possibly in AlternativeFinder instead? 790 791 } 791 792 … … 793 794 visit_children = false; 794 795 // xxx - fallback init has been removed => remove fallbackInit function and remove complexity from FixInit and remove C-init from ConstructorInit 795 maybeAccept( ctorInit-> get_ctor(), *visitor );796 maybeAccept( ctorInit-> get_dtor(), *visitor );796 maybeAccept( ctorInit->ctor, *visitor ); 797 maybeAccept( ctorInit->dtor, *visitor ); 797 798 798 799 // found a constructor - can get rid of C-style initializer 799 delete ctorInit-> get_init();800 ctorInit-> set_init( NULL );800 delete ctorInit->init; 801 ctorInit->init = nullptr; 801 802 802 803 // intrinsic single parameter constructors and destructors do nothing. Since this was 803 804 // implicitly generated, there's no way for it to have side effects, so get rid of it 804 805 // to clean up generated code. 805 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit-> get_ctor()) ) {806 delete ctorInit-> get_ctor();807 ctorInit-> set_ctor( NULL );808 } 809 810 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit-> get_dtor()) ) {811 delete ctorInit-> get_dtor();812 ctorInit-> set_dtor( NULL );806 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->ctor ) ) { 807 delete ctorInit->ctor; 808 ctorInit->ctor = nullptr; 809 } 810 811 if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->dtor ) ) { 812 delete ctorInit->dtor; 813 ctorInit->dtor = nullptr; 813 814 } 814 815 -
src/ResolvExpr/TypeEnvironment.cc
r094476d rcaa649b 118 118 env.push_back( newClass ); 119 119 } // for 120 } 121 122 void TypeEnvironment::add( const TypeSubstitution & sub ) { 123 EqvClass newClass; 124 for ( auto p : sub ) { 125 newClass.vars.insert( p.first ); 126 newClass.type = p.second->clone(); 127 newClass.allowWidening = false; 128 // Minimal assumptions. Not technically correct, but might be good enough, and 129 // is the best we can do at the moment since information is lost in the 130 // transition to TypeSubstitution 131 newClass.data = TypeDecl::Data{ TypeDecl::Dtype, false }; 132 add( newClass ); 133 } 120 134 } 121 135 -
src/ResolvExpr/TypeEnvironment.h
r094476d rcaa649b 76 76 void add( const EqvClass &eqvClass ); 77 77 void add( const Type::ForallList &tyDecls ); 78 void add( const TypeSubstitution & sub ); 78 79 template< typename SynTreeClass > int apply( SynTreeClass *&type ) const; 79 80 template< typename SynTreeClass > int applyFree( SynTreeClass *&type ) const; -
src/SynTree/Mutator.h
r094476d rcaa649b 22 22 class Mutator { 23 23 protected: 24 Mutator() ;25 virtual ~Mutator() ;24 Mutator() = default; 25 virtual ~Mutator() = default; 26 26 public: 27 27 virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ) = 0; -
src/SynTree/TypeSubstitution.cc
r094476d rcaa649b 104 104 bool TypeSubstitution::empty() const { 105 105 return typeEnv.empty() && varEnv.empty(); 106 } 107 108 namespace { 109 struct EnvTrimmer { 110 TypeSubstitution * env, * newEnv; 111 EnvTrimmer( TypeSubstitution * env, TypeSubstitution * newEnv ) : env( env ), newEnv( newEnv ){} 112 void previsit( TypeDecl * tyDecl ) { 113 // transfer known bindings for seen type variables 114 if ( Type * t = env->lookup( tyDecl->name ) ) { 115 newEnv->add( tyDecl->name, t ); 116 } 117 } 118 }; 119 } // namespace 120 121 /// reduce environment to just the parts that are referenced in a given expression 122 TypeSubstitution * TypeSubstitution::newFromExpr( Expression * expr, TypeSubstitution * env ) { 123 if ( env ) { 124 TypeSubstitution * newEnv = new TypeSubstitution(); 125 PassVisitor<EnvTrimmer> trimmer( env, newEnv ); 126 expr->accept( trimmer ); 127 return newEnv; 128 } 129 return nullptr; 106 130 } 107 131 -
src/SynTree/TypeSubstitution.h
r094476d rcaa649b 55 55 void extract( TypeInstListIterator begin, TypeInstListIterator end, TypeSubstitution &result ); 56 56 57 /// create a new TypeSubstitution using bindings from env containing all of the type variables in expr 58 static TypeSubstitution * newFromExpr( Expression * expr, TypeSubstitution * env ); 59 57 60 void normalize(); 58 61 … … 79 82 TypeEnvType typeEnv; 80 83 VarEnvType varEnv; 84 85 public: 86 // has to come after declaration of typeEnv 87 auto begin() -> decltype( typeEnv.begin() ) { return typeEnv.begin(); } 88 auto end() -> decltype( typeEnv. end() ) { return typeEnv. end(); } 89 auto begin() const -> decltype( typeEnv.begin() ) { return typeEnv.begin(); } 90 auto end() const -> decltype( typeEnv. end() ) { return typeEnv. end(); } 81 91 }; 82 92 -
src/SynTree/Visitor.h
r094476d rcaa649b 21 21 class Visitor { 22 22 protected: 23 Visitor() ;24 virtual ~Visitor() ;23 Visitor() = default; 24 virtual ~Visitor() = default; 25 25 public: 26 26 // visit: Default implementation of all functions visits the children -
src/SynTree/module.mk
r094476d rcaa649b 46 46 SynTree/TypeDecl.cc \ 47 47 SynTree/Initializer.cc \ 48 SynTree/Visitor.cc \49 SynTree/Mutator.cc \50 48 SynTree/TypeSubstitution.cc \ 51 49 SynTree/Attribute.cc \ -
src/Tuples/TupleAssignment.cc
r094476d rcaa649b 281 281 } 282 282 283 // removes environments from subexpressions within statement exprs, which could throw off later passes like those in Box which rely on PolyMutator .283 // removes environments from subexpressions within statement exprs, which could throw off later passes like those in Box which rely on PolyMutator, and adds the bindings to the compositeEnv 284 284 // xxx - maybe this should happen in alternative finder for every StmtExpr? 285 // xxx - it's possible that these environments could contain some useful information. Maybe the right thing to do is aggregate the environments and pass the aggregate back to be added into the compositeEnv286 285 struct EnvRemover { 287 286 void previsit( ExprStmt * stmt ) { 288 delete stmt->expr->env; 289 stmt->expr->env = nullptr; 290 } 287 assert( compositeEnv ); 288 if ( stmt->expr->env ) { 289 compositeEnv->add( *stmt->expr->env ); 290 delete stmt->expr->env; 291 stmt->expr->env = nullptr; 292 } 293 } 294 295 ResolvExpr::TypeEnvironment * compositeEnv = nullptr; 291 296 }; 292 297 … … 300 305 ResolvExpr::resolveCtorInit( ctorInit, spotter.currentFinder.get_indexer() ); // resolve ctor/dtors for the new object 301 306 PassVisitor<EnvRemover> rm; // remove environments from subexpressions of StmtExprs 307 rm.pass.compositeEnv = &compositeEnv; 302 308 ctorInit->accept( rm ); 303 309 } -
src/libcfa/limits
r094476d rcaa649b 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 7 09:33:57 201713 // Update Count : 712 // Last Modified On : Thu Mar 1 16:20:54 2018 13 // Update Count : 13 14 14 // 15 15 … … 18 18 // Integral Constants 19 19 20 extern const signed char MIN; 21 extern const unsigned char MIN; 20 22 extern const short int MIN; 23 extern const unsigned short int MIN; 21 24 extern const int MIN; 25 extern const unsigned int MIN; 22 26 extern const long int MIN; 27 extern const unsigned long int MIN; 23 28 extern const long long int MIN; 29 extern const unsigned long long int MIN; 24 30 31 extern const signed char MAX; 32 extern const unsigned char MAX; 25 33 extern const short int MAX; 26 34 extern const unsigned short int MAX; … … 33 41 34 42 // Floating-Point Constants 43 44 extern const float MIN; 45 extern const double MIN; 46 extern const long double MIN; 47 extern const float _Complex MIN; 48 extern const double _Complex MIN; 49 extern const long double _Complex MIN; 50 51 extern const float MAX; 52 extern const double MAX; 53 extern const long double MAX; 54 extern const float _Complex MAX; 55 extern const double _Complex MAX; 56 extern const long double _Complex MAX; 35 57 36 58 extern const float PI; // pi … … 55 77 extern const long double _2_SQRT_PI; // 2 / sqrt(pi) 56 78 57 extern const _Complex PI;// pi58 extern const _Complex PI_2;// pi / 259 extern const _Complex PI_4;// pi / 460 extern const _Complex _1_PI;// 1 / pi61 extern const _Complex _2_PI;// 2 / pi62 extern const _Complex _2_SQRT_PI;// 2 / sqrt(pi)79 extern const float _Complex PI; // pi 80 extern const float _Complex PI_2; // pi / 2 81 extern const float _Complex PI_4; // pi / 4 82 extern const float _Complex _1_PI; // 1 / pi 83 extern const float _Complex _2_PI; // 2 / pi 84 extern const float _Complex _2_SQRT_PI; // 2 / sqrt(pi) 63 85 64 extern const long _Complex PI; // pi 65 extern const long _Complex PI_2; // pi / 2 66 extern const long _Complex PI_4; // pi / 4 67 extern const long _Complex _1_PI; // 1 / pi 68 extern const long _Complex _2_PI; // 2 / pi 69 extern const long _Complex _2_SQRT_PI; // 2 / sqrt(pi) 86 extern const double _Complex PI; // pi 87 extern const double _Complex PI_2; // pi / 2 88 extern const double _Complex PI_4; // pi / 4 89 extern const double _Complex _1_PI; // 1 / pi 90 extern const double _Complex _2_PI; // 2 / pi 91 extern const double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 92 93 extern const long double _Complex PI; // pi 94 extern const long double _Complex PI_2; // pi / 2 95 extern const long double _Complex PI_4; // pi / 4 96 extern const long double _Complex _1_PI; // 1 / pi 97 extern const long double _Complex _2_PI; // 2 / pi 98 extern const long double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 70 99 71 100 extern const float E; // e … … 93 122 extern const long double _1_SQRT_2; // 1/sqrt(2) 94 123 95 extern const _Complex E;// e96 extern const _Complex LOG2_E;// log_2(e)97 extern const _Complex LOG10_E;// log_10(e)98 extern const _Complex LN_2;// log_e(2)99 extern const _Complex LN_10;// log_e(10)100 extern const _Complex SQRT_2;// sqrt(2)101 extern const _Complex _1_SQRT_2;// 1 / sqrt(2)124 extern const float _Complex E; // e 125 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) 102 131 103 extern const long _Complex E; // e 104 extern const long _Complex LOG2_E; // log_2(e) 105 extern const long _Complex LOG10_E; // log_10(e) 106 extern const long _Complex LN_2; // log_e(2) 107 extern const long _Complex LN_10; // log_e(10) 108 extern const long _Complex SQRT_2; // sqrt(2) 109 extern const long _Complex _1_SQRT_2; // 1 / sqrt(2) 132 extern const double _Complex E; // e 133 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) 139 140 extern const long double _Complex E; // e 141 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) 110 147 111 148 // Local Variables: // -
src/libcfa/limits.c
r094476d rcaa649b 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 12 10:34:48 201613 // Update Count : 1712 // Last Modified On : Thu Mar 1 16:22:51 2018 13 // Update Count : 74 14 14 // 15 15 16 #include <limits.h> 17 #include <float.h> 18 #define __USE_GNU // get M_* constants 19 #include <math.h> 20 #include <complex.h> 16 21 #include "limits" 17 22 18 23 // Integral Constants 19 24 20 const short int MIN = -32768; 21 const int MIN = -2147483648; 22 #if __WORDSIZE == 64 23 const long int MIN = -9223372036854775807L - 1L; 24 #else 25 const long int MIN = (int)MIN; 26 #endif // M64 27 const long long int MIN = -9223372036854775807LL - 1LL; 25 const signed char MIN = SCHAR_MIN; 26 const unsigned char MIN = 0; 27 const short int MIN = SHRT_MIN; 28 const unsigned short int MIN = 0; 29 const int MIN = INT_MIN; 30 const unsigned int MIN = 0; 31 const long int MIN = LONG_MIN; 32 const unsigned long int MIN = 0; 33 const long long int MIN = LLONG_MIN; 34 const unsigned long long int MIN = 0; 28 35 29 const short int MAX = 32767; 30 const unsigned short int MAX = 65535; 31 const int MAX = 2147483647; 32 const unsigned int MAX = 4294967295_U; 33 #if __WORDSIZE == 64 34 const long int MAX = 9223372036854775807_L; 35 #else 36 const long int MAX = (int)MAX; 37 #endif // M64 38 const unsigned long int MAX = 4294967295_U; 39 const long long int MAX = 9223372036854775807_LL; 40 const unsigned long long int MAX = 18446744073709551615_ULL; 36 const signed char MAX = SCHAR_MAX; 37 const unsigned char MAX = UCHAR_MAX; 38 const short int MAX = SHRT_MAX; 39 const unsigned short int MAX = USHRT_MAX; 40 const int MAX = INT_MAX; 41 const unsigned int MAX = UINT_MAX; 42 const long int MAX = LONG_MAX; 43 const unsigned long int MAX = ULONG_MAX; 44 const long long int MAX = LLONG_MAX; 45 const unsigned long long int MAX = ULLONG_MAX; 41 46 42 47 // Floating-Point Constants 43 48 44 const float PI = 3.141592_F; // pi45 const float PI_2 = 1.570796_F; // pi / 246 const float PI_4 = 0.7853981_F; // pi / 447 const float _ 1_PI = 0.3183098_F; // 1 / pi48 const float _2_PI = 0.6366197_F; // 2 / pi49 const float _2_SQRT_PI = 1.128379_F; // 2 / sqrt(pi)49 const float MIN = FLT_MIN; 50 const double MIN = DBL_MIN; 51 const long double MIN = LDBL_MIN; 52 const float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I; 53 const double _Complex MIN = DBL_MIN + DBL_MIN * I; 54 const long double _Complex MIN = LDBL_MIN + LDBL_MIN * I; 50 55 51 const double PI = 3.14159265358979323846_D; // pi52 const double PI_2 = 1.57079632679489661923_D; // pi / 253 const double PI_4 = 0.78539816339744830962_D; // pi / 454 const double _1_PI = 0.31830988618379067154_D; // 1 / pi55 const double _ 2_PI = 0.63661977236758134308_D; // 2 / pi56 const double _2_SQRT_PI = 1.12837916709551257390_D; // 2 / sqrt(pi)56 const float MAX = FLT_MAX; 57 const double MAX = DBL_MAX; 58 const long double MAX = LDBL_MAX; 59 const float _Complex MAX = FLT_MAX + FLT_MAX * I; 60 const double _Complex MAX = DBL_MAX + DBL_MAX * I; 61 const long double _Complex MAX = LDBL_MAX + LDBL_MAX * I; 57 62 58 const long double PI = 3.1415926535897932384626433832795029_DL;// pi59 const long double PI_2 = 1.5707963267948966192313216916397514_DL;// pi / 260 const long double PI_4 = 0.7853981633974483096156608458198757_DL;// pi / 461 const long double _1_PI = 0.3183098861837906715377675267450287_DL;// 1 / pi62 const long double _2_PI = 0.6366197723675813430755350534900574_DL;// 2 / pi63 const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL;// 2 / sqrt(pi)63 const float PI = (float)M_PI; // pi 64 const float PI_2 = (float)M_PI_2; // pi / 2 65 const float PI_4 = (float)M_PI_4; // pi / 4 66 const float _1_PI = (float)M_1_PI; // 1 / pi 67 const float _2_PI = (float)M_2_PI; // 2 / pi 68 const float _2_SQRT_PI = (float)M_2_SQRTPI; // 2 / sqrt(pi) 64 69 65 const double _Complex PI = 3.14159265358979323846_D+0.0_iD;// pi66 const double _Complex PI_2 = 1.57079632679489661923_D+0.0_iD;// pi / 267 const double _Complex PI_4 = 0.78539816339744830962_D+0.0_iD;// pi / 468 const double _ Complex _1_PI = 0.31830988618379067154_D+0.0_iD;// 1 / pi69 const double _ Complex _2_PI = 0.63661977236758134308_D+0.0_iD;// 2 / pi70 const double _ Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD;// 2 / sqrt(pi)70 const double PI = M_PI; // pi 71 const double PI_2 = M_PI_2; // pi / 2 72 const double PI_4 = M_PI_4; // pi / 4 73 const double _1_PI = M_1_PI; // 1 / pi 74 const double _2_PI = M_2_PI; // 2 / pi 75 const double _2_SQRT_PI = M_2_SQRTPI; // 2 / sqrt(pi) 71 76 72 const long double _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL;// pi73 const long double _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL;// pi / 274 const long double _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL;// pi / 475 const long double _ Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL;// 1 / pi76 const long double _ Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL;// 2 / pi77 const long double _ Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL;// 2 / sqrt(pi)77 const long double PI = M_PIl; // pi 78 const long double PI_2 = M_PI_2l; // pi / 2 79 const long double PI_4 = M_PI_4l; // pi / 4 80 const long double _1_PI = M_1_PIl; // 1 / pi 81 const long double _2_PI = M_2_PIl; // 2 / pi 82 const long double _2_SQRT_PI = M_2_SQRTPIl; // 2 / sqrt(pi) 78 83 79 const float E = 2.718281; // e 80 const float LOG2_E = 1.442695; // log_2(e) 81 const float LOG10_E = 0.4342944; // log_10(e) 82 const float LN_2 = 0.6931471; // log_e(2) 83 const float LN_10 = 2.302585; // log_e(10) 84 const float SQRT_2 = 1.414213; // sqrt(2) 85 const float _1_SQRT_2 = 0.7071067; // 1 / sqrt(2) 84 const float _Complex PI = (float)M_PI + 0.0_iF; // pi 85 const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF; // pi / 2 86 const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF; // pi / 4 87 const float _Complex _1_PI = (float)M_1_PI + 0.0_iF; // 1 / pi 88 const float _Complex _2_PI = (float)M_2_PI + 0.0_iF; // 2 / pi 89 const float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi) 86 90 87 const double E = 2.7182818284590452354_D; // e 88 const double LOG2_E = 1.4426950408889634074_D; // log_2(e) 89 const double LOG10_E = 0.43429448190325182765_D; // log_10(e) 90 const double LN_2 = 0.69314718055994530942_D; // log_e(2) 91 const double LN_10 = 2.30258509299404568402_D; // log_e(10) 92 const double SQRT_2 = 1.41421356237309504880_D; // sqrt(2) 93 const double _1_SQRT_2 = 0.70710678118654752440_D; // 1 / sqrt(2) 91 const double _Complex PI = M_PI + 0.0_iD; // pi 92 const double _Complex PI_2 = M_PI_2 + 0.0_iD; // pi / 2 93 const double _Complex PI_4 = M_PI_4 + 0.0_iD; // pi / 4 94 const double _Complex _1_PI = M_1_PI + 0.0_iD; // 1 / pi 95 const double _Complex _2_PI = M_2_PI + 0.0_iD; // 2 / pi 96 const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD; // 2 / sqrt(pi) 94 97 95 const long double E = 2.7182818284590452353602874713526625_DL; // e 96 const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e) 97 const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e) 98 const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2) 99 const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10) 100 const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2) 101 const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2) 98 const long double _Complex PI = M_PIl + 0.0_iL; // pi 99 const long double _Complex PI_2 = M_PI_2l + 0.0_iL; // pi / 2 100 const long double _Complex PI_4 = M_PI_4l + 0.0_iL; // pi / 4 101 const long double _Complex _1_PI = M_1_PIl + 0.0_iL; // 1 / pi 102 const long double _Complex _2_PI = M_2_PIl + 0.0_iL; // 2 / pi 103 const long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi) 102 104 103 const double _Complex E = 2.7182818284590452354_D+0.0_iD;// e104 const double _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD;// log_2(e)105 const double _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD;// log_10(e)106 const double _Complex LN_2 = 0.69314718055994530942_D+0.0_iD;// log_e(2)107 const double _Complex LN_10 = 2.30258509299404568402_D+0.0_iD;// log_e(10)108 const double _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD;// sqrt(2)109 const double _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD;// 1 / sqrt(2)105 const float E = (float)M_E; // e 106 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) 110 112 111 const long double _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e 112 const long double _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e) 113 const long double _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e) 114 const long double _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2) 115 const long double _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10) 116 const long double _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2) 117 const long double _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2) 113 const double E = M_E; // e 114 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) 120 121 const long double E = M_El; // e 122 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) 128 129 const float _Complex E = M_E + 0.0_iF; // e 130 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) 136 137 const double _Complex E = M_E + 0.0_iD; // e 138 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) 144 145 const long double _Complex E = M_El + 0.0_iL; // e 146 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) 118 152 119 153 // Local Variables: // -
src/tests/.expect/KRfunctions.x86.txt
r094476d rcaa649b 82 82 signed int __a__i_2; 83 83 signed int __b__i_2; 84 signed int *(*_tmp_cp_ret 0)(signed int __x__i_1, signed int __y__i_1);85 ((void)(__x__PFPi_ii__2=(((void)(_tmp_cp_ret 0=__f10__FPFPi_ii__iPiPid__1(3, (&__a__i_2), (&__b__i_2), 3.5))) , _tmp_cp_ret0)));86 ((void)(_tmp_cp_ret 0) /* ^?{} */);84 signed int *(*_tmp_cp_ret2)(signed int __x__i_1, signed int __y__i_1); 85 ((void)(__x__PFPi_ii__2=(((void)(_tmp_cp_ret2=__f10__FPFPi_ii__iPiPid__1(3, (&__a__i_2), (&__b__i_2), 3.5))) , _tmp_cp_ret2))); 86 ((void)(_tmp_cp_ret2) /* ^?{} */); 87 87 const signed int __f1__FCi_iPiPi__2(signed int __a__i_2, signed int *__b__Pi_2, signed int *__c__Pi_2){ 88 88 __attribute__ ((unused)) const signed int ___retval_f1__Ci_2; -
src/tests/.expect/literals.x64.txt
r094476d rcaa649b 522 522 signed int __main__Fi___1(){ 523 523 __attribute__ ((unused)) signed int ___retval_main__i_1; 524 ((void)0b01101011); 525 ((void)0b01101011u); 526 ((void)0b01101011l); 527 ((void)0b01101011ll); 528 ((void)0b01101011ul); 529 ((void)0b01101011lu); 530 ((void)0b01101011ull); 531 ((void)0b01101011llu); 532 ((void)(+0b01101011)); 533 ((void)(+0b01101011u)); 534 ((void)(+0b01101011l)); 535 ((void)(+0b01101011ll)); 536 ((void)(+0b01101011ul)); 537 ((void)(+0b01101011lu)); 538 ((void)(+0b01101011ull)); 539 ((void)(+0b01101011llu)); 540 ((void)(-0b01101011)); 541 ((void)(-0b01101011u)); 542 ((void)(-0b01101011l)); 543 ((void)(-0b01101011ll)); 544 ((void)(-0b01101011ul)); 545 ((void)(-0b01101011lu)); 546 ((void)(-0b01101011ull)); 547 ((void)(-0b01101011llu)); 524 548 ((void)01234567); 525 549 ((void)01234567u); … … 1017 1041 ((void)(-0X0123456789.0123456789P-09F)); 1018 1042 ((void)(-0X0123456789.0123456789P-09L)); 1043 ((void)((signed char )0b01101011)); 1044 ((void)((signed short int )0b01101011)); 1045 ((void)((signed int )0b01101011)); 1046 ((void)((signed long int )0b01101011)); 1047 ((void)((__int128 )0b01101011)); 1048 ((void)((unsigned char )0b01101011u)); 1049 ((void)((signed short int )0b01101011u)); 1050 ((void)((unsigned int )0b01101011u)); 1051 ((void)((signed long int )0b01101011u)); 1052 ((void)((__int128 )0b01101011u)); 1053 ((void)(+((signed int )((signed char )0b01101011)))); 1054 ((void)(+((signed int )((signed short int )0b01101011)))); 1055 ((void)(+((signed int )0b01101011))); 1056 ((void)(+((signed long int )0b01101011))); 1057 ((void)(+((float )((__int128 )0b01101011)))); 1058 ((void)(+((signed int )((unsigned char )0b01101011u)))); 1059 ((void)(+((signed int )((signed short int )0b01101011u)))); 1060 ((void)(+((unsigned int )0b01101011u))); 1061 ((void)(+((signed long int )0b01101011u))); 1062 ((void)(+((float )((__int128 )0b01101011u)))); 1063 ((void)(-((signed int )((signed char )0b01101011)))); 1064 ((void)(-((signed int )((signed short int )0b01101011)))); 1065 ((void)(-((signed int )0b01101011))); 1066 ((void)(-((signed long int )0b01101011))); 1067 ((void)(-((float )((__int128 )0b01101011)))); 1068 ((void)(-((signed int )((unsigned char )0b01101011u)))); 1069 ((void)(-((signed int )((signed short int )0b01101011u)))); 1070 ((void)(-((unsigned int )0b01101011u))); 1071 ((void)(-((signed long int )0b01101011u))); 1072 ((void)(-((float )((__int128 )0b01101011u)))); 1019 1073 ((void)((signed char )01234567)); 1020 1074 ((void)((signed short int )01234567)); -
src/tests/.expect/user_literals.txt
r094476d rcaa649b 1 1 11.0714285714286 2 1 1.072252 15 3 3 11.0714285714286 4 24.8 5 11.248 4 6 11.0714285714286 5 11.0714285714286 6 22.0457142857143 7 28.0657142857143 7 8 secs 1 8 9 secs 23 -
src/tests/Makefile.am
r094476d rcaa649b 123 123 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 124 124 125 # Warnings 126 warnings/self-assignment: warnings/self-assignment.c @CFA_BINDIR@/@CFA_NAME@ 127 ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} 2> ${@} -fsyntax-only -
src/tests/Makefile.in
r094476d rcaa649b 800 800 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 801 801 802 # Warnings 803 warnings/self-assignment: warnings/self-assignment.c @CFA_BINDIR@/@CFA_NAME@ 804 ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} 2> ${@} -fsyntax-only 805 802 806 # Tell versions [3.59,3.63) of GNU make to not export all variables. 803 807 # Otherwise a system limit (for SysV at least) may be exceeded. -
src/tests/limits.c
r094476d rcaa649b 10 10 // Created On : Tue May 10 20:44:20 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue May 10 20:45:28 201613 // Update Count : 112 // Last Modified On : Thu Mar 1 16:21:55 2018 13 // Update Count : 7 14 14 // 15 15 … … 18 18 // Integral Constants 19 19 20 signed char m = MIN; 21 unsigned char m = MIN; 20 22 short int m = MIN; 23 unsigned short int m = MIN; 21 24 int m = MIN; 25 unsigned int m = MIN; 22 26 long int m = MIN; 27 unsigned long int m = MIN; 23 28 long long int m = MIN; 29 unsigned long long int m = MIN; 24 30 31 signed char M = MAX; 32 unsigned char M = MAX; 25 33 short int M = MAX; 26 34 unsigned short int M = MAX; … … 33 41 34 42 // Floating-Point Constants 43 44 float m = MIN; 45 double m = MIN; 46 long double m = MIN; 47 float _Complex m = MIN; 48 double _Complex m = MIN; 49 long double _Complex m = MIN; 50 51 float M = MAX; 52 double M = MAX; 53 long double M = MAX; 54 float _Complex M = MAX; 55 double _Complex M = MAX; 56 long double _Complex M = MAX; 35 57 36 58 float pi = PI; … … 55 77 long double _2_sqrt_pi = _2_SQRT_PI; 56 78 57 _Complex pi = PI;58 _Complex pi_2 = PI_2;59 _Complex pi_4 = PI_4;60 _Complex _1_pi = _1_PI;61 _Complex _2_pi = _2_PI;62 _Complex _2_sqrt_pi = _2_SQRT_PI;79 float _Complex pi = PI; 80 float _Complex pi_2 = PI_2; 81 float _Complex pi_4 = PI_4; 82 float _Complex _1_pi = _1_PI; 83 float _Complex _2_pi = _2_PI; 84 float _Complex _2_sqrt_pi = _2_SQRT_PI; 63 85 64 long _Complex pi = PI; 65 long _Complex pi_2 = PI_2; 66 long _Complex pi_4 = PI_4; 67 long _Complex _1_pi = _1_PI; 68 long _Complex _2_pi = _2_PI; 69 long _Complex _2_sqrt_pi = _2_SQRT_PI; 86 double _Complex pi = PI; 87 double _Complex pi_2 = PI_2; 88 double _Complex pi_4 = PI_4; 89 double _Complex _1_pi = _1_PI; 90 double _Complex _2_pi = _2_PI; 91 double _Complex _2_sqrt_pi = _2_SQRT_PI; 92 93 long double _Complex pi = PI; 94 long double _Complex pi_2 = PI_2; 95 long double _Complex pi_4 = PI_4; 96 long double _Complex _1_pi = _1_PI; 97 long double _Complex _2_pi = _2_PI; 98 long double _Complex _2_sqrt_pi = _2_SQRT_PI; 70 99 71 100 float e = E; … … 93 122 long double _1_sqrt_2 = _1_SQRT_2; 94 123 95 _Complex e = E;96 _Complex log2_e = LOG2_E;97 _Complex log10_e = LOG10_E;98 _Complex ln_2 = LN_2;99 _Complex ln_10 = LN_10;100 _Complex sqrt_2 = SQRT_2;101 _Complex _1_sqrt_2 = _1_SQRT_2;124 float _Complex e = E; 125 float _Complex log2_e = LOG2_E; 126 float _Complex log10_e = LOG10_E; 127 float _Complex ln_2 = LN_2; 128 float _Complex ln_10 = LN_10; 129 float _Complex sqrt_2 = SQRT_2; 130 float _Complex _1_sqrt_2 = _1_SQRT_2; 102 131 103 long _Complex e = E; 104 long _Complex log2_e = LOG2_E; 105 long _Complex log10_e = LOG10_E; 106 long _Complex ln_2 = LN_2; 107 long _Complex ln_10 = LN_10; 108 long _Complex sqrt_2 = SQRT_2; 109 long _Complex _1_sqrt_2 = _1_SQRT_2; 132 double _Complex e = E; 133 double _Complex log2_e = LOG2_E; 134 double _Complex log10_e = LOG10_E; 135 double _Complex ln_2 = LN_2; 136 double _Complex ln_10 = LN_10; 137 double _Complex sqrt_2 = SQRT_2; 138 double _Complex _1_sqrt_2 = _1_SQRT_2; 139 140 long double _Complex e = E; 141 long double _Complex log2_e = LOG2_E; 142 long double _Complex log10_e = LOG10_E; 143 long double _Complex ln_2 = LN_2; 144 long double _Complex ln_10 = LN_10; 145 long double _Complex sqrt_2 = SQRT_2; 146 long double _Complex _1_sqrt_2 = _1_SQRT_2; 110 147 111 148 int main(int argc, char const *argv[]) { -
src/tests/literals.c
r094476d rcaa649b 10 10 // Created On : Sat Sep 9 16:34:38 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 25 20:26:00 201713 // Update Count : 13 212 // Last Modified On : Sun Mar 4 10:41:31 2018 13 // Update Count : 134 14 14 // 15 15 … … 31 31 // integer literals 32 32 33 // binary 34 0b01101011; 0b01101011u; 0b01101011l; 0b01101011ll; 0b01101011ul; 0b01101011lu; 0b01101011ull; 0b01101011llu; 35 +0b01101011; +0b01101011u; +0b01101011l; +0b01101011ll; +0b01101011ul; +0b01101011lu; +0b01101011ull; +0b01101011llu; 36 -0b01101011; -0b01101011u; -0b01101011l; -0b01101011ll; -0b01101011ul; -0b01101011lu; -0b01101011ull; -0b01101011llu; 37 33 38 // octal 34 39 01234567; 01234567u; 01234567l; 01234567ll; 01234567ul; 01234567lu; 01234567ull; 01234567llu; … … 148 153 #ifdef __CFA__ 149 154 // fixed-size length 155 156 // binary 157 0b01101011_l8; 0b01101011_l16; 0b01101011_l32; 0b01101011_l64; 0b01101011_l128; 0b01101011_l8u; 0b01101011_ul16; 0b01101011_l32u; 0b01101011_ul64; 0b01101011_ul128; 158 +0b01101011_l8; +0b01101011_l16; +0b01101011_l32; +0b01101011_l64; +0b01101011_l128; +0b01101011_l8u; +0b01101011_ul16; +0b01101011_l32u; +0b01101011_ul64; +0b01101011_ul128; 159 -0b01101011_l8; -0b01101011_l16; -0b01101011_l32; -0b01101011_l64; -0b01101011_l128; -0b01101011_l8u; -0b01101011_ul16; -0b01101011_l32u; -0b01101011_ul64; -0b01101011_ul128; 150 160 151 161 // octal -
src/tests/user_literals.c
r094476d rcaa649b 10 10 // Created On : Wed Sep 6 21:40:50 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Dec 7 09:12:36 201713 // Update Count : 5 012 // Last Modified On : Sun Mar 4 11:14:02 2018 13 // Update Count : 52 14 14 // 15 15 … … 31 31 32 32 33 struct Weight { 34 double stones; 35 }; 36 void ?{}( Weight & w ) { w.stones = 0; } // operations 33 struct Weight { double stones; }; 34 void ?{}( Weight & w ) { w.stones = 0; } 37 35 void ?{}( Weight & w, double w ) { w.stones = w; } 38 Weight ?+?( Weight l, Weight r ) { return (Weight){ l.stones + r.stones }; } 36 Weight ?+?( Weight l, Weight r ) { 37 return (Weight){ l.stones + r.stones }; 38 } 39 39 ofstream & ?|?( ofstream & os, Weight w ) { return os | w.stones; } 40 40 41 41 Weight ?`st( double w ) { return (Weight){ w }; } // backquote for user literals 42 42 Weight ?`lb( double w ) { return (Weight){ w / 14.0 }; } 43 Weight ?`kg( double w ) { return (Weight) { w * 0.1575}; } 44 43 Weight ?`kg( double w ) { return (Weight) { w * 0.16 }; } 45 44 46 45 int main() { 47 Weight w, hw = { 14 }; // 14 stone 48 w = 11`st + 1`lb; 46 Weight w, heavy = { 20 }; // 20 stone 47 w = 155`lb; 48 sout | w | endl; 49 w = 0b_1111`st; 50 sout | w | endl; 51 w = 0_233`lb; // octal weight (155) 52 sout | w | endl; 53 w = 0x_9b_u`kg; 49 54 sout | w | endl; 50 55 w = 70.3`kg; 51 56 sout | w | endl; 52 w = 1 55`lb;57 w = 11`st + 1`lb; 53 58 sout | w | endl; 54 w = 0x_9b_u`lb; // hexadecimal unsigned weight (155) 55 sout | w | endl; 56 w = 0_233`lb; // octal weight (155) 57 sout | w | endl; 58 w = 5`st + 8`kg + 25`lb + hw; 59 w = 5`st + 8`kg + 25`lb + heavy; 59 60 sout | w | endl; 60 61
Note:
See TracChangeset
for help on using the changeset viewer.