intel compilers understand. */
int
-process_pragma (finput, c)
+process_pragma (finput, t)
FILE *finput;
- int c;
+ tree t;
{
int i;
+ register int c;
+ register char *pname;
- while (c == ' ' || c == '\t')
- c = getc (finput);
+ if (TREE_CODE (t) != IDENTIFIER_NODE)
+ return 0;
+
+ pname = IDENTIFIER_POINTER (t);
- if (c == 'a'
- && getc (finput) == 'l'
- && getc (finput) == 'i'
- && getc (finput) == 'g'
- && getc (finput) == 'n'
- && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
+ if (strcmp (pname, "align") == 0)
{
char buf[20];
char *s = buf;
int align;
- while (c == ' ' || c == '\t')
+ do {
c = getc (finput);
+ } while (c == ' ' || c == '\t');
+
if (c == '(')
c = getc (finput);
while (c >= '0' && c <= '9')
- missing identifier means next struct
- alignment rules for bitfields need more investigation */
+
+ return 1;
}
/* Should be pragma 'far' or equivalent for callx/balx here. */
- while (c != '\n' && c != EOF)
- c = getc (finput);
- return c;
+ return 0;
}
/* Initialize variables before compiling any files. */
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <tree.h>
+
/* Make everything that used to go in the text section really go there. */
int flag_no_mach_text_sections = 0;
/* Called from check_newline via the macro HANDLE_PRAGMA.
FINPUT is the source file input stream.
CH is the first character after `#pragma'.
- The result is the terminating character ('\n' or EOF). */
+ The result is 1 if the pragma was handled. */
int
-handle_pragma (finput, ch, get_line_function)
+handle_pragma (finput, node)
FILE *finput;
- int ch;
- char *(*get_line_function) ();
+ tree node;
{
- register char *p;
+ int retval = 0;
+ register char *pname;
/* Record initial setting of optimize flag, so we can restore it. */
if (!pragma_initialized)
initial_optimize_flag = optimize;
}
- /* Nothing to do if #pragma is by itself. */
- if (ch == '\n' || ch == EOF)
- return ch;
+ if (TREE_CODE (node) != IDENTIFIER_NODE)
+ return 0;
+
+ pname = IDENTIFIER_POINTER (node);
- p = (*get_line_function) (finput);
- if (OPT_STRCMP ("CC_OPT_ON"))
+ if (strcmp (pname, "CC_OPT_ON") == 0)
{
optimize = 1, obey_regdecls = 0;
warning ("optimization turned on");
+ retval = 1;
}
- else if (OPT_STRCMP ("CC_OPT_OFF"))
+ else if (strcmp (pname, "CC_OPT_OFF") == 0)
{
optimize = 0, obey_regdecls = 1;
warning ("optimization turned off");
+ retval = 1;
}
- else if (OPT_STRCMP ("CC_OPT_RESTORE"))
+ else if (strcmp (pname, "CC_OPT_RESTORE") == 0)
{
extern int initial_optimize_flag;
optimize = initial_optimize_flag;
}
warning ("optimization level restored");
+ retval = 1;
}
- else if (OPT_STRCMP ("CC_WRITABLE_STRINGS"))
- flag_writable_strings = 1;
- else if (OPT_STRCMP ("CC_NON_WRITABLE_STRINGS"))
- flag_writable_strings = 0;
- else if (OPT_STRCMP ("CC_NO_MACH_TEXT_SECTIONS"))
- flag_no_mach_text_sections = 1;
-
- /* get_line_function must leave the last character read in FINPUT. */
- return getc (finput);
+ else if (strcmp (pname, "CC_WRITABLE_STRINGS") == 0)
+ flag_writable_strings = retval = 1;
+ else if (strcmp (pname, "CC_NON_WRITABLE_STRINGS") == 0)
+ flag_writable_strings = 0, retval = 1;
+ else if (strcmp (pname, "CC_NO_MACH_TEXT_SECTIONS") == 0)
+ flag_no_mach_text_sections = retval = 1;
+
+ return retval;
}
compiler. */
int
-handle_pragma (file, c)
+handle_pragma (file, t)
FILE *file;
- int c;
+ tree t;
{
- char pbuf[200];
- int psize = 0;
+ int retval = 0;
+ register char *pname;
- while (c == ' ' || c == '\t')
- c = getc (file);
-
- if (c != '\n' & c != EOF)
- {
- while (psize < sizeof (pbuf) - 1
- && (isalpha (c) || c == '_'))
- {
- pbuf[psize++] = c;
- c = getc (file);
- }
- pbuf[psize] = 0;
-
- if (strcmp (pbuf, "interrupt") == 0)
- pragma_interrupt = 1;
- else if (strcmp (pbuf, "trapa") == 0)
- pragma_interrupt = pragma_trapa = 1;
- else if (strcmp (pbuf, "nosave_low_regs") == 0)
- pragma_nosave_low_regs = 1;
+ if (TREE_CODE (t) != IDENTIFIER_NODE)
+ return 0;
- while (c != '\n' && c != EOF)
- c = getc (file);
- }
+ pname = IDENTIFIER_POINTER (t);
+ if (strcmp (pname, "interrupt") == 0)
+ pragma_interrupt = retval = 1;
+ else if (strcmp (pname, "trapa") == 0)
+ pragma_interrupt = pragma_trapa = retval = 1;
+ else if (strcmp (pname, "nosave_low_regs") == 0)
+ pragma_nosave_low_regs = retval = 1;
- return c;
+ return retval;
}
\f
/* Predicates used by the templates. */