]> granicus.if.org Git - yasm/commitdiff
Fix #122: Allow standalone prefixes.
authorPeter Johnson <peter@tortall.net>
Tue, 4 Dec 2007 07:08:01 +0000 (07:08 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 4 Dec 2007 07:08:01 +0000 (07:08 -0000)
Implementation copied from gas parser.

svn path=/trunk/yasm/; revision=2021

modules/parsers/nasm/nasm-parse.c
modules/parsers/nasm/tests/Makefile.inc
modules/parsers/nasm/tests/nasm-prefix.asm [new file with mode: 0644]
modules/parsers/nasm/tests/nasm-prefix.hex [new file with mode: 0644]

index 98c2034d33a7b369ba7739dfae8424ed419e5b71..db08275fb11ada1e7e07ca1aa7b287ff085b6523 100644 (file)
@@ -658,8 +658,9 @@ parse_instr(yasm_parser_nasm *parser_nasm)
             uintptr_t prefix = PREFIX_val;
             get_next_token();
             bc = parse_instr(parser_nasm);
-            if (bc)
-                yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix);
+            if (!bc)
+                bc = yasm_arch_create_empty_insn(p_object->arch, cur_line);
+            yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix);
             return bc;
         }
         case SEGREG:
@@ -667,8 +668,9 @@ parse_instr(yasm_parser_nasm *parser_nasm)
             uintptr_t segreg = SEGREG_val;
             get_next_token();
             bc = parse_instr(parser_nasm);
-            if (bc)
-                yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), segreg);
+            if (!bc)
+                bc = yasm_arch_create_empty_insn(p_object->arch, cur_line);
+            yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), segreg);
             return bc;
         }
         default:
index 599aa3979b05b4461d2198474c1e216a4bb361a7..0e7cf1ed611b416af9adc7c00bd40f75e7e4fc44 100644 (file)
@@ -19,6 +19,8 @@ EXTRA_DIST += modules/parsers/nasm/tests/hexconst.asm
 EXTRA_DIST += modules/parsers/nasm/tests/hexconst.hex
 EXTRA_DIST += modules/parsers/nasm/tests/long.asm
 EXTRA_DIST += modules/parsers/nasm/tests/long.hex
+EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.asm
+EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.hex
 EXTRA_DIST += modules/parsers/nasm/tests/newsect.asm
 EXTRA_DIST += modules/parsers/nasm/tests/newsect.hex
 EXTRA_DIST += modules/parsers/nasm/tests/orphannowarn.asm
diff --git a/modules/parsers/nasm/tests/nasm-prefix.asm b/modules/parsers/nasm/tests/nasm-prefix.asm
new file mode 100644 (file)
index 0000000..2bd7824
--- /dev/null
@@ -0,0 +1,5 @@
+es
+mov ax, [bx]
+
+a32
+mov ax, [bx]
diff --git a/modules/parsers/nasm/tests/nasm-prefix.hex b/modules/parsers/nasm/tests/nasm-prefix.hex
new file mode 100644 (file)
index 0000000..24bdfef
--- /dev/null
@@ -0,0 +1,6 @@
+26 
+8b 
+07 
+67 
+8b 
+07