+2004-10-02 James A. Morrison <phython@gcc.gnu.org>
+
+ * lex.l: Remove random whitespace.
+ * parse.y: Reformat copyright notice. Indent declarations.
+ Wrap long lines, unwrap short lines.
+ * tree1.c: Reformat copyright notice. Wrap long lines.
+ Remove random whitespace.
+ (lookup_tree_name): Use LOCATION_LINE.
+ * treetree.c: Reformat copyright notice. Wrap long lines.
+ Remove random whitespace.
+
2004-10-01 James A. Morrison <phython@gcc.gnu.org>
* parse.y (ELSE): Set tok to $1.
---------------------------------------------------------------------
Written by Tim Josling 1999-2001, based in part on other parts of
- the GCC compiler.
-
-*/
+ the GCC compiler. */
%{
#include "config.h"
int yylex (void);
void update_yylval (int a);
-static int next_tree_charno=1;
+static int next_tree_charno = 1;
static void update_lineno_charno (void);
static void dump_lex_value (int lexret);
[ \n\t]+ {
update_lineno_charno ();
- NOT_RETURN (WHITESPACE);
+ NOT_RETURN (WHITESPACE);
}
"//".* {
/* Comment. */
- update_lineno_charno ();
- NOT_RETURN (COMMENT);
+ update_lineno_charno ();
+ NOT_RETURN (COMMENT);
}
"{" {
update_yylval (int a)
{
struct prod_token_parm_item * tok;
- tok=yylval;
+ tok = yylval;
tok->category = token_category;
tok->type = a;
-%{ /* -*- c -*- emacs mode c */
- /*
+/* -*- c -*- emacs mode c */
+/* TREELANG Compiler parser.
- TREELANG Compiler parser.
+---------------------------------------------------------------------
- ---------------------------------------------------------------------
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+Free Software Foundation, Inc.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+In other words, you are welcome to use, share and improve this program.
+You are forbidden to forbid anyone else to use, share and improve
+what you give them. Help stamp out software-hoarding!
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
+---------------------------------------------------------------------
- ---------------------------------------------------------------------
+Written by Tim Josling 1999-2001, based in part on other parts of
+the GCC compiler. */
- Written by Tim Josling 1999-2001, based in part on other parts of
- the GCC compiler.
-
- */
-
- /*
-
- Grammar Conflicts
- *****************
-
- There are no conflicts in this grammar. Please keep it that way.
-
- */
+/* Grammar Conflicts
+ *****************
+ There are no conflicts in this grammar. Please keep it that way. */
+%{
#include "config.h"
#include "system.h"
#include "coretypes.h"
#define YYPRINT(file, type, value) print_token (file, type, value)
#define YYERROR_VERBOSE YES
-/* My yylex routine used to intercept calls to flex generated code, to
+ /* My yylex routine used to intercept calls to flex generated code, to
record lex time. */
-int yylex (void);
-static inline int my_yylex (void);
-/* Call lex, but ensure time is charged to TV_LEX. */
-static inline int
-my_yylex (void)
-{
- int res;
- timevar_push (TV_LEX);
- res = yylex ();
- timevar_pop (TV_LEX);
- return res;
-}
-#define yylex my_yylex
-
-extern int option_parser_trace;
-
-/* Local prototypes. */
+ int yylex (void);
+ static inline int my_yylex (void);
-static void yyerror (const char *error_message);
-int yyparse (void);
-void print_token (FILE * file, unsigned int type ATTRIBUTE_UNUSED, YYSTYPE value);
-static struct prod_token_parm_item *reverse_prod_list (struct prod_token_parm_item *old_first);
-static void ensure_not_void (unsigned int type, struct prod_token_parm_item* name);
-static int check_type_match (int type_num, struct prod_token_parm_item *exp);
-static int get_common_type (struct prod_token_parm_item *type1,
- struct prod_token_parm_item *type2);
-static struct prod_token_parm_item *make_integer_constant (struct prod_token_parm_item* value);
-static struct prod_token_parm_item *make_plus_expression
- (struct prod_token_parm_item* tok, struct prod_token_parm_item* op1,
- struct prod_token_parm_item* op2, int type_code, int prod_code);
-static void set_storage (struct prod_token_parm_item *prod);
-
-/* File global variables. */
-
-static struct prod_token_parm_item *current_function=NULL;
+ /* Call lex, but ensure time is charged to TV_LEX. */
+ static inline int
+ my_yylex (void)
+ {
+ int res;
+ timevar_push (TV_LEX);
+ res = yylex ();
+ timevar_pop (TV_LEX);
+ return res;
+ }
+#define yylex my_yylex
+ extern int option_parser_trace;
+
+ /* Local prototypes. */
+ static void yyerror (const char *error_message);
+ int yyparse (void);
+ void print_token (FILE * file, unsigned int type ATTRIBUTE_UNUSED,
+ YYSTYPE value);
+ static struct prod_token_parm_item *reverse_prod_list
+ (struct prod_token_parm_item *old_first);
+ static void ensure_not_void (unsigned int type,
+ struct prod_token_parm_item* name);
+ static int check_type_match (int type_num, struct prod_token_parm_item *exp);
+ static int get_common_type (struct prod_token_parm_item *type1,
+ struct prod_token_parm_item *type2);
+ static struct prod_token_parm_item *make_integer_constant
+ (struct prod_token_parm_item* value);
+ static struct prod_token_parm_item *make_plus_expression
+ (struct prod_token_parm_item* tok, struct prod_token_parm_item* op1,
+ struct prod_token_parm_item* op2, int type_code, int prod_code);
+ static void set_storage (struct prod_token_parm_item *prod);
+
+ /* File global variables. */
+ static struct prod_token_parm_item *current_function = NULL;
%}
/* Not %raw - seems to have bugs. */
SYMBOL_TABLE_NAME (prod) = tok;
EXPRESSION_TYPE (prod) = $2;
VAR_INIT (prod) = $4;
- NUMERIC_TYPE (prod) = NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
+ NUMERIC_TYPE (prod) =
+ NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
ensure_not_void (NUMERIC_TYPE (prod), tok);
if (insert_tree_name (prod))
{
((struct prod_token_parm_item*)SYMBOL_TABLE_NAME (prod))->tp.tok.chars,
((struct prod_token_parm_item*)SYMBOL_TABLE_NAME (prod))->tp.tok.length,
NUMERIC_TYPE (prod),
- VAR_INIT (prod)? ((struct prod_token_parm_item*)VAR_INIT (prod))->tp.pro.code:NULL,
+ VAR_INIT (prod) ?
+ ((struct prod_token_parm_item*)VAR_INIT (prod))->tp.pro.code : NULL,
tok->tp.tok.location);
if (!prod->tp.pro.code)
abort ();
prod = make_production (PROD_VARIABLE_NAME, tok);
SYMBOL_TABLE_NAME (prod) = $2;
EXPRESSION_TYPE (prod) = $1;
- NUMERIC_TYPE (prod) = NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
+ NUMERIC_TYPE (prod) =
+ NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
ensure_not_void (NUMERIC_TYPE (prod), tok);
if (insert_tree_name (prod))
{
prod = make_production (PROD_FUNCTION_NAME, $3);
SYMBOL_TABLE_NAME (prod) = $3;
EXPRESSION_TYPE (prod) = $2;
- NUMERIC_TYPE (prod) = NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
+ NUMERIC_TYPE (prod) =
+ NUMERIC_TYPE (( (struct prod_token_parm_item*)EXPRESSION_TYPE (prod)));
PARAMETERS (prod) = reverse_prod_list ($5);
insert_tree_name (prod);
STORAGE_CLASS_TOKEN (prod) = $1;
this_parms = my_malloc (sizeof (struct prod_token_parm_item));
if (!this_parm_var->tp.pro.main_token)
abort ();
- this_parms->tp.par.variable_name = this_parm_var->tp.pro.main_token->tp.tok.chars;
+
+ this_parms->tp.par.variable_name =
+ this_parm_var->tp.pro.main_token->tp.tok.chars;
this_parms->category = parameter_category;
this_parms->type = NUMERIC_TYPE
(( (struct prod_token_parm_item*)EXPRESSION_TYPE (this_parm_var)));
}
FIRST_PARMS (prod) = first_parms;
- prod->tp.pro.code = tree_code_create_function_prototype
- (tok->tp.tok.chars, STORAGE_CLASS (prod), NUMERIC_TYPE (type),
- first_parms, tok->tp.tok.location);
+ prod->tp.pro.code =
+ tree_code_create_function_prototype (tok->tp.tok.chars,
+ STORAGE_CLASS (prod),
+ NUMERIC_TYPE (type),
+ first_parms, tok->tp.tok.location);
}
;
int type_code = get_common_type (op1, op2);
if (!type_code)
YYERROR;
- $$ = make_plus_expression
- (tok, op1, op2, type_code, EXP_PLUS);
+ $$ = make_plus_expression (tok, op1, op2, type_code, EXP_PLUS);
}
|expression tl_MINUS expression %prec tl_PLUS {
struct prod_token_parm_item *tok = $2;
int type_code = get_common_type (op1, op2);
if (!type_code)
YYERROR;
- $$ = make_plus_expression
- (tok, op1, op2, type_code, EXP_MINUS);
+ $$ = make_plus_expression (tok, op1, op2, type_code, EXP_MINUS);
}
|expression EQUALS expression {
struct prod_token_parm_item *tok = $2;
parms = tree_code_add_parameter (parms, var->tp.pro.code, exp->tp.pro.code);
}
type = tree_code_get_type (NUMERIC_TYPE (prod));
- prod->tp.pro.code = tree_code_get_expression
- (EXP_FUNCTION_INVOCATION, type, proto->tp.pro.code, parms, NULL);
+ prod->tp.pro.code = tree_code_get_expression (EXP_FUNCTION_INVOCATION, type,
+ proto->tp.pro.code, parms,
+ NULL);
$$ = prod;
}
;
YYERROR;
OP1 (prod) = $1;
- prod->tp.pro.code = tree_code_get_expression (EXP_REFERENCE, type,
- symbol_table_entry->tp.pro.code, NULL, NULL);
+ prod->tp.pro.code =
+ tree_code_get_expression (EXP_REFERENCE, type,
+ symbol_table_entry->tp.pro.code, NULL, NULL);
$$ = prod;
}
;
common type (min is signed int). */
static int
-get_common_type (struct prod_token_parm_item *type1, struct prod_token_parm_item *type2)
+get_common_type (struct prod_token_parm_item *type1,
+ struct prod_token_parm_item *type2)
{
if (NUMERIC_TYPE (type1) == UNSIGNED_INT)
return UNSIGNED_INT;
NUMERIC_TYPE (prod) = SIGNED_INT;
else
NUMERIC_TYPE (prod) = UNSIGNED_INT;
- prod->tp.pro.code = tree_code_get_integer_value (tok->tp.tok.chars, tok->tp.tok.length);
+ prod->tp.pro.code = tree_code_get_integer_value (tok->tp.tok.chars,
+ tok->tp.tok.length);
return prod;
}
- /*
+/* TREELANG Compiler almost main (tree1)
+ Called by GCC's toplev.c
- TREELANG Compiler almost main (tree1)
- Called by GCC's toplev.c
+ Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003, 2004
+ Free Software Foundation, Inc.
- Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding!
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
+ ---------------------------------------------------------------------------
- ---------------------------------------------------------------------------
-
- Written by Tim Josling 1999, 2000, 2001, based in part on other
- parts of the GCC compiler.
-
-*/
+ Written by Tim Josling 1999, 2000, 2001, based in part on other
+ parts of the GCC compiler. */
#include "config.h"
#include "system.h"
sanity_check (this_tok);
if (tok->tp.tok.length != this_tok->tp.tok.length)
continue;
- if (memcmp (tok->tp.tok.chars, this_tok->tp.tok.chars, this_tok->tp.tok.length))
+ if (memcmp (tok->tp.tok.chars, this_tok->tp.tok.chars,
+ this_tok->tp.tok.length))
continue;
+
if (option_parser_trace)
fprintf (stderr, "Found symbol %s (%i:%i) as %i \n",
- tok->tp.tok.chars,
- tok->tp.tok.location.line, tok->tp.tok.charno,
- NUMERIC_TYPE (this));
+ tok->tp.tok.chars, LOCATION_LINE (tok->tp.tok.location),
+ tok->tp.tok.charno, NUMERIC_TYPE (this));
return this;
}
+
if (option_parser_trace)
fprintf (stderr, "Not found symbol %s (%i:%i) as %i \n",
- tok->tp.tok.chars,
- tok->tp.tok.location.line, tok->tp.tok.charno, tok->type);
+ tok->tp.tok.chars, LOCATION_LINE (tok->tp.tok.location),
+ tok->tp.tok.charno, tok->type);
return NULL;
}
{
switch (item->category)
{
- case token_category:
+ case token_category:
case production_category:
case parameter_category:
break;
-/*
-
- TREELANG Compiler interface to GCC's middle end (treetree.c)
- Called by the parser.
+/* TREELANG Compiler interface to GCC's middle end (treetree.c)
+ Called by the parser.
- If you want a working example of how to write a front end to GCC,
- you are in the right place.
+ If you want a working example of how to write a front end to GCC,
+ you are in the right place.
- Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
- This code is based on toy.c written by Richard Kenner.
+ This code is based on toy.c written by Richard Kenner.
- It was later modified by Jonathan Bartlett whose changes have all
- been removed (by Tim Josling).
+ It was later modified by Jonathan Bartlett whose changes have all
+ been removed (by Tim Josling).
- Various bits and pieces were cloned from the GCC main tree, as
- GCC evolved, for COBOLForGCC, by Tim Josling.
+ Various bits and pieces were cloned from the GCC main tree, as
+ GCC evolved, for COBOLForGCC, by Tim Josling.
- It was adapted to TREELANG by Tim Josling 2001.
+ It was adapted to TREELANG by Tim Josling 2001.
- Updated to function-at-a-time by James A. Morrison, 2004.
+ Updated to function-at-a-time by James A. Morrison, 2004.
- ---------------------------------------------------------------------------
+ -----------------------------------------------------------------------
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding!
- ---------------------------------------------------------------------------
+ ----------------------------------------------------------------------- */
- */
-
-/*
- Assumption: garbage collection is never called implicitly. It will
- not be called 'at any time' when short of memory. It will only be
- called explicitly at the end of each function. This removes the
- need for a *lot* of bother to ensure everything is in the mark trees
- at all times. */
+/* Assumption: garbage collection is never called implicitly. It will
+ not be called 'at any time' when short of memory. It will only be
+ called explicitly at the end of each function. This removes the
+ need for a *lot* of bother to ensure everything is in the mark trees
+ at all times. */
/* Note, it is OK to use GCC extensions such as long long in a compiler front
end. This is because the GCC front ends are built using GCC. */
{
tree cond_exp, cond;
cond_exp = fold (build2 (NE_EXPR, boolean_type_node, exp,
- fold (build1 (CONVERT_EXPR, TREE_TYPE (exp), integer_zero_node))));
+ fold (build1 (CONVERT_EXPR, TREE_TYPE (exp),
+ integer_zero_node))));
SET_EXPR_LOCATION (cond_exp, loc);
cond = build3 (COND_EXPR, void_type_node, cond_exp, NULL_TREE,
NULL_TREE);
TYPE_NAME (TREE_TYPE (var_decl)) = TYPE_NAME (var_type);
return pushdecl (copy_node (var_decl));
-
}
{
tree fun_ptr;
- fun_ptr = fold (build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (op1)),
- op1));
+ fun_ptr = fold (build1 (ADDR_EXPR,
+ build_pointer_type (TREE_TYPE (op1)), op1));
ret1 = build3 (CALL_EXPR, type, fun_ptr, nreverse (op2), NULL_TREE);
}
break;
{
tree new_exp;
new_exp = tree_cons (NULL_TREE,
- fold (build1 (CONVERT_EXPR, TREE_TYPE (proto_exp), exp)),
- NULL_TREE);
+ fold (build1 (CONVERT_EXPR, TREE_TYPE (proto_exp),
+ exp)), NULL_TREE);
if (!list)
return new_exp;
return chainon (new_exp, list);