diff lwasm/lwasm.h @ 347:1649bc7bda5a

Some data oriented pseudo ops added
author lost@starbug
date Sat, 27 Mar 2010 20:16:24 -0600
parents a82c55070624
children dcd2978a7d18
line wrap: on
line diff
--- a/lwasm/lwasm.h	Sat Mar 27 19:04:03 2010 -0600
+++ b/lwasm/lwasm.h	Sat Mar 27 20:16:24 2010 -0600
@@ -81,6 +81,13 @@
 	lwasm_error_t *next;				// ptr to next error
 };
 
+struct line_expr_s
+{
+	lw_expr_t expr;
+	int id;
+	struct line_expr_s *next;
+};
+
 typedef struct line_s line_t;
 struct line_s
 {
@@ -95,6 +102,8 @@
 	lwasm_error_t *err;					// list of errors
 	line_t *prev;						// previous line
 	line_t *next;						// next line
+	
+	struct line_expr_s *exprs;			// expressions used during parsing
 	asmstate_t *as;						// assembler state data ptr
 };
 
@@ -139,6 +148,8 @@
 	int inmacro;						// are we in a macro?
 	int skipcond;						// skipping a condition?
 	int skipmacro;						// are we skipping in a macro?	
+	int endseen;						// have we seen an "end" pseudo?
+	int execaddr;						// address from "end"
 
 	line_t *line_head;					// start of lines list
 	line_t *line_tail;					// tail of lines list
@@ -173,6 +184,13 @@
 extern void lwasm_emit(line_t *cl, int byte);
 extern void lwasm_emitop(line_t *cl, int opc);
 
+extern void lwasm_save_expr(line_t *cl, int id, lw_expr_t expr);
+extern lw_expr_t lwasm_fetch_expr(line_t *cl, int id);
+extern lw_expr_t lwasm_parse_expr(asmstate_t *as, char **p);
+extern int lwasm_emitexpr(line_t *cl, lw_expr_t expr, int s);
+
+extern void skip_operand(char **p);
+
 #endif
 
 #define OPLEN(op) (((op)>0xFF)?2:1)