Mercurial > hg > truffle
comparison src/share/vm/adlc/adlparse.cpp @ 603:dbbe28fc66b5
6778669: Patch from Red Hat -- fixes compilation errors
Summary: Some fixes which are required to build on recent GCCs.
Reviewed-by: never, kvn
Contributed-by: langel@redhat.com
author | twisti |
---|---|
date | Fri, 27 Feb 2009 03:35:40 -0800 |
parents | 569b3b226089 |
children | 98cb887364d3 |
comparison
equal
deleted
inserted
replaced
602:ed6404fac86b | 603:dbbe28fc66b5 |
---|---|
1 /* | 1 /* |
2 * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
296 // Check for commutative operations with tree operands. | 296 // Check for commutative operations with tree operands. |
297 int count = 0; | 297 int count = 0; |
298 rule->count_commutative_op(count); | 298 rule->count_commutative_op(count); |
299 if (count > 0) { | 299 if (count > 0) { |
300 // Clone match rule and swap commutative operation's operands. | 300 // Clone match rule and swap commutative operation's operands. |
301 rule->swap_commutative_op(instr_ident, count, match_rules_cnt); | 301 rule->matchrule_swap_commutative_op(instr_ident, count, match_rules_cnt); |
302 } | 302 } |
303 } | 303 } |
304 | 304 |
305 //------------------------------adjust_set_rule-------------------------------- | 305 //------------------------------adjust_set_rule-------------------------------- |
306 // Check for "Set" form of chain rule | 306 // Check for "Set" form of chain rule |
2584 // Check for a constraint | 2584 // Check for a constraint |
2585 skipws(); | 2585 skipws(); |
2586 while( _curchar != ')' ) { | 2586 while( _curchar != ')' ) { |
2587 // Get information on the left instruction and its operand | 2587 // Get information on the left instruction and its operand |
2588 // left-instructions's number | 2588 // left-instructions's number |
2589 intptr_t left_inst = get_int(); | 2589 int left_inst = get_int(); |
2590 // Left-instruction's operand | 2590 // Left-instruction's operand |
2591 skipws(); | 2591 skipws(); |
2592 if( _curchar != '.' ) { | 2592 if( _curchar != '.' ) { |
2593 parse_err(SYNERR, "missing '.' in peepconstraint after instruction number.\n"); | 2593 parse_err(SYNERR, "missing '.' in peepconstraint after instruction number.\n"); |
2594 return; | 2594 return; |
2600 // Collect relational operator | 2600 // Collect relational operator |
2601 char *relation = get_relation_dup(); | 2601 char *relation = get_relation_dup(); |
2602 | 2602 |
2603 skipws(); | 2603 skipws(); |
2604 // Get information on the right instruction and its operand | 2604 // Get information on the right instruction and its operand |
2605 intptr_t right_inst; // Right-instructions's number | 2605 int right_inst; // Right-instructions's number |
2606 if( isdigit(_curchar) ) { | 2606 if( isdigit(_curchar) ) { |
2607 right_inst = get_int(); | 2607 right_inst = get_int(); |
2608 // Right-instruction's operand | 2608 // Right-instruction's operand |
2609 skipws(); | 2609 skipws(); |
2610 if( _curchar != '.' ) { | 2610 if( _curchar != '.' ) { |
3495 skipws(); | 3495 skipws(); |
3496 while ( (_curchar != '%') && (*(_ptr+1) != '}') ) { | 3496 while ( (_curchar != '%') && (*(_ptr+1) != '}') ) { |
3497 | 3497 |
3498 // (1) | 3498 // (1) |
3499 // Check if there is a string to pass through to output | 3499 // Check if there is a string to pass through to output |
3500 char *start = _ptr; // Record start of the next string | 3500 { |
3501 while ((_curchar != '$') && ((_curchar != '%') || (*(_ptr+1) != '}')) ) { | 3501 char *start = _ptr; // Record start of the next string |
3502 // If at the start of a comment, skip past it | 3502 while ((_curchar != '$') && ((_curchar != '%') || (*(_ptr+1) != '}')) ) { |
3503 if( (_curchar == '/') && ((*(_ptr+1) == '/') || (*(_ptr+1) == '*')) ) { | 3503 // If at the start of a comment, skip past it |
3504 skipws_no_preproc(); | 3504 if( (_curchar == '/') && ((*(_ptr+1) == '/') || (*(_ptr+1) == '*')) ) { |
3505 } else { | 3505 skipws_no_preproc(); |
3506 // ELSE advance to the next character, or start of the next line | 3506 } else { |
3507 next_char_or_line(); | 3507 // ELSE advance to the next character, or start of the next line |
3508 } | 3508 next_char_or_line(); |
3509 } | 3509 } |
3510 // If a string was found, terminate it and record in EncClass | 3510 } |
3511 if ( start != _ptr ) { | 3511 // If a string was found, terminate it and record in EncClass |
3512 *_ptr = '\0'; // Terminate the string | 3512 if ( start != _ptr ) { |
3513 // Add flag to _strings list indicating we should check _rep_vars | 3513 *_ptr = '\0'; // Terminate the string |
3514 format->_strings.addName(NameList::_signal2); | 3514 // Add flag to _strings list indicating we should check _rep_vars |
3515 format->_strings.addName(start); | 3515 format->_strings.addName(NameList::_signal2); |
3516 format->_strings.addName(start); | |
3517 } | |
3516 } | 3518 } |
3517 | 3519 |
3518 // (2) | 3520 // (2) |
3519 // If we are at a replacement variable, | 3521 // If we are at a replacement variable, |
3520 // copy it and record in EncClass | 3522 // copy it and record in EncClass |
3561 // (2) | 3563 // (2) |
3562 // If we are at a replacement variable, | 3564 // If we are at a replacement variable, |
3563 // copy it and record in FormatRule | 3565 // copy it and record in FormatRule |
3564 if ( _curchar == '$' ) { | 3566 if ( _curchar == '$' ) { |
3565 next_char(); // Move past the '$' | 3567 next_char(); // Move past the '$' |
3566 char* rep_var = get_ident(); // Nil terminate the variable name | 3568 char* next_rep_var = get_ident(); // Nil terminate the variable name |
3567 rep_var = strdup(rep_var);// Copy the string | 3569 next_rep_var = strdup(next_rep_var);// Copy the string |
3568 *_ptr = _curchar; // and replace Nil with original character | 3570 *_ptr = _curchar; // and replace Nil with original character |
3569 format->_rep_vars.addName(rep_var); | 3571 format->_rep_vars.addName(next_rep_var); |
3570 // Add flag to _strings list indicating we should check _rep_vars | 3572 // Add flag to _strings list indicating we should check _rep_vars |
3571 format->_strings.addName(NameList::_signal); | 3573 format->_strings.addName(NameList::_signal); |
3572 } | 3574 } |
3573 | 3575 |
3574 // (3) | 3576 // (3) |
3712 skipws(); | 3714 skipws(); |
3713 if (ident2 == NULL) { | 3715 if (ident2 == NULL) { |
3714 parse_err(SYNERR, "identifier expected at %c\n", _curchar); | 3716 parse_err(SYNERR, "identifier expected at %c\n", _curchar); |
3715 continue; | 3717 continue; |
3716 } // Check that you have a valid operand | 3718 } // Check that you have a valid operand |
3717 const Form *form = instr->_localNames[ident2]; | 3719 const Form *form2 = instr->_localNames[ident2]; |
3718 if (!form) { | 3720 if (!form2) { |
3719 parse_err(SYNERR, "operand name expected at %s\n", ident2); | 3721 parse_err(SYNERR, "operand name expected at %s\n", ident2); |
3720 continue; | 3722 continue; |
3721 } | 3723 } |
3722 oper = form->is_operand(); | 3724 oper = form2->is_operand(); |
3723 if (oper == NULL && !form->is_opclass()) { | 3725 if (oper == NULL && !form2->is_opclass()) { |
3724 parse_err(SYNERR, "operand name expected at %s\n", ident2); | 3726 parse_err(SYNERR, "operand name expected at %s\n", ident2); |
3725 continue; | 3727 continue; |
3726 } // Add operand to list | 3728 } // Add operand to list |
3727 instr_and_operands->add_entry(ident2); | 3729 instr_and_operands->add_entry(ident2); |
3728 } while(_curchar == ','); | 3730 } while(_curchar == ','); |
4269 char *start; // Pointer to start of token | 4271 char *start; // Pointer to start of token |
4270 char *end; // Pointer to end of token | 4272 char *end; // Pointer to end of token |
4271 int result; // Storage for integer result | 4273 int result; // Storage for integer result |
4272 | 4274 |
4273 if( _curline == NULL ) // Return NULL at EOF. | 4275 if( _curline == NULL ) // Return NULL at EOF. |
4274 return NULL; | 4276 return 0; |
4275 | 4277 |
4276 skipws(); // Skip whitespace before identifier | 4278 skipws(); // Skip whitespace before identifier |
4277 start = end = _ptr; // Start points at first character | 4279 start = end = _ptr; // Start points at first character |
4278 c = *end; // Grab character to test | 4280 c = *end; // Grab character to test |
4279 while ((c >= '0') && (c <= '9') | 4281 while ((c >= '0') && (c <= '9') |