]> granicus.if.org Git - yasm/commitdiff
Merge expr-int.h into expr.h, removing YASM_EXPR_INTERNAL in the process.
authorPeter Johnson <peter@tortall.net>
Sat, 14 Jul 2007 05:31:08 +0000 (05:31 -0000)
committerPeter Johnson <peter@tortall.net>
Sat, 14 Jul 2007 05:31:08 +0000 (05:31 -0000)
svn path=/trunk/yasm/; revision=1895

26 files changed:
libyasm.h
libyasm/Makefile.inc
libyasm/bc-reserve.c
libyasm/bytecode.c
libyasm/coretype.h
libyasm/expr-int.h [deleted file]
libyasm/expr.c
libyasm/expr.h
libyasm/section.c
libyasm/value.c
modules/arch/lc3b/lc3bid.re
modules/arch/x86/x86bc.c
modules/arch/x86/x86expr.c
modules/arch/x86/x86id.c
modules/objfmts/bin/bin-objfmt.c
modules/objfmts/coff/coff-objfmt.c
modules/objfmts/coff/win64-except.c
modules/objfmts/elf/elf-objfmt.c
modules/objfmts/elf/elf-x86-amd64.c
modules/objfmts/elf/elf-x86-x86.c
modules/objfmts/elf/elf.c
modules/objfmts/macho/macho-objfmt.c
modules/objfmts/rdf/rdf-objfmt.c
modules/objfmts/xdf/xdf-objfmt.c
modules/parsers/gas/gas-parse.c
modules/parsers/nasm/nasm-parse.c

index bd38c646d816ccc859612f5184cfa4300a8fae7b..6d7778e97917cf39cf36eb9045bac6c2dd089ae7 100644 (file)
--- a/libyasm.h
+++ b/libyasm.h
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  * \endlicense
- *
- * Additional parts may be included via:
- *  - YASM_EXPR_INTERNAL: reveal expr internal structures via expr-int.h
- *                        inclusion
  */
 #ifndef YASM_LIB_H
 #define YASM_LIB_H
@@ -77,9 +73,6 @@ typedef unsigned long uintptr_t;
 #include <libyasm/file.h>
 #include <libyasm/module.h>
 
-#ifdef YASM_EXPR_INTERNAL
-#include <libyasm/expr-int.h>
-#endif
 #include <libyasm/hamt.h>
 #include <libyasm/md5.h>
 
index ee84ac488b48d9b1b30b2f0b0bdaaf8e238b545c..9e82a0e331898bae92b9f99a15eaf098eaaabdfa 100644 (file)
@@ -59,7 +59,6 @@ modinclude_HEADERS += libyasm/coretype.h
 modinclude_HEADERS += libyasm/dbgfmt.h
 modinclude_HEADERS += libyasm/errwarn.h
 modinclude_HEADERS += libyasm/expr.h
-modinclude_HEADERS += libyasm/expr-int.h
 modinclude_HEADERS += libyasm/file.h
 modinclude_HEADERS += libyasm/floatnum.h
 modinclude_HEADERS += libyasm/hamt.h
index 1bc0c888c3b3bb85ecdf11ee12ed32ae3a11e8c5..32f524f96c6324d76601a506436343f62755ed56 100644 (file)
@@ -37,8 +37,6 @@
 
 #include "bytecode.h"
 
-#include "expr-int.h"
-
 
 typedef struct bytecode_reserve {
     /*@only@*/ /*@null@*/ yasm_expr *numitems; /* number of items to reserve */
index 3828795c37b48447840e11b6066096facd45d525..b8386f7993c8355eb22ced1ae208b2df947313e7 100644 (file)
@@ -38,8 +38,6 @@
 
 #include "bytecode.h"
 
-#include "expr-int.h"
-
 
 void
 yasm_bc_set_multiple(yasm_bytecode *bc, yasm_expr *e)
index 395a9c4367c6b3aa1fecf776d44f59e89f01fc66..18dab2913c900dfe6fc66cd94b035959fe617aa6 100644 (file)
@@ -74,7 +74,7 @@ typedef struct yasm_assoc_data_callback {
  */
 typedef struct yasm_errwarns yasm_errwarns;
 
-/** Bytecode.  \see bytecode.h for defails and related functions. */
+/** Bytecode.  \see bytecode.h for details and related functions. */
 typedef struct yasm_bytecode yasm_bytecode;
 
 /** Object.  \see section.h for details and related functions. */
@@ -89,10 +89,7 @@ typedef struct yasm_symtab yasm_symtab;
 /** Symbol record (opaque type).  \see symrec.h for related functions. */
 typedef struct yasm_symrec yasm_symrec;
 
-/** Expression (opaque type).
- * \see expr.h for related functions.
- * Define YASM_EXPR_INTERNAL to get visible internals.
- */
+/** Expression.  \see expr.h for details and related functions. */
 typedef struct yasm_expr yasm_expr;
 /** Integer value (opaque type).  \see intnum.h for related functions. */
 typedef struct yasm_intnum yasm_intnum;
diff --git a/libyasm/expr-int.h b/libyasm/expr-int.h
deleted file mode 100644 (file)
index 6946adc..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* $Id$
- * Expressions internal structures header file
- *
- *  Copyright (C) 2001-2007  Peter Johnson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef YASM_EXPR_INT_H
-#define YASM_EXPR_INT_H
-
-/* Types listed in canonical sorting order.  See expr_order_terms().
- * Note precbc must be used carefully (in a-b pairs), as only symrecs can
- * become the relative term in a #yasm_value.
- */
-typedef enum yasm_expr__type {
-    YASM_EXPR_NONE = 0,
-    YASM_EXPR_REG = 1<<0,
-    YASM_EXPR_INT = 1<<1,
-    YASM_EXPR_SUBST = 1<<2,
-    YASM_EXPR_FLOAT = 1<<3,
-    YASM_EXPR_SYM = 1<<4,
-    YASM_EXPR_PRECBC = 1<<5, /* direct bytecode ref (rather than via symrec) */
-    YASM_EXPR_EXPR = 1<<6
-} yasm_expr__type;
-
-struct yasm_expr__item {
-    yasm_expr__type type;
-    union {
-        yasm_bytecode *precbc;
-        yasm_symrec *sym;
-        yasm_expr *expn;
-        yasm_intnum *intn;
-        yasm_floatnum *flt;
-        uintptr_t reg;
-        unsigned int subst;
-    } data;
-};
-
-/* Some operations may allow more than two operand terms:
- * ADD, MUL, OR, AND, XOR
- */
-struct yasm_expr {
-    yasm_expr_op op;
-    unsigned long line;
-    int numterms;
-    yasm_expr__item terms[2];   /* structure may be extended to include more */
-};
-
-/* Traverse over expression tree in order, calling func for each leaf
- * (non-operation).  The data pointer d is passed to each func call.
- *
- * Stops early (and returns 1) if func returns 1.  Otherwise returns 0.
- */
-int yasm_expr__traverse_leaves_in_const
-    (const yasm_expr *e, /*@null@*/ void *d,
-     int (*func) (/*@null@*/ const yasm_expr__item *ei, /*@null@*/ void *d));
-int yasm_expr__traverse_leaves_in
-    (yasm_expr *e, /*@null@*/ void *d,
-     int (*func) (/*@null@*/ yasm_expr__item *ei, /*@null@*/ void *d));
-
-/* Reorder terms of e into canonical order.  Only reorders if reordering
- * doesn't change meaning of expression.  (eg, doesn't reorder SUB).
- * Canonical order: REG, INT, FLOAT, SYM, EXPR.
- * Multiple terms of a single type are kept in the same order as in
- * the original expression.
- * NOTE: Only performs reordering on *one* level (no recursion).
- */
-void yasm_expr__order_terms(yasm_expr *e);
-
-/* Copy entire expression EXCEPT for index "except" at *top level only*. */
-yasm_expr *yasm_expr__copy_except(const yasm_expr *e, int except);
-
-int yasm_expr__contains(const yasm_expr *e, yasm_expr__type t);
-
-/** Transform symrec-symrec terms in expression into YASM_EXPR_SUBST items.
- * Calls the callback function for each symrec-symrec term.
- * \param ep            expression (pointer to)
- * \param cbd           callback data passed to callback function
- * \param callback      callback function: given subst index for bytecode
- *                      pair, bytecode pair (bc2-bc1), and cbd (callback data)
- * \return Number of transformations made.
- */
-int yasm_expr__bc_dist_subst(yasm_expr **ep, void *cbd,
-                             void (*callback) (unsigned int subst,
-                                               yasm_bytecode *precbc,
-                                               yasm_bytecode *precbc2,
-                                               void *cbd));
-
-/** Substitute items into expr YASM_EXPR_SUBST items (by index).  Items are
- * copied, so caller is responsible for freeing array of items.
- * \param e             expression
- * \param num_items     number of items in items array
- * \param items         items array
- * \return 1 on error (index out of range).
- */
-int yasm_expr__subst(yasm_expr *e, unsigned int num_items,
-                     const yasm_expr__item *items);
-
-#endif
index 348009358d701df0e297b6e57aa64020ee786175..fe7cb9a9de45a257633679553b58a78279a69c86 100644 (file)
@@ -42,8 +42,6 @@
 
 #include "arch.h"
 
-#include "expr-int.h"
-
 
 static int expr_traverse_nodes_post(/*@null@*/ yasm_expr *e,
                                     /*@null@*/ void *d,
@@ -1007,12 +1005,6 @@ yasm_expr__copy_except(const yasm_expr *e, int except)
     return n;
 }
 
-yasm_expr *
-yasm_expr_copy(const yasm_expr *e)
-{
-    return yasm_expr__copy_except(e, -1);
-}
-
 static void
 expr_delete_term(yasm_expr__item *term, int recurse)
 {
index ca189d0a4474f7609e86352014004e844d4c3ec3..694ba72e4ecf9a61896869055cbcc2d417ab24af 100644 (file)
 #ifndef YASM_EXPR_H
 #define YASM_EXPR_H
 
-/** Expression item (opaque type).  \internal */
-typedef struct yasm_expr__item yasm_expr__item;
+/** Type of an expression item.  Types are listed in canonical sorting order.
+ * See expr_order_terms().
+ * Note #YASM_EXPR_PRECBC must be used carefully (in a-b pairs), as only
+ * symrecs can become the relative term in a #yasm_value.
+ */
+typedef enum yasm_expr__type {
+    YASM_EXPR_NONE = 0,     /**< Nothing */
+    YASM_EXPR_REG = 1<<0,   /**< Register */
+    YASM_EXPR_INT = 1<<1,   /**< Integer value */
+    YASM_EXPR_SUBST = 1<<2, /**< Substitution placeholder */
+    YASM_EXPR_FLOAT = 1<<3, /**< Floating point value */
+    YASM_EXPR_SYM = 1<<4,   /**< Symbol */
+    YASM_EXPR_PRECBC = 1<<5,/**< Direct bytecode ref (rather than via sym) */
+    YASM_EXPR_EXPR = 1<<6   /**< Subexpression */
+} yasm_expr__type;
+
+/** Expression item. */
+typedef struct yasm_expr__item {
+    yasm_expr__type type;   /**< Type */
+
+    /** Expression item data.  Correct value depends on type. */
+    union {
+        yasm_bytecode *precbc;  /**< Direct bytecode ref (#YASM_EXPR_PRECBC) */
+        yasm_symrec *sym;       /**< Symbol (#YASM_EXPR_SYM) */
+        yasm_expr *expn;        /**< Subexpression (#YASM_EXPR_EXPR) */
+        yasm_intnum *intn;      /**< Integer value (#YASM_EXPR_INT) */
+        yasm_floatnum *flt;     /**< Floating point value (#YASM_EXPR_FLOAT) */
+        uintptr_t reg;          /**< Register (#YASM_EXPR_REG) */
+        unsigned int subst;     /**< Subst placeholder (#YASM_EXPR_SUBST) */
+    } data;
+} yasm_expr__item;
+
+/** Expression. */
+struct yasm_expr {
+    yasm_expr_op op;    /**< Operation. */
+    unsigned long line; /**< Line number where expression was defined. */
+    int numterms;       /**< Number of terms in the expression. */
+
+    /** Terms of the expression.  Structure may be extended to include more
+     * terms, as some operations may allow more than two operand terms
+     * (ADD, MUL, OR, AND, XOR).
+     */
+    yasm_expr__item terms[2];
+};
 
 /** Create a new expression e=a op b.
  * \param op        operation
@@ -116,6 +158,7 @@ typedef struct yasm_expr__item yasm_expr__item;
  * \return Newly allocated expression identical to e.
  */
 yasm_expr *yasm_expr_copy(const yasm_expr *e);
+#define yasm_expr_copy(e)   yasm_expr__copy_except(e, -1)
 
 /** Destroy (free allocated memory for) an expression.
  * \param e     expression
@@ -231,4 +274,77 @@ typedef /*@only@*/ yasm_expr * (*yasm_expr_xform_func)
  */
 void yasm_expr_print(/*@null@*/ const yasm_expr *e, FILE *f);
 
+/** Traverse over expression tree in order (const version).
+ * Calls func for each leaf (non-operation).
+ * \param e     expression
+ * \param d     data passed to each call to func
+ * \param func  callback function
+ * \return Stops early (and returns 1) if func returns 1.
+ *         Otherwise returns 0.
+ */
+int yasm_expr__traverse_leaves_in_const
+    (const yasm_expr *e, /*@null@*/ void *d,
+     int (*func) (/*@null@*/ const yasm_expr__item *ei, /*@null@*/ void *d));
+
+/** Traverse over expression tree in order.
+ * Calls func for each leaf (non-operation).
+ * \param e     expression
+ * \param d     data passed to each call to func
+ * \param func  callback function
+ * \return Stops early (and returns 1) if func returns 1.
+ *         Otherwise returns 0.
+ */
+int yasm_expr__traverse_leaves_in
+    (yasm_expr *e, /*@null@*/ void *d,
+     int (*func) (/*@null@*/ yasm_expr__item *ei, /*@null@*/ void *d));
+
+/** Reorder terms of e into canonical order.  Only reorders if reordering
+ * doesn't change meaning of expression.  (eg, doesn't reorder SUB).
+ * Canonical order: REG, INT, FLOAT, SYM, EXPR.
+ * Multiple terms of a single type are kept in the same order as in
+ * the original expression.
+ * \param e     expression
+ * \note Only performs reordering on *one* level (no recursion).
+ */
+void yasm_expr__order_terms(yasm_expr *e);
+
+/** Copy entire expression EXCEPT for index "except" at *top level only*.
+ * \param e         expression
+ * \param except    term index not to copy; -1 to copy all terms
+ * \return Newly allocated copy of expression.
+ */
+yasm_expr *yasm_expr__copy_except(const yasm_expr *e, int except);
+
+/** Test if expression contains an item.  Searches recursively into
+ * subexpressions.
+ * \param e     expression
+ * \param t     type of item to look for
+ * \return Nonzero if expression contains an item of type t, zero if not.
+ */
+int yasm_expr__contains(const yasm_expr *e, yasm_expr__type t);
+
+/** Transform symrec-symrec terms in expression into #YASM_EXPR_SUBST items.
+ * Calls the callback function for each symrec-symrec term.
+ * \param ep            expression (pointer to)
+ * \param cbd           callback data passed to callback function
+ * \param callback      callback function: given subst index for bytecode
+ *                      pair, bytecode pair (bc2-bc1), and cbd (callback data)
+ * \return Number of transformations made.
+ */
+int yasm_expr__bc_dist_subst(yasm_expr **ep, void *cbd,
+                             void (*callback) (unsigned int subst,
+                                               yasm_bytecode *precbc,
+                                               yasm_bytecode *precbc2,
+                                               void *cbd));
+
+/** Substitute items into expr YASM_EXPR_SUBST items (by index).  Items are
+ * copied, so caller is responsible for freeing array of items.
+ * \param e             expression
+ * \param num_items     number of items in items array
+ * \param items         items array
+ * \return 1 on error (index out of range).
+ */
+int yasm_expr__subst(yasm_expr *e, unsigned int num_items,
+                     const yasm_expr__item *items);
+
 #endif
index 21ea56a97e99fa2ce1f0cfd9c86a19b592d87f14..c5b83cb86779f39cbbd8f4f3ed4f4e93c581139f 100644 (file)
@@ -49,8 +49,6 @@
 #include "dbgfmt.h"
 #include "objfmt.h"
 
-#include "expr-int.h"
-
 #include "inttree.h"
 
 
index 2fcabf494a889003dcbc9b6bfdc85c208ebb9c70..e3eda5fd6739a1fbdefc769d893f00f967d3ea66 100644 (file)
@@ -43,7 +43,6 @@
 
 #include "arch.h"
 
-#include "expr-int.h"
 
 void
 yasm_value_initialize(/*@out@*/ yasm_value *value,
index bfdb4c0b8d1c130eb9ed8983a41c774fe103c0c9..2529664aff74455e0a106c791ad0f69e32d4f13d 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "modules/arch/lc3b/lc3barch.h"
index 5a73e5de7481016e945b8fc86f5c85963def6a6e..6dd31110993b46b67c542e0adb3ac128c502511c 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "x86arch.h"
index ae99f7d2f9ea182fe1fd1db6081270d291503986..8d11b1ab54a8b6cb9c07f423168e01401dede367 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "x86arch.h"
index 69e609a5ce3bc741a74e41ac46b0ff73e3c2ef68..278cb2dfc91a1b6f2e3d10415feff88bf2a4ad9a 100644 (file)
@@ -28,7 +28,6 @@
 #include <util.h>
 RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 #include <libyasm/phash.h>
 
index 56515726c3eb3abd4140da41454ea66b64a6bfd8..7056f97a42864e384a9e66092c22e7805de23f1a 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 
index de31df719f093d966d2827eed53681d6dcadc916..52f1e4aab9977344d0dd4fb4261fd557c06bed6f 100644 (file)
@@ -28,7 +28,6 @@
 #include <time.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "coff-objfmt.h"
index cbda39d3c6e1c9ec536b22806cf88c8a0fbe5723..ea703812ff83a85a44a779925ba3b9fbc594f258 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "coff-objfmt.h"
index 5f726eac2d30a5f47a36d2abd2d86c3803bea57b..664d135157e0808c1d5d8ad0e631f075bd453017 100644 (file)
@@ -44,7 +44,6 @@
  * Each Section is spatially disjoint, and has exactly one SHT entry.
  */
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include "elf.h"
index 559fb50cca86a0624161af2245b3dd30d550d8f1..ce0cdda18fe05eeb2a3f982a0b394ae5b4fbecae 100644 (file)
@@ -28,7 +28,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 #define YASM_OBJFMT_ELF_INTERNAL
 #include "elf.h"
index d639b5994c72c9ad1897a0dc5078dde5f243d9fe..827c861e476c486beb65ed14196f5842f231b137 100644 (file)
@@ -28,7 +28,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 #define YASM_OBJFMT_ELF_INTERNAL
 #include "elf.h"
index e3b232769a7787733813b48756d3bb6514fa9ffd..f187b9e7e72009135fcd33db16b2fe1ed7d666bc 100644 (file)
@@ -28,7 +28,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 #define YASM_OBJFMT_ELF_INTERNAL
 #include "elf.h"
index d146282987e1c88d85ef0d5be3aded410ccdbfe3..3f13948f6f3f86f086790aa8065e49d67bd6605f 100644 (file)
 /* optional: automatically prefix underscores to global exported symbols */
 /*#define AUTO_UNDERSCORE*/
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 /* MACH-O DEFINES */
index 6a0f69238ff975bd81b9947d4e69cd1fc794894f..2b96bed364ca42bf47e14514763f4ba60921ef90 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 
index f68237e6280741ef45ba0ebbe8d0a32e99a32051..4ce2f3efccd658a05fc32923698a2a12ba350598 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 /*@unused@*/ RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 
index 6e79ec1c5fd343510933657178cab13dd6aa68bb..6f92ebb2298853a8044d535f571d513ad71453dd 100644 (file)
@@ -30,7 +30,6 @@
 #include <util.h>
 RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include <limits.h>
index 5ef7c11f7da59084e5bbe69755638180c64db1e9..b449dd1c13648a62ef1f1f8bdfc2aa3f58897f87 100644 (file)
@@ -27,7 +27,6 @@
 #include <util.h>
 RCSID("$Id$");
 
-#define YASM_EXPR_INTERNAL
 #include <libyasm.h>
 
 #include <math.h>