]> git.sur5r.net Git - cc65/blobdiff - src/ld65/expr.h
Added a command-line option to compile a program, with __cdecl__ as the default calli...
[cc65] / src / ld65 / expr.h
index 938ed34484d4e81644032e2b69ede0671261be2f..8b5879a279a6d3614e50b9baeca774078c8c1569 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                                 expr.h                                   */
+/*                                  expr.h                                   */
 /*                                                                           */
-/*                Expression evaluation for the ld65 linker                 */
+/*                 Expression evaluation for the ld65 linker                 */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (C) 1998-2011, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -40,7 +40,7 @@
 
 /* common */
 #include "exprdefs.h"
-         
+
 /* ld65 */
 #include "objdata.h"
 #include "exports.h"
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 
+/* Structure for parsing segment based expression trees */
+typedef struct SegExprDesc SegExprDesc;
+struct SegExprDesc {
+    long            Val;                /* The offset value */
+    int             TooComplex;         /* Expression too complex */
+    Segment*        Seg;                /* Segment reference if any */
+};
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+ExprNode* NewExprNode (ObjData* O, unsigned char Op);
+/* Create a new expression node */
+
 void FreeExpr (ExprNode* Root);
 /* Free the expression tree, Root is pointing to. */
 
 int IsConstExpr (ExprNode* Root);
 /* Return true if the given expression is a constant expression, that is, one
- * with no references to external symbols.
- */
+** with no references to external symbols.
+*/
 
 Import* GetExprImport (ExprNode* Expr);
 /* Get the import data structure for a symbol expression node */
@@ -69,19 +88,28 @@ Export* GetExprExport (ExprNode* Expr);
 /* Get the exported symbol for a symbol expression node */
 
 Section* GetExprSection (ExprNode* Expr);
-/* Get the segment for a segment expression node */
+/* Get the segment for a section expression node */
 
 long GetExprVal (ExprNode* Expr);
 /* Get the value of a constant expression */
 
+void GetSegExprVal (ExprNode* Expr, SegExprDesc* D);
+/* Check if the given expression consists of a segment reference and only
+** constant values, additions and subtractions. If anything else is found,
+** set D->TooComplex to true. The function will initialize D.
+*/
+
 ExprNode* LiteralExpr (long Val, ObjData* O);
 /* Return an expression tree that encodes the given literal value */
 
-ExprNode* MemExpr (Memory* Mem, long Offs, ObjData* O);
+ExprNode* MemoryExpr (MemoryArea* Mem, long Offs, ObjData* O);
 /* Return an expression tree that encodes an offset into the memory area */
 
-void DumpExpr (const ExprNode* Expr);
-/* Dump an expression tree to stdout */
+ExprNode* SegmentExpr (Segment* Seg, long Offs, ObjData* O);
+/* Return an expression tree that encodes an offset into a segment */
+
+ExprNode* SectionExpr (Section* Sec, long Offs, ObjData* O);
+/* Return an expression tree that encodes an offset into a section */
 
 ExprNode* ReadExpr (FILE* F, ObjData* O);
 /* Read an expression from the given file */
@@ -94,6 +122,3 @@ int EqualExpr (ExprNode* E1, ExprNode* E2);
 /* End of expr.h */
 
 #endif
-
-
-