comparison src/share/vm/adlc/dfa.cpp @ 475:284d0af00d53

6771309: debugging AD files is difficult without #line directives in generated code Summary: more and better #line and #define directives in the generated code; ADLC itself accepts #line directives Reviewed-by: never, kvn
author jrose
date Tue, 09 Dec 2008 12:41:26 -0800
parents a61af66fc99e
children 0fbdb4381b99 dbbe28fc66b5
comparison
equal deleted inserted replaced
474:7a018855d2f0 475:284d0af00d53
456 Expr::check_buffers(); 456 Expr::check_buffers();
457 } 457 }
458 458
459 459
460 class dfa_shared_preds { 460 class dfa_shared_preds {
461 enum { count = 2 }; 461 enum { count = 4 };
462 462
463 static bool _found[count]; 463 static bool _found[count];
464 static const char* _type [count]; 464 static const char* _type [count];
465 static const char* _var [count]; 465 static const char* _var [count];
466 static const char* _pred [count]; 466 static const char* _pred [count];
477 // Check previous character and recurse if needed 477 // Check previous character and recurse if needed
478 char *prev = shared - 1; 478 char *prev = shared - 1;
479 char c = *prev; 479 char c = *prev;
480 switch( c ) { 480 switch( c ) {
481 case ' ': 481 case ' ':
482 case '\n':
482 return dfa_shared_preds::valid_loc(pred, prev); 483 return dfa_shared_preds::valid_loc(pred, prev);
483 case '!': 484 case '!':
484 case '(': 485 case '(':
485 case '<': 486 case '<':
486 case '=': 487 case '=':
488 return true;
489 case '"': // such as: #line 10 "myfile.ad"\n mypredicate
487 return true; 490 return true;
488 case '|': 491 case '|':
489 if( prev != pred && *(prev-1) == '|' ) return true; 492 if( prev != pred && *(prev-1) == '|' ) return true;
490 case '&': 493 case '&':
491 if( prev != pred && *(prev-1) == '&' ) return true; 494 if( prev != pred && *(prev-1) == '&' ) return true;
562 } 565 }
563 } 566 }
564 } 567 }
565 }; 568 };
566 // shared predicates, _var and _pred entry should be the same length 569 // shared predicates, _var and _pred entry should be the same length
567 bool dfa_shared_preds::_found[dfa_shared_preds::count] = { false, false }; 570 bool dfa_shared_preds::_found[dfa_shared_preds::count]
568 const char* dfa_shared_preds::_type[dfa_shared_preds::count] = { "int", "bool" }; 571 = { false, false, false, false };
569 const char* dfa_shared_preds::_var [dfa_shared_preds::count] = { "_n_get_int__", "Compile__current____select_24_bit_instr__" }; 572 const char* dfa_shared_preds::_type[dfa_shared_preds::count]
570 const char* dfa_shared_preds::_pred[dfa_shared_preds::count] = { "n->get_int()", "Compile::current()->select_24_bit_instr()" }; 573 = { "int", "jlong", "intptr_t", "bool" };
574 const char* dfa_shared_preds::_var [dfa_shared_preds::count]
575 = { "_n_get_int__", "_n_get_long__", "_n_get_intptr_t__", "Compile__current____select_24_bit_instr__" };
576 const char* dfa_shared_preds::_pred[dfa_shared_preds::count]
577 = { "n->get_int()", "n->get_long()", "n->get_intptr_t()", "Compile::current()->select_24_bit_instr()" };
571 578
572 579
573 void ArchDesc::gen_dfa_state_body(FILE* fp, Dict &minimize, ProductionState &status, Dict &operands_chained_from, int i) { 580 void ArchDesc::gen_dfa_state_body(FILE* fp, Dict &minimize, ProductionState &status, Dict &operands_chained_from, int i) {
574 // Start the body of each Op_XXX sub-dfa with a clean state. 581 // Start the body of each Op_XXX sub-dfa with a clean state.
575 status.initialize(); 582 status.initialize();