stage1_2/stage1_2.cc
changeset 177 697562a5da7c
parent 175 dadda1b5401e
child 264 6facabd9c2cd
--- a/stage1_2/stage1_2.cc	Tue May 19 16:31:35 2009 +0200
+++ b/stage1_2/stage1_2.cc	Mon May 25 12:17:10 2009 +0200
@@ -35,7 +35,7 @@
 #include "../absyntax/absyntax.hh"
 
 
-// #include "stage1_2.hh"
+#include "stage1_2.hh"
 #include "iec.y.hh"
 #include "stage1_2_priv.hh"
 
@@ -57,7 +57,15 @@
 const char *current_filename = NULL;
 
 
-
+/******************************************************/
+/* whether we are suporting safe extensions           */
+/* as defined in PLCopen - Technical Committee 5      */
+/* Safety Software Technical Specification,           */
+/* Part 1: Concepts and Function Blocks,              */
+/* Version 1.0 – Official Release                     */
+/******************************************************/
+bool safe_extensions_ = false;
+bool get_opt_safe_extensions() {return safe_extensions_;}
 
 /****************************************************/
 /* Controlling the entry to the body_state in flex. */
@@ -263,10 +271,26 @@
 /***********************************************************************/
 
 
-int stage1_2__(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full);
-
-
-int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root_ref, bool full) {
-  return stage1_2__(filename, includedir, tree_root_ref, full);
-}
-
+int stage2__(const char *filename, 
+             const char *includedir,     /* Include directory, where included files will be searched for... */
+             symbol_c **tree_root_ref,
+             bool full_token_loc         /* error messages specify full token location */
+            );
+
+
+int stage1_2(const char *filename, symbol_c **tree_root_ref, stage1_2_options_t options) {
+      /* NOTE: we only call stage2 (bison - syntax analysis) directly, as stage 2 will itself call stage1 (flex - lexical analysis)
+       *       automatically as needed
+       */
+
+      /* NOTE: Since we do not call stage1__ (flex) directly, we cannot directly pass any parameters to that function either.
+       *       In this case, we use callback functions, i.e. stage1__ (i.e. flex) will call functions defined in this file
+       *       whenever it needs info/parameters coming from stage1_2().
+       *       These callback functions will get their data from local (to this file) global variables...
+       *       We now set those variables...
+       */
+  safe_extensions_ = options.safe_extensions;
+  
+  return stage2__(filename, options.includedir, tree_root_ref, options.full_token_loc);
+}
+