mirror of
https://github.com/odin-lang/Odin.git
synced 2026-08-25 22:41:34 +00:00
Support + - and ~ unary operators for asm operands
This commit is contained in:
@@ -1476,6 +1476,13 @@ gb_internal void check_asm_instruction_operand(AsmCtx *asm_ctx, CheckerContext *
|
||||
gb_unused(label_scope);
|
||||
|
||||
switch (expr->kind) {
|
||||
case_ast_node(ue, UnaryExpr, expr);
|
||||
check_expr(ctx, operand, expr);
|
||||
if (operand->mode != Addressing_Constant) {
|
||||
error(expr, "Asm operands within unary operands (+ - ~) can only compile time constants");
|
||||
}
|
||||
return;
|
||||
case_end;
|
||||
case_ast_node(pe, ParenExpr, expr);
|
||||
check_expr(ctx, operand, expr);
|
||||
if (operand->mode != Addressing_Constant) {
|
||||
|
||||
@@ -2484,6 +2484,16 @@ gb_internal Ast *parse_asm_operand(AstFile *f, bool allow_memory_operand) {
|
||||
case Token_Float:
|
||||
case Token_Rune:
|
||||
return ast_basic_lit(f, advance_token(f));
|
||||
|
||||
case Token_Add:
|
||||
case Token_Sub:
|
||||
case Token_Xor:
|
||||
{
|
||||
Token token = advance_token(f);
|
||||
Ast *op = parse_asm_operand(f, false);
|
||||
return ast_unary_expr(f, token, op);
|
||||
}
|
||||
|
||||
case Token_OpenParen:
|
||||
return parse_expr(f, false);
|
||||
case Token_OpenBracket:
|
||||
|
||||
Reference in New Issue
Block a user