- Timestamp:
- Nov 21, 2019, 9:38:54 PM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 0a25c34, f1397d14
- Parents:
- 1c40091 (diff), 49d3128 (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:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Convert.cpp
r1c40091 r2909b515 887 887 auto expr = visitBaseExpr( node, 888 888 new AsmExpr( 889 get<Expression>().accept1(node->inout),889 new std::string(node->inout), 890 890 get<Expression>().accept1(node->constraint), 891 891 get<Expression>().accept1(node->operand) … … 2258 2258 new ast::AsmExpr( 2259 2259 old->location, 2260 GET_ACCEPT_1(inout, Expr),2260 old->inout, 2261 2261 GET_ACCEPT_1(constraint, Expr), 2262 2262 GET_ACCEPT_1(operand, Expr) -
src/AST/Expr.hpp
r1c40091 r2909b515 556 556 class AsmExpr final : public Expr { 557 557 public: 558 ptr<Expr>inout;558 std::string inout; 559 559 ptr<Expr> constraint; 560 560 ptr<Expr> operand; 561 561 562 AsmExpr( const CodeLocation & loc, const Expr *io, const Expr * con, const Expr * op )562 AsmExpr( const CodeLocation & loc, const std::string & io, const Expr * con, const Expr * op ) 563 563 : Expr( loc ), inout( io ), constraint( con ), operand( op ) {} 564 564 -
src/AST/Pass.impl.hpp
r1c40091 r2909b515 1300 1300 maybe_accept( node, &AsmExpr::result ); 1301 1301 } 1302 maybe_accept( node, &AsmExpr::inout );1303 1302 maybe_accept( node, &AsmExpr::constraint ); 1304 1303 maybe_accept( node, &AsmExpr::operand ); -
src/AST/Print.cpp
r1c40091 r2909b515 1011 1011 os << "Asm Expression:" << endl; 1012 1012 ++indent; 1013 if ( node->inout ) node->inout->accept( *this );1013 if ( !node->inout.empty() ) os << "[" << node->inout << "] "; 1014 1014 if ( node->constraint ) node->constraint->accept( *this ); 1015 1015 if ( node->operand ) node->operand->accept( *this ); -
src/CodeGen/CodeGenerator.cc
r1c40091 r2909b515 786 786 787 787 void CodeGenerator::postvisit( AsmExpr * asmExpr ) { 788 if ( asmExpr->get_inout() ) {788 if ( !asmExpr->inout.empty() ) { 789 789 output << "[ "; 790 asmExpr->get_inout()->accept( *visitor );790 output << asmExpr->inout; 791 791 output << " ] "; 792 792 } // if 793 asmExpr-> get_constraint()->accept( *visitor );793 asmExpr->constraint->accept( *visitor ); 794 794 output << " ( "; 795 asmExpr-> get_operand()->accept( *visitor );795 asmExpr->operand->accept( *visitor ); 796 796 output << " )"; 797 797 } -
src/Common/PassVisitor.impl.h
r1c40091 r2909b515 2452 2452 2453 2453 indexerScopedAccept( node->result , *this ); 2454 maybeAccept_impl ( node->inout , *this );2455 2454 maybeAccept_impl ( node->constraint, *this ); 2456 2455 maybeAccept_impl ( node->operand , *this ); … … 2464 2463 2465 2464 indexerScopedAccept( node->result , *this ); 2466 maybeAccept_impl ( node->inout , *this );2467 2465 maybeAccept_impl ( node->constraint, *this ); 2468 2466 maybeAccept_impl ( node->operand , *this ); … … 2477 2475 indexerScopedMutate( node->env , *this ); 2478 2476 indexerScopedMutate( node->result , *this ); 2479 maybeMutate_impl ( node->inout , *this );2480 2477 maybeMutate_impl ( node->constraint, *this ); 2481 2478 maybeMutate_impl ( node->operand , *this ); -
src/Common/SemanticError.cc
r1c40091 r2909b515 149 149 // Helpers 150 150 namespace ErrorHelpers { 151 Colors colors = Colors::Auto; 152 153 static inline bool with_colors() { 154 return colors == Colors::Auto ? isatty( STDERR_FILENO ) : bool(colors); 155 } 156 151 157 const std::string & error_str() { 152 static std::string str = isatty( STDERR_FILENO) ? "\e[31merror:\e[39m " : "error: ";158 static std::string str = with_colors() ? "\e[31merror:\e[39m " : "error: "; 153 159 return str; 154 160 } 155 161 156 162 const std::string & warning_str() { 157 static std::string str = isatty( STDERR_FILENO) ? "\e[95mwarning:\e[39m " : "warning: ";163 static std::string str = with_colors() ? "\e[95mwarning:\e[39m " : "warning: "; 158 164 return str; 159 165 } 160 166 161 167 const std::string & bold_ttycode() { 162 static std::string str = isatty( STDERR_FILENO) ? "\e[1m" : "";168 static std::string str = with_colors() ? "\e[1m" : ""; 163 169 return str; 164 170 } 165 171 166 172 const std::string & reset_font_ttycode() { 167 static std::string str = isatty( STDERR_FILENO) ? "\e[0m" : "";173 static std::string str = with_colors() ? "\e[0m" : ""; 168 174 return str; 169 175 } -
src/Common/SemanticError.h
r1c40091 r2909b515 97 97 // Helpers 98 98 namespace ErrorHelpers { 99 enum class Colors { 100 Never = false, 101 Always = true, 102 Auto, 103 }; 104 105 extern Colors colors; 106 99 107 const std::string & error_str(); 100 108 const std::string & warning_str(); -
src/Parser/parser.yy
r1c40091 r2909b515 1423 1423 asm_operand: // GCC 1424 1424 string_literal '(' constant_expression ')' 1425 { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( (ExpressionNode *)nullptr ), $1, maybeMoveBuild< Expression >( $3 ) ) ); }1426 | '[' constant_expression']' string_literal '(' constant_expression ')'1427 { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( $2 ), $4, maybeMoveBuild< Expression >( $6 ) ) ); }1425 { $$ = new ExpressionNode( new AsmExpr( nullptr, $1, maybeMoveBuild< Expression >( $3 ) ) ); } 1426 | '[' IDENTIFIER ']' string_literal '(' constant_expression ')' 1427 { $$ = new ExpressionNode( new AsmExpr( $2, $4, maybeMoveBuild< Expression >( $6 ) ) ); } 1428 1428 ; 1429 1429 -
src/ResolvExpr/Resolver.cc
r1c40091 r2909b515 485 485 visit_children = false; 486 486 findVoidExpression( asmExpr->operand, indexer ); 487 if ( asmExpr->get_inout() ) {488 findVoidExpression( asmExpr->inout, indexer );489 } // if490 487 } 491 488 … … 1365 1362 asmExpr = ast::mutate_field( 1366 1363 asmExpr, &ast::AsmExpr::operand, findVoidExpression( asmExpr->operand, symtab ) ); 1367 1368 if ( asmExpr->inout ) {1369 asmExpr = ast::mutate_field(1370 asmExpr, &ast::AsmExpr::inout, findVoidExpression( asmExpr->inout, symtab ) );1371 }1372 1364 1373 1365 return asmExpr; -
src/SynTree/Expression.cc
r1c40091 r2909b515 527 527 } 528 528 529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( maybeClone( other.inout )), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( other.inout ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {} 530 530 531 531 532 532 void AsmExpr::print( std::ostream & os, Indenter indent ) const { 533 533 os << "Asm Expression: " << std::endl; 534 if ( inout ) inout->print( os, indent+1 );534 if ( !inout.empty() ) os << "[" << inout << "] "; 535 535 if ( constraint ) constraint->print( os, indent+1 ); 536 536 if ( operand ) operand->print( os, indent+1 ); -
src/SynTree/Expression.h
r1c40091 r2909b515 575 575 class AsmExpr : public Expression { 576 576 public: 577 Expression *inout;577 std::string inout; 578 578 Expression * constraint; 579 579 Expression * operand; 580 580 581 AsmExpr( Expression * inout, Expression * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}581 AsmExpr( const std::string * _inout, Expression * constraint, Expression * operand ) : inout( _inout ? *_inout : "" ), constraint( constraint ), operand( operand ) { delete _inout; } 582 582 AsmExpr( const AsmExpr & other ); 583 virtual ~AsmExpr() { delete inout; delete constraint; delete operand; }; 584 585 Expression * get_inout() const { return inout; } 586 void set_inout( Expression * newValue ) { inout = newValue; } 587 588 Expression * get_constraint() const { return constraint; } 589 void set_constraint( Expression * newValue ) { constraint = newValue; } 590 591 Expression * get_operand() const { return operand; } 592 void set_operand( Expression * newValue ) { operand = newValue; } 583 virtual ~AsmExpr() { delete constraint; delete operand; }; 593 584 594 585 virtual AsmExpr * clone() const override { return new AsmExpr( * this ); } -
src/main.cc
r1c40091 r2909b515 407 407 408 408 409 static const char optstring[] = ": hlLmNnpP:S:twW:D:";409 static const char optstring[] = ":c:ghlLmNnpP:S:twW:D:"; 410 410 411 411 enum { PreludeDir = 128 }; 412 412 static struct option long_opts[] = { 413 { "colors", required_argument, nullptr, 'c' }, 414 { "gdb", no_argument, nullptr, 'g' }, 413 415 { "help", no_argument, nullptr, 'h' }, 414 416 { "libcfa", no_argument, nullptr, 'l' }, … … 422 424 { "statistics", required_argument, nullptr, 'S' }, 423 425 { "tree", no_argument, nullptr, 't' }, 424 { "gdb", no_argument, nullptr, 'g' },425 426 { "", no_argument, nullptr, 0 }, // -w 426 427 { "", no_argument, nullptr, 0 }, // -W … … 430 431 431 432 static const char * description[] = { 432 "print help message", // -h 433 "generate libcfa.c", // -l 434 "generate line marks", // -L 435 "do not replace main", // -m 436 "do not generate line marks", // -N 437 "do not read prelude", // -n 433 "diagnostic color: never, always, or auto.", // -c 434 "wait for gdb to attach", // -g 435 "print help message", // -h 436 "generate libcfa.c", // -l 437 "generate line marks", // -L 438 "do not replace main", // -m 439 "do not generate line marks", // -N 440 "do not read prelude", // -n 438 441 "generate prototypes for prelude functions", // -p 439 "print", 442 "print", // -P 440 443 "<directory> prelude directory for debug/nodebug", // no flag 441 444 "<option-list> enable profiling information:\n counters,heap,time,all,none", // -S 442 "building cfa standard lib", // -t 443 "wait for gdb to attach", // -g 444 "", // -w 445 "", // -W 446 "", // -D 445 "building cfa standard lib", // -t 446 "", // -w 447 "", // -W 448 "", // -D 447 449 }; // description 448 450 … … 512 514 while ( (c = getopt_long( argc, argv, optstring, long_opts, nullptr )) != -1 ) { 513 515 switch ( c ) { 516 case 'c': // diagnostic colors 517 if ( strcmp( optarg, "always" ) == 0 ) { 518 ErrorHelpers::colors = ErrorHelpers::Colors::Always; 519 } else if ( strcmp( optarg, "never" ) == 0 ) { 520 ErrorHelpers::colors = ErrorHelpers::Colors::Never; 521 } else if ( strcmp( optarg, "auto" ) == 0 ) { 522 ErrorHelpers::colors = ErrorHelpers::Colors::Auto; 523 } // if 524 break; 514 525 case 'h': // help message 515 526 usage( argv ); // no return
Note:
See TracChangeset
for help on using the changeset viewer.