]> git.sur5r.net Git - cc65/blobdiff - src/cc65/expr.c
Rewrote literal handling. Literals are now saved together with other function
[cc65] / src / cc65 / expr.c
index 27a8469a58374a750adef8e5718fd32d0d8292b3..ff5cde4f0a83685f6878cdaf174a94c245977a7b 100644 (file)
@@ -578,6 +578,7 @@ static void Primary (ExprDesc* E)
 /* This is the lowest level of the expression parser. */
 {
     SymEntry* Sym;
+    Literal*  L;
 
     /* Initialize fields in the expression stucture */
     ED_Init (E);
@@ -748,10 +749,11 @@ static void Primary (ExprDesc* E)
         case TOK_SCONST:
         case TOK_WCSCONST:
             /* String literal */
-            E->Type  = GetCharArrayType (GetLiteralPoolOffs () - CurTok.IVal);
+            L = UseLiteral (CurTok.SVal);
+            E->Type  = GetCharArrayType (GetLiteralSize (CurTok.SVal));
             E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL;
-            E->IVal  = CurTok.IVal;
-            E->Name  = LiteralPoolLabel;
+            E->IVal  = 0;
+            E->Name  = GetLiteralLabel (CurTok.SVal);                         
             NextToken ();
             break;
 
@@ -1097,7 +1099,8 @@ static void StructRef (ExprDesc* Expr)
     NextToken ();
     if (CurTok.Tok != TOK_IDENT) {
        Error ("Identifier expected");
-       Expr->Type = type_int;
+        /* Make the expression an integer at address zero */
+        ED_MakeConstAbs (Expr, 0, type_int);
         return;
     }
 
@@ -1107,7 +1110,8 @@ static void StructRef (ExprDesc* Expr)
     Field = FindStructField (Expr->Type, Ident);
     if (Field == 0) {
        Error ("Struct/union has no field named `%s'", Ident);
-               Expr->Type = type_int;
+        /* Make the expression an integer at address zero */
+        ED_MakeConstAbs (Expr, 0, type_int);
        return;
     }