Similar enhanced expression parser asm-ops.
This commit is contained in:
@@ -98,4 +98,9 @@ internal class AddressingModesTest : AbstractParsingTest() {
|
||||
testGoodSyntax(testCase, " move.l usp,a0\n"
|
||||
+ " move.l a5,usp\n")
|
||||
}
|
||||
|
||||
@Test
|
||||
internal fun complex_math_expression_in_displacement(@MyTestCase testCase: ParsingTestExtension.IParsingTestCase) {
|
||||
testGoodSyntax(testCase, " move.l -(~(!!(+(1//~WIDTH^@123+3*4/2+(NARF%10|32!21))<<2)>>1)&$1f)(a0),(-(~(!!(+(1//~WIDTH^@123+3*4/2+(NARF%10|32!21))<<2)>>1)&\$1f),a0,d0.l)\n")
|
||||
}
|
||||
}
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
Assembly File: a.asm
|
||||
PsiWhiteSpace(' ')
|
||||
M68kStatementImpl(STATEMENT)
|
||||
M68kAsmInstructionImpl(ASM_INSTRUCTION)
|
||||
M68kAsmOpImpl(ASM_OP)
|
||||
PsiElement(M68kTokenType.MNEMONIC)('move')
|
||||
M68kOperandSizeImpl(OPERAND_SIZE)
|
||||
PsiElement(M68kTokenType.OPSIZE_L)('.l')
|
||||
PsiWhiteSpace(' ')
|
||||
M68kAddressRegisterIndirectWithDisplacementOldAddressingModeImpl(ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE)
|
||||
M68kUnaryMinusExprImpl(UNARY_MINUS_EXPR)
|
||||
PsiElement(M68kTokenType.OP_MINUS)('-')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryBitwiseAndExprImpl(BINARY_BITWISE_AND_EXPR)
|
||||
M68kUnaryComplExprImpl(UNARY_COMPL_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_COMPL)('~')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryShiftRExprImpl(BINARY_SHIFT_R_EXPR)
|
||||
M68kUnaryNotExprImpl(UNARY_NOT_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_NOT)('!')
|
||||
M68kUnaryNotExprImpl(UNARY_NOT_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_NOT)('!')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryShiftLExprImpl(BINARY_SHIFT_L_EXPR)
|
||||
M68kUnaryPlusExprImpl(UNARY_PLUS_EXPR)
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryAddExprImpl(BINARY_ADD_EXPR)
|
||||
M68kBinaryAddExprImpl(BINARY_ADD_EXPR)
|
||||
M68kBinaryModExprImpl(BINARY_MOD_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('1')
|
||||
PsiElement(M68kTokenType.OP_AR_MOD)('//')
|
||||
M68kBinaryBitwiseXorExprImpl(BINARY_BITWISE_XOR_EXPR)
|
||||
M68kUnaryComplExprImpl(UNARY_COMPL_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_COMPL)('~')
|
||||
M68kRefExprImpl(REF_EXPR)
|
||||
PsiElement(M68kTokenType.SYMBOL)('WIDTH')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_XOR)('^')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.OCTAL)('@123')
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kBinaryDivExprImpl(BINARY_DIV_EXPR)
|
||||
M68kBinaryMulExprImpl(BINARY_MUL_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('3')
|
||||
PsiElement(M68kTokenType.OP_AR_MUL)('*')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('4')
|
||||
PsiElement(M68kTokenType.OP_AR_DIV)('/')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('2')
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryModExprImpl(BINARY_MOD_EXPR)
|
||||
M68kRefExprImpl(REF_EXPR)
|
||||
PsiElement(M68kTokenType.SYMBOL)('NARF')
|
||||
PsiElement(M68kTokenType.OP_AR_MOD)('%')
|
||||
M68kBinaryBitwiseOrExprImpl(BINARY_BITWISE_OR_EXPR)
|
||||
M68kBinaryBitwiseOrExprImpl(BINARY_BITWISE_OR_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('10')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_OR)('|')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('32')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_OR)('!')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('21')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_AR_SHIFT_L)('<<')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('2')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_AR_SHIFT_R)('>>')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('1')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_AND)('&')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.HEXADECIMAL)('$1f')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kAddressRegisterImpl(ADDRESS_REGISTER)
|
||||
PsiElement(M68kTokenType.AREG)('a0')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.SEPARATOR)(',')
|
||||
M68kAddressRegisterIndirectWithIndexNewAddressingModeImpl(ADDRESS_REGISTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kUnaryMinusExprImpl(UNARY_MINUS_EXPR)
|
||||
PsiElement(M68kTokenType.OP_MINUS)('-')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryBitwiseAndExprImpl(BINARY_BITWISE_AND_EXPR)
|
||||
M68kUnaryComplExprImpl(UNARY_COMPL_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_COMPL)('~')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryShiftRExprImpl(BINARY_SHIFT_R_EXPR)
|
||||
M68kUnaryNotExprImpl(UNARY_NOT_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_NOT)('!')
|
||||
M68kUnaryNotExprImpl(UNARY_NOT_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_NOT)('!')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryShiftLExprImpl(BINARY_SHIFT_L_EXPR)
|
||||
M68kUnaryPlusExprImpl(UNARY_PLUS_EXPR)
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryAddExprImpl(BINARY_ADD_EXPR)
|
||||
M68kBinaryAddExprImpl(BINARY_ADD_EXPR)
|
||||
M68kBinaryModExprImpl(BINARY_MOD_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('1')
|
||||
PsiElement(M68kTokenType.OP_AR_MOD)('//')
|
||||
M68kBinaryBitwiseXorExprImpl(BINARY_BITWISE_XOR_EXPR)
|
||||
M68kUnaryComplExprImpl(UNARY_COMPL_EXPR)
|
||||
PsiElement(M68kTokenType.OP_UNARY_COMPL)('~')
|
||||
M68kRefExprImpl(REF_EXPR)
|
||||
PsiElement(M68kTokenType.SYMBOL)('WIDTH')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_XOR)('^')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.OCTAL)('@123')
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kBinaryDivExprImpl(BINARY_DIV_EXPR)
|
||||
M68kBinaryMulExprImpl(BINARY_MUL_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('3')
|
||||
PsiElement(M68kTokenType.OP_AR_MUL)('*')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('4')
|
||||
PsiElement(M68kTokenType.OP_AR_DIV)('/')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('2')
|
||||
PsiElement(M68kTokenType.OP_PLUS)('+')
|
||||
M68kParenExprImpl(PAREN_EXPR)
|
||||
PsiElement(M68kTokenType.ROUND_L)('(')
|
||||
M68kBinaryModExprImpl(BINARY_MOD_EXPR)
|
||||
M68kRefExprImpl(REF_EXPR)
|
||||
PsiElement(M68kTokenType.SYMBOL)('NARF')
|
||||
PsiElement(M68kTokenType.OP_AR_MOD)('%')
|
||||
M68kBinaryBitwiseOrExprImpl(BINARY_BITWISE_OR_EXPR)
|
||||
M68kBinaryBitwiseOrExprImpl(BINARY_BITWISE_OR_EXPR)
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('10')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_OR)('|')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('32')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_OR)('!')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('21')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_AR_SHIFT_L)('<<')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('2')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_AR_SHIFT_R)('>>')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.DECIMAL)('1')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.OP_BITWISE_AND)('&')
|
||||
M68kLiteralExprImpl(LITERAL_EXPR)
|
||||
PsiElement(M68kTokenType.HEXADECIMAL)('$1f')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.SEPARATOR)(',')
|
||||
M68kAddressRegisterImpl(ADDRESS_REGISTER)
|
||||
PsiElement(M68kTokenType.AREG)('a0')
|
||||
PsiElement(M68kTokenType.SEPARATOR)(',')
|
||||
M68kDataRegisterImpl(DATA_REGISTER)
|
||||
PsiElement(M68kTokenType.DREG)('d0')
|
||||
M68kDataWidthImpl(DATA_WIDTH)
|
||||
PsiElement(M68kTokenType.OPSIZE_L)('.l')
|
||||
PsiElement(M68kTokenType.ROUND_R)(')')
|
||||
PsiElement(M68kTokenType.EOL)('\n')
|
||||
Reference in New Issue
Block a user