changeset 417:8af5c7e2f722

Fixed parsing asm FS register.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Thu, 27 Sep 2007 13:59:36 +0200
parents a4783b904fba
children 7354f15cd5e9
files trunk/src/dil/Expressions.d trunk/src/dil/Parser.d
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/dil/Expressions.d	Thu Sep 27 11:24:53 2007 +0200
+++ b/trunk/src/dil/Expressions.d	Thu Sep 27 13:59:36 2007 +0200
@@ -988,7 +988,7 @@
 class AsmRegisterExpression : Expression
 {
   Token* register;
-  Token* number; // ST(0) - ST(7)
+  Token* number; // ST(0) - ST(7) or FS:0, FS:4, FS:8
   this(Token* register, Token* number = null)
   {
     mixin(set_kind);
--- a/trunk/src/dil/Parser.d	Thu Sep 27 11:24:53 2007 +0200
+++ b/trunk/src/dil/Parser.d	Thu Sep 27 13:59:36 2007 +0200
@@ -2929,6 +2929,27 @@
         }
         e = new AsmRegisterExpression(register, number);
         break;
+      case "FS":
+        auto register = token;
+        nT();
+        // TODO: is the colon-number part optional?
+        Token* number;
+        if (token.type == T.Colon)
+        {
+          // :0, :4, :8
+          nT();
+          switch (token.srcText)
+          {
+          case "0", "4", "8":
+            number = token;
+            nT();
+            break;
+          default:
+            error(MID.ExpectedButFound, "0, 4 or 8", token.srcText);
+          }
+        }
+        e = new AsmRegisterExpression(register, number);
+        break;
       case "AL", "AH", "AX", "EAX",
            "BL", "BH", "BX", "EBX",
            "CL", "CH", "CX", "ECX",
@@ -2937,7 +2958,7 @@
            "SP", "ESP",
            "DI", "EDI",
            "SI", "ESI",
-           "ES", "CS", "SS", "DS", "GS", "FS",
+           "ES", "CS", "SS", "DS", "GS",
            "CR0", "CR2", "CR3", "CR4",
            "DR0", "DR1", "DR2", "DR3", "DR6", "DR7",
            "TR3", "TR4", "TR5", "TR6", "TR7",