]> granicus.if.org Git - yasm/commitdiff
New function: expr_get_symrec().
authorPeter Johnson <peter@tortall.net>
Sun, 18 Nov 2001 15:51:47 +0000 (15:51 -0000)
committerPeter Johnson <peter@tortall.net>
Sun, 18 Nov 2001 15:51:47 +0000 (15:51 -0000)
svn path=/trunk/yasm/; revision=338

libyasm/expr.c
libyasm/expr.h
src/expr.c
src/expr.h

index ebacf7f5ff516d1f4397bd04c1a914058cdc38b4..0ca5f0a2b6f4d4d0baba3525f7e1e0ca931902a9 100644 (file)
@@ -815,6 +815,20 @@ expr_get_intnum(expr **ep)
 }
 /*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/
 
+/*@-unqualifiedtrans -nullderef -nullstate -onlytrans@*/
+const symrec *
+expr_get_symrec(expr **ep, int simplify)
+{
+    if (simplify)
+       *ep = expr_simplify(*ep);
+
+    if ((*ep)->op == EXPR_IDENT && (*ep)->terms[0].type == EXPR_SYM)
+       return (*ep)->terms[0].data.sym;
+    else
+       return (symrec *)NULL;
+}
+/*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/
+
 void
 expr_print(expr *e)
 {
index 2514993822796f4f1151dd38aee362dd70b4387f..73fa151bd32f791f659ddfd9474817652c647e4b 100644 (file)
@@ -62,6 +62,13 @@ void expr_expand_equ(expr *e);
  */
 /*@dependent@*/ /*@null@*/ const intnum *expr_get_intnum(expr **ep);
 
+/* Gets the symrec value of e if the expression is just an integer.  If the
+ * expression is more complex, returns NULL.  Simplifies the expr first if
+ * simplify is nonzero.
+ */
+/*@dependent@*/ /*@null@*/ const symrec *expr_get_symrec(expr **ep,
+                                                        int simplify);
+
 void expr_print(expr *);
 
 #endif
index ebacf7f5ff516d1f4397bd04c1a914058cdc38b4..0ca5f0a2b6f4d4d0baba3525f7e1e0ca931902a9 100644 (file)
@@ -815,6 +815,20 @@ expr_get_intnum(expr **ep)
 }
 /*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/
 
+/*@-unqualifiedtrans -nullderef -nullstate -onlytrans@*/
+const symrec *
+expr_get_symrec(expr **ep, int simplify)
+{
+    if (simplify)
+       *ep = expr_simplify(*ep);
+
+    if ((*ep)->op == EXPR_IDENT && (*ep)->terms[0].type == EXPR_SYM)
+       return (*ep)->terms[0].data.sym;
+    else
+       return (symrec *)NULL;
+}
+/*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/
+
 void
 expr_print(expr *e)
 {
index 2514993822796f4f1151dd38aee362dd70b4387f..73fa151bd32f791f659ddfd9474817652c647e4b 100644 (file)
@@ -62,6 +62,13 @@ void expr_expand_equ(expr *e);
  */
 /*@dependent@*/ /*@null@*/ const intnum *expr_get_intnum(expr **ep);
 
+/* Gets the symrec value of e if the expression is just an integer.  If the
+ * expression is more complex, returns NULL.  Simplifies the expr first if
+ * simplify is nonzero.
+ */
+/*@dependent@*/ /*@null@*/ const symrec *expr_get_symrec(expr **ep,
+                                                        int simplify);
+
 void expr_print(expr *);
 
 #endif