diff --git a/Fltk/contextWindow.cpp b/Fltk/contextWindow.cpp
index c6595b97cc6ed82c828f5768040ec02e7865b83c..498893a43f3785f935f33dabf72274739132e746 100644
--- a/Fltk/contextWindow.cpp
+++ b/Fltk/contextWindow.cpp
@@ -10,7 +10,7 @@
 #include "contextWindow.h"
 #include "paletteWindow.h"
 #include "GModel.h"
-#include "Geo.h"
+#include "Parser.h"
 #include "GeoStringInterface.h"
 #include "OpenFile.h"
 #include "Context.h"
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 6c923a30d0f4718d656a62cda740d16eb97dd11d..51acff955aa46abc8cd03fdd98f269834eae0631 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -9,6 +9,7 @@
 #include "Numeric.h"
 #include "GModel.h"
 #include "GModelIO_GEO.h"
+#include "Geo.h"
 #include "GeoInterpolation.h"
 #include "Context.h"
 #include "MVertexRTree.h"
diff --git a/Geo/Geo.h b/Geo/Geo.h
index 2ef3d1a9668baf83079002e2bf1729dd37468f9e..28d3d07c0b838b597aa3ae0d4c5a630ad1384bf0 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -57,8 +57,6 @@
 #define MSH_PHYSICAL_SURFACE   502
 #define MSH_PHYSICAL_VOLUME    503
 
-#define MSH_UNKNOWN            999
-
 class gLevelset;
 
 class LevelSet {
@@ -285,9 +283,6 @@ class PhysicalGroup{
   List_T *Entities;
 };
 
-int NEWFIELD(void);
-int NEWPHYSICAL(void);
-
 int compareVertex(const void *a, const void *b);
 int compareSurfaceLoop(const void *a, const void *b);
 int compareEdgeLoop(const void *a, const void *b);
diff --git a/Geo/GeoInterpolation.h b/Geo/GeoInterpolation.h
index 5662dd8139a64e144d7280a91103ae4613dac903..c9cb7b5136568c66d0c565bd9235e39c68e87f78 100644
--- a/Geo/GeoInterpolation.h
+++ b/Geo/GeoInterpolation.h
@@ -6,7 +6,12 @@
 #ifndef _GEO_INTERPOLATION_H_
 #define _GEO_INTERPOLATION_H_
 
-#include "Geo.h"
+#include "SPoint3.h"
+
+class Surface;
+class Curve;
+class Vertex;
+class gmshSurface;
 
 bool iSRuledSurfaceASphere(Surface *s, SPoint3 &center, double &radius);
 Vertex InterpolateCurve(Curve *Curve, double u, int derivee);
diff --git a/Geo/gmshEdge.h b/Geo/gmshEdge.h
index 2d6d3d47fa3624b669e36a6f76e737bdcf7c3870..0b01c8b27e22551a1b1f145e83f99068ef89b3fa 100644
--- a/Geo/gmshEdge.h
+++ b/Geo/gmshEdge.h
@@ -6,12 +6,13 @@
 #ifndef _GMSH_EDGE_H_
 #define _GMSH_EDGE_H_
 
-#include "Geo.h"
 #include "GEdge.h"
 
+class Curve;
+
 class gmshEdge : public GEdge {
  protected:
-  Curve *c; 
+  Curve *c;
 
  public:
   gmshEdge(GModel *model, Curve *edge, GVertex *v1, GVertex *v2);
diff --git a/Geo/gmshFace.h b/Geo/gmshFace.h
index 08b4a75ea85c849c679808f1202166bac07b6c32..9c118ba7a349b1efc9bb83512f01c3ad3eb93b5d 100644
--- a/Geo/gmshFace.h
+++ b/Geo/gmshFace.h
@@ -6,9 +6,10 @@
 #ifndef _GMSH_FACE_H_
 #define _GMSH_FACE_H_
 
-#include "Geo.h"
 #include "GFace.h"
 
+class Surface;
+
 class gmshFace : public GFace {
  protected:
   Surface *s;
@@ -19,17 +20,17 @@ class gmshFace : public GFace {
  public:
   gmshFace(GModel *m, Surface *face);
   virtual ~gmshFace(){}
-  Range<double> parBounds(int i) const; 
+  Range<double> parBounds(int i) const;
   void setModelEdges(std::list<GEdge*> &);
   virtual GPoint point(double par1, double par2) const;
-  virtual GPoint closestPoint(const SPoint3 &queryPoint, 
-                              const double initialGuess[2]) const; 
-  virtual bool containsPoint(const SPoint3 &pt) const;  
-  virtual double getMetricEigenvalue(const SPoint2 &);  
-  virtual SVector3 normal(const SPoint2 &param) const; 
-  virtual Pair<SVector3,SVector3> firstDer(const SPoint2 &param) const; 
+  virtual GPoint closestPoint(const SPoint3 &queryPoint,
+                              const double initialGuess[2]) const;
+  virtual bool containsPoint(const SPoint3 &pt) const;
+  virtual double getMetricEigenvalue(const SPoint2 &);
+  virtual SVector3 normal(const SPoint2 &param) const;
+  virtual Pair<SVector3,SVector3> firstDer(const SPoint2 &param) const;
   virtual void secondDer(const SPoint2 &, SVector3 *, SVector3 *, SVector3 *) const;
-  virtual GEntity::GeomType geomType() const; 
+  virtual GEntity::GeomType geomType() const;
   ModelType getNativeType() const { return GmshModel; }
   void *getNativePtr() const { return s; }
   virtual SPoint2 parFromPoint(const SPoint3 &, bool onSurface=true) const;
diff --git a/Geo/gmshRegion.h b/Geo/gmshRegion.h
index 283f120f95f3742fa7f8c3255706cf030ef34463..1ea9cf10fa0cbb547dd8fdab8c50027ebcec2892 100644
--- a/Geo/gmshRegion.h
+++ b/Geo/gmshRegion.h
@@ -6,9 +6,10 @@
 #ifndef _GMSH_REGION_H_
 #define _GMSH_REGION_H_
 
-#include "Geo.h"
 #include "GRegion.h"
 
+class Volume;
+
 class gmshRegion : public GRegion {
  protected:
   ::Volume *v;
diff --git a/Geo/gmshVertex.cpp b/Geo/gmshVertex.cpp
index 3e2bb8fe4d897ecabcd831cdce29123bbc994a30..2bef70159d5ba0851b49ef88b880446f3f68e905 100644
--- a/Geo/gmshVertex.cpp
+++ b/Geo/gmshVertex.cpp
@@ -23,6 +23,26 @@ void gmshVertex::resetMeshAttributes()
   meshSize = v->lc;
 }
 
+GPoint gmshVertex::point() const
+{
+  return GPoint(v->Pos.X, v->Pos.Y, v->Pos.Z, this);
+}
+
+double gmshVertex::x() const
+{
+  return v->Pos.X;
+}
+
+double gmshVertex::y() const
+{
+  return v->Pos.Y;
+}
+
+double gmshVertex::z() const
+{
+  return v->Pos.Z;
+}
+
 void gmshVertex::setPosition(GPoint &p)
 {
   v->Pos.X = p.x();
@@ -43,9 +63,14 @@ GEntity::GeomType gmshVertex::geomType() const
     return Point;
 }
 
-SPoint2 gmshVertex::reparamOnFace(const GFace *face, int dir) const
+void gmshVertex::setPrescribedMeshSizeAtVertex(double l)
 {
+  meshSize = l;
+  v->lc = meshSize;
+}
 
+SPoint2 gmshVertex::reparamOnFace(const GFace *face, int dir) const
+{
   Surface *s = (Surface*)face->getNativePtr();
 
   if(s->geometry){
diff --git a/Geo/gmshVertex.h b/Geo/gmshVertex.h
index bda742556dbb19e075adbdfe5673ee8bbbd05683..cc947775b0c60695bb526a2bb83fa84c25968314 100644
--- a/Geo/gmshVertex.h
+++ b/Geo/gmshVertex.h
@@ -6,9 +6,10 @@
 #ifndef _GMSH_VERTEX_H_
 #define _GMSH_VERTEX_H_
 
-#include "Geo.h"
 #include "GVertex.h"
 
+class Vertex;
+
 class gmshVertex : public GVertex {
  protected:
   Vertex *v;
@@ -17,22 +18,15 @@ class gmshVertex : public GVertex {
   gmshVertex(GModel *m, Vertex *_v);
   virtual ~gmshVertex() {}
   virtual void resetMeshAttributes();
-  virtual GPoint point() const
-  {
-    return GPoint(v->Pos.X, v->Pos.Y, v->Pos.Z, this);
-  }
-  virtual double x() const { return v->Pos.X; }
-  virtual double y() const { return v->Pos.Y; }
-  virtual double z() const { return v->Pos.Z; }
+  virtual GPoint point() const;
+  virtual double x() const;
+  virtual double y() const;
+  virtual double z() const;
   virtual void setPosition(GPoint &p);
   virtual GeomType geomType() const;
   ModelType getNativeType() const { return GmshModel; }
   void *getNativePtr() const { return v; }
-  virtual void setPrescribedMeshSizeAtVertex(double l)
-  {
-    meshSize = l;
-    v->lc = meshSize;
-  }
+  virtual void setPrescribedMeshSizeAtVertex(double l);
   virtual SPoint2 reparamOnFace(const GFace *gf, int) const;
   virtual void writeGEO(FILE *fp, const std::string &meshSizeParameter="");
 };
diff --git a/Mesh/Field.cpp b/Mesh/Field.cpp
index 7bf920ffc1e30e44b444a72fa6224c93b722a12c..6289d212687175ba46e74d87b646a9c164d30aad 100644
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@ -19,6 +19,7 @@
 #include "GmshConfig.h"
 #include "Context.h"
 #include "Field.h"
+#include "Geo.h"
 #include "GeoInterpolation.h"
 #include "GModel.h"
 #include "GmshMessage.h"
diff --git a/Mesh/QuadTriExtruded2D.cpp b/Mesh/QuadTriExtruded2D.cpp
index d662c404d47405c57c5904a8c0a6675381d2ce68..49374e10c3e962cc46d0209a1bd63614b87fc6cb 100644
--- a/Mesh/QuadTriExtruded2D.cpp
+++ b/Mesh/QuadTriExtruded2D.cpp
@@ -33,6 +33,7 @@ PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
 ********************************************************************************/
 
+#include "Geo.h"
 #include "QuadTriExtruded2D.h"
 
 // By Geuzaine, Remacle...
diff --git a/Mesh/QuadTriExtruded2D.h b/Mesh/QuadTriExtruded2D.h
index 3fe9e2fe100cfac0e0398938328e6a40b1f8a41f..9a47e68e719bc12888b8dbba67278ae5c6bfb40c 100644
--- a/Mesh/QuadTriExtruded2D.h
+++ b/Mesh/QuadTriExtruded2D.h
@@ -35,7 +35,6 @@ PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #if !defined(_QTEXTR2D_H_)
 #define _QTEXTR2D_H_
 
-#include "Geo.h"
 #include "GEntity.h"
 #include "GFace.h"
 #include "GEdge.h"
diff --git a/Mesh/QuadTriExtruded3D.cpp b/Mesh/QuadTriExtruded3D.cpp
index 78a3df53ce4adfe515e226e0df1f2ff3cb1a3dfe..8bcdfe16a64b235499c10bd7c941a011a29a918d 100644
--- a/Mesh/QuadTriExtruded3D.cpp
+++ b/Mesh/QuadTriExtruded3D.cpp
@@ -33,6 +33,7 @@ PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
 ********************************************************************************/
 
+#include "Geo.h"
 #include "QuadTriExtruded3D.h"
 
 // By Geuzaine, Remacle...
diff --git a/Mesh/QuadTriExtruded3D.h b/Mesh/QuadTriExtruded3D.h
index 2d71fb3f9dfa6e09cc6401743a1c8f19758c095c..ba2fd82c032701895c9a2a16d7c43ea3fb950e5f 100644
--- a/Mesh/QuadTriExtruded3D.h
+++ b/Mesh/QuadTriExtruded3D.h
@@ -36,7 +36,6 @@ PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #if !defined( _QTEXTR3D_H_ )
 #define _QTEXTR3D_H_
 
-#include "Geo.h"
 #include "GEntity.h"
 #include "GFace.h"
 #include "GRegion.h"
diff --git a/Mesh/QuadTriUtils.cpp b/Mesh/QuadTriUtils.cpp
index 4e0edb827b15d40811cbe1a9ac2032383f34b8b4..ae2f8aaa2e8095a51db648a68f94808d532dbda4 100644
--- a/Mesh/QuadTriUtils.cpp
+++ b/Mesh/QuadTriUtils.cpp
@@ -33,9 +33,9 @@ PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
 ********************************************************************************/
 #include <stdlib.h>
+#include "Geo.h"
 #include "QuadTriUtils.h"
 
-
 // By Geuzaine, Remacle...
 static void addTriangle(MVertex* v1, MVertex* v2, MVertex* v3,
                         GFace *to)
diff --git a/Mesh/QuadTriUtils.h b/Mesh/QuadTriUtils.h
index 7a573b5cacb85adc0b5edc2b18c0f2a1256a4b1a..d06d635ac4704950d48e16d9d98d21f00e36ba54 100644
--- a/Mesh/QuadTriUtils.h
+++ b/Mesh/QuadTriUtils.h
@@ -37,7 +37,6 @@ GNU General Public License for more details.
 
 #include <stdlib.h>
 #include "ExtrudeParams.h"
-#include "Geo.h"
 #include "GEntity.h"
 #include "GFace.h"
 #include "GRegion.h"
diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp
index eebbf65d53cd63623eb8cb14c7e7eca1fe3b9fd2..5b588330bd6760176da92ce5a8bf10e2f72fce70 100644
--- a/Mesh/meshGRegion.cpp
+++ b/Mesh/meshGRegion.cpp
@@ -38,13 +38,12 @@
 #include "Levy3D.h"
 #include "discreteFace.h"
 #include "filterElements.h"
+#include "ExtrudeParams.h"
 
 #if defined(HAVE_ANN)
 #include "ANN/ANN.h"
 #endif
 
-
-
 // hybrid mesh recovery structure
 class splitQuadRecovery {
   std::multimap<GEntity*, std::pair<MVertex*,MFace> >_data;
@@ -654,7 +653,7 @@ void MeshDelaunayVolumeTetgen(std::vector<GRegion*> &regions)
       insertVerticesInRegion(gr,2000000000,true);
     }
   }
-  
+
   // crete an initial mesh
   if (sqr.buildPyramids (gr->model())){
     RelocateVertices(regions, 3);
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index f76fee426f3ea0170767dd253c55fc5bf98a2ee6..e7d42e4c4342b64aae9bcc4bb2c9d95df37dfa45 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -536,6 +536,7 @@
 #include "GModel.h"
 #include "GModelIO_GEO.h"
 #include "GModelIO_OCC.h"
+#include "Geo.h"
 #include "GeoInterpolation.h"
 #include "Options.h"
 #include "Parser.h"
@@ -652,7 +653,7 @@ struct doubleXstring{
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 120 "Gmsh.y"
+#line 121 "Gmsh.y"
 {
   char *c;
   int i;
@@ -663,7 +664,7 @@ typedef union YYSTYPE
   List_T *l;
 }
 /* Line 193 of yacc.c.  */
-#line 667 "Gmsh.tab.cpp"
+#line 668 "Gmsh.tab.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -676,7 +677,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 680 "Gmsh.tab.cpp"
+#line 681 "Gmsh.tab.cpp"
 
 #ifdef short
 # undef short
@@ -1390,66 +1391,66 @@ static const yytype_int16 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   213,   213,   214,   219,   221,   225,   226,   227,   228,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   254,   258,   265,   270,
-     275,   289,   302,   315,   343,   357,   370,   383,   402,   407,
-     408,   409,   410,   411,   415,   417,   422,   424,   430,   534,
-     429,   552,   559,   570,   569,   587,   594,   605,   604,   621,
-     638,   661,   660,   674,   675,   676,   677,   678,   682,   683,
-     689,   689,   690,   690,   696,   697,   698,   703,   709,   771,
-     788,   817,   846,   851,   856,   861,   866,   873,   883,   912,
-     941,   946,   951,   956,   964,   973,   979,   985,   998,  1011,
-    1026,  1043,  1049,  1055,  1068,  1081,  1096,  1113,  1119,  1128,
-    1146,  1164,  1173,  1185,  1190,  1198,  1218,  1241,  1252,  1260,
-    1282,  1305,  1343,  1364,  1376,  1390,  1390,  1392,  1394,  1403,
-    1413,  1412,  1433,  1432,  1451,  1450,  1468,  1478,  1477,  1491,
-    1493,  1501,  1507,  1512,  1538,  1539,  1543,  1554,  1569,  1579,
-    1580,  1585,  1593,  1602,  1610,  1628,  1632,  1638,  1646,  1650,
-    1656,  1664,  1668,  1674,  1682,  1686,  1692,  1701,  1704,  1711,
-    1714,  1721,  1742,  1756,  1770,  1804,  1841,  1855,  1869,  1889,
-    1898,  1912,  1927,  1941,  1960,  1970,  1976,  1982,  1989,  2016,
-    2031,  2051,  2072,  2093,  2114,  2136,  2158,  2179,  2202,  2211,
-    2232,  2247,  2261,  2276,  2291,  2306,  2315,  2358,  2401,  2444,
-    2492,  2509,  2527,  2537,  2547,  2557,  2620,  2631,  2647,  2648,
-    2653,  2656,  2660,  2671,  2682,  2693,  2709,  2731,  2757,  2779,
-    2802,  2823,  2879,  2903,  2928,  2954,  3067,  3086,  3129,  3150,
-    3156,  3171,  3199,  3216,  3225,  3239,  3253,  3259,  3265,  3274,
-    3283,  3292,  3306,  3376,  3394,  3411,  3426,  3458,  3470,  3494,
-    3498,  3503,  3509,  3514,  3523,  3528,  3534,  3542,  3546,  3550,
-    3558,  3621,  3637,  3654,  3671,  3693,  3715,  3750,  3758,  3766,
-    3772,  3779,  3786,  3806,  3832,  3844,  3856,  3886,  3917,  3926,
-    3925,  3940,  3939,  3954,  3953,  3968,  3967,  3980,  4007,  4026,
-    4045,  4071,  4078,  4085,  4092,  4099,  4106,  4113,  4120,  4127,
-    4135,  4134,  4148,  4147,  4161,  4160,  4174,  4173,  4187,  4186,
-    4200,  4199,  4213,  4212,  4226,  4225,  4239,  4238,  4255,  4258,
-    4264,  4276,  4296,  4320,  4324,  4328,  4332,  4336,  4340,  4346,
-    4352,  4356,  4360,  4364,  4368,  4387,  4400,  4401,  4402,  4403,
-    4404,  4408,  4409,  4410,  4413,  4447,  4473,  4497,  4500,  4516,
-    4519,  4536,  4539,  4545,  4548,  4555,  4558,  4565,  4578,  4634,
-    4704,  4709,  4776,  4812,  4820,  4863,  4902,  4922,  4954,  4981,
-    5007,  5033,  5059,  5085,  5107,  5113,  5119,  5125,  5131,  5137,
-    5176,  5215,  5232,  5249,  5266,  5278,  5284,  5290,  5302,  5306,
-    5316,  5327,  5328,  5329,  5333,  5339,  5351,  5369,  5397,  5398,
-    5399,  5400,  5401,  5402,  5403,  5404,  5405,  5412,  5413,  5414,
-    5415,  5416,  5417,  5418,  5419,  5420,  5421,  5422,  5423,  5424,
-    5425,  5426,  5427,  5428,  5429,  5430,  5431,  5432,  5433,  5434,
-    5435,  5436,  5437,  5438,  5439,  5440,  5441,  5442,  5443,  5444,
-    5453,  5454,  5455,  5456,  5457,  5458,  5459,  5460,  5461,  5462,
-    5463,  5468,  5467,  5475,  5480,  5485,  5502,  5520,  5538,  5556,
-    5574,  5579,  5585,  5600,  5619,  5639,  5659,  5679,  5702,  5707,
-    5712,  5722,  5732,  5737,  5748,  5757,  5762,  5767,  5794,  5798,
-    5802,  5806,  5810,  5817,  5821,  5825,  5829,  5836,  5841,  5848,
-    5853,  5857,  5862,  5866,  5874,  5885,  5889,  5901,  5909,  5917,
-    5924,  5934,  5956,  5960,  5964,  5968,  5972,  5976,  5980,  5984,
-    5988,  6019,  6050,  6081,  6112,  6128,  6144,  6160,  6176,  6186,
-    6196,  6206,  6218,  6231,  6243,  6247,  6251,  6255,  6259,  6277,
-    6295,  6303,  6311,  6340,  6350,  6369,  6374,  6378,  6382,  6394,
-    6398,  6410,  6427,  6437,  6441,  6456,  6461,  6468,  6472,  6485,
-    6499,  6513,  6527,  6541,  6549,  6560,  6564,  6568,  6576,  6582,
-    6588,  6596,  6604,  6611,  6619,  6634,  6648,  6662,  6674,  6690,
-    6699,  6708,  6718,  6729,  6737,  6745,  6749,  6768,  6775,  6781,
-    6788,  6796,  6795,  6808,  6813,  6819,  6828,  6841,  6844,  6848
+       0,   214,   214,   215,   220,   222,   226,   227,   228,   229,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   255,   259,   266,   271,
+     276,   290,   303,   316,   344,   358,   371,   384,   403,   408,
+     409,   410,   411,   412,   416,   418,   423,   425,   431,   535,
+     430,   553,   560,   571,   570,   588,   595,   606,   605,   622,
+     639,   662,   661,   675,   676,   677,   678,   679,   683,   684,
+     690,   690,   691,   691,   697,   698,   699,   704,   710,   772,
+     789,   818,   847,   852,   857,   862,   867,   874,   884,   913,
+     942,   947,   952,   957,   965,   974,   980,   986,   999,  1012,
+    1027,  1044,  1050,  1056,  1069,  1082,  1097,  1114,  1120,  1129,
+    1147,  1165,  1174,  1186,  1191,  1199,  1219,  1242,  1253,  1261,
+    1283,  1306,  1344,  1365,  1377,  1391,  1391,  1393,  1395,  1404,
+    1414,  1413,  1434,  1433,  1452,  1451,  1469,  1479,  1478,  1492,
+    1494,  1502,  1508,  1513,  1539,  1540,  1544,  1555,  1570,  1580,
+    1581,  1586,  1594,  1603,  1611,  1629,  1633,  1639,  1647,  1651,
+    1657,  1665,  1669,  1675,  1683,  1687,  1693,  1702,  1705,  1712,
+    1715,  1722,  1743,  1757,  1771,  1805,  1842,  1856,  1870,  1890,
+    1899,  1913,  1928,  1942,  1961,  1971,  1977,  1983,  1990,  2017,
+    2032,  2052,  2073,  2094,  2115,  2137,  2159,  2180,  2203,  2212,
+    2233,  2248,  2262,  2277,  2292,  2307,  2316,  2359,  2402,  2445,
+    2493,  2510,  2528,  2538,  2548,  2558,  2621,  2632,  2648,  2649,
+    2654,  2657,  2661,  2672,  2683,  2694,  2710,  2732,  2758,  2780,
+    2803,  2824,  2880,  2904,  2929,  2955,  3068,  3087,  3130,  3151,
+    3157,  3172,  3200,  3217,  3226,  3240,  3254,  3260,  3266,  3275,
+    3284,  3293,  3307,  3377,  3395,  3412,  3427,  3459,  3471,  3495,
+    3499,  3504,  3510,  3515,  3524,  3529,  3535,  3543,  3547,  3551,
+    3559,  3622,  3638,  3655,  3672,  3694,  3716,  3751,  3759,  3767,
+    3773,  3780,  3787,  3807,  3833,  3845,  3857,  3887,  3918,  3927,
+    3926,  3941,  3940,  3955,  3954,  3969,  3968,  3981,  4008,  4027,
+    4046,  4072,  4079,  4086,  4093,  4100,  4107,  4114,  4121,  4128,
+    4136,  4135,  4149,  4148,  4162,  4161,  4175,  4174,  4188,  4187,
+    4201,  4200,  4214,  4213,  4227,  4226,  4240,  4239,  4256,  4259,
+    4265,  4277,  4297,  4321,  4325,  4329,  4333,  4337,  4341,  4347,
+    4353,  4357,  4361,  4365,  4369,  4388,  4401,  4402,  4403,  4404,
+    4405,  4409,  4410,  4411,  4414,  4448,  4474,  4498,  4501,  4517,
+    4520,  4537,  4540,  4546,  4549,  4556,  4559,  4566,  4579,  4635,
+    4705,  4710,  4777,  4813,  4821,  4864,  4903,  4923,  4955,  4982,
+    5008,  5034,  5060,  5086,  5108,  5114,  5120,  5126,  5132,  5138,
+    5177,  5216,  5233,  5250,  5267,  5279,  5285,  5291,  5303,  5307,
+    5317,  5328,  5329,  5330,  5334,  5340,  5352,  5370,  5398,  5399,
+    5400,  5401,  5402,  5403,  5404,  5405,  5406,  5413,  5414,  5415,
+    5416,  5417,  5418,  5419,  5420,  5421,  5422,  5423,  5424,  5425,
+    5426,  5427,  5428,  5429,  5430,  5431,  5432,  5433,  5434,  5435,
+    5436,  5437,  5438,  5439,  5440,  5441,  5442,  5443,  5444,  5445,
+    5454,  5455,  5456,  5457,  5458,  5459,  5460,  5461,  5462,  5463,
+    5464,  5469,  5468,  5476,  5481,  5486,  5503,  5521,  5539,  5557,
+    5575,  5580,  5586,  5601,  5620,  5640,  5660,  5680,  5703,  5708,
+    5713,  5723,  5733,  5738,  5749,  5758,  5763,  5768,  5795,  5799,
+    5803,  5807,  5811,  5818,  5822,  5826,  5830,  5837,  5842,  5849,
+    5854,  5858,  5863,  5867,  5875,  5886,  5890,  5902,  5910,  5918,
+    5925,  5935,  5957,  5961,  5965,  5969,  5973,  5977,  5981,  5985,
+    5989,  6020,  6051,  6082,  6113,  6129,  6145,  6161,  6177,  6187,
+    6197,  6207,  6219,  6232,  6244,  6248,  6252,  6256,  6260,  6278,
+    6296,  6304,  6312,  6341,  6351,  6370,  6375,  6379,  6383,  6395,
+    6399,  6411,  6428,  6438,  6442,  6457,  6462,  6469,  6473,  6486,
+    6500,  6514,  6528,  6542,  6550,  6561,  6565,  6569,  6577,  6583,
+    6589,  6597,  6605,  6612,  6620,  6635,  6649,  6663,  6675,  6691,
+    6700,  6709,  6719,  6730,  6738,  6746,  6750,  6769,  6776,  6782,
+    6789,  6797,  6796,  6809,  6814,  6820,  6829,  6842,  6845,  6849
 };
 #endif
 
@@ -6222,27 +6223,27 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 214 "Gmsh.y"
+#line 215 "Gmsh.y"
     { yyerrok; return 1; ;}
     break;
 
   case 6:
-#line 225 "Gmsh.y"
+#line 226 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 7:
-#line 226 "Gmsh.y"
+#line 227 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 8:
-#line 227 "Gmsh.y"
+#line 228 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 9:
-#line 229 "Gmsh.y"
+#line 230 "Gmsh.y"
     {
       // FIXME: when changing to OpenCASCADE, get maxTags from GEO_Internals and
       // add that info in OCC_Internals - same in the other direction
@@ -6252,101 +6253,101 @@ yyreduce:
     break;
 
   case 10:
-#line 235 "Gmsh.y"
+#line 236 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 11:
-#line 236 "Gmsh.y"
+#line 237 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 12:
-#line 237 "Gmsh.y"
+#line 238 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 13:
-#line 238 "Gmsh.y"
+#line 239 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 14:
-#line 239 "Gmsh.y"
+#line 240 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 15:
-#line 240 "Gmsh.y"
+#line 241 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 16:
-#line 241 "Gmsh.y"
+#line 242 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 17:
-#line 242 "Gmsh.y"
+#line 243 "Gmsh.y"
     { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
     break;
 
   case 18:
-#line 243 "Gmsh.y"
+#line 244 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 19:
-#line 244 "Gmsh.y"
+#line 245 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 20:
-#line 245 "Gmsh.y"
+#line 246 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 21:
-#line 246 "Gmsh.y"
+#line 247 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 22:
-#line 247 "Gmsh.y"
+#line 248 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 23:
-#line 248 "Gmsh.y"
+#line 249 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 24:
-#line 249 "Gmsh.y"
+#line 250 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 25:
-#line 250 "Gmsh.y"
+#line 251 "Gmsh.y"
     { return 1; ;}
     break;
 
   case 26:
-#line 255 "Gmsh.y"
+#line 256 "Gmsh.y"
     {
       (yyval.c) = (char*)"w";
     ;}
     break;
 
   case 27:
-#line 259 "Gmsh.y"
+#line 260 "Gmsh.y"
     {
       (yyval.c) = (char*)"a";
     ;}
     break;
 
   case 28:
-#line 266 "Gmsh.y"
+#line 267 "Gmsh.y"
     {
       Msg::Direct((yyvsp[(3) - (5)].c));
       Free((yyvsp[(3) - (5)].c));
@@ -6354,7 +6355,7 @@ yyreduce:
     break;
 
   case 29:
-#line 271 "Gmsh.y"
+#line 272 "Gmsh.y"
     {
       Msg::Error((yyvsp[(3) - (5)].c));
       Free((yyvsp[(3) - (5)].c));
@@ -6362,7 +6363,7 @@ yyreduce:
     break;
 
   case 30:
-#line 276 "Gmsh.y"
+#line 277 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
       FILE *fp = Fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
@@ -6379,7 +6380,7 @@ yyreduce:
     break;
 
   case 31:
-#line 290 "Gmsh.y"
+#line 291 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
@@ -6395,7 +6396,7 @@ yyreduce:
     break;
 
   case 32:
-#line 303 "Gmsh.y"
+#line 304 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
@@ -6411,7 +6412,7 @@ yyreduce:
     break;
 
   case 33:
-#line 316 "Gmsh.y"
+#line 317 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
@@ -6437,7 +6438,7 @@ yyreduce:
     break;
 
   case 34:
-#line 344 "Gmsh.y"
+#line 345 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
@@ -6454,7 +6455,7 @@ yyreduce:
     break;
 
   case 35:
-#line 358 "Gmsh.y"
+#line 359 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -6470,7 +6471,7 @@ yyreduce:
     break;
 
   case 36:
-#line 371 "Gmsh.y"
+#line 372 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -6486,7 +6487,7 @@ yyreduce:
     break;
 
   case 37:
-#line 384 "Gmsh.y"
+#line 385 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (8)].c), "View")){
@@ -6504,7 +6505,7 @@ yyreduce:
     break;
 
   case 38:
-#line 402 "Gmsh.y"
+#line 403 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewData = new PViewDataList();
@@ -6513,27 +6514,27 @@ yyreduce:
     break;
 
   case 44:
-#line 416 "Gmsh.y"
+#line 417 "Gmsh.y"
     { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 45:
-#line 418 "Gmsh.y"
+#line 419 "Gmsh.y"
     { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 46:
-#line 423 "Gmsh.y"
+#line 424 "Gmsh.y"
     { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
     break;
 
   case 47:
-#line 425 "Gmsh.y"
+#line 426 "Gmsh.y"
     { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 48:
-#line 430 "Gmsh.y"
+#line 431 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
@@ -6640,7 +6641,7 @@ yyreduce:
     break;
 
   case 49:
-#line 534 "Gmsh.y"
+#line 535 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(ViewValueList){
@@ -6653,7 +6654,7 @@ yyreduce:
     break;
 
   case 50:
-#line 544 "Gmsh.y"
+#line 545 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(ViewValueList) (*ViewNumList)++;
@@ -6662,7 +6663,7 @@ yyreduce:
     break;
 
   case 51:
-#line 553 "Gmsh.y"
+#line 554 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
@@ -6672,7 +6673,7 @@ yyreduce:
     break;
 
   case 52:
-#line 560 "Gmsh.y"
+#line 561 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
@@ -6682,7 +6683,7 @@ yyreduce:
     break;
 
   case 53:
-#line 570 "Gmsh.y"
+#line 571 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewData->T2D.push_back((yyvsp[(3) - (8)].d));
@@ -6694,7 +6695,7 @@ yyreduce:
     break;
 
   case 54:
-#line 579 "Gmsh.y"
+#line 580 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewData->NbT2++;
@@ -6703,7 +6704,7 @@ yyreduce:
     break;
 
   case 55:
-#line 588 "Gmsh.y"
+#line 589 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
@@ -6713,7 +6714,7 @@ yyreduce:
     break;
 
   case 56:
-#line 595 "Gmsh.y"
+#line 596 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
@@ -6723,7 +6724,7 @@ yyreduce:
     break;
 
   case 57:
-#line 605 "Gmsh.y"
+#line 606 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
@@ -6734,7 +6735,7 @@ yyreduce:
     break;
 
   case 58:
-#line 613 "Gmsh.y"
+#line 614 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewData->NbT3++;
@@ -6743,7 +6744,7 @@ yyreduce:
     break;
 
   case 59:
-#line 623 "Gmsh.y"
+#line 624 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       int type =
@@ -6762,7 +6763,7 @@ yyreduce:
     break;
 
   case 60:
-#line 642 "Gmsh.y"
+#line 643 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       int type =
@@ -6781,7 +6782,7 @@ yyreduce:
     break;
 
   case 61:
-#line 661 "Gmsh.y"
+#line 662 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       ViewValueList = &ViewData->Time;
@@ -6790,68 +6791,68 @@ yyreduce:
     break;
 
   case 62:
-#line 667 "Gmsh.y"
+#line 668 "Gmsh.y"
     {
     ;}
     break;
 
   case 63:
-#line 674 "Gmsh.y"
+#line 675 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 64:
-#line 675 "Gmsh.y"
+#line 676 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 65:
-#line 676 "Gmsh.y"
+#line 677 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 66:
-#line 677 "Gmsh.y"
+#line 678 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 67:
-#line 678 "Gmsh.y"
+#line 679 "Gmsh.y"
     { (yyval.i) = 4; ;}
     break;
 
   case 68:
-#line 682 "Gmsh.y"
+#line 683 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 69:
-#line 683 "Gmsh.y"
+#line 684 "Gmsh.y"
     { (yyval.i) = -1; ;}
     break;
 
   case 70:
-#line 689 "Gmsh.y"
+#line 690 "Gmsh.y"
     { (yyval.c) = (char*)"("; ;}
     break;
 
   case 71:
-#line 689 "Gmsh.y"
+#line 690 "Gmsh.y"
     { (yyval.c) = (char*)"["; ;}
     break;
 
   case 72:
-#line 690 "Gmsh.y"
+#line 691 "Gmsh.y"
     { (yyval.c) = (char*)")"; ;}
     break;
 
   case 73:
-#line 690 "Gmsh.y"
+#line 691 "Gmsh.y"
     { (yyval.c) = (char*)"]"; ;}
     break;
 
   case 76:
-#line 699 "Gmsh.y"
+#line 700 "Gmsh.y"
     {
       Msg::SetOnelabNumber((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].d));
       Free((yyvsp[(3) - (7)].c));
@@ -6859,7 +6860,7 @@ yyreduce:
     break;
 
   case 77:
-#line 704 "Gmsh.y"
+#line 705 "Gmsh.y"
     {
       Msg::SetOnelabString((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c));
       Free((yyvsp[(3) - (7)].c));
@@ -6868,7 +6869,7 @@ yyreduce:
     break;
 
   case 78:
-#line 710 "Gmsh.y"
+#line 711 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c)) && (yyvsp[(2) - (4)].i) && List_Nbr((yyvsp[(3) - (4)].l)) == 1){
         yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
@@ -6933,7 +6934,7 @@ yyreduce:
     break;
 
   case 79:
-#line 772 "Gmsh.y"
+#line 773 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
@@ -6951,7 +6952,7 @@ yyreduce:
     break;
 
   case 80:
-#line 789 "Gmsh.y"
+#line 790 "Gmsh.y"
     {
       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
       s.list = true;
@@ -6983,7 +6984,7 @@ yyreduce:
     break;
 
   case 81:
-#line 818 "Gmsh.y"
+#line 819 "Gmsh.y"
     {
       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
       s.list = true;
@@ -7015,7 +7016,7 @@ yyreduce:
     break;
 
   case 82:
-#line 847 "Gmsh.y"
+#line 848 "Gmsh.y"
     {
       assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
       Free((yyvsp[(1) - (7)].c));
@@ -7023,7 +7024,7 @@ yyreduce:
     break;
 
   case 83:
-#line 852 "Gmsh.y"
+#line 853 "Gmsh.y"
     {
       assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
       Free((yyvsp[(1) - (7)].c));
@@ -7031,7 +7032,7 @@ yyreduce:
     break;
 
   case 84:
-#line 857 "Gmsh.y"
+#line 858 "Gmsh.y"
     {
       incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
       Free((yyvsp[(1) - (6)].c));
@@ -7039,7 +7040,7 @@ yyreduce:
     break;
 
   case 85:
-#line 862 "Gmsh.y"
+#line 863 "Gmsh.y"
     {
       incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
       Free((yyvsp[(1) - (6)].c));
@@ -7047,7 +7048,7 @@ yyreduce:
     break;
 
   case 86:
-#line 867 "Gmsh.y"
+#line 868 "Gmsh.y"
     {
       assignVariables((yyvsp[(1) - (9)].c), (yyvsp[(4) - (9)].l), (yyvsp[(7) - (9)].i), (yyvsp[(8) - (9)].l));
       Free((yyvsp[(1) - (9)].c));
@@ -7057,7 +7058,7 @@ yyreduce:
     break;
 
   case 87:
-#line 874 "Gmsh.y"
+#line 875 "Gmsh.y"
     {
       assignVariables((yyvsp[(1) - (9)].c), (yyvsp[(4) - (9)].l), (yyvsp[(7) - (9)].i), (yyvsp[(8) - (9)].l));
       Free((yyvsp[(1) - (9)].c));
@@ -7067,7 +7068,7 @@ yyreduce:
     break;
 
   case 88:
-#line 884 "Gmsh.y"
+#line 885 "Gmsh.y"
     {
       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
       s.list = true;
@@ -7099,7 +7100,7 @@ yyreduce:
     break;
 
   case 89:
-#line 913 "Gmsh.y"
+#line 914 "Gmsh.y"
     {
       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
       s.list = true;
@@ -7131,7 +7132,7 @@ yyreduce:
     break;
 
   case 90:
-#line 942 "Gmsh.y"
+#line 943 "Gmsh.y"
     {
       assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
       Free((yyvsp[(1) - (7)].c));
@@ -7139,7 +7140,7 @@ yyreduce:
     break;
 
   case 91:
-#line 947 "Gmsh.y"
+#line 948 "Gmsh.y"
     {
       assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
       Free((yyvsp[(1) - (7)].c));
@@ -7147,7 +7148,7 @@ yyreduce:
     break;
 
   case 92:
-#line 952 "Gmsh.y"
+#line 953 "Gmsh.y"
     {
       incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
       Free((yyvsp[(1) - (6)].c));
@@ -7155,7 +7156,7 @@ yyreduce:
     break;
 
   case 93:
-#line 957 "Gmsh.y"
+#line 958 "Gmsh.y"
     {
       incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
       Free((yyvsp[(1) - (6)].c));
@@ -7163,7 +7164,7 @@ yyreduce:
     break;
 
   case 94:
-#line 965 "Gmsh.y"
+#line 966 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::vector<std::string>(1, (yyvsp[(3) - (4)].c));
       Free((yyvsp[(1) - (4)].c));
@@ -7172,7 +7173,7 @@ yyreduce:
     break;
 
   case 95:
-#line 974 "Gmsh.y"
+#line 975 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (8)].c)] = std::vector<std::string>();
       Free((yyvsp[(1) - (8)].c));
@@ -7180,7 +7181,7 @@ yyreduce:
     break;
 
   case 96:
-#line 980 "Gmsh.y"
+#line 981 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (8)].c)] = std::vector<std::string>();
       Free((yyvsp[(1) - (8)].c));
@@ -7188,7 +7189,7 @@ yyreduce:
     break;
 
   case 97:
-#line 986 "Gmsh.y"
+#line 987 "Gmsh.y"
     {
       std::vector<std::string> s;
       for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7203,7 +7204,7 @@ yyreduce:
     break;
 
   case 98:
-#line 999 "Gmsh.y"
+#line 1000 "Gmsh.y"
     {
       std::vector<std::string> s;
       for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7218,7 +7219,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1012 "Gmsh.y"
+#line 1013 "Gmsh.y"
     {
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (9)].c))){
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7235,7 +7236,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1027 "Gmsh.y"
+#line 1028 "Gmsh.y"
     {
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (9)].c))){
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7252,7 +7253,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1044 "Gmsh.y"
+#line 1045 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (8)].c)] = std::vector<std::string>();
       Free((yyvsp[(1) - (8)].c));
@@ -7260,7 +7261,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1050 "Gmsh.y"
+#line 1051 "Gmsh.y"
     {
       gmsh_yystringsymbols[(yyvsp[(1) - (8)].c)] = std::vector<std::string>();
       Free((yyvsp[(1) - (8)].c));
@@ -7268,7 +7269,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1056 "Gmsh.y"
+#line 1057 "Gmsh.y"
     {
       std::vector<std::string> s;
       for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7283,7 +7284,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1069 "Gmsh.y"
+#line 1070 "Gmsh.y"
     {
       std::vector<std::string> s;
       for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7298,7 +7299,7 @@ yyreduce:
     break;
 
   case 105:
-#line 1082 "Gmsh.y"
+#line 1083 "Gmsh.y"
     {
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (9)].c))){
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7315,7 +7316,7 @@ yyreduce:
     break;
 
   case 106:
-#line 1097 "Gmsh.y"
+#line 1098 "Gmsh.y"
     {
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (9)].c))){
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (9)].l)); i++){
@@ -7332,7 +7333,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1114 "Gmsh.y"
+#line 1115 "Gmsh.y"
     {
       std::string tmp((yyvsp[(5) - (6)].c));
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp);
@@ -7341,7 +7342,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1120 "Gmsh.y"
+#line 1121 "Gmsh.y"
     {
       std::string tmp((yyvsp[(8) - (9)].c));
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp);
@@ -7350,7 +7351,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1129 "Gmsh.y"
+#line 1130 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
@@ -7371,7 +7372,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1147 "Gmsh.y"
+#line 1148 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
@@ -7392,7 +7393,7 @@ yyreduce:
     break;
 
   case 111:
-#line 1165 "Gmsh.y"
+#line 1166 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
@@ -7404,7 +7405,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1174 "Gmsh.y"
+#line 1175 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
@@ -7416,7 +7417,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1186 "Gmsh.y"
+#line 1187 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
       Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
@@ -7424,7 +7425,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1191 "Gmsh.y"
+#line 1192 "Gmsh.y"
     {
       ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
       Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
@@ -7432,7 +7433,7 @@ yyreduce:
     break;
 
   case 115:
-#line 1199 "Gmsh.y"
+#line 1200 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable(0);
       if(!ct)
@@ -7455,7 +7456,7 @@ yyreduce:
     break;
 
   case 116:
-#line 1219 "Gmsh.y"
+#line 1220 "Gmsh.y"
     {
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
@@ -7478,7 +7479,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1242 "Gmsh.y"
+#line 1243 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
@@ -7492,7 +7493,7 @@ yyreduce:
     break;
 
   case 118:
-#line 1253 "Gmsh.y"
+#line 1254 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
@@ -7503,7 +7504,7 @@ yyreduce:
     break;
 
   case 119:
-#line 1261 "Gmsh.y"
+#line 1262 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
@@ -7528,7 +7529,7 @@ yyreduce:
     break;
 
   case 120:
-#line 1283 "Gmsh.y"
+#line 1284 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
@@ -7554,7 +7555,7 @@ yyreduce:
     break;
 
   case 121:
-#line 1306 "Gmsh.y"
+#line 1307 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
@@ -7595,7 +7596,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1344 "Gmsh.y"
+#line 1345 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (7)].d));
@@ -7616,7 +7617,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1365 "Gmsh.y"
+#line 1366 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
       try {
@@ -7631,7 +7632,7 @@ yyreduce:
     break;
 
   case 124:
-#line 1377 "Gmsh.y"
+#line 1378 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
       try {
@@ -7646,7 +7647,7 @@ yyreduce:
     break;
 
   case 128:
-#line 1395 "Gmsh.y"
+#line 1396 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (3)].c));
       std::vector<double> val(1, 0.);
@@ -7658,7 +7659,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1404 "Gmsh.y"
+#line 1405 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (5)].c));
       std::vector<double> val(1, (yyvsp[(5) - (5)].d));
@@ -7670,12 +7671,12 @@ yyreduce:
     break;
 
   case 130:
-#line 1413 "Gmsh.y"
+#line 1414 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 131:
-#line 1415 "Gmsh.y"
+#line 1416 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(6) - (9)].l)) != 1)
 	yymsg(1, "List notation should be used to define list '%s[]'", (yyvsp[(3) - (9)].c));
@@ -7696,12 +7697,12 @@ yyreduce:
     break;
 
   case 132:
-#line 1433 "Gmsh.y"
+#line 1434 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 133:
-#line 1435 "Gmsh.y"
+#line 1436 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (11)].c));
       std::vector<double> val;
@@ -7720,12 +7721,12 @@ yyreduce:
     break;
 
   case 134:
-#line 1451 "Gmsh.y"
+#line 1452 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 135:
-#line 1453 "Gmsh.y"
+#line 1454 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (11)].c));
       std::vector<double> val;
@@ -7744,7 +7745,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1469 "Gmsh.y"
+#line 1470 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (5)].c)), val((yyvsp[(5) - (5)].c));
       if(!gmsh_yystringsymbols.count(key)){
@@ -7756,12 +7757,12 @@ yyreduce:
     break;
 
   case 137:
-#line 1478 "Gmsh.y"
+#line 1479 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 138:
-#line 1480 "Gmsh.y"
+#line 1481 "Gmsh.y"
     {
       std::string key((yyvsp[(3) - (9)].c)), val((yyvsp[(6) - (9)].c));
       if(!gmsh_yysymbols.count(key)){
@@ -7774,7 +7775,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1494 "Gmsh.y"
+#line 1495 "Gmsh.y"
     {
       std::string name((yyvsp[(3) - (3)].c));
       Msg::UndefineOnelabParameter(name);
@@ -7783,7 +7784,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1502 "Gmsh.y"
+#line 1503 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(doubleXstring));
       doubleXstring v = {(yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].c)};
@@ -7792,7 +7793,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1508 "Gmsh.y"
+#line 1509 "Gmsh.y"
     {
       doubleXstring v = {(yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].c)};
       List_Add((yyval.l), &v);
@@ -7800,7 +7801,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1513 "Gmsh.y"
+#line 1514 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(doubleXstring));
       int n = List_Nbr((yyvsp[(1) - (5)].l));
@@ -7827,7 +7828,7 @@ yyreduce:
     break;
 
   case 146:
-#line 1544 "Gmsh.y"
+#line 1545 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
@@ -7841,7 +7842,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1555 "Gmsh.y"
+#line 1556 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (5)].c));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -7858,7 +7859,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1570 "Gmsh.y"
+#line 1571 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
       std::string val((yyvsp[(3) - (3)].c));
@@ -7869,7 +7870,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1586 "Gmsh.y"
+#line 1587 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
       double val = (yyvsp[(3) - (3)].d);
@@ -7879,7 +7880,7 @@ yyreduce:
     break;
 
   case 152:
-#line 1594 "Gmsh.y"
+#line 1595 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (3)].c));
       std::string val((yyvsp[(3) - (3)].c));
@@ -7890,7 +7891,7 @@ yyreduce:
     break;
 
   case 153:
-#line 1603 "Gmsh.y"
+#line 1604 "Gmsh.y"
     {
       std::string key("Macro");
       std::string val((yyvsp[(3) - (3)].c));
@@ -7900,7 +7901,7 @@ yyreduce:
     break;
 
   case 154:
-#line 1611 "Gmsh.y"
+#line 1612 "Gmsh.y"
     {
       std::string key((yyvsp[(2) - (5)].c));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -7916,14 +7917,14 @@ yyreduce:
     break;
 
   case 155:
-#line 1629 "Gmsh.y"
+#line 1630 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
     ;}
     break;
 
   case 156:
-#line 1633 "Gmsh.y"
+#line 1634 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName
         (std::string((yyvsp[(1) - (1)].c)), 0, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -7932,7 +7933,7 @@ yyreduce:
     break;
 
   case 157:
-#line 1639 "Gmsh.y"
+#line 1640 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 0, (yyvsp[(3) - (3)].d));
       Free((yyvsp[(1) - (3)].c));
@@ -7940,14 +7941,14 @@ yyreduce:
     break;
 
   case 158:
-#line 1647 "Gmsh.y"
+#line 1648 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
     ;}
     break;
 
   case 159:
-#line 1651 "Gmsh.y"
+#line 1652 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName
         (std::string((yyvsp[(1) - (1)].c)), 1, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -7956,7 +7957,7 @@ yyreduce:
     break;
 
   case 160:
-#line 1657 "Gmsh.y"
+#line 1658 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 1, (yyvsp[(3) - (3)].d));
       Free((yyvsp[(1) - (3)].c));
@@ -7964,14 +7965,14 @@ yyreduce:
     break;
 
   case 161:
-#line 1665 "Gmsh.y"
+#line 1666 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
     ;}
     break;
 
   case 162:
-#line 1669 "Gmsh.y"
+#line 1670 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName
         (std::string((yyvsp[(1) - (1)].c)), 2, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -7980,7 +7981,7 @@ yyreduce:
     break;
 
   case 163:
-#line 1675 "Gmsh.y"
+#line 1676 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 2, (yyvsp[(3) - (3)].d));
       Free((yyvsp[(1) - (3)].c));
@@ -7988,14 +7989,14 @@ yyreduce:
     break;
 
   case 164:
-#line 1683 "Gmsh.y"
+#line 1684 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
     ;}
     break;
 
   case 165:
-#line 1687 "Gmsh.y"
+#line 1688 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName
         (std::string((yyvsp[(1) - (1)].c)), 3, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -8004,7 +8005,7 @@ yyreduce:
     break;
 
   case 166:
-#line 1693 "Gmsh.y"
+#line 1694 "Gmsh.y"
     {
       (yyval.i) = GModel::current()->setPhysicalName(std::string((yyvsp[(1) - (3)].c)), 3, (yyvsp[(3) - (3)].d));
       Free((yyvsp[(1) - (3)].c));
@@ -8012,35 +8013,35 @@ yyreduce:
     break;
 
   case 167:
-#line 1701 "Gmsh.y"
+#line 1702 "Gmsh.y"
     {
       (yyval.i) = -1;
     ;}
     break;
 
   case 168:
-#line 1705 "Gmsh.y"
+#line 1706 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(4) - (5)].d);
     ;}
     break;
 
   case 169:
-#line 1711 "Gmsh.y"
+#line 1712 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
     ;}
     break;
 
   case 170:
-#line 1715 "Gmsh.y"
+#line 1716 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 171:
-#line 1722 "Gmsh.y"
+#line 1723 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       double x = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[0];
@@ -8064,7 +8065,7 @@ yyreduce:
     break;
 
   case 172:
-#line 1743 "Gmsh.y"
+#line 1744 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8081,7 +8082,7 @@ yyreduce:
     break;
 
   case 173:
-#line 1757 "Gmsh.y"
+#line 1758 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8098,7 +8099,7 @@ yyreduce:
     break;
 
   case 174:
-#line 1771 "Gmsh.y"
+#line 1772 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (8)].l), tags);
@@ -8135,7 +8136,7 @@ yyreduce:
     break;
 
   case 175:
-#line 1805 "Gmsh.y"
+#line 1806 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (8)].l), tags);
@@ -8175,7 +8176,7 @@ yyreduce:
     break;
 
   case 176:
-#line 1842 "Gmsh.y"
+#line 1843 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8192,7 +8193,7 @@ yyreduce:
     break;
 
   case 177:
-#line 1856 "Gmsh.y"
+#line 1857 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8209,7 +8210,7 @@ yyreduce:
     break;
 
   case 178:
-#line 1871 "Gmsh.y"
+#line 1872 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (11)].l), tags);
@@ -8231,7 +8232,7 @@ yyreduce:
     break;
 
   case 179:
-#line 1890 "Gmsh.y"
+#line 1891 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8243,7 +8244,7 @@ yyreduce:
     break;
 
   case 180:
-#line 1899 "Gmsh.y"
+#line 1900 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8260,7 +8261,7 @@ yyreduce:
     break;
 
   case 181:
-#line 1913 "Gmsh.y"
+#line 1914 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8278,7 +8279,7 @@ yyreduce:
     break;
 
   case 182:
-#line 1928 "Gmsh.y"
+#line 1929 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8295,7 +8296,7 @@ yyreduce:
     break;
 
   case 183:
-#line 1942 "Gmsh.y"
+#line 1943 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       std::vector<int> wires; ListOfDouble2Vector((yyvsp[(6) - (8)].l), wires);
@@ -8317,7 +8318,7 @@ yyreduce:
     break;
 
   case 184:
-#line 1961 "Gmsh.y"
+#line 1962 "Gmsh.y"
     {
       yymsg(1, "'Ruled Surface' command is deprecated: use 'Surface' instead");
       int num = (int)(yyvsp[(4) - (9)].d);
@@ -8330,7 +8331,7 @@ yyreduce:
     break;
 
   case 185:
-#line 1971 "Gmsh.y"
+#line 1972 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -8339,7 +8340,7 @@ yyreduce:
     break;
 
   case 186:
-#line 1977 "Gmsh.y"
+#line 1978 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -8348,7 +8349,7 @@ yyreduce:
     break;
 
   case 187:
-#line 1983 "Gmsh.y"
+#line 1984 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -8358,7 +8359,7 @@ yyreduce:
     break;
 
   case 188:
-#line 1990 "Gmsh.y"
+#line 1991 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8388,7 +8389,7 @@ yyreduce:
     break;
 
   case 189:
-#line 2017 "Gmsh.y"
+#line 2018 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8406,7 +8407,7 @@ yyreduce:
     break;
 
   case 190:
-#line 2032 "Gmsh.y"
+#line 2033 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8429,7 +8430,7 @@ yyreduce:
     break;
 
   case 191:
-#line 2052 "Gmsh.y"
+#line 2053 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8453,7 +8454,7 @@ yyreduce:
     break;
 
   case 192:
-#line 2073 "Gmsh.y"
+#line 2074 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8477,7 +8478,7 @@ yyreduce:
     break;
 
   case 193:
-#line 2094 "Gmsh.y"
+#line 2095 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8501,7 +8502,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2115 "Gmsh.y"
+#line 2116 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8526,7 +8527,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2137 "Gmsh.y"
+#line 2138 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8551,7 +8552,7 @@ yyreduce:
     break;
 
   case 196:
-#line 2159 "Gmsh.y"
+#line 2160 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8575,7 +8576,7 @@ yyreduce:
     break;
 
   case 197:
-#line 2180 "Gmsh.y"
+#line 2181 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<double> param; ListOfDouble2Vector((yyvsp[(6) - (7)].l), param);
@@ -8601,7 +8602,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2203 "Gmsh.y"
+#line 2204 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8613,7 +8614,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2213 "Gmsh.y"
+#line 2214 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (12)].l), tags);
@@ -8636,7 +8637,7 @@ yyreduce:
     break;
 
   case 200:
-#line 2233 "Gmsh.y"
+#line 2234 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8654,7 +8655,7 @@ yyreduce:
     break;
 
   case 201:
-#line 2248 "Gmsh.y"
+#line 2249 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (7)].l), tags);
@@ -8671,7 +8672,7 @@ yyreduce:
     break;
 
   case 202:
-#line 2262 "Gmsh.y"
+#line 2263 "Gmsh.y"
     {
       yymsg(1, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -8689,7 +8690,7 @@ yyreduce:
     break;
 
   case 203:
-#line 2277 "Gmsh.y"
+#line 2278 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       std::vector<int> wires, out[4]; ListOfDouble2Vector((yyvsp[(6) - (7)].l), wires);
@@ -8707,7 +8708,7 @@ yyreduce:
     break;
 
   case 204:
-#line 2292 "Gmsh.y"
+#line 2293 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> wires, out[4]; ListOfDouble2Vector((yyvsp[(7) - (8)].l), wires);
@@ -8725,7 +8726,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2307 "Gmsh.y"
+#line 2308 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8737,7 +8738,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2316 "Gmsh.y"
+#line 2317 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8783,7 +8784,7 @@ yyreduce:
     break;
 
   case 207:
-#line 2359 "Gmsh.y"
+#line 2360 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8829,7 +8830,7 @@ yyreduce:
     break;
 
   case 208:
-#line 2402 "Gmsh.y"
+#line 2403 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8875,7 +8876,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2445 "Gmsh.y"
+#line 2446 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8921,7 +8922,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2493 "Gmsh.y"
+#line 2494 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         std::vector<int> in[4];
@@ -8941,7 +8942,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2510 "Gmsh.y"
+#line 2511 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         std::vector<int> in[4];
@@ -8962,7 +8963,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2528 "Gmsh.y"
+#line 2529 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         Msg::Error("TODO OCC Symmetry");
@@ -8975,7 +8976,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2538 "Gmsh.y"
+#line 2539 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         Msg::Error("TODO OCC Dilate");
@@ -8988,7 +8989,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2548 "Gmsh.y"
+#line 2549 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         Msg::Error("TODO OCC Dilate");
@@ -9001,7 +9002,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2558 "Gmsh.y"
+#line 2559 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -9067,7 +9068,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2621 "Gmsh.y"
+#line 2622 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -9081,7 +9082,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2632 "Gmsh.y"
+#line 2633 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       if(factory == "OpenCASCADE"){
@@ -9097,31 +9098,31 @@ yyreduce:
     break;
 
   case 218:
-#line 2647 "Gmsh.y"
+#line 2648 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 219:
-#line 2648 "Gmsh.y"
+#line 2649 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 220:
-#line 2653 "Gmsh.y"
+#line 2654 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 221:
-#line 2657 "Gmsh.y"
+#line 2658 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 222:
-#line 2661 "Gmsh.y"
+#line 2662 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9135,7 +9136,7 @@ yyreduce:
     break;
 
   case 223:
-#line 2672 "Gmsh.y"
+#line 2673 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9149,7 +9150,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2683 "Gmsh.y"
+#line 2684 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9163,7 +9164,7 @@ yyreduce:
     break;
 
   case 225:
-#line 2694 "Gmsh.y"
+#line 2695 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9177,7 +9178,7 @@ yyreduce:
     break;
 
   case 226:
-#line 2710 "Gmsh.y"
+#line 2711 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@ -9202,7 +9203,7 @@ yyreduce:
     break;
 
   case 227:
-#line 2732 "Gmsh.y"
+#line 2733 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[(4) - (10)].d);
@@ -9231,7 +9232,7 @@ yyreduce:
     break;
 
   case 228:
-#line 2759 "Gmsh.y"
+#line 2760 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@ -9255,7 +9256,7 @@ yyreduce:
     break;
 
   case 229:
-#line 2781 "Gmsh.y"
+#line 2782 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@ -9280,7 +9281,7 @@ yyreduce:
     break;
 
   case 230:
-#line 2803 "Gmsh.y"
+#line 2804 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@ -9304,7 +9305,7 @@ yyreduce:
     break;
 
   case 231:
-#line 2825 "Gmsh.y"
+#line 2826 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -9362,7 +9363,7 @@ yyreduce:
     break;
 
   case 232:
-#line 2881 "Gmsh.y"
+#line 2882 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -9388,7 +9389,7 @@ yyreduce:
     break;
 
   case 233:
-#line 2905 "Gmsh.y"
+#line 2906 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 3){
@@ -9415,7 +9416,7 @@ yyreduce:
     break;
 
   case 234:
-#line 2930 "Gmsh.y"
+#line 2931 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 5){
@@ -9443,7 +9444,7 @@ yyreduce:
     break;
 
   case 235:
-#line 2955 "Gmsh.y"
+#line 2956 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@ -9559,7 +9560,7 @@ yyreduce:
     break;
 
   case 236:
-#line 3068 "Gmsh.y"
+#line 3069 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -9581,7 +9582,7 @@ yyreduce:
     break;
 
   case 237:
-#line 3087 "Gmsh.y"
+#line 3088 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -9622,7 +9623,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3130 "Gmsh.y"
+#line 3131 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         std::vector<int> in[4];
@@ -9646,7 +9647,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3151 "Gmsh.y"
+#line 3152 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -9655,7 +9656,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3157 "Gmsh.y"
+#line 3158 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -9673,7 +9674,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3172 "Gmsh.y"
+#line 3173 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -9704,7 +9705,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3200 "Gmsh.y"
+#line 3201 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -9719,7 +9720,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3217 "Gmsh.y"
+#line 3218 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9731,7 +9732,7 @@ yyreduce:
     break;
 
   case 244:
-#line 3226 "Gmsh.y"
+#line 3227 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
 	Shape TheShape;
@@ -9743,7 +9744,7 @@ yyreduce:
     break;
 
   case 245:
-#line 3240 "Gmsh.y"
+#line 3241 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9755,7 +9756,7 @@ yyreduce:
     break;
 
   case 246:
-#line 3254 "Gmsh.y"
+#line 3255 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
@@ -9764,7 +9765,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3260 "Gmsh.y"
+#line 3261 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
@@ -9773,7 +9774,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3266 "Gmsh.y"
+#line 3267 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -9785,7 +9786,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3275 "Gmsh.y"
+#line 3276 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9797,7 +9798,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3284 "Gmsh.y"
+#line 3285 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -9809,7 +9810,7 @@ yyreduce:
     break;
 
   case 251:
-#line 3293 "Gmsh.y"
+#line 3294 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -9821,7 +9822,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3307 "Gmsh.y"
+#line 3308 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -9894,7 +9895,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3377 "Gmsh.y"
+#line 3378 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -9915,7 +9916,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3395 "Gmsh.y"
+#line 3396 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -9935,7 +9936,7 @@ yyreduce:
     break;
 
   case 255:
-#line 3412 "Gmsh.y"
+#line 3413 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -9953,7 +9954,7 @@ yyreduce:
     break;
 
   case 256:
-#line 3427 "Gmsh.y"
+#line 3428 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -9988,7 +9989,7 @@ yyreduce:
     break;
 
   case 257:
-#line 3459 "Gmsh.y"
+#line 3460 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -10003,7 +10004,7 @@ yyreduce:
     break;
 
   case 258:
-#line 3471 "Gmsh.y"
+#line 3472 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -10030,14 +10031,14 @@ yyreduce:
     break;
 
   case 259:
-#line 3495 "Gmsh.y"
+#line 3496 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 260:
-#line 3499 "Gmsh.y"
+#line 3500 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -10045,7 +10046,7 @@ yyreduce:
     break;
 
   case 261:
-#line 3504 "Gmsh.y"
+#line 3505 "Gmsh.y"
     {
       // force sync
       GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -10054,7 +10055,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3510 "Gmsh.y"
+#line 3511 "Gmsh.y"
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
@@ -10062,7 +10063,7 @@ yyreduce:
     break;
 
   case 263:
-#line 3515 "Gmsh.y"
+#line 3516 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       if(GModel::current()->getOCCInternals()->getChanged())
@@ -10074,7 +10075,7 @@ yyreduce:
     break;
 
   case 264:
-#line 3524 "Gmsh.y"
+#line 3525 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -10082,7 +10083,7 @@ yyreduce:
     break;
 
   case 265:
-#line 3529 "Gmsh.y"
+#line 3530 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -10091,7 +10092,7 @@ yyreduce:
     break;
 
   case 266:
-#line 3535 "Gmsh.y"
+#line 3536 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -10102,21 +10103,21 @@ yyreduce:
     break;
 
   case 267:
-#line 3543 "Gmsh.y"
+#line 3544 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 268:
-#line 3547 "Gmsh.y"
+#line 3548 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 269:
-#line 3551 "Gmsh.y"
+#line 3552 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals()->getChanged())
         GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -10127,7 +10128,7 @@ yyreduce:
     break;
 
   case 270:
-#line 3560 "Gmsh.y"
+#line 3561 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -10187,7 +10188,7 @@ yyreduce:
     break;
 
   case 271:
-#line 3622 "Gmsh.y"
+#line 3623 "Gmsh.y"
     {
 #if defined(HAVE_POPPLER)
        std::vector<int> is;
@@ -10202,7 +10203,7 @@ yyreduce:
     break;
 
   case 272:
-#line 3638 "Gmsh.y"
+#line 3639 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -10222,7 +10223,7 @@ yyreduce:
     break;
 
   case 273:
-#line 3655 "Gmsh.y"
+#line 3656 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -10242,7 +10243,7 @@ yyreduce:
     break;
 
   case 274:
-#line 3672 "Gmsh.y"
+#line 3673 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -10267,7 +10268,7 @@ yyreduce:
     break;
 
   case 275:
-#line 3694 "Gmsh.y"
+#line 3695 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -10292,7 +10293,7 @@ yyreduce:
     break;
 
   case 276:
-#line 3716 "Gmsh.y"
+#line 3717 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -10330,7 +10331,7 @@ yyreduce:
     break;
 
   case 277:
-#line 3751 "Gmsh.y"
+#line 3752 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10341,7 +10342,7 @@ yyreduce:
     break;
 
   case 278:
-#line 3759 "Gmsh.y"
+#line 3760 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10352,7 +10353,7 @@ yyreduce:
     break;
 
   case 279:
-#line 3767 "Gmsh.y"
+#line 3768 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10361,7 +10362,7 @@ yyreduce:
     break;
 
   case 280:
-#line 3773 "Gmsh.y"
+#line 3774 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10371,7 +10372,7 @@ yyreduce:
     break;
 
   case 281:
-#line 3780 "Gmsh.y"
+#line 3781 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10381,7 +10382,7 @@ yyreduce:
     break;
 
   case 282:
-#line 3787 "Gmsh.y"
+#line 3788 "Gmsh.y"
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -10404,7 +10405,7 @@ yyreduce:
     break;
 
   case 283:
-#line 3807 "Gmsh.y"
+#line 3808 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -10433,7 +10434,7 @@ yyreduce:
     break;
 
   case 284:
-#line 3833 "Gmsh.y"
+#line 3834 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -10448,7 +10449,7 @@ yyreduce:
     break;
 
   case 285:
-#line 3845 "Gmsh.y"
+#line 3846 "Gmsh.y"
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
@@ -10457,7 +10458,7 @@ yyreduce:
     break;
 
   case 286:
-#line 3857 "Gmsh.y"
+#line 3858 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10490,7 +10491,7 @@ yyreduce:
     break;
 
   case 287:
-#line 3887 "Gmsh.y"
+#line 3888 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10524,7 +10525,7 @@ yyreduce:
     break;
 
   case 288:
-#line 3918 "Gmsh.y"
+#line 3919 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -10535,7 +10536,7 @@ yyreduce:
     break;
 
   case 289:
-#line 3926 "Gmsh.y"
+#line 3927 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10544,7 +10545,7 @@ yyreduce:
     break;
 
   case 290:
-#line 3932 "Gmsh.y"
+#line 3933 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -10555,7 +10556,7 @@ yyreduce:
     break;
 
   case 291:
-#line 3940 "Gmsh.y"
+#line 3941 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10564,7 +10565,7 @@ yyreduce:
     break;
 
   case 292:
-#line 3946 "Gmsh.y"
+#line 3947 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -10575,7 +10576,7 @@ yyreduce:
     break;
 
   case 293:
-#line 3954 "Gmsh.y"
+#line 3955 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10584,7 +10585,7 @@ yyreduce:
     break;
 
   case 294:
-#line 3960 "Gmsh.y"
+#line 3961 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -10595,7 +10596,7 @@ yyreduce:
     break;
 
   case 295:
-#line 3968 "Gmsh.y"
+#line 3969 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10604,7 +10605,7 @@ yyreduce:
     break;
 
   case 296:
-#line 3974 "Gmsh.y"
+#line 3975 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -10614,7 +10615,7 @@ yyreduce:
     break;
 
   case 297:
-#line 3981 "Gmsh.y"
+#line 3982 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10644,7 +10645,7 @@ yyreduce:
     break;
 
   case 298:
-#line 4008 "Gmsh.y"
+#line 4009 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10666,7 +10667,7 @@ yyreduce:
     break;
 
   case 299:
-#line 4027 "Gmsh.y"
+#line 4028 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10688,7 +10689,7 @@ yyreduce:
     break;
 
   case 300:
-#line 4046 "Gmsh.y"
+#line 4047 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -10716,7 +10717,7 @@ yyreduce:
     break;
 
   case 301:
-#line 4072 "Gmsh.y"
+#line 4073 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -10726,7 +10727,7 @@ yyreduce:
     break;
 
   case 302:
-#line 4079 "Gmsh.y"
+#line 4080 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -10736,7 +10737,7 @@ yyreduce:
     break;
 
   case 303:
-#line 4086 "Gmsh.y"
+#line 4087 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -10746,7 +10747,7 @@ yyreduce:
     break;
 
   case 304:
-#line 4093 "Gmsh.y"
+#line 4094 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -10756,7 +10757,7 @@ yyreduce:
     break;
 
   case 305:
-#line 4100 "Gmsh.y"
+#line 4101 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -10766,7 +10767,7 @@ yyreduce:
     break;
 
   case 306:
-#line 4107 "Gmsh.y"
+#line 4108 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -10776,7 +10777,7 @@ yyreduce:
     break;
 
   case 307:
-#line 4114 "Gmsh.y"
+#line 4115 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -10786,7 +10787,7 @@ yyreduce:
     break;
 
   case 308:
-#line 4121 "Gmsh.y"
+#line 4122 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -10796,7 +10797,7 @@ yyreduce:
     break;
 
   case 309:
-#line 4128 "Gmsh.y"
+#line 4129 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -10806,7 +10807,7 @@ yyreduce:
     break;
 
   case 310:
-#line 4135 "Gmsh.y"
+#line 4136 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10815,7 +10816,7 @@ yyreduce:
     break;
 
   case 311:
-#line 4141 "Gmsh.y"
+#line 4142 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -10825,7 +10826,7 @@ yyreduce:
     break;
 
   case 312:
-#line 4148 "Gmsh.y"
+#line 4149 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10834,7 +10835,7 @@ yyreduce:
     break;
 
   case 313:
-#line 4154 "Gmsh.y"
+#line 4155 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -10844,7 +10845,7 @@ yyreduce:
     break;
 
   case 314:
-#line 4161 "Gmsh.y"
+#line 4162 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10853,7 +10854,7 @@ yyreduce:
     break;
 
   case 315:
-#line 4167 "Gmsh.y"
+#line 4168 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -10863,7 +10864,7 @@ yyreduce:
     break;
 
   case 316:
-#line 4174 "Gmsh.y"
+#line 4175 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10872,7 +10873,7 @@ yyreduce:
     break;
 
   case 317:
-#line 4180 "Gmsh.y"
+#line 4181 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -10882,7 +10883,7 @@ yyreduce:
     break;
 
   case 318:
-#line 4187 "Gmsh.y"
+#line 4188 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10891,7 +10892,7 @@ yyreduce:
     break;
 
   case 319:
-#line 4193 "Gmsh.y"
+#line 4194 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -10901,7 +10902,7 @@ yyreduce:
     break;
 
   case 320:
-#line 4200 "Gmsh.y"
+#line 4201 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10910,7 +10911,7 @@ yyreduce:
     break;
 
   case 321:
-#line 4206 "Gmsh.y"
+#line 4207 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -10920,7 +10921,7 @@ yyreduce:
     break;
 
   case 322:
-#line 4213 "Gmsh.y"
+#line 4214 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10929,7 +10930,7 @@ yyreduce:
     break;
 
   case 323:
-#line 4219 "Gmsh.y"
+#line 4220 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -10939,7 +10940,7 @@ yyreduce:
     break;
 
   case 324:
-#line 4226 "Gmsh.y"
+#line 4227 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10948,7 +10949,7 @@ yyreduce:
     break;
 
   case 325:
-#line 4232 "Gmsh.y"
+#line 4233 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -10958,7 +10959,7 @@ yyreduce:
     break;
 
   case 326:
-#line 4239 "Gmsh.y"
+#line 4240 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10967,7 +10968,7 @@ yyreduce:
     break;
 
   case 327:
-#line 4245 "Gmsh.y"
+#line 4246 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -10977,19 +10978,19 @@ yyreduce:
     break;
 
   case 328:
-#line 4256 "Gmsh.y"
+#line 4257 "Gmsh.y"
     {
     ;}
     break;
 
   case 329:
-#line 4259 "Gmsh.y"
+#line 4260 "Gmsh.y"
     {
     ;}
     break;
 
   case 330:
-#line 4265 "Gmsh.y"
+#line 4266 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -11004,7 +11005,7 @@ yyreduce:
     break;
 
   case 331:
-#line 4277 "Gmsh.y"
+#line 4278 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -11027,7 +11028,7 @@ yyreduce:
     break;
 
   case 332:
-#line 4297 "Gmsh.y"
+#line 4298 "Gmsh.y"
     {
       yymsg(1, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -11053,42 +11054,42 @@ yyreduce:
     break;
 
   case 333:
-#line 4321 "Gmsh.y"
+#line 4322 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 334:
-#line 4325 "Gmsh.y"
+#line 4326 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 335:
-#line 4329 "Gmsh.y"
+#line 4330 "Gmsh.y"
     {
       extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false;
     ;}
     break;
 
   case 336:
-#line 4333 "Gmsh.y"
+#line 4334 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 337:
-#line 4337 "Gmsh.y"
+#line 4338 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 338:
-#line 4341 "Gmsh.y"
+#line 4342 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -11097,7 +11098,7 @@ yyreduce:
     break;
 
   case 339:
-#line 4347 "Gmsh.y"
+#line 4348 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -11106,35 +11107,35 @@ yyreduce:
     break;
 
   case 340:
-#line 4353 "Gmsh.y"
+#line 4354 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     ;}
     break;
 
   case 341:
-#line 4357 "Gmsh.y"
+#line 4358 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     ;}
     break;
 
   case 342:
-#line 4361 "Gmsh.y"
+#line 4362 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     ;}
     break;
 
   case 343:
-#line 4365 "Gmsh.y"
+#line 4366 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     ;}
     break;
 
   case 344:
-#line 4369 "Gmsh.y"
+#line 4370 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -11156,7 +11157,7 @@ yyreduce:
     break;
 
   case 345:
-#line 4388 "Gmsh.y"
+#line 4389 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -11167,47 +11168,47 @@ yyreduce:
     break;
 
   case 346:
-#line 4400 "Gmsh.y"
+#line 4401 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Union; ;}
     break;
 
   case 347:
-#line 4401 "Gmsh.y"
+#line 4402 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Intersection; ;}
     break;
 
   case 348:
-#line 4402 "Gmsh.y"
+#line 4403 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Difference; ;}
     break;
 
   case 349:
-#line 4403 "Gmsh.y"
+#line 4404 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Section; ;}
     break;
 
   case 350:
-#line 4404 "Gmsh.y"
+#line 4405 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Fragments; ;}
     break;
 
   case 351:
-#line 4408 "Gmsh.y"
+#line 4409 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 352:
-#line 4409 "Gmsh.y"
+#line 4410 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 353:
-#line 4410 "Gmsh.y"
+#line 4411 "Gmsh.y"
     { (yyval.i) = (yyvsp[(2) - (3)].d); ;}
     break;
 
   case 354:
-#line 4415 "Gmsh.y"
+#line 4416 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -11243,7 +11244,7 @@ yyreduce:
     break;
 
   case 355:
-#line 4448 "Gmsh.y"
+#line 4449 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE"){
@@ -11269,7 +11270,7 @@ yyreduce:
     break;
 
   case 356:
-#line 4475 "Gmsh.y"
+#line 4476 "Gmsh.y"
     {
       if(factory == "OpenCASCADE"){
         std::vector<int> shape[4], tool[4];
@@ -11291,14 +11292,14 @@ yyreduce:
     break;
 
   case 357:
-#line 4497 "Gmsh.y"
+#line 4498 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 358:
-#line 4501 "Gmsh.y"
+#line 4502 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -11314,14 +11315,14 @@ yyreduce:
     break;
 
   case 359:
-#line 4516 "Gmsh.y"
+#line 4517 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 360:
-#line 4520 "Gmsh.y"
+#line 4521 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -11338,49 +11339,49 @@ yyreduce:
     break;
 
   case 361:
-#line 4536 "Gmsh.y"
+#line 4537 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 362:
-#line 4540 "Gmsh.y"
+#line 4541 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 363:
-#line 4545 "Gmsh.y"
+#line 4546 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 364:
-#line 4549 "Gmsh.y"
+#line 4550 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 365:
-#line 4555 "Gmsh.y"
+#line 4556 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     ;}
     break;
 
   case 366:
-#line 4559 "Gmsh.y"
+#line 4560 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     ;}
     break;
 
   case 367:
-#line 4566 "Gmsh.y"
+#line 4567 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -11396,7 +11397,7 @@ yyreduce:
     break;
 
   case 368:
-#line 4579 "Gmsh.y"
+#line 4580 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -11455,7 +11456,7 @@ yyreduce:
     break;
 
   case 369:
-#line 4635 "Gmsh.y"
+#line 4636 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -11528,7 +11529,7 @@ yyreduce:
     break;
 
   case 370:
-#line 4705 "Gmsh.y"
+#line 4706 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -11536,7 +11537,7 @@ yyreduce:
     break;
 
   case 371:
-#line 4710 "Gmsh.y"
+#line 4711 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -11606,7 +11607,7 @@ yyreduce:
     break;
 
   case 372:
-#line 4777 "Gmsh.y"
+#line 4778 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -11645,7 +11646,7 @@ yyreduce:
     break;
 
   case 373:
-#line 4813 "Gmsh.y"
+#line 4814 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){
 	double d;
@@ -11656,7 +11657,7 @@ yyreduce:
     break;
 
   case 374:
-#line 4821 "Gmsh.y"
+#line 4822 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -11702,7 +11703,7 @@ yyreduce:
     break;
 
   case 375:
-#line 4864 "Gmsh.y"
+#line 4865 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -11744,7 +11745,7 @@ yyreduce:
     break;
 
   case 376:
-#line 4903 "Gmsh.y"
+#line 4904 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
         double d;
@@ -11767,7 +11768,7 @@ yyreduce:
     break;
 
   case 377:
-#line 4924 "Gmsh.y"
+#line 4925 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master lines (%d) different from number of "
@@ -11801,7 +11802,7 @@ yyreduce:
     break;
 
   case 378:
-#line 4956 "Gmsh.y"
+#line 4957 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11830,7 +11831,7 @@ yyreduce:
     break;
 
   case 379:
-#line 4983 "Gmsh.y"
+#line 4984 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -11858,7 +11859,7 @@ yyreduce:
     break;
 
   case 380:
-#line 5009 "Gmsh.y"
+#line 5010 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11886,7 +11887,7 @@ yyreduce:
     break;
 
   case 381:
-#line 5035 "Gmsh.y"
+#line 5036 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -11914,7 +11915,7 @@ yyreduce:
     break;
 
   case 382:
-#line 5061 "Gmsh.y"
+#line 5062 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -11942,7 +11943,7 @@ yyreduce:
     break;
 
   case 383:
-#line 5087 "Gmsh.y"
+#line 5088 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
         yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -11966,7 +11967,7 @@ yyreduce:
     break;
 
   case 384:
-#line 5108 "Gmsh.y"
+#line 5109 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
       addEmbedded(0, tags, 2, (int)(yyvsp[(8) - (10)].d));
@@ -11975,7 +11976,7 @@ yyreduce:
     break;
 
   case 385:
-#line 5114 "Gmsh.y"
+#line 5115 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
       addEmbedded(1, tags, 2, (int)(yyvsp[(8) - (10)].d));
@@ -11984,7 +11985,7 @@ yyreduce:
     break;
 
   case 386:
-#line 5120 "Gmsh.y"
+#line 5121 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
       addEmbedded(0, tags, 3, (int)(yyvsp[(8) - (10)].d));
@@ -11993,7 +11994,7 @@ yyreduce:
     break;
 
   case 387:
-#line 5126 "Gmsh.y"
+#line 5127 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
       addEmbedded(1, tags, 3, (int)(yyvsp[(8) - (10)].d));
@@ -12002,7 +12003,7 @@ yyreduce:
     break;
 
   case 388:
-#line 5132 "Gmsh.y"
+#line 5133 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
       addEmbedded(2, tags, 3, (int)(yyvsp[(8) - (10)].d));
@@ -12011,7 +12012,7 @@ yyreduce:
     break;
 
   case 389:
-#line 5138 "Gmsh.y"
+#line 5139 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -12053,7 +12054,7 @@ yyreduce:
     break;
 
   case 390:
-#line 5177 "Gmsh.y"
+#line 5178 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -12095,7 +12096,7 @@ yyreduce:
     break;
 
   case 391:
-#line 5216 "Gmsh.y"
+#line 5217 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -12115,7 +12116,7 @@ yyreduce:
     break;
 
   case 392:
-#line 5233 "Gmsh.y"
+#line 5234 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -12135,7 +12136,7 @@ yyreduce:
     break;
 
   case 393:
-#line 5250 "Gmsh.y"
+#line 5251 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -12155,7 +12156,7 @@ yyreduce:
     break;
 
   case 394:
-#line 5267 "Gmsh.y"
+#line 5268 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double dnum;
@@ -12170,7 +12171,7 @@ yyreduce:
     break;
 
   case 395:
-#line 5279 "Gmsh.y"
+#line 5280 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags);
       GModel::current()->getGEOInternals()->setCompoundMesh(1, tags);
@@ -12179,7 +12180,7 @@ yyreduce:
     break;
 
   case 396:
-#line 5285 "Gmsh.y"
+#line 5286 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags);
       GModel::current()->getGEOInternals()->setCompoundMesh(2, tags);
@@ -12188,7 +12189,7 @@ yyreduce:
     break;
 
   case 397:
-#line 5291 "Gmsh.y"
+#line 5292 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags);
       GModel::current()->getGEOInternals()->setCompoundMesh(3, tags);
@@ -12197,14 +12198,14 @@ yyreduce:
     break;
 
   case 398:
-#line 5303 "Gmsh.y"
+#line 5304 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->removeAllDuplicates();
     ;}
     break;
 
   case 399:
-#line 5307 "Gmsh.y"
+#line 5308 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         GModel::current()->getGEOInternals()->removeAllDuplicates();
@@ -12217,7 +12218,7 @@ yyreduce:
     break;
 
   case 400:
-#line 5317 "Gmsh.y"
+#line 5318 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(4) - (6)].l), tags);
       GModel::current()->getGEOInternals()->mergeVertices(tags);
@@ -12226,22 +12227,22 @@ yyreduce:
     break;
 
   case 401:
-#line 5327 "Gmsh.y"
+#line 5328 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 402:
-#line 5328 "Gmsh.y"
+#line 5329 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 403:
-#line 5329 "Gmsh.y"
+#line 5330 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
   case 404:
-#line 5334 "Gmsh.y"
+#line 5335 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -12250,7 +12251,7 @@ yyreduce:
     break;
 
   case 405:
-#line 5340 "Gmsh.y"
+#line 5341 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -12265,7 +12266,7 @@ yyreduce:
     break;
 
   case 406:
-#line 5352 "Gmsh.y"
+#line 5353 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -12286,7 +12287,7 @@ yyreduce:
     break;
 
   case 407:
-#line 5370 "Gmsh.y"
+#line 5371 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -12312,47 +12313,47 @@ yyreduce:
     break;
 
   case 408:
-#line 5397 "Gmsh.y"
+#line 5398 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 409:
-#line 5398 "Gmsh.y"
+#line 5399 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 410:
-#line 5399 "Gmsh.y"
+#line 5400 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 411:
-#line 5400 "Gmsh.y"
+#line 5401 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 412:
-#line 5401 "Gmsh.y"
+#line 5402 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 413:
-#line 5402 "Gmsh.y"
+#line 5403 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 414:
-#line 5403 "Gmsh.y"
+#line 5404 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 415:
-#line 5404 "Gmsh.y"
+#line 5405 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 416:
-#line 5406 "Gmsh.y"
+#line 5407 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -12362,232 +12363,232 @@ yyreduce:
     break;
 
   case 417:
-#line 5412 "Gmsh.y"
+#line 5413 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 418:
-#line 5413 "Gmsh.y"
+#line 5414 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 419:
-#line 5414 "Gmsh.y"
+#line 5415 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 420:
-#line 5415 "Gmsh.y"
+#line 5416 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 421:
-#line 5416 "Gmsh.y"
+#line 5417 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 422:
-#line 5417 "Gmsh.y"
+#line 5418 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 423:
-#line 5418 "Gmsh.y"
+#line 5419 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 424:
-#line 5419 "Gmsh.y"
+#line 5420 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 425:
-#line 5420 "Gmsh.y"
+#line 5421 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 426:
-#line 5421 "Gmsh.y"
+#line 5422 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 427:
-#line 5422 "Gmsh.y"
+#line 5423 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 428:
-#line 5423 "Gmsh.y"
+#line 5424 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 429:
-#line 5424 "Gmsh.y"
+#line 5425 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 430:
-#line 5425 "Gmsh.y"
+#line 5426 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 431:
-#line 5426 "Gmsh.y"
+#line 5427 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 432:
-#line 5427 "Gmsh.y"
+#line 5428 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 433:
-#line 5428 "Gmsh.y"
+#line 5429 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 434:
-#line 5429 "Gmsh.y"
+#line 5430 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 435:
-#line 5430 "Gmsh.y"
+#line 5431 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 436:
-#line 5431 "Gmsh.y"
+#line 5432 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 437:
-#line 5432 "Gmsh.y"
+#line 5433 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 438:
-#line 5433 "Gmsh.y"
+#line 5434 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 439:
-#line 5434 "Gmsh.y"
+#line 5435 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 440:
-#line 5435 "Gmsh.y"
+#line 5436 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 441:
-#line 5436 "Gmsh.y"
+#line 5437 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 442:
-#line 5437 "Gmsh.y"
+#line 5438 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 443:
-#line 5438 "Gmsh.y"
+#line 5439 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 444:
-#line 5439 "Gmsh.y"
+#line 5440 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 445:
-#line 5440 "Gmsh.y"
+#line 5441 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
     break;
 
   case 446:
-#line 5441 "Gmsh.y"
+#line 5442 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 447:
-#line 5442 "Gmsh.y"
+#line 5443 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 448:
-#line 5443 "Gmsh.y"
+#line 5444 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 449:
-#line 5444 "Gmsh.y"
+#line 5445 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 450:
-#line 5453 "Gmsh.y"
+#line 5454 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 451:
-#line 5454 "Gmsh.y"
+#line 5455 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 452:
-#line 5455 "Gmsh.y"
+#line 5456 "Gmsh.y"
     { (yyval.d) = (double)ImbricatedTest; ;}
     break;
 
   case 453:
-#line 5456 "Gmsh.y"
+#line 5457 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 454:
-#line 5457 "Gmsh.y"
+#line 5458 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 455:
-#line 5458 "Gmsh.y"
+#line 5459 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 456:
-#line 5459 "Gmsh.y"
+#line 5460 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 457:
-#line 5460 "Gmsh.y"
+#line 5461 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 458:
-#line 5461 "Gmsh.y"
+#line 5462 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
   case 459:
-#line 5462 "Gmsh.y"
+#line 5463 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
   case 460:
-#line 5463 "Gmsh.y"
+#line 5464 "Gmsh.y"
     { (yyval.d) = TotalRam(); ;}
     break;
 
   case 461:
-#line 5468 "Gmsh.y"
+#line 5469 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 462:
-#line 5470 "Gmsh.y"
+#line 5471 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -12596,7 +12597,7 @@ yyreduce:
     break;
 
   case 463:
-#line 5476 "Gmsh.y"
+#line 5477 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12604,7 +12605,7 @@ yyreduce:
     break;
 
   case 464:
-#line 5481 "Gmsh.y"
+#line 5482 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -12612,7 +12613,7 @@ yyreduce:
     break;
 
   case 465:
-#line 5486 "Gmsh.y"
+#line 5487 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -12632,7 +12633,7 @@ yyreduce:
     break;
 
   case 466:
-#line 5503 "Gmsh.y"
+#line 5504 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12653,7 +12654,7 @@ yyreduce:
     break;
 
   case 467:
-#line 5521 "Gmsh.y"
+#line 5522 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12674,7 +12675,7 @@ yyreduce:
     break;
 
   case 468:
-#line 5539 "Gmsh.y"
+#line 5540 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12695,7 +12696,7 @@ yyreduce:
     break;
 
   case 469:
-#line 5557 "Gmsh.y"
+#line 5558 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -12716,7 +12717,7 @@ yyreduce:
     break;
 
   case 470:
-#line 5575 "Gmsh.y"
+#line 5576 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12724,7 +12725,7 @@ yyreduce:
     break;
 
   case 471:
-#line 5580 "Gmsh.y"
+#line 5581 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -12733,7 +12734,7 @@ yyreduce:
     break;
 
   case 472:
-#line 5586 "Gmsh.y"
+#line 5587 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]);
@@ -12751,7 +12752,7 @@ yyreduce:
     break;
 
   case 473:
-#line 5601 "Gmsh.y"
+#line 5602 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -12773,7 +12774,7 @@ yyreduce:
     break;
 
   case 474:
-#line 5620 "Gmsh.y"
+#line 5621 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12796,7 +12797,7 @@ yyreduce:
     break;
 
   case 475:
-#line 5640 "Gmsh.y"
+#line 5641 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12819,7 +12820,7 @@ yyreduce:
     break;
 
   case 476:
-#line 5660 "Gmsh.y"
+#line 5661 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12842,7 +12843,7 @@ yyreduce:
     break;
 
   case 477:
-#line 5680 "Gmsh.y"
+#line 5681 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -12865,7 +12866,7 @@ yyreduce:
     break;
 
   case 478:
-#line 5703 "Gmsh.y"
+#line 5704 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -12873,7 +12874,7 @@ yyreduce:
     break;
 
   case 479:
-#line 5708 "Gmsh.y"
+#line 5709 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -12881,7 +12882,7 @@ yyreduce:
     break;
 
   case 480:
-#line 5713 "Gmsh.y"
+#line 5714 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -12894,7 +12895,7 @@ yyreduce:
     break;
 
   case 481:
-#line 5723 "Gmsh.y"
+#line 5724 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -12907,7 +12908,7 @@ yyreduce:
     break;
 
   case 482:
-#line 5733 "Gmsh.y"
+#line 5734 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -12915,7 +12916,7 @@ yyreduce:
     break;
 
   case 483:
-#line 5738 "Gmsh.y"
+#line 5739 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -12929,7 +12930,7 @@ yyreduce:
     break;
 
   case 484:
-#line 5749 "Gmsh.y"
+#line 5750 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -12941,7 +12942,7 @@ yyreduce:
     break;
 
   case 485:
-#line 5758 "Gmsh.y"
+#line 5759 "Gmsh.y"
     {
       (yyval.d) = strlen((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -12949,7 +12950,7 @@ yyreduce:
     break;
 
   case 486:
-#line 5763 "Gmsh.y"
+#line 5764 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -12957,7 +12958,7 @@ yyreduce:
     break;
 
   case 487:
-#line 5768 "Gmsh.y"
+#line 5769 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -12984,70 +12985,70 @@ yyreduce:
     break;
 
   case 488:
-#line 5795 "Gmsh.y"
+#line 5796 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 489:
-#line 5799 "Gmsh.y"
+#line 5800 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 490:
-#line 5803 "Gmsh.y"
+#line 5804 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 491:
-#line 5807 "Gmsh.y"
+#line 5808 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 492:
-#line 5811 "Gmsh.y"
+#line 5812 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 493:
-#line 5818 "Gmsh.y"
+#line 5819 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 494:
-#line 5822 "Gmsh.y"
+#line 5823 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 495:
-#line 5826 "Gmsh.y"
+#line 5827 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 496:
-#line 5830 "Gmsh.y"
+#line 5831 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 497:
-#line 5837 "Gmsh.y"
+#line 5838 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -13055,14 +13056,14 @@ yyreduce:
     break;
 
   case 498:
-#line 5842 "Gmsh.y"
+#line 5843 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 499:
-#line 5849 "Gmsh.y"
+#line 5850 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -13070,14 +13071,14 @@ yyreduce:
     break;
 
   case 500:
-#line 5854 "Gmsh.y"
+#line 5855 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 501:
-#line 5858 "Gmsh.y"
+#line 5859 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -13085,14 +13086,14 @@ yyreduce:
     break;
 
   case 502:
-#line 5863 "Gmsh.y"
+#line 5864 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 503:
-#line 5867 "Gmsh.y"
+#line 5868 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13103,7 +13104,7 @@ yyreduce:
     break;
 
   case 504:
-#line 5875 "Gmsh.y"
+#line 5876 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13114,14 +13115,14 @@ yyreduce:
     break;
 
   case 505:
-#line 5886 "Gmsh.y"
+#line 5887 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 506:
-#line 5890 "Gmsh.y"
+#line 5891 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -13133,7 +13134,7 @@ yyreduce:
     break;
 
   case 507:
-#line 5902 "Gmsh.y"
+#line 5903 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13144,7 +13145,7 @@ yyreduce:
     break;
 
   case 508:
-#line 5910 "Gmsh.y"
+#line 5911 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13155,7 +13156,7 @@ yyreduce:
     break;
 
   case 509:
-#line 5918 "Gmsh.y"
+#line 5919 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -13165,7 +13166,7 @@ yyreduce:
     break;
 
   case 510:
-#line 5925 "Gmsh.y"
+#line 5926 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -13178,7 +13179,7 @@ yyreduce:
     break;
 
   case 511:
-#line 5935 "Gmsh.y"
+#line 5936 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 1, sizeof(double));
       int tag = (int)(yyvsp[(3) - (4)].d);
@@ -13203,63 +13204,63 @@ yyreduce:
     break;
 
   case 512:
-#line 5957 "Gmsh.y"
+#line 5958 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     ;}
     break;
 
   case 513:
-#line 5961 "Gmsh.y"
+#line 5962 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     ;}
     break;
 
   case 514:
-#line 5965 "Gmsh.y"
+#line 5966 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     ;}
     break;
 
   case 515:
-#line 5969 "Gmsh.y"
+#line 5970 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     ;}
     break;
 
   case 516:
-#line 5973 "Gmsh.y"
+#line 5974 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     ;}
     break;
 
   case 517:
-#line 5977 "Gmsh.y"
+#line 5978 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     ;}
     break;
 
   case 518:
-#line 5981 "Gmsh.y"
+#line 5982 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     ;}
     break;
 
   case 519:
-#line 5985 "Gmsh.y"
+#line 5986 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     ;}
     break;
 
   case 520:
-#line 5989 "Gmsh.y"
+#line 5990 "Gmsh.y"
     {
       // FIXME: physical groups should not be stored in GEO_Internals, but
       // directly in GModel
@@ -13293,7 +13294,7 @@ yyreduce:
     break;
 
   case 521:
-#line 6020 "Gmsh.y"
+#line 6021 "Gmsh.y"
     {
       // FIXME: physical groups should not be stored in GEO_Internals, but
       // directly in GModel
@@ -13327,7 +13328,7 @@ yyreduce:
     break;
 
   case 522:
-#line 6051 "Gmsh.y"
+#line 6052 "Gmsh.y"
     {
       // FIXME: physical groups should not be stored in GEO_Internals, but
       // directly in GModel
@@ -13361,7 +13362,7 @@ yyreduce:
     break;
 
   case 523:
-#line 6082 "Gmsh.y"
+#line 6083 "Gmsh.y"
     {
       // FIXME: physical groups should not be stored in GEO_Internals, but
       // directly in GModel
@@ -13395,7 +13396,7 @@ yyreduce:
     break;
 
   case 524:
-#line 6114 "Gmsh.y"
+#line 6115 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals()->getChanged())
         GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -13413,7 +13414,7 @@ yyreduce:
     break;
 
   case 525:
-#line 6130 "Gmsh.y"
+#line 6131 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals()->getChanged())
         GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -13431,7 +13432,7 @@ yyreduce:
     break;
 
   case 526:
-#line 6146 "Gmsh.y"
+#line 6147 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals()->getChanged())
         GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -13449,7 +13450,7 @@ yyreduce:
     break;
 
   case 527:
-#line 6162 "Gmsh.y"
+#line 6163 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals()->getChanged())
         GModel::current()->getOCCInternals()->synchronize(GModel::current());
@@ -13467,7 +13468,7 @@ yyreduce:
     break;
 
   case 528:
-#line 6177 "Gmsh.y"
+#line 6178 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -13480,7 +13481,7 @@ yyreduce:
     break;
 
   case 529:
-#line 6187 "Gmsh.y"
+#line 6188 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -13493,7 +13494,7 @@ yyreduce:
     break;
 
   case 530:
-#line 6197 "Gmsh.y"
+#line 6198 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -13506,7 +13507,7 @@ yyreduce:
     break;
 
   case 531:
-#line 6207 "Gmsh.y"
+#line 6208 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -13521,7 +13522,7 @@ yyreduce:
     break;
 
   case 532:
-#line 6219 "Gmsh.y"
+#line 6220 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -13536,7 +13537,7 @@ yyreduce:
     break;
 
   case 533:
-#line 6232 "Gmsh.y"
+#line 6233 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -13551,35 +13552,35 @@ yyreduce:
     break;
 
   case 534:
-#line 6244 "Gmsh.y"
+#line 6245 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 535:
-#line 6248 "Gmsh.y"
+#line 6249 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 536:
-#line 6252 "Gmsh.y"
+#line 6253 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 537:
-#line 6256 "Gmsh.y"
+#line 6257 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 538:
-#line 6260 "Gmsh.y"
+#line 6261 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -13600,7 +13601,7 @@ yyreduce:
     break;
 
   case 539:
-#line 6278 "Gmsh.y"
+#line 6279 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -13621,7 +13622,7 @@ yyreduce:
     break;
 
   case 540:
-#line 6296 "Gmsh.y"
+#line 6297 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -13632,7 +13633,7 @@ yyreduce:
     break;
 
   case 541:
-#line 6304 "Gmsh.y"
+#line 6305 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -13643,7 +13644,7 @@ yyreduce:
     break;
 
   case 542:
-#line 6312 "Gmsh.y"
+#line 6313 "Gmsh.y"
     {
       Msg::Barrier();
       FILE *File;
@@ -13675,7 +13676,7 @@ yyreduce:
     break;
 
   case 543:
-#line 6341 "Gmsh.y"
+#line 6342 "Gmsh.y"
     {
       double x0 = (yyvsp[(3) - (14)].d), x1 = (yyvsp[(5) - (14)].d), y0 = (yyvsp[(7) - (14)].d), y1 = (yyvsp[(9) - (14)].d), ys = (yyvsp[(11) - (14)].d);
       int N = (int)(yyvsp[(13) - (14)].d);
@@ -13688,7 +13689,7 @@ yyreduce:
     break;
 
   case 544:
-#line 6351 "Gmsh.y"
+#line 6352 "Gmsh.y"
     {
       std::vector<double> tmp;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -13707,7 +13708,7 @@ yyreduce:
     break;
 
   case 545:
-#line 6370 "Gmsh.y"
+#line 6371 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -13715,21 +13716,21 @@ yyreduce:
     break;
 
   case 546:
-#line 6375 "Gmsh.y"
+#line 6376 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 547:
-#line 6379 "Gmsh.y"
+#line 6380 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 548:
-#line 6383 "Gmsh.y"
+#line 6384 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -13741,21 +13742,21 @@ yyreduce:
     break;
 
   case 549:
-#line 6395 "Gmsh.y"
+#line 6396 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 550:
-#line 6399 "Gmsh.y"
+#line 6400 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 551:
-#line 6411 "Gmsh.y"
+#line 6412 "Gmsh.y"
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
@@ -13775,7 +13776,7 @@ yyreduce:
     break;
 
   case 552:
-#line 6428 "Gmsh.y"
+#line 6429 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -13785,14 +13786,14 @@ yyreduce:
     break;
 
   case 553:
-#line 6438 "Gmsh.y"
+#line 6439 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 554:
-#line 6442 "Gmsh.y"
+#line 6443 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -13807,7 +13808,7 @@ yyreduce:
     break;
 
   case 555:
-#line 6457 "Gmsh.y"
+#line 6458 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -13815,21 +13816,21 @@ yyreduce:
     break;
 
   case 556:
-#line 6462 "Gmsh.y"
+#line 6463 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 557:
-#line 6469 "Gmsh.y"
+#line 6470 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 558:
-#line 6473 "Gmsh.y"
+#line 6474 "Gmsh.y"
     {
       std::string val;
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c)))
@@ -13845,7 +13846,7 @@ yyreduce:
     break;
 
   case 559:
-#line 6486 "Gmsh.y"
+#line 6487 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13862,7 +13863,7 @@ yyreduce:
     break;
 
   case 560:
-#line 6500 "Gmsh.y"
+#line 6501 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13879,7 +13880,7 @@ yyreduce:
     break;
 
   case 561:
-#line 6514 "Gmsh.y"
+#line 6515 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13896,7 +13897,7 @@ yyreduce:
     break;
 
   case 562:
-#line 6528 "Gmsh.y"
+#line 6529 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -13913,7 +13914,7 @@ yyreduce:
     break;
 
   case 563:
-#line 6542 "Gmsh.y"
+#line 6543 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -13924,7 +13925,7 @@ yyreduce:
     break;
 
   case 564:
-#line 6550 "Gmsh.y"
+#line 6551 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -13935,21 +13936,21 @@ yyreduce:
     break;
 
   case 565:
-#line 6561 "Gmsh.y"
+#line 6562 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 566:
-#line 6565 "Gmsh.y"
+#line 6566 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 567:
-#line 6569 "Gmsh.y"
+#line 6570 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -13960,7 +13961,7 @@ yyreduce:
     break;
 
   case 568:
-#line 6577 "Gmsh.y"
+#line 6578 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -13969,7 +13970,7 @@ yyreduce:
     break;
 
   case 569:
-#line 6583 "Gmsh.y"
+#line 6584 "Gmsh.y"
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -13978,7 +13979,7 @@ yyreduce:
     break;
 
   case 570:
-#line 6589 "Gmsh.y"
+#line 6590 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -13989,7 +13990,7 @@ yyreduce:
     break;
 
   case 571:
-#line 6597 "Gmsh.y"
+#line 6598 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14000,7 +14001,7 @@ yyreduce:
     break;
 
   case 572:
-#line 6605 "Gmsh.y"
+#line 6606 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14010,7 +14011,7 @@ yyreduce:
     break;
 
   case 573:
-#line 6612 "Gmsh.y"
+#line 6613 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14021,7 +14022,7 @@ yyreduce:
     break;
 
   case 574:
-#line 6620 "Gmsh.y"
+#line 6621 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -14039,7 +14040,7 @@ yyreduce:
     break;
 
   case 575:
-#line 6635 "Gmsh.y"
+#line 6636 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -14056,7 +14057,7 @@ yyreduce:
     break;
 
   case 576:
-#line 6649 "Gmsh.y"
+#line 6650 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -14073,7 +14074,7 @@ yyreduce:
     break;
 
   case 577:
-#line 6663 "Gmsh.y"
+#line 6664 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -14088,7 +14089,7 @@ yyreduce:
     break;
 
   case 578:
-#line 6675 "Gmsh.y"
+#line 6676 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -14107,7 +14108,7 @@ yyreduce:
     break;
 
   case 579:
-#line 6691 "Gmsh.y"
+#line 6692 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14119,7 +14120,7 @@ yyreduce:
     break;
 
   case 580:
-#line 6700 "Gmsh.y"
+#line 6701 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14131,7 +14132,7 @@ yyreduce:
     break;
 
   case 581:
-#line 6709 "Gmsh.y"
+#line 6710 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14144,7 +14145,7 @@ yyreduce:
     break;
 
   case 582:
-#line 6719 "Gmsh.y"
+#line 6720 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -14158,7 +14159,7 @@ yyreduce:
     break;
 
   case 583:
-#line 6730 "Gmsh.y"
+#line 6731 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (8)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (8)].d), (int)(yyvsp[(7) - (8)].d));
@@ -14169,7 +14170,7 @@ yyreduce:
     break;
 
   case 584:
-#line 6738 "Gmsh.y"
+#line 6739 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (6)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (6)].d), std::string::npos);
@@ -14180,14 +14181,14 @@ yyreduce:
     break;
 
   case 585:
-#line 6746 "Gmsh.y"
+#line 6747 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 586:
-#line 6750 "Gmsh.y"
+#line 6751 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -14209,7 +14210,7 @@ yyreduce:
     break;
 
   case 587:
-#line 6769 "Gmsh.y"
+#line 6770 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14219,7 +14220,7 @@ yyreduce:
     break;
 
   case 588:
-#line 6776 "Gmsh.y"
+#line 6777 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14228,7 +14229,7 @@ yyreduce:
     break;
 
   case 589:
-#line 6782 "Gmsh.y"
+#line 6783 "Gmsh.y"
     {
       std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14238,7 +14239,7 @@ yyreduce:
     break;
 
   case 590:
-#line 6789 "Gmsh.y"
+#line 6790 "Gmsh.y"
     {
       std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14248,12 +14249,12 @@ yyreduce:
     break;
 
   case 591:
-#line 6796 "Gmsh.y"
+#line 6797 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 592:
-#line 6798 "Gmsh.y"
+#line 6799 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -14264,7 +14265,7 @@ yyreduce:
     break;
 
   case 593:
-#line 6809 "Gmsh.y"
+#line 6810 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -14272,12 +14273,12 @@ yyreduce:
     break;
 
   case 594:
-#line 6814 "Gmsh.y"
+#line 6815 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
     break;
 
   case 595:
-#line 6820 "Gmsh.y"
+#line 6821 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -14288,7 +14289,7 @@ yyreduce:
     break;
 
   case 596:
-#line 6829 "Gmsh.y"
+#line 6830 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -14299,23 +14300,23 @@ yyreduce:
     break;
 
   case 597:
-#line 6842 "Gmsh.y"
+#line 6843 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 598:
-#line 6845 "Gmsh.y"
+#line 6846 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 599:
-#line 6849 "Gmsh.y"
+#line 6850 "Gmsh.y"
     { (yyval.c) = (yyvsp[(3) - (4)].c); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 14319 "Gmsh.tab.cpp"
+#line 14320 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -14529,7 +14530,7 @@ yyreturn:
 }
 
 
-#line 6852 "Gmsh.y"
+#line 6853 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp
index b7adde352ece1a7119bd293b82f775d09fe9bf5b..ed3818450b290bfdf227191c60a1208f9484827d 100644
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@ -478,7 +478,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 120 "Gmsh.y"
+#line 121 "Gmsh.y"
 {
   char *c;
   int i;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 89c634fc6da3812f84ff53aa91da3c811e49f243..18b7b7cf3dfb77b25e7f753e24ae4d9c27ef4bf5 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -21,6 +21,7 @@
 #include "GModel.h"
 #include "GModelIO_GEO.h"
 #include "GModelIO_OCC.h"
+#include "Geo.h"
 #include "GeoInterpolation.h"
 #include "Options.h"
 #include "Parser.h"