Mercurial > hg-old > index.cgi
diff lwasm/pragma.c @ 352:f5b77989f675
Added PRAGMA and *PRAGMA
author | lost@starbug |
---|---|
date | Tue, 30 Mar 2010 20:56:54 -0600 |
parents | 619fd6ad4ab9 |
children | a9521955554f |
line wrap: on
line diff
--- a/lwasm/pragma.c Sat Mar 27 23:37:30 2010 -0600 +++ b/lwasm/pragma.c Tue Mar 30 20:56:54 2010 -0600 @@ -24,6 +24,7 @@ #include <lw_string.h> #include "lwasm.h" +#include "instab.h" struct pragma_list { @@ -51,7 +52,7 @@ { 0, 0 } }; -int parse_pragma_string(asmstate_t *as, char *str) +int parse_pragma_string(asmstate_t *as, char *str, int ignoreerr) { char *p; int i; @@ -78,12 +79,46 @@ } } /* unrecognized pragma here */ - lw_free(p); - return 0; - + if (!ignoreerr) + { + lw_free(p); + return 0; + } out: lw_free(p); } as -> pragmas = pragmas; return 1; } + +PARSEFUNC(pseudo_parse_pragma) +{ + char *ps, *t; + + for (t = *p; *t && !isspace(*t); t++) + /* do nothing */ ; + + ps = lw_strndup(*p, t - *p); + *p = t; + + if (parse_pragma_string(as, ps, 0) == 0) + { + lwasm_register_error(as, l, "Unrecognized pragma string"); + } + lw_free(ps); +} + +PARSEFUNC(pseudo_parse_starpragma) +{ + char *ps, *t; + + for (t = *p; *t && !isspace(*t); t++) + /* do nothing */ ; + + ps = lw_strndup(*p, t - *p); + *p = t; + + // *pragma must NEVER throw an error + parse_pragma_string(as, ps, 1); + lw_free(ps); +}