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"]); | ->^(I_REGISTER_LIST[$start, "I_REGISTER_LIST"]);
register_range 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 verification_error_reference
: CLASS_DESCRIPTOR | fully_qualified_field | fully_qualified_method; : CLASS_DESCRIPTOR | fully_qualified_field | fully_qualified_method;

View File

@ -895,22 +895,24 @@ register_list[int totalMethodRegisters, int methodParameterRegisters] returns[by
})*); })*);
register_range[int totalMethodRegisters, int methodParameterRegisters] returns[int startRegister, int endRegister] 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?)?)
{ {
$startRegister = parseRegister_short($startReg.text, $totalMethodRegisters, $methodParameterRegisters); if ($startReg == null) {
if ($endReg == null) { $startRegister = 0;
$endRegister = $startRegister; $endRegister = -1;
} else { } else {
$endRegister = parseRegister_short($endReg.text, $totalMethodRegisters, $methodParameterRegisters); $startRegister = parseRegister_short($startReg.text, $totalMethodRegisters, $methodParameterRegisters);
} if ($endReg == null) {
$endRegister = $startRegister;
} else {
$endRegister = parseRegister_short($endReg.text, $totalMethodRegisters, $methodParameterRegisters);
}
int registerCount = $endRegister-$startRegister+1; int registerCount = $endRegister-$startRegister+1;
if (registerCount > 256) { if (registerCount < 1) {
throw new SemanticException(input, $I_REGISTER_RANGE, "A register range can span a maximum of 256 registers"); throw new SemanticException(input, $I_REGISTER_RANGE, "A register range must have the lower register listed first");
} }
if (registerCount < 1) { }
throw new SemanticException(input, $I_REGISTER_RANGE, "A register range must have the lower register listed first");
}
} }
; ;