stage3/stage3.cc
author Mario de Sousa <msousa@fe.up.pt>
Wed, 13 Feb 2013 18:56:25 +0000
changeset 810 d9c48ad646f1
parent 738 e47cc8c954db
child 959 8bfcc8e62bd6
permissions -rwxr-xr-x
Add a new node to the abstract symtax tree, which will let us do datatype checking of FB variable declarations using the standard algorithm, and no special cases.
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
     1
/*
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
     2
 *  matiec - a compiler for the programming languages defined in IEC 61131-3
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
     3
 *
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
     4
 *  Copyright (C) 2009-2012  Mario de Sousa (msousa@fe.up.pt)
279
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 267
diff changeset
     5
 *  Copyright (C) 2007-2011  Laurent Bessard and Edouard Tisserant
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
     6
 *  Copyright (C) 2012       Manuele Conti (manuele.conti@sirius-es.it)
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
     7
 *  Copyright (C) 2012       Matteo Facchinetti (matteo.facchinetti@sirius-es.it)
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
     8
 *
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
     9
 *  This program is free software: you can redistribute it and/or modify
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    10
 *  it under the terms of the GNU General Public License as published by
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    11
 *  the Free Software Foundation, either version 3 of the License, or
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    12
 *  (at your option) any later version.
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    13
 *
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    14
 *  This program is distributed in the hope that it will be useful,
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    15
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    17
 *  GNU General Public License for more details.
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    18
 *
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    19
 *  You should have received a copy of the GNU General Public License
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    20
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    21
 *
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    22
 *
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    23
 * This code is made available on the understanding that it will not be
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    24
 * used in safety-critical situations without a full and competent review.
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    25
 */
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    26
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    27
/*
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    28
 * An IEC 61131-3 compiler.
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    29
 *
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    30
 * Based on the
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 262
diff changeset
    31
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    32
 *
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    33
 */
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    34
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    35
#include "stage3.hh"
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    36
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    37
#include "flow_control_analysis.hh"
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    38
#include "fill_candidate_datatypes.hh"
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    39
#include "narrow_candidate_datatypes.hh"
677
740da3255d9d Remove all remaining NULL (undefined) datatypes from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 656
diff changeset
    40
#include "forced_narrow_candidate_datatypes.hh"
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    41
#include "print_datatypes_error.hh"
508
dc6906338042 Add lvalue check class.
Manuele Conti <conti.ma@alice.it>
parents: 444
diff changeset
    42
#include "lvalue_check.hh"
560
13b5b7faa3d7 Renamed class, remove unused code, delete allocated objects.
mjsousa <msousa@fe.up.pt>
parents: 559
diff changeset
    43
#include "array_range_check.hh"
564
dabffc3086dc Start constant_folding class.
Manuele Conti <conti.ma@alice.it>
parents: 560
diff changeset
    44
#include "constant_folding.hh"
656
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    45
#include "declaration_check.hh"
738
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    46
#include "enum_declaration_check.hh"
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    47
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    48
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    49
static int enum_declaration_check(symbol_c *tree_root){
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    50
    enum_declaration_check_c enum_declaration_check(NULL);
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    51
    tree_root->accept(enum_declaration_check);
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    52
    return enum_declaration_check.get_error_count();
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    53
}
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
    54
530
1eacd7afcab1 Fix comment. (thanks go to Manuele for pointing it put).
Mario de Sousa <msousa@fe.up.pt>
parents: 516
diff changeset
    55
656
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    56
static int declaration_safety(symbol_c *tree_root){
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    57
    declaration_check_c declaration_check(tree_root);
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    58
    tree_root->accept(declaration_check);
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    59
    return declaration_check.get_error_count();
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
    60
}
530
1eacd7afcab1 Fix comment. (thanks go to Manuele for pointing it put).
Mario de Sousa <msousa@fe.up.pt>
parents: 516
diff changeset
    61
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    62
static int flow_control_analysis(symbol_c *tree_root){
564
dabffc3086dc Start constant_folding class.
Manuele Conti <conti.ma@alice.it>
parents: 560
diff changeset
    63
    flow_control_analysis_c flow_control_analysis(tree_root);
dabffc3086dc Start constant_folding class.
Manuele Conti <conti.ma@alice.it>
parents: 560
diff changeset
    64
    tree_root->accept(flow_control_analysis);
dabffc3086dc Start constant_folding class.
Manuele Conti <conti.ma@alice.it>
parents: 560
diff changeset
    65
    return 0;
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    66
}
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    67
530
1eacd7afcab1 Fix comment. (thanks go to Manuele for pointing it put).
Mario de Sousa <msousa@fe.up.pt>
parents: 516
diff changeset
    68
612
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    69
/* Constant folding assumes that flow control analysis has been completed!
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    70
 * so be sure to call flow_control_analysis() before calling this function!
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    71
 */
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    72
static int constant_folding(symbol_c *tree_root){
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    73
    constant_folding_c constant_folding(tree_root);
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    74
    tree_root->accept(constant_folding);
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    75
    return constant_folding.get_error_count();
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    76
}
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    77
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    78
611
8e81d7db54be update comments.
Mario de Sousa <msousa@fe.up.pt>
parents: 564
diff changeset
    79
/* Type safety analysis assumes that 
8e81d7db54be update comments.
Mario de Sousa <msousa@fe.up.pt>
parents: 564
diff changeset
    80
 *    - flow control analysis 
8e81d7db54be update comments.
Mario de Sousa <msousa@fe.up.pt>
parents: 564
diff changeset
    81
 *    - constant folding (constant check)
8e81d7db54be update comments.
Mario de Sousa <msousa@fe.up.pt>
parents: 564
diff changeset
    82
 * has already been completed, so be sure to call those semantic checkers
8e81d7db54be update comments.
Mario de Sousa <msousa@fe.up.pt>
parents: 564
diff changeset
    83
 * before calling this function
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    84
 */
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    85
static int type_safety(symbol_c *tree_root){
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    86
	fill_candidate_datatypes_c fill_candidate_datatypes(tree_root);
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    87
	tree_root->accept(fill_candidate_datatypes);
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    88
	narrow_candidate_datatypes_c narrow_candidate_datatypes(tree_root);
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    89
	tree_root->accept(narrow_candidate_datatypes);
444
92d40d2a7adc Update comments on general architecture.
Mario de Sousa <msousa@fe.up.pt>
parents: 443
diff changeset
    90
	print_datatypes_error_c print_datatypes_error(tree_root);
417
d48f53715f77 Re-write of stage3 code (done by Manuele and I), re-write of search_varfb_instance_type_c (done by myself), and several other bug fixes.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
    91
	tree_root->accept(print_datatypes_error);
677
740da3255d9d Remove all remaining NULL (undefined) datatypes from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 656
diff changeset
    92
	forced_narrow_candidate_datatypes_c forced_narrow_candidate_datatypes(tree_root);
740da3255d9d Remove all remaining NULL (undefined) datatypes from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 656
diff changeset
    93
	tree_root->accept(forced_narrow_candidate_datatypes);
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
    94
	return print_datatypes_error.get_error_count();
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    95
}
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
    96
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
    97
612
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
    98
/* Left value checking assumes that data type analysis has already been completed,
530
1eacd7afcab1 Fix comment. (thanks go to Manuele for pointing it put).
Mario de Sousa <msousa@fe.up.pt>
parents: 516
diff changeset
    99
 * so be sure to call type_safety() before calling this function
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   100
 */
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   101
static int lvalue_check(symbol_c *tree_root){
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   102
	lvalue_check_c lvalue_check(tree_root);
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   103
	tree_root->accept(lvalue_check);
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   104
	return lvalue_check.get_error_count();
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   105
}
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   106
612
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   107
/* Array range check assumes that constant folding has been completed!
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   108
 * so be sure to call constant_folding() before calling this function!
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   109
 */
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   110
static int array_range_check(symbol_c *tree_root){
560
13b5b7faa3d7 Renamed class, remove unused code, delete allocated objects.
mjsousa <msousa@fe.up.pt>
parents: 559
diff changeset
   111
	array_range_check_c array_range_check(tree_root);
13b5b7faa3d7 Renamed class, remove unused code, delete allocated objects.
mjsousa <msousa@fe.up.pt>
parents: 559
diff changeset
   112
	tree_root->accept(array_range_check);
13b5b7faa3d7 Renamed class, remove unused code, delete allocated objects.
mjsousa <msousa@fe.up.pt>
parents: 559
diff changeset
   113
	return array_range_check.get_error_count();
559
a3b8925e640c Start sematinc range check class.
Manuele Conti <conti.ma@alice.it>
parents: 530
diff changeset
   114
}
a3b8925e640c Start sematinc range check class.
Manuele Conti <conti.ma@alice.it>
parents: 530
diff changeset
   115
443
ff4d26b7e51d Narrow IL code backwords, so as to correctly handle invocations to overloaded functions from IL code.
Mario de Sousa <msousa@fe.up.pt>
parents: 417
diff changeset
   116
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
   117
int stage3(symbol_c *tree_root){
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   118
	int error_count = 0;
738
e47cc8c954db Start to move enumeration declaration checking to its own class.
Mario de Sousa <msousa@fe.up.pt>
parents: 677
diff changeset
   119
	error_count += enum_declaration_check(tree_root);
656
45a796bce487 Start declaration check class.
Manuele Conti <conti.ma@alice.it>
parents: 612
diff changeset
   120
	error_count += declaration_safety(tree_root);
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   121
	error_count += flow_control_analysis(tree_root);
612
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   122
	error_count += constant_folding(tree_root);
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   123
	error_count += type_safety(tree_root);
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   124
	error_count += lvalue_check(tree_root);
612
c062ff18d04f Constant folding for IL.
Mario de Sousa <msousa@fe.up.pt>
parents: 611
diff changeset
   125
	error_count += array_range_check(tree_root);
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   126
	
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   127
	if (error_count > 0) {
516
8591746fa134 Produce similar error messages in stage2 and stage3.
Mario de Sousa <msousa@fe.up.pt>
parents: 510
diff changeset
   128
		fprintf(stderr, "%d error(s) found. Bailing out!\n", error_count); 
510
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   129
		return -1;
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   130
	}
9317e04c1dde Fixing check for assignment to output variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 508
diff changeset
   131
	return 0;
204
8ffa211b7f9a Adding missing Stage3 files.
Catarina Boucinha <ccb@fe.up.pt>
parents:
diff changeset
   132
}