Add support for blank register ranges

This commit is contained in:
Ben Gruver 2011-11-18 09:50:48 -08:00 committed by =
parent de5b35dbb6
commit 8d323b3c48
2 changed files with 17 additions and 15 deletions

View File

@ -603,7 +603,7 @@ register_list
| ->^(I_REGISTER_LIST[$start, "I_REGISTER_LIST"]);
register_range
: REGISTER (DOTDOT REGISTER)? -> ^(I_REGISTER_RANGE[$start, "I_REGISTER_RANGE"] REGISTER REGISTER?);
: (startreg=REGISTER (DOTDOT endreg=REGISTER)?)? -> ^(I_REGISTER_RANGE[$start, "I_REGISTER_RANGE"] $startreg? $endreg?);
verification_error_reference
: CLASS_DESCRIPTOR | fully_qualified_field | fully_qualified_method;

View File

@ -895,8 +895,12 @@ register_list[int totalMethodRegisters, int methodParameterRegisters] returns[by
})*);
register_range[int totalMethodRegisters, int methodParameterRegisters] returns[int startRegister, int endRegister]
: ^(I_REGISTER_RANGE startReg=REGISTER endReg=REGISTER?)
: ^(I_REGISTER_RANGE (startReg=REGISTER endReg=REGISTER?)?)
{
if ($startReg == null) {
$startRegister = 0;
$endRegister = -1;
} else {
$startRegister = parseRegister_short($startReg.text, $totalMethodRegisters, $methodParameterRegisters);
if ($endReg == null) {
$endRegister = $startRegister;
@ -905,13 +909,11 @@ register_range[int totalMethodRegisters, int methodParameterRegisters] returns[i
}
int registerCount = $endRegister-$startRegister+1;
if (registerCount > 256) {
throw new SemanticException(input, $I_REGISTER_RANGE, "A register range can span a maximum of 256 registers");
}
if (registerCount < 1) {
throw new SemanticException(input, $I_REGISTER_RANGE, "A register range must have the lower register listed first");
}
}
}
;
verification_error_reference returns[Item item]