diff src/expr.h @ 14:b28d7cb60779

checkpoint
author lost
date Thu, 23 Oct 2008 02:44:07 +0000
parents 05d4115b4860
children 1f598d89b9b0
line wrap: on
line diff
--- a/src/expr.h	Wed Oct 22 04:51:16 2008 +0000
+++ b/src/expr.h	Thu Oct 23 02:44:07 2008 +0000
@@ -49,27 +49,47 @@
 an LWVAL may be an expression.
 */
 
-typedef union lwval LWVAL;
-
-struct lwval_int
-{
-	int	lwval_type;					// type of value
-	int lwval_int_value;			// integer value
-};
-
-union lwval
-{
-	struct lwval_int lwval_type_int;	// integer type
-};
-
-enum lwval_types
-{
-	LWVAL_TYPE_INT
-};
-
 #ifndef __expr_h_seen__
 #define __expr_h_seen__
 
+typedef struct lwval LWVAL;
 
+union lwval_dt
+{
+	int lwval_int;					// integer type data
+	char *lwval_var;				// pointer to variable name
+};
+
+enum
+{
+	LWVAL_TYPE_NAN,					// not a number
+	LWVAL_TYPE_INT,					// integer
+	LWVAL_TYPE_VAR,					// variable (symbol)
+	LWVAL_TYPE_EXPR,				// expression
+};
+
+struct lwval
+{
+	int lwval_type;					// data type
+	union lwval_dt dt;				// type specific stuff
+};
+
+#ifndef __expr_c_seen__
+#define EE extern
+#else
+#define EE
+#endif
+
+EE LWVAL *lwval_construct_int(int value);
+EE void lwval_destroy(LWVAL *value);
+
+// operators - operate on v1 and v2 in order, return in v3
+// if v3 is NULL, allocate new LWVAL and return it else just
+// return v3 with new value in it
+EE LWVAL *lwval_add(LWVAL *v1, LWVAL *v2, LWVAL *v3);
+EE LWVAL *lwval_sub(LWVAL *v1, LWVAL *v2, LWVAL *v3);
+EE LWVAL *lwval_mul(LWVAL *v1, LWVAL *v2, LWVAL *v3);
+EE LWVAL *lwval_div(LWVAL *v1, LWVAL *v2, LWVAL *v3);
+EE LWVAL *lwval_mod(LWVAL *v1, LWVAL *v2, LWVAL *v3);
 
 #endif //__expr_h_seen__