From e97a6879876786d3ab82a7e417fbb78cfb35fa89 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 8 Apr 2017 07:40:46 +0200
Subject: [PATCH] pp

---
 Parser/Gmsh.tab.cpp | 890 ++++++++++++++++++++++----------------------
 Parser/Gmsh.y       |  16 -
 README.txt          |   7 +-
 3 files changed, 448 insertions(+), 465 deletions(-)

diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 92df44abfc..204c713bb4 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1429,47 +1429,47 @@ static const yytype_uint16 yyrline[] =
     1537,  1544,  1547,  1554,  1578,  1594,  1610,  1647,  1687,  1703,
     1719,  1741,  1757,  1776,  1792,  1813,  1824,  1830,  1836,  1843,
     1874,  1889,  1911,  1934,  1957,  1980,  2004,  2028,  2052,  2078,
-    2095,  2111,  2129,  2148,  2178,  2209,  2208,  2239,  2241,  2243,
-    2245,  2247,  2255,  2257,  2259,  2261,  2269,  2271,  2273,  2281,
-    2283,  2285,  2287,  2298,  2314,  2330,  2346,  2362,  2378,  2413,
-    2435,  2459,  2460,  2465,  2468,  2472,  2493,  2512,  2533,  2548,
-    2564,  2582,  2633,  2654,  2676,  2699,  2804,  2820,  2855,  2866,
-    2877,  2883,  2898,  2926,  2938,  2947,  2954,  2966,  2985,  2991,
-    2997,  3004,  3011,  3018,  3030,  3103,  3121,  3138,  3153,  3186,
-    3198,  3222,  3226,  3231,  3238,  3243,  3253,  3258,  3264,  3272,
-    3276,  3280,  3289,  3353,  3369,  3386,  3403,  3425,  3447,  3482,
-    3490,  3498,  3504,  3511,  3518,  3538,  3564,  3576,  3588,  3606,
-    3624,  3643,  3642,  3667,  3666,  3693,  3692,  3717,  3716,  3739,
-    3755,  3772,  3789,  3812,  3815,  3821,  3833,  3853,  3857,  3861,
-    3865,  3869,  3873,  3877,  3881,  3890,  3903,  3904,  3905,  3906,
-    3907,  3911,  3912,  3913,  3914,  3915,  3918,  3941,  3960,  3982,
-    3985,  4001,  4004,  4021,  4024,  4030,  4033,  4040,  4043,  4050,
-    4067,  4108,  4152,  4191,  4216,  4225,  4255,  4281,  4307,  4339,
-    4366,  4392,  4418,  4444,  4470,  4492,  4503,  4551,  4600,  4612,
-    4624,  4628,  4638,  4649,  4650,  4651,  4655,  4661,  4673,  4691,
-    4719,  4720,  4721,  4722,  4723,  4724,  4725,  4726,  4727,  4734,
-    4735,  4736,  4737,  4738,  4739,  4740,  4741,  4742,  4743,  4744,
-    4745,  4746,  4747,  4748,  4749,  4750,  4751,  4752,  4753,  4754,
-    4755,  4756,  4757,  4758,  4759,  4760,  4761,  4762,  4763,  4764,
-    4765,  4766,  4767,  4768,  4769,  4770,  4771,  4780,  4781,  4782,
-    4783,  4784,  4785,  4786,  4787,  4788,  4789,  4790,  4795,  4794,
-    4802,  4804,  4809,  4814,  4818,  4823,  4828,  4832,  4836,  4840,
-    4844,  4850,  4866,  4871,  4877,  4883,  4902,  4923,  4956,  4960,
-    4965,  4969,  4973,  4977,  4982,  4987,  4997,  5007,  5012,  5023,
-    5032,  5037,  5042,  5070,  5071,  5077,  5078,  5084,  5083,  5106,
-    5108,  5113,  5122,  5124,  5130,  5131,  5137,  5141,  5145,  5149,
-    5153,  5160,  5164,  5168,  5172,  5179,  5184,  5191,  5196,  5200,
-    5205,  5209,  5217,  5228,  5232,  5244,  5252,  5260,  5267,  5277,
-    5300,  5306,  5317,  5323,  5333,  5343,  5353,  5366,  5370,  5376,
-    5388,  5392,  5396,  5400,  5418,  5426,  5434,  5463,  5473,  5489,
-    5500,  5505,  5509,  5513,  5525,  5529,  5541,  5558,  5568,  5572,
-    5587,  5592,  5599,  5603,  5608,  5622,  5639,  5643,  5648,  5652,
-    5657,  5665,  5671,  5677,  5683,  5692,  5696,  5700,  5708,  5714,
-    5720,  5724,  5732,  5740,  5747,  5757,  5762,  5767,  5782,  5796,
-    5810,  5822,  5838,  5847,  5856,  5866,  5877,  5885,  5893,  5897,
-    5916,  5923,  5929,  5936,  5944,  5943,  5953,  5977,  5979,  5985,
-    5990,  5992,  5997,  6002,  6007,  6009,  6013,  6025,  6040,  6045,
-    6054,  6063,  6072,  6084,  6087,  6091
+    2095,  2111,  2129,  2147,  2177,  2207,  2206,  2236,  2238,  2240,
+    2242,  2244,  2252,  2254,  2256,  2258,  2266,  2268,  2270,  2278,
+    2280,  2282,  2284,  2294,  2310,  2326,  2342,  2358,  2374,  2409,
+    2431,  2455,  2456,  2461,  2464,  2468,  2489,  2508,  2529,  2544,
+    2560,  2578,  2629,  2650,  2672,  2695,  2800,  2816,  2851,  2862,
+    2873,  2879,  2894,  2922,  2934,  2943,  2950,  2962,  2981,  2987,
+    2993,  3000,  3007,  3014,  3026,  3099,  3117,  3134,  3149,  3182,
+    3194,  3218,  3222,  3227,  3234,  3239,  3249,  3254,  3260,  3268,
+    3272,  3276,  3285,  3349,  3365,  3382,  3399,  3421,  3443,  3478,
+    3486,  3494,  3500,  3507,  3514,  3534,  3560,  3572,  3583,  3601,
+    3619,  3638,  3637,  3662,  3661,  3688,  3687,  3712,  3711,  3734,
+    3750,  3767,  3784,  3807,  3810,  3816,  3828,  3848,  3852,  3856,
+    3860,  3864,  3868,  3872,  3876,  3885,  3898,  3899,  3900,  3901,
+    3902,  3906,  3907,  3908,  3909,  3910,  3913,  3936,  3955,  3977,
+    3980,  3996,  3999,  4016,  4019,  4025,  4028,  4035,  4038,  4045,
+    4062,  4103,  4147,  4186,  4211,  4220,  4250,  4276,  4302,  4334,
+    4361,  4387,  4413,  4439,  4465,  4487,  4498,  4546,  4595,  4607,
+    4618,  4622,  4632,  4643,  4644,  4645,  4649,  4655,  4667,  4685,
+    4713,  4714,  4715,  4716,  4717,  4718,  4719,  4720,  4721,  4728,
+    4729,  4730,  4731,  4732,  4733,  4734,  4735,  4736,  4737,  4738,
+    4739,  4740,  4741,  4742,  4743,  4744,  4745,  4746,  4747,  4748,
+    4749,  4750,  4751,  4752,  4753,  4754,  4755,  4756,  4757,  4758,
+    4759,  4760,  4761,  4762,  4763,  4764,  4765,  4774,  4775,  4776,
+    4777,  4778,  4779,  4780,  4781,  4782,  4783,  4784,  4789,  4788,
+    4796,  4798,  4803,  4808,  4812,  4817,  4822,  4826,  4830,  4834,
+    4838,  4844,  4860,  4865,  4871,  4877,  4896,  4917,  4950,  4954,
+    4959,  4963,  4967,  4971,  4976,  4981,  4991,  5001,  5006,  5017,
+    5026,  5031,  5036,  5064,  5065,  5071,  5072,  5078,  5077,  5100,
+    5102,  5107,  5116,  5118,  5124,  5125,  5130,  5134,  5138,  5142,
+    5146,  5153,  5157,  5161,  5165,  5172,  5177,  5184,  5189,  5193,
+    5198,  5202,  5210,  5221,  5225,  5237,  5245,  5253,  5260,  5270,
+    5293,  5299,  5310,  5316,  5326,  5336,  5346,  5359,  5363,  5369,
+    5381,  5385,  5389,  5393,  5411,  5419,  5427,  5456,  5466,  5482,
+    5493,  5498,  5502,  5506,  5518,  5522,  5534,  5551,  5561,  5565,
+    5580,  5585,  5592,  5596,  5601,  5615,  5632,  5636,  5641,  5645,
+    5650,  5658,  5664,  5670,  5676,  5685,  5689,  5693,  5701,  5707,
+    5713,  5717,  5725,  5733,  5740,  5750,  5755,  5760,  5775,  5789,
+    5803,  5815,  5831,  5840,  5849,  5859,  5870,  5878,  5886,  5890,
+    5909,  5916,  5922,  5929,  5937,  5936,  5946,  5970,  5972,  5978,
+    5983,  5985,  5990,  5995,  6000,  6002,  6006,  6018,  6032,  6036,
+    6043,  6051,  6059,  6070,  6072,  6075
 };
 #endif
 
@@ -8394,7 +8394,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2149 "Gmsh.y"
+#line 2148 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(7) - (8)].l), tags);
@@ -8427,7 +8427,7 @@ yyreduce:
     break;
 
   case 184:
-#line 2180 "Gmsh.y"
+#line 2179 "Gmsh.y"
     {
       // Particular case only for dim 2 (Surface)
       if ((yyvsp[(2) - (12)].i) == 2) {
@@ -8458,14 +8458,14 @@ yyreduce:
     break;
 
   case 185:
-#line 2209 "Gmsh.y"
+#line 2207 "Gmsh.y"
     {
       dim_entity = (yyvsp[(2) - (2)].i);
     ;}
     break;
 
   case 186:
-#line 2213 "Gmsh.y"
+#line 2211 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       int op = (yyvsp[(7) - (9)].i);
@@ -8491,27 +8491,27 @@ yyreduce:
     break;
 
   case 187:
-#line 2240 "Gmsh.y"
+#line 2237 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 188:
-#line 2242 "Gmsh.y"
+#line 2239 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 189:
-#line 2244 "Gmsh.y"
+#line 2241 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 190:
-#line 2246 "Gmsh.y"
+#line 2243 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 191:
-#line 2248 "Gmsh.y"
+#line 2245 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(3) - (4)].d);
       if ((yyval.i)<0 || (yyval.i)>3) yymsg(0, "GeoEntity dim out of range [0,3]");
@@ -8519,22 +8519,22 @@ yyreduce:
     break;
 
   case 192:
-#line 2256 "Gmsh.y"
+#line 2253 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 193:
-#line 2258 "Gmsh.y"
+#line 2255 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 194:
-#line 2260 "Gmsh.y"
+#line 2257 "Gmsh.y"
     { (yyval.i) = 3; ;}
     break;
 
   case 195:
-#line 2262 "Gmsh.y"
+#line 2259 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(3) - (4)].d);
       if ((yyval.i)<1 || (yyval.i)>3) yymsg(0, "GeoEntity dim out of range [1,3]");
@@ -8542,17 +8542,17 @@ yyreduce:
     break;
 
   case 196:
-#line 2270 "Gmsh.y"
+#line 2267 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 197:
-#line 2272 "Gmsh.y"
+#line 2269 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 198:
-#line 2274 "Gmsh.y"
+#line 2271 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(3) - (4)].d);
       if ((yyval.i)<1 || (yyval.i)>2) yymsg(0, "GeoEntity dim out of range [1,2]");
@@ -8560,22 +8560,22 @@ yyreduce:
     break;
 
   case 199:
-#line 2282 "Gmsh.y"
+#line 2279 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 200:
-#line 2284 "Gmsh.y"
+#line 2281 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 201:
-#line 2286 "Gmsh.y"
+#line 2283 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 202:
-#line 2288 "Gmsh.y"
+#line 2285 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(3) - (4)].d);
       if ((yyval.i)<0 || (yyval.i)>2) yymsg(0, "GeoEntity dim out of range [0,2]");
@@ -8583,7 +8583,7 @@ yyreduce:
     break;
 
   case 203:
-#line 2299 "Gmsh.y"
+#line 2295 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -8602,7 +8602,7 @@ yyreduce:
     break;
 
   case 204:
-#line 2315 "Gmsh.y"
+#line 2311 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(10) - (11)].l), dimTags);
@@ -8621,7 +8621,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2331 "Gmsh.y"
+#line 2327 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -8640,7 +8640,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2347 "Gmsh.y"
+#line 2343 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(8) - (9)].l), dimTags);
@@ -8659,7 +8659,7 @@ yyreduce:
     break;
 
   case 207:
-#line 2363 "Gmsh.y"
+#line 2359 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(8) - (9)].l), dimTags);
@@ -8678,7 +8678,7 @@ yyreduce:
     break;
 
   case 208:
-#line 2379 "Gmsh.y"
+#line 2375 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), inDimTags);
@@ -8716,7 +8716,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2414 "Gmsh.y"
+#line 2410 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -8740,7 +8740,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2436 "Gmsh.y"
+#line 2432 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -8764,31 +8764,31 @@ yyreduce:
     break;
 
   case 211:
-#line 2459 "Gmsh.y"
+#line 2455 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 212:
-#line 2460 "Gmsh.y"
+#line 2456 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 213:
-#line 2465 "Gmsh.y"
+#line 2461 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 214:
-#line 2469 "Gmsh.y"
+#line 2465 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 215:
-#line 2473 "Gmsh.y"
+#line 2469 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -8807,7 +8807,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2494 "Gmsh.y"
+#line 2490 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
         int t = (int)(yyvsp[(4) - (8)].d);
@@ -8829,7 +8829,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2513 "Gmsh.y"
+#line 2509 "Gmsh.y"
     {
       int t = (int)(yyvsp[(4) - (10)].d);
       if(gLevelset::find(t)){
@@ -8853,7 +8853,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2535 "Gmsh.y"
+#line 2531 "Gmsh.y"
     {
       int t = (int)(yyvsp[(4) - (14)].d);
       if(gLevelset::find(t)){
@@ -8870,7 +8870,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2550 "Gmsh.y"
+#line 2546 "Gmsh.y"
     {
       int t = (int)(yyvsp[(4) - (16)].d);
       if(gLevelset::find(t)){
@@ -8888,7 +8888,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2565 "Gmsh.y"
+#line 2561 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
         int t = (int)(yyvsp[(4) - (12)].d);
@@ -8909,7 +8909,7 @@ yyreduce:
     break;
 
   case 221:
-#line 2584 "Gmsh.y"
+#line 2580 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
         int t = (int)(yyvsp[(4) - (14)].d);
@@ -8962,7 +8962,7 @@ yyreduce:
     break;
 
   case 222:
-#line 2635 "Gmsh.y"
+#line 2631 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
         int t = (int)(yyvsp[(4) - (14)].d);
@@ -8985,7 +8985,7 @@ yyreduce:
     break;
 
   case 223:
-#line 2656 "Gmsh.y"
+#line 2652 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 3){
         int t = (int)(yyvsp[(4) - (14)].d);
@@ -9009,7 +9009,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2678 "Gmsh.y"
+#line 2674 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 5){
         int t = (int)(yyvsp[(4) - (14)].d);
@@ -9034,7 +9034,7 @@ yyreduce:
     break;
 
   case 225:
-#line 2700 "Gmsh.y"
+#line 2696 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
         int t = (int)(yyvsp[(4) - (8)].d);
@@ -9142,7 +9142,7 @@ yyreduce:
     break;
 
   case 226:
-#line 2805 "Gmsh.y"
+#line 2801 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
         int t = (int)(yyvsp[(4) - (8)].d);
@@ -9161,7 +9161,7 @@ yyreduce:
     break;
 
   case 227:
-#line 2821 "Gmsh.y"
+#line 2817 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
         int t = (int)(yyvsp[(4) - (6)].d);
@@ -9194,7 +9194,7 @@ yyreduce:
     break;
 
   case 228:
-#line 2856 "Gmsh.y"
+#line 2852 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags);
@@ -9208,7 +9208,7 @@ yyreduce:
     break;
 
   case 229:
-#line 2867 "Gmsh.y"
+#line 2863 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -9222,7 +9222,7 @@ yyreduce:
     break;
 
   case 230:
-#line 2878 "Gmsh.y"
+#line 2874 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -9231,7 +9231,7 @@ yyreduce:
     break;
 
   case 231:
-#line 2884 "Gmsh.y"
+#line 2880 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -9249,7 +9249,7 @@ yyreduce:
     break;
 
   case 232:
-#line 2899 "Gmsh.y"
+#line 2895 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -9280,7 +9280,7 @@ yyreduce:
     break;
 
   case 233:
-#line 2927 "Gmsh.y"
+#line 2923 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -9295,14 +9295,14 @@ yyreduce:
     break;
 
   case 234:
-#line 2939 "Gmsh.y"
+#line 2935 "Gmsh.y"
     {
       gmsh_yynamespaces.clear();
     ;}
     break;
 
   case 235:
-#line 2948 "Gmsh.y"
+#line 2944 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -9312,7 +9312,7 @@ yyreduce:
     break;
 
   case 236:
-#line 2955 "Gmsh.y"
+#line 2951 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(5) - (6)].l), dimTags);
@@ -9322,7 +9322,7 @@ yyreduce:
     break;
 
   case 237:
-#line 2967 "Gmsh.y"
+#line 2963 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -9339,7 +9339,7 @@ yyreduce:
     break;
 
   case 238:
-#line 2986 "Gmsh.y"
+#line 2982 "Gmsh.y"
     {
       std::string what = (yyvsp[(2) - (3)].c);
       setVisibility(-1, 1, false);
@@ -9348,7 +9348,7 @@ yyreduce:
     break;
 
   case 239:
-#line 2992 "Gmsh.y"
+#line 2988 "Gmsh.y"
     {
       std::string what = (yyvsp[(2) - (3)].c);
       setVisibility(-1, 0, false);
@@ -9357,7 +9357,7 @@ yyreduce:
     break;
 
   case 240:
-#line 2998 "Gmsh.y"
+#line 2994 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags);
@@ -9367,7 +9367,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3005 "Gmsh.y"
+#line 3001 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -9377,7 +9377,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3012 "Gmsh.y"
+#line 3008 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (4)].l), dimTags);
@@ -9387,7 +9387,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3019 "Gmsh.y"
+#line 3015 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > dimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), dimTags);
@@ -9397,7 +9397,7 @@ yyreduce:
     break;
 
   case 244:
-#line 3031 "Gmsh.y"
+#line 3027 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -9473,7 +9473,7 @@ yyreduce:
     break;
 
   case 245:
-#line 3104 "Gmsh.y"
+#line 3100 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -9494,7 +9494,7 @@ yyreduce:
     break;
 
   case 246:
-#line 3122 "Gmsh.y"
+#line 3118 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -9514,7 +9514,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3139 "Gmsh.y"
+#line 3135 "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")){
@@ -9532,7 +9532,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3154 "Gmsh.y"
+#line 3150 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -9568,7 +9568,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3187 "Gmsh.y"
+#line 3183 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -9583,7 +9583,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3199 "Gmsh.y"
+#line 3195 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -9610,14 +9610,14 @@ yyreduce:
     break;
 
   case 251:
-#line 3223 "Gmsh.y"
+#line 3219 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 252:
-#line 3227 "Gmsh.y"
+#line 3223 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -9625,7 +9625,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3232 "Gmsh.y"
+#line 3228 "Gmsh.y"
     {
       // force sync
       if(GModel::current()->getOCCInternals())
@@ -9635,7 +9635,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3239 "Gmsh.y"
+#line 3235 "Gmsh.y"
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
@@ -9643,7 +9643,7 @@ yyreduce:
     break;
 
   case 255:
-#line 3244 "Gmsh.y"
+#line 3240 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       if(GModel::current()->getOCCInternals() &&
@@ -9656,7 +9656,7 @@ yyreduce:
     break;
 
   case 256:
-#line 3254 "Gmsh.y"
+#line 3250 "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));
@@ -9664,7 +9664,7 @@ yyreduce:
     break;
 
   case 257:
-#line 3259 "Gmsh.y"
+#line 3255 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -9673,7 +9673,7 @@ yyreduce:
     break;
 
   case 258:
-#line 3265 "Gmsh.y"
+#line 3261 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -9684,21 +9684,21 @@ yyreduce:
     break;
 
   case 259:
-#line 3273 "Gmsh.y"
+#line 3269 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 260:
-#line 3277 "Gmsh.y"
+#line 3273 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 261:
-#line 3281 "Gmsh.y"
+#line 3277 "Gmsh.y"
     {
       if(GModel::current()->getOCCInternals() &&
          GModel::current()->getOCCInternals()->getChanged())
@@ -9710,7 +9710,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3291 "Gmsh.y"
+#line 3287 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -9771,7 +9771,7 @@ yyreduce:
     break;
 
   case 263:
-#line 3354 "Gmsh.y"
+#line 3350 "Gmsh.y"
     {
 #if defined(HAVE_POPPLER)
        std::vector<int> is;
@@ -9786,7 +9786,7 @@ yyreduce:
     break;
 
   case 264:
-#line 3370 "Gmsh.y"
+#line 3366 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -9806,7 +9806,7 @@ yyreduce:
     break;
 
   case 265:
-#line 3387 "Gmsh.y"
+#line 3383 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -9826,7 +9826,7 @@ yyreduce:
     break;
 
   case 266:
-#line 3404 "Gmsh.y"
+#line 3400 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -9851,7 +9851,7 @@ yyreduce:
     break;
 
   case 267:
-#line 3426 "Gmsh.y"
+#line 3422 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -9876,7 +9876,7 @@ yyreduce:
     break;
 
   case 268:
-#line 3448 "Gmsh.y"
+#line 3444 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -9914,7 +9914,7 @@ yyreduce:
     break;
 
   case 269:
-#line 3483 "Gmsh.y"
+#line 3479 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9925,7 +9925,7 @@ yyreduce:
     break;
 
   case 270:
-#line 3491 "Gmsh.y"
+#line 3487 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9936,7 +9936,7 @@ yyreduce:
     break;
 
   case 271:
-#line 3499 "Gmsh.y"
+#line 3495 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9945,7 +9945,7 @@ yyreduce:
     break;
 
   case 272:
-#line 3505 "Gmsh.y"
+#line 3501 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9955,7 +9955,7 @@ yyreduce:
     break;
 
   case 273:
-#line 3512 "Gmsh.y"
+#line 3508 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9965,7 +9965,7 @@ yyreduce:
     break;
 
   case 274:
-#line 3519 "Gmsh.y"
+#line 3515 "Gmsh.y"
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -9988,7 +9988,7 @@ yyreduce:
     break;
 
   case 275:
-#line 3539 "Gmsh.y"
+#line 3535 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -10017,7 +10017,7 @@ yyreduce:
     break;
 
   case 276:
-#line 3565 "Gmsh.y"
+#line 3561 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -10032,7 +10032,7 @@ yyreduce:
     break;
 
   case 277:
-#line 3577 "Gmsh.y"
+#line 3573 "Gmsh.y"
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
@@ -10041,7 +10041,7 @@ yyreduce:
     break;
 
   case 278:
-#line 3589 "Gmsh.y"
+#line 3584 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (5)].l), inDimTags);
@@ -10062,7 +10062,7 @@ yyreduce:
     break;
 
   case 279:
-#line 3607 "Gmsh.y"
+#line 3602 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(10) - (11)].l), inDimTags);
@@ -10083,7 +10083,7 @@ yyreduce:
     break;
 
   case 280:
-#line 3625 "Gmsh.y"
+#line 3620 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(12) - (13)].l), inDimTags);
@@ -10104,7 +10104,7 @@ yyreduce:
     break;
 
   case 281:
-#line 3643 "Gmsh.y"
+#line 3638 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10113,7 +10113,7 @@ yyreduce:
     break;
 
   case 282:
-#line 3649 "Gmsh.y"
+#line 3644 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(4) - (7)].l), inDimTags);
@@ -10134,7 +10134,7 @@ yyreduce:
     break;
 
   case 283:
-#line 3667 "Gmsh.y"
+#line 3662 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10143,7 +10143,7 @@ yyreduce:
     break;
 
   case 284:
-#line 3673 "Gmsh.y"
+#line 3668 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(10) - (13)].l), inDimTags);
@@ -10166,7 +10166,7 @@ yyreduce:
     break;
 
   case 285:
-#line 3693 "Gmsh.y"
+#line 3688 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10175,7 +10175,7 @@ yyreduce:
     break;
 
   case 286:
-#line 3699 "Gmsh.y"
+#line 3694 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(12) - (15)].l), inDimTags);
@@ -10196,7 +10196,7 @@ yyreduce:
     break;
 
   case 287:
-#line 3717 "Gmsh.y"
+#line 3712 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -10205,7 +10205,7 @@ yyreduce:
     break;
 
   case 288:
-#line 3723 "Gmsh.y"
+#line 3718 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (6)].l), inDimTags);
@@ -10225,7 +10225,7 @@ yyreduce:
     break;
 
   case 289:
-#line 3740 "Gmsh.y"
+#line 3735 "Gmsh.y"
     {
       std::vector<std::pair<int, int> > inDimTags, outDimTags;
       ListOfShapes2VectorOfPairs((yyvsp[(3) - (9)].l), inDimTags);
@@ -10244,7 +10244,7 @@ yyreduce:
     break;
 
   case 290:
-#line 3756 "Gmsh.y"
+#line 3751 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -10264,7 +10264,7 @@ yyreduce:
     break;
 
   case 291:
-#line 3773 "Gmsh.y"
+#line 3768 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -10284,7 +10284,7 @@ yyreduce:
     break;
 
   case 292:
-#line 3790 "Gmsh.y"
+#line 3785 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -10307,19 +10307,19 @@ yyreduce:
     break;
 
   case 293:
-#line 3813 "Gmsh.y"
+#line 3808 "Gmsh.y"
     {
     ;}
     break;
 
   case 294:
-#line 3816 "Gmsh.y"
+#line 3811 "Gmsh.y"
     {
     ;}
     break;
 
   case 295:
-#line 3822 "Gmsh.y"
+#line 3817 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -10334,7 +10334,7 @@ yyreduce:
     break;
 
   case 296:
-#line 3834 "Gmsh.y"
+#line 3829 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -10357,56 +10357,56 @@ yyreduce:
     break;
 
   case 297:
-#line 3854 "Gmsh.y"
+#line 3849 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 298:
-#line 3858 "Gmsh.y"
+#line 3853 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 299:
-#line 3862 "Gmsh.y"
+#line 3857 "Gmsh.y"
     {
       extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false;
     ;}
     break;
 
   case 300:
-#line 3866 "Gmsh.y"
+#line 3861 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     ;}
     break;
 
   case 301:
-#line 3870 "Gmsh.y"
+#line 3865 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     ;}
     break;
 
   case 302:
-#line 3874 "Gmsh.y"
+#line 3869 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     ;}
     break;
 
   case 303:
-#line 3878 "Gmsh.y"
+#line 3873 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     ;}
     break;
 
   case 304:
-#line 3882 "Gmsh.y"
+#line 3877 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(6) - (9)].l), tags);
       int num = (int)(yyvsp[(3) - (9)].d);
@@ -10418,7 +10418,7 @@ yyreduce:
     break;
 
   case 305:
-#line 3891 "Gmsh.y"
+#line 3886 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -10429,57 +10429,57 @@ yyreduce:
     break;
 
   case 306:
-#line 3903 "Gmsh.y"
+#line 3898 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Union; ;}
     break;
 
   case 307:
-#line 3904 "Gmsh.y"
+#line 3899 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Intersection; ;}
     break;
 
   case 308:
-#line 3905 "Gmsh.y"
+#line 3900 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Difference; ;}
     break;
 
   case 309:
-#line 3906 "Gmsh.y"
+#line 3901 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Section; ;}
     break;
 
   case 310:
-#line 3907 "Gmsh.y"
+#line 3902 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Fragments; ;}
     break;
 
   case 311:
-#line 3911 "Gmsh.y"
+#line 3906 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 312:
-#line 3912 "Gmsh.y"
+#line 3907 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 313:
-#line 3913 "Gmsh.y"
+#line 3908 "Gmsh.y"
     { (yyval.i) = 2; ;}
     break;
 
   case 314:
-#line 3914 "Gmsh.y"
+#line 3909 "Gmsh.y"
     { (yyval.i) = (yyvsp[(2) - (3)].d) ? 1 : 0; ;}
     break;
 
   case 315:
-#line 3915 "Gmsh.y"
+#line 3910 "Gmsh.y"
     { (yyval.i) = (yyvsp[(3) - (4)].d) ? 2 : 0; ;}
     break;
 
   case 316:
-#line 3920 "Gmsh.y"
+#line 3915 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -10504,7 +10504,7 @@ yyreduce:
     break;
 
   case 317:
-#line 3942 "Gmsh.y"
+#line 3937 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       bool r = true;
@@ -10523,7 +10523,7 @@ yyreduce:
     break;
 
   case 318:
-#line 3962 "Gmsh.y"
+#line 3957 "Gmsh.y"
     {
       bool r = true;
       if(gmsh_yyfactory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -10543,14 +10543,14 @@ yyreduce:
     break;
 
   case 319:
-#line 3982 "Gmsh.y"
+#line 3977 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 320:
-#line 3986 "Gmsh.y"
+#line 3981 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -10566,14 +10566,14 @@ yyreduce:
     break;
 
   case 321:
-#line 4001 "Gmsh.y"
+#line 3996 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 322:
-#line 4005 "Gmsh.y"
+#line 4000 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -10590,49 +10590,49 @@ yyreduce:
     break;
 
   case 323:
-#line 4021 "Gmsh.y"
+#line 4016 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 324:
-#line 4025 "Gmsh.y"
+#line 4020 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 325:
-#line 4030 "Gmsh.y"
+#line 4025 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 326:
-#line 4034 "Gmsh.y"
+#line 4029 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 327:
-#line 4040 "Gmsh.y"
+#line 4035 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     ;}
     break;
 
   case 328:
-#line 4044 "Gmsh.y"
+#line 4039 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     ;}
     break;
 
   case 329:
-#line 4051 "Gmsh.y"
+#line 4046 "Gmsh.y"
     {
       // mesh sizes at vertices are stored in internal CAD data, as they can be
       // specified during vertex creation and copied around during CAD
@@ -10652,7 +10652,7 @@ yyreduce:
     break;
 
   case 330:
-#line 4068 "Gmsh.y"
+#line 4063 "Gmsh.y"
     {
       // transfinite constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10696,7 +10696,7 @@ yyreduce:
     break;
 
   case 331:
-#line 4109 "Gmsh.y"
+#line 4104 "Gmsh.y"
     {
       // transfinite constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10743,7 +10743,7 @@ yyreduce:
     break;
 
   case 332:
-#line 4153 "Gmsh.y"
+#line 4148 "Gmsh.y"
     {
       // transfinite constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10785,7 +10785,7 @@ yyreduce:
     break;
 
   case 333:
-#line 4192 "Gmsh.y"
+#line 4187 "Gmsh.y"
     {
       // transfinite constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10813,7 +10813,7 @@ yyreduce:
     break;
 
   case 334:
-#line 4217 "Gmsh.y"
+#line 4212 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){
 	double d;
@@ -10825,7 +10825,7 @@ yyreduce:
     break;
 
   case 335:
-#line 4226 "Gmsh.y"
+#line 4221 "Gmsh.y"
     {
       // recombine constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10858,7 +10858,7 @@ yyreduce:
     break;
 
   case 336:
-#line 4256 "Gmsh.y"
+#line 4251 "Gmsh.y"
     {
       // recombine constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10887,7 +10887,7 @@ yyreduce:
     break;
 
   case 337:
-#line 4282 "Gmsh.y"
+#line 4277 "Gmsh.y"
     {
       // smoothing constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -10916,7 +10916,7 @@ yyreduce:
     break;
 
   case 338:
-#line 4309 "Gmsh.y"
+#line 4304 "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 "
@@ -10950,7 +10950,7 @@ yyreduce:
     break;
 
   case 339:
-#line 4341 "Gmsh.y"
+#line 4336 "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 "
@@ -10979,7 +10979,7 @@ yyreduce:
     break;
 
   case 340:
-#line 4368 "Gmsh.y"
+#line 4363 "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 "
@@ -11007,7 +11007,7 @@ yyreduce:
     break;
 
   case 341:
-#line 4394 "Gmsh.y"
+#line 4389 "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 "
@@ -11035,7 +11035,7 @@ yyreduce:
     break;
 
   case 342:
-#line 4420 "Gmsh.y"
+#line 4415 "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 "
@@ -11063,7 +11063,7 @@ yyreduce:
     break;
 
   case 343:
-#line 4446 "Gmsh.y"
+#line 4441 "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 "
@@ -11091,7 +11091,7 @@ yyreduce:
     break;
 
   case 344:
-#line 4472 "Gmsh.y"
+#line 4467 "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 "
@@ -11115,7 +11115,7 @@ yyreduce:
     break;
 
   case 345:
-#line 4493 "Gmsh.y"
+#line 4488 "Gmsh.y"
     {
       if (((yyvsp[(6) - (10)].i)==2 || (yyvsp[(6) - (10)].i)==3) && (yyvsp[(1) - (10)].i)<(yyvsp[(6) - (10)].i) ) {
         std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (10)].l), tags);
@@ -11129,7 +11129,7 @@ yyreduce:
     break;
 
   case 346:
-#line 4504 "Gmsh.y"
+#line 4499 "Gmsh.y"
     {
       // reverse mesh constraints are stored in GEO internals in addition to
       // GModel, as they can be copied around during GEO operations
@@ -11180,7 +11180,7 @@ yyreduce:
     break;
 
   case 347:
-#line 4552 "Gmsh.y"
+#line 4547 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         switch ((yyvsp[(2) - (4)].i)) {
@@ -11232,7 +11232,7 @@ yyreduce:
     break;
 
   case 348:
-#line 4601 "Gmsh.y"
+#line 4596 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double dnum;
@@ -11247,7 +11247,7 @@ yyreduce:
     break;
 
   case 349:
-#line 4613 "Gmsh.y"
+#line 4608 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(3) - (4)].l), tags);
       GModel::current()->getGEOInternals()->setCompoundMesh((yyvsp[(2) - (4)].i), tags);
@@ -11256,14 +11256,14 @@ yyreduce:
     break;
 
   case 350:
-#line 4625 "Gmsh.y"
+#line 4619 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->removeAllDuplicates();
     ;}
     break;
 
   case 351:
-#line 4629 "Gmsh.y"
+#line 4623 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         GModel::current()->getGEOInternals()->removeAllDuplicates();
@@ -11276,7 +11276,7 @@ yyreduce:
     break;
 
   case 352:
-#line 4639 "Gmsh.y"
+#line 4633 "Gmsh.y"
     {
       std::vector<int> tags; ListOfDouble2Vector((yyvsp[(4) - (6)].l), tags);
       GModel::current()->getGEOInternals()->mergeVertices(tags);
@@ -11285,22 +11285,22 @@ yyreduce:
     break;
 
   case 353:
-#line 4649 "Gmsh.y"
+#line 4643 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 354:
-#line 4650 "Gmsh.y"
+#line 4644 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 355:
-#line 4651 "Gmsh.y"
+#line 4645 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
   case 356:
-#line 4656 "Gmsh.y"
+#line 4650 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -11309,7 +11309,7 @@ yyreduce:
     break;
 
   case 357:
-#line 4662 "Gmsh.y"
+#line 4656 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -11324,7 +11324,7 @@ yyreduce:
     break;
 
   case 358:
-#line 4674 "Gmsh.y"
+#line 4668 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -11345,7 +11345,7 @@ yyreduce:
     break;
 
   case 359:
-#line 4692 "Gmsh.y"
+#line 4686 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -11371,47 +11371,47 @@ yyreduce:
     break;
 
   case 360:
-#line 4719 "Gmsh.y"
+#line 4713 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 361:
-#line 4720 "Gmsh.y"
+#line 4714 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 362:
-#line 4721 "Gmsh.y"
+#line 4715 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 363:
-#line 4722 "Gmsh.y"
+#line 4716 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 364:
-#line 4723 "Gmsh.y"
+#line 4717 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 365:
-#line 4724 "Gmsh.y"
+#line 4718 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 366:
-#line 4725 "Gmsh.y"
+#line 4719 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 367:
-#line 4726 "Gmsh.y"
+#line 4720 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 368:
-#line 4728 "Gmsh.y"
+#line 4722 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -11421,257 +11421,257 @@ yyreduce:
     break;
 
   case 369:
-#line 4734 "Gmsh.y"
+#line 4728 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) | (int)(yyvsp[(3) - (3)].d); ;}
     break;
 
   case 370:
-#line 4735 "Gmsh.y"
+#line 4729 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) & (int)(yyvsp[(3) - (3)].d); ;}
     break;
 
   case 371:
-#line 4736 "Gmsh.y"
+#line 4730 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d); ;}
     break;
 
   case 372:
-#line 4737 "Gmsh.y"
+#line 4731 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 373:
-#line 4738 "Gmsh.y"
+#line 4732 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 374:
-#line 4739 "Gmsh.y"
+#line 4733 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 375:
-#line 4740 "Gmsh.y"
+#line 4734 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 376:
-#line 4741 "Gmsh.y"
+#line 4735 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 377:
-#line 4742 "Gmsh.y"
+#line 4736 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 378:
-#line 4743 "Gmsh.y"
+#line 4737 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 379:
-#line 4744 "Gmsh.y"
+#line 4738 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 380:
-#line 4745 "Gmsh.y"
+#line 4739 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 381:
-#line 4746 "Gmsh.y"
+#line 4740 "Gmsh.y"
     { (yyval.d) = ((int)(yyvsp[(1) - (3)].d) >> (int)(yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 382:
-#line 4747 "Gmsh.y"
+#line 4741 "Gmsh.y"
     { (yyval.d) = ((int)(yyvsp[(1) - (3)].d) << (int)(yyvsp[(3) - (3)].d)); ;}
     break;
 
   case 383:
-#line 4748 "Gmsh.y"
+#line 4742 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 384:
-#line 4749 "Gmsh.y"
+#line 4743 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 385:
-#line 4750 "Gmsh.y"
+#line 4744 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 386:
-#line 4751 "Gmsh.y"
+#line 4745 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 387:
-#line 4752 "Gmsh.y"
+#line 4746 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 388:
-#line 4753 "Gmsh.y"
+#line 4747 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 389:
-#line 4754 "Gmsh.y"
+#line 4748 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 390:
-#line 4755 "Gmsh.y"
+#line 4749 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 391:
-#line 4756 "Gmsh.y"
+#line 4750 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 392:
-#line 4757 "Gmsh.y"
+#line 4751 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 393:
-#line 4758 "Gmsh.y"
+#line 4752 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 394:
-#line 4759 "Gmsh.y"
+#line 4753 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 395:
-#line 4760 "Gmsh.y"
+#line 4754 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 396:
-#line 4761 "Gmsh.y"
+#line 4755 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 397:
-#line 4762 "Gmsh.y"
+#line 4756 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 398:
-#line 4763 "Gmsh.y"
+#line 4757 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 399:
-#line 4764 "Gmsh.y"
+#line 4758 "Gmsh.y"
     { (yyval.d) = std::abs((yyvsp[(3) - (4)].d)); ;}
     break;
 
   case 400:
-#line 4765 "Gmsh.y"
+#line 4759 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 401:
-#line 4766 "Gmsh.y"
+#line 4760 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 402:
-#line 4767 "Gmsh.y"
+#line 4761 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
     break;
 
   case 403:
-#line 4768 "Gmsh.y"
+#line 4762 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 404:
-#line 4769 "Gmsh.y"
+#line 4763 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 405:
-#line 4770 "Gmsh.y"
+#line 4764 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 406:
-#line 4771 "Gmsh.y"
+#line 4765 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 407:
-#line 4780 "Gmsh.y"
+#line 4774 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 408:
-#line 4781 "Gmsh.y"
+#line 4775 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 409:
-#line 4782 "Gmsh.y"
+#line 4776 "Gmsh.y"
     { (yyval.d) = (double)ImbricatedTest; ;}
     break;
 
   case 410:
-#line 4783 "Gmsh.y"
+#line 4777 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 411:
-#line 4784 "Gmsh.y"
+#line 4778 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 412:
-#line 4785 "Gmsh.y"
+#line 4779 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 413:
-#line 4786 "Gmsh.y"
+#line 4780 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 414:
-#line 4787 "Gmsh.y"
+#line 4781 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 415:
-#line 4788 "Gmsh.y"
+#line 4782 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
   case 416:
-#line 4789 "Gmsh.y"
+#line 4783 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
   case 417:
-#line 4790 "Gmsh.y"
+#line 4784 "Gmsh.y"
     { (yyval.d) = TotalRam(); ;}
     break;
 
   case 418:
-#line 4795 "Gmsh.y"
+#line 4789 "Gmsh.y"
     { init_options(); ;}
     break;
 
   case 419:
-#line 4797 "Gmsh.y"
+#line 4791 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11680,12 +11680,12 @@ yyreduce:
     break;
 
   case 420:
-#line 4803 "Gmsh.y"
+#line 4797 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 421:
-#line 4805 "Gmsh.y"
+#line 4799 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -11693,7 +11693,7 @@ yyreduce:
     break;
 
   case 422:
-#line 4810 "Gmsh.y"
+#line 4804 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -11701,56 +11701,56 @@ yyreduce:
     break;
 
   case 423:
-#line 4815 "Gmsh.y"
+#line 4809 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_Float((yyvsp[(1) - (1)].c2).char1, (yyvsp[(1) - (1)].c2).char2);
     ;}
     break;
 
   case 424:
-#line 4820 "Gmsh.y"
+#line 4814 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_Float(NULL, (yyvsp[(1) - (4)].c), 2, (int)(yyvsp[(3) - (4)].d));
     ;}
     break;
 
   case 425:
-#line 4825 "Gmsh.y"
+#line 4819 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_Float(NULL, (yyvsp[(1) - (4)].c), 2, (int)(yyvsp[(3) - (4)].d));
     ;}
     break;
 
   case 426:
-#line 4829 "Gmsh.y"
+#line 4823 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_Float((yyvsp[(3) - (4)].c2).char1, (yyvsp[(3) - (4)].c2).char2, 1, 0, 0., 1);
     ;}
     break;
 
   case 427:
-#line 4833 "Gmsh.y"
+#line 4827 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(3) - (6)].c2).char1, (yyvsp[(3) - (6)].c2).char2, (yyvsp[(5) - (6)].c), 0, 0., 1);
     ;}
     break;
 
   case 428:
-#line 4837 "Gmsh.y"
+#line 4831 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_Float((yyvsp[(3) - (5)].c2).char1, (yyvsp[(3) - (5)].c2).char2, 1, 0, (yyvsp[(4) - (5)].d), 2);
     ;}
     break;
 
   case 429:
-#line 4841 "Gmsh.y"
+#line 4835 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(3) - (7)].c2).char1, (yyvsp[(3) - (7)].c2).char2, (yyvsp[(5) - (7)].c), 0, (yyvsp[(6) - (7)].d), 2);
     ;}
     break;
 
   case 430:
-#line 4845 "Gmsh.y"
+#line 4839 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -11759,7 +11759,7 @@ yyreduce:
     break;
 
   case 431:
-#line 4851 "Gmsh.y"
+#line 4845 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]);
@@ -11777,14 +11777,14 @@ yyreduce:
     break;
 
   case 432:
-#line 4867 "Gmsh.y"
+#line 4861 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float_getDim((yyvsp[(2) - (6)].c2).char1, (yyvsp[(2) - (6)].c2).char2, (yyvsp[(4) - (6)].c));
     ;}
     break;
 
   case 433:
-#line 4872 "Gmsh.y"
+#line 4866 "Gmsh.y"
     {
       std::string struct_namespace((yyvsp[(3) - (4)].c));
       (yyval.d) = (double)gmsh_yynamespaces[struct_namespace].size();
@@ -11793,7 +11793,7 @@ yyreduce:
     break;
 
   case 434:
-#line 4878 "Gmsh.y"
+#line 4872 "Gmsh.y"
     {
       std::string struct_namespace(std::string(""));
       (yyval.d) = (double)gmsh_yynamespaces[struct_namespace].size();
@@ -11801,7 +11801,7 @@ yyreduce:
     break;
 
   case 435:
-#line 4884 "Gmsh.y"
+#line 4878 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -11823,7 +11823,7 @@ yyreduce:
     break;
 
   case 436:
-#line 4903 "Gmsh.y"
+#line 4897 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11846,7 +11846,7 @@ yyreduce:
     break;
 
   case 437:
-#line 4924 "Gmsh.y"
+#line 4918 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11869,49 +11869,49 @@ yyreduce:
     break;
 
   case 438:
-#line 4957 "Gmsh.y"
+#line 4951 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (3)].c), (yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 439:
-#line 4961 "Gmsh.y"
+#line 4955 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c), (yyvsp[(5) - (5)].c));
     ;}
     break;
 
   case 440:
-#line 4966 "Gmsh.y"
+#line 4960 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d));
     ;}
     break;
 
   case 441:
-#line 4970 "Gmsh.y"
+#line 4964 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d));
     ;}
     break;
 
   case 442:
-#line 4974 "Gmsh.y"
+#line 4968 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d));
     ;}
     break;
 
   case 443:
-#line 4978 "Gmsh.y"
+#line 4972 "Gmsh.y"
     {
       (yyval.d) = treat_Struct_FullName_dot_tSTRING_Float((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d));
     ;}
     break;
 
   case 444:
-#line 4983 "Gmsh.y"
+#line 4977 "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));
@@ -11919,7 +11919,7 @@ yyreduce:
     break;
 
   case 445:
-#line 4988 "Gmsh.y"
+#line 4982 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -11932,7 +11932,7 @@ yyreduce:
     break;
 
   case 446:
-#line 4998 "Gmsh.y"
+#line 4992 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -11945,7 +11945,7 @@ yyreduce:
     break;
 
   case 447:
-#line 5008 "Gmsh.y"
+#line 5002 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -11953,7 +11953,7 @@ yyreduce:
     break;
 
   case 448:
-#line 5013 "Gmsh.y"
+#line 5007 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -11967,7 +11967,7 @@ yyreduce:
     break;
 
   case 449:
-#line 5024 "Gmsh.y"
+#line 5018 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -11979,7 +11979,7 @@ yyreduce:
     break;
 
   case 450:
-#line 5033 "Gmsh.y"
+#line 5027 "Gmsh.y"
     {
       (yyval.d) = strlen((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -11987,7 +11987,7 @@ yyreduce:
     break;
 
   case 451:
-#line 5038 "Gmsh.y"
+#line 5032 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -11995,7 +11995,7 @@ yyreduce:
     break;
 
   case 452:
-#line 5043 "Gmsh.y"
+#line 5037 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -12022,27 +12022,27 @@ yyreduce:
     break;
 
   case 453:
-#line 5070 "Gmsh.y"
+#line 5064 "Gmsh.y"
     { (yyval.d) = 0.; ;}
     break;
 
   case 454:
-#line 5072 "Gmsh.y"
+#line 5066 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);;}
     break;
 
   case 455:
-#line 5077 "Gmsh.y"
+#line 5071 "Gmsh.y"
     { (yyval.c) = NULL; ;}
     break;
 
   case 456:
-#line 5079 "Gmsh.y"
+#line 5073 "Gmsh.y"
     { (yyval.c) = (yyvsp[(2) - (2)].c);;}
     break;
 
   case 457:
-#line 5084 "Gmsh.y"
+#line 5078 "Gmsh.y"
     {
       std::string struct_namespace((yyvsp[(2) - (3)].c2).char1? (yyvsp[(2) - (3)].c2).char1 : std::string("")),
         struct_name((yyvsp[(2) - (3)].c2).char2);
@@ -12052,7 +12052,7 @@ yyreduce:
     break;
 
   case 458:
-#line 5091 "Gmsh.y"
+#line 5085 "Gmsh.y"
     {
       std::string struct_namespace((yyvsp[(2) - (7)].c2).char1? (yyvsp[(2) - (7)].c2).char1 : std::string("")),
         struct_name((yyvsp[(2) - (7)].c2).char2);
@@ -12068,105 +12068,105 @@ yyreduce:
     break;
 
   case 459:
-#line 5107 "Gmsh.y"
+#line 5101 "Gmsh.y"
     { (yyval.c2).char1 = NULL; (yyval.c2).char2 = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 460:
-#line 5109 "Gmsh.y"
+#line 5103 "Gmsh.y"
     { (yyval.c2).char1 = (yyvsp[(1) - (3)].c); (yyval.c2).char2 = (yyvsp[(3) - (3)].c); ;}
     break;
 
   case 461:
-#line 5114 "Gmsh.y"
+#line 5108 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); flag_tSTRING_alloc = 1; ;}
     break;
 
   case 462:
-#line 5123 "Gmsh.y"
+#line 5117 "Gmsh.y"
     { (yyval.i) = 99; ;}
     break;
 
   case 463:
-#line 5125 "Gmsh.y"
+#line 5119 "Gmsh.y"
     { (yyval.i) = (int)(yyvsp[(2) - (2)].d); ;}
     break;
 
   case 464:
-#line 5130 "Gmsh.y"
+#line 5124 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 465:
-#line 5132 "Gmsh.y"
+#line 5126 "Gmsh.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); ;}
     break;
 
   case 466:
-#line 5138 "Gmsh.y"
+#line 5131 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 467:
-#line 5142 "Gmsh.y"
+#line 5135 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 468:
-#line 5146 "Gmsh.y"
+#line 5139 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 469:
-#line 5150 "Gmsh.y"
+#line 5143 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 470:
-#line 5154 "Gmsh.y"
+#line 5147 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 471:
-#line 5161 "Gmsh.y"
+#line 5154 "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 472:
-#line 5165 "Gmsh.y"
+#line 5158 "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 473:
-#line 5169 "Gmsh.y"
+#line 5162 "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 474:
-#line 5173 "Gmsh.y"
+#line 5166 "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 475:
-#line 5180 "Gmsh.y"
+#line 5173 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -12174,14 +12174,14 @@ yyreduce:
     break;
 
   case 476:
-#line 5185 "Gmsh.y"
+#line 5178 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 477:
-#line 5192 "Gmsh.y"
+#line 5185 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -12189,14 +12189,14 @@ yyreduce:
     break;
 
   case 478:
-#line 5197 "Gmsh.y"
+#line 5190 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 479:
-#line 5201 "Gmsh.y"
+#line 5194 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -12204,14 +12204,14 @@ yyreduce:
     break;
 
   case 480:
-#line 5206 "Gmsh.y"
+#line 5199 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 481:
-#line 5210 "Gmsh.y"
+#line 5203 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12222,7 +12222,7 @@ yyreduce:
     break;
 
   case 482:
-#line 5218 "Gmsh.y"
+#line 5211 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12233,14 +12233,14 @@ yyreduce:
     break;
 
   case 483:
-#line 5229 "Gmsh.y"
+#line 5222 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 484:
-#line 5233 "Gmsh.y"
+#line 5226 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -12252,7 +12252,7 @@ yyreduce:
     break;
 
   case 485:
-#line 5245 "Gmsh.y"
+#line 5238 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12263,7 +12263,7 @@ yyreduce:
     break;
 
   case 486:
-#line 5253 "Gmsh.y"
+#line 5246 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -12274,7 +12274,7 @@ yyreduce:
     break;
 
   case 487:
-#line 5261 "Gmsh.y"
+#line 5254 "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));
@@ -12284,7 +12284,7 @@ yyreduce:
     break;
 
   case 488:
-#line 5268 "Gmsh.y"
+#line 5261 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -12297,7 +12297,7 @@ yyreduce:
     break;
 
   case 489:
-#line 5278 "Gmsh.y"
+#line 5271 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 1, sizeof(double));
       int tag = (int)(yyvsp[(3) - (4)].d);
@@ -12323,7 +12323,7 @@ yyreduce:
     break;
 
   case 490:
-#line 5301 "Gmsh.y"
+#line 5294 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 10, sizeof(double));
       getAllElementaryTags((yyvsp[(1) - (2)].i), (yyval.l));
@@ -12332,7 +12332,7 @@ yyreduce:
     break;
 
   case 491:
-#line 5307 "Gmsh.y"
+#line 5300 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 10, sizeof(double));
       if(!(yyvsp[(3) - (3)].l)){
@@ -12346,7 +12346,7 @@ yyreduce:
     break;
 
   case 492:
-#line 5319 "Gmsh.y"
+#line 5312 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 10, sizeof(double));
       getElementaryTagsInBoundingBox((yyvsp[(1) - (16)].i), (yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d), (yyval.l));
@@ -12354,7 +12354,7 @@ yyreduce:
     break;
 
   case 493:
-#line 5324 "Gmsh.y"
+#line 5317 "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++){
@@ -12367,7 +12367,7 @@ yyreduce:
     break;
 
   case 494:
-#line 5334 "Gmsh.y"
+#line 5327 "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++){
@@ -12380,7 +12380,7 @@ yyreduce:
     break;
 
   case 495:
-#line 5344 "Gmsh.y"
+#line 5337 "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++){
@@ -12393,7 +12393,7 @@ yyreduce:
     break;
 
   case 496:
-#line 5354 "Gmsh.y"
+#line 5347 "Gmsh.y"
     {
       (yyval.l) = List_Create(20, 20, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -12408,21 +12408,21 @@ yyreduce:
     break;
 
   case 497:
-#line 5367 "Gmsh.y"
+#line 5360 "Gmsh.y"
     {
       (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfFloat(NULL, (yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c));
     ;}
     break;
 
   case 498:
-#line 5371 "Gmsh.y"
+#line 5364 "Gmsh.y"
     {
       (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfFloat((yyvsp[(1) - (7)].c), (yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c));
     ;}
     break;
 
   case 499:
-#line 5377 "Gmsh.y"
+#line 5370 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -12437,28 +12437,28 @@ yyreduce:
     break;
 
   case 500:
-#line 5389 "Gmsh.y"
+#line 5382 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 501:
-#line 5393 "Gmsh.y"
+#line 5386 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 502:
-#line 5397 "Gmsh.y"
+#line 5390 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 503:
-#line 5401 "Gmsh.y"
+#line 5394 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -12479,7 +12479,7 @@ yyreduce:
     break;
 
   case 504:
-#line 5419 "Gmsh.y"
+#line 5412 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -12490,7 +12490,7 @@ yyreduce:
     break;
 
   case 505:
-#line 5427 "Gmsh.y"
+#line 5420 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -12501,7 +12501,7 @@ yyreduce:
     break;
 
   case 506:
-#line 5435 "Gmsh.y"
+#line 5428 "Gmsh.y"
     {
       Msg::Barrier();
       FILE *File;
@@ -12533,7 +12533,7 @@ yyreduce:
     break;
 
   case 507:
-#line 5464 "Gmsh.y"
+#line 5457 "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);
@@ -12546,7 +12546,7 @@ yyreduce:
     break;
 
   case 508:
-#line 5474 "Gmsh.y"
+#line 5467 "Gmsh.y"
     {
       std::vector<double> tmp;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -12565,7 +12565,7 @@ yyreduce:
     break;
 
   case 509:
-#line 5490 "Gmsh.y"
+#line 5483 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
         double *d = (double*)List_Pointer((yyvsp[(3) - (4)].l), i);
@@ -12576,7 +12576,7 @@ yyreduce:
     break;
 
   case 510:
-#line 5501 "Gmsh.y"
+#line 5494 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -12584,21 +12584,21 @@ yyreduce:
     break;
 
   case 511:
-#line 5506 "Gmsh.y"
+#line 5499 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 512:
-#line 5510 "Gmsh.y"
+#line 5503 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 513:
-#line 5514 "Gmsh.y"
+#line 5507 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -12610,21 +12610,21 @@ yyreduce:
     break;
 
   case 514:
-#line 5526 "Gmsh.y"
+#line 5519 "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 515:
-#line 5530 "Gmsh.y"
+#line 5523 "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 516:
-#line 5542 "Gmsh.y"
+#line 5535 "Gmsh.y"
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
@@ -12644,7 +12644,7 @@ yyreduce:
     break;
 
   case 517:
-#line 5559 "Gmsh.y"
+#line 5552 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -12654,14 +12654,14 @@ yyreduce:
     break;
 
   case 518:
-#line 5569 "Gmsh.y"
+#line 5562 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 519:
-#line 5573 "Gmsh.y"
+#line 5566 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -12676,7 +12676,7 @@ yyreduce:
     break;
 
   case 520:
-#line 5588 "Gmsh.y"
+#line 5581 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -12684,21 +12684,21 @@ yyreduce:
     break;
 
   case 521:
-#line 5593 "Gmsh.y"
+#line 5586 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 522:
-#line 5600 "Gmsh.y"
+#line 5593 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 523:
-#line 5604 "Gmsh.y"
+#line 5597 "Gmsh.y"
     {
       // No need to extend to Struct_FullName (a Tag is not a String)
       (yyval.c) = treat_Struct_FullName_String(NULL, (yyvsp[(1) - (1)].c));
@@ -12706,7 +12706,7 @@ yyreduce:
     break;
 
   case 524:
-#line 5609 "Gmsh.y"
+#line 5602 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12723,7 +12723,7 @@ yyreduce:
     break;
 
   case 525:
-#line 5623 "Gmsh.y"
+#line 5616 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12740,35 +12740,35 @@ yyreduce:
     break;
 
   case 526:
-#line 5640 "Gmsh.y"
+#line 5633 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_dot_tSTRING_String(NULL, (yyvsp[(1) - (3)].c), (yyvsp[(3) - (3)].c));
     ;}
     break;
 
   case 527:
-#line 5644 "Gmsh.y"
+#line 5637 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c), (yyvsp[(5) - (5)].c));
     ;}
     break;
 
   case 528:
-#line 5649 "Gmsh.y"
+#line 5642 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_dot_tSTRING_String(NULL, (yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].c), (int)(yyvsp[(5) - (6)].d));
     ;}
     break;
 
   case 529:
-#line 5653 "Gmsh.y"
+#line 5646 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(1) - (8)].c), (yyvsp[(3) - (8)].c), (yyvsp[(5) - (8)].c), (int)(yyvsp[(7) - (8)].d));
     ;}
     break;
 
   case 530:
-#line 5658 "Gmsh.y"
+#line 5651 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -12779,7 +12779,7 @@ yyreduce:
     break;
 
   case 531:
-#line 5666 "Gmsh.y"
+#line 5659 "Gmsh.y"
     {
       std::string name = GModel::current()->getPhysicalName(0, (int)(yyvsp[(4) - (5)].d));
       (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char));
@@ -12788,7 +12788,7 @@ yyreduce:
     break;
 
   case 532:
-#line 5672 "Gmsh.y"
+#line 5665 "Gmsh.y"
     {
       std::string name = GModel::current()->getPhysicalName(1, (int)(yyvsp[(4) - (5)].d));
       (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char));
@@ -12797,7 +12797,7 @@ yyreduce:
     break;
 
   case 533:
-#line 5678 "Gmsh.y"
+#line 5671 "Gmsh.y"
     {
       std::string name = GModel::current()->getPhysicalName(2, (int)(yyvsp[(4) - (5)].d));
       (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char));
@@ -12806,7 +12806,7 @@ yyreduce:
     break;
 
   case 534:
-#line 5684 "Gmsh.y"
+#line 5677 "Gmsh.y"
     {
       std::string name = GModel::current()->getPhysicalName(3, (int)(yyvsp[(4) - (5)].d));
       (yyval.c) = (char*)Malloc((name.size() + 1) * sizeof(char));
@@ -12815,21 +12815,21 @@ yyreduce:
     break;
 
   case 535:
-#line 5693 "Gmsh.y"
+#line 5686 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 536:
-#line 5697 "Gmsh.y"
+#line 5690 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 537:
-#line 5701 "Gmsh.y"
+#line 5694 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -12840,7 +12840,7 @@ yyreduce:
     break;
 
   case 538:
-#line 5709 "Gmsh.y"
+#line 5702 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -12849,7 +12849,7 @@ yyreduce:
     break;
 
   case 539:
-#line 5715 "Gmsh.y"
+#line 5708 "Gmsh.y"
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -12858,14 +12858,14 @@ yyreduce:
     break;
 
   case 540:
-#line 5721 "Gmsh.y"
+#line 5714 "Gmsh.y"
     {
       (yyval.c) = strsave((char*)"Gmsh");
     ;}
     break;
 
   case 541:
-#line 5725 "Gmsh.y"
+#line 5718 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -12876,7 +12876,7 @@ yyreduce:
     break;
 
   case 542:
-#line 5733 "Gmsh.y"
+#line 5726 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12887,7 +12887,7 @@ yyreduce:
     break;
 
   case 543:
-#line 5741 "Gmsh.y"
+#line 5734 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12897,7 +12897,7 @@ yyreduce:
     break;
 
   case 544:
-#line 5748 "Gmsh.y"
+#line 5741 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12908,21 +12908,21 @@ yyreduce:
     break;
 
   case 545:
-#line 5758 "Gmsh.y"
+#line 5751 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_String(NULL, (yyvsp[(3) - (5)].c2).char2, 1, 0, (yyvsp[(4) - (5)].c), 2);
     ;}
     break;
 
   case 546:
-#line 5763 "Gmsh.y"
+#line 5756 "Gmsh.y"
     {
       (yyval.c) = treat_Struct_FullName_dot_tSTRING_String((yyvsp[(3) - (7)].c2).char1, (yyvsp[(3) - (7)].c2).char2, (yyvsp[(5) - (7)].c), 0, (yyvsp[(6) - (7)].c), 2);
     ;}
     break;
 
   case 547:
-#line 5768 "Gmsh.y"
+#line 5761 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -12940,7 +12940,7 @@ yyreduce:
     break;
 
   case 548:
-#line 5783 "Gmsh.y"
+#line 5776 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -12957,7 +12957,7 @@ yyreduce:
     break;
 
   case 549:
-#line 5797 "Gmsh.y"
+#line 5790 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -12974,7 +12974,7 @@ yyreduce:
     break;
 
   case 550:
-#line 5811 "Gmsh.y"
+#line 5804 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -12989,7 +12989,7 @@ yyreduce:
     break;
 
   case 551:
-#line 5823 "Gmsh.y"
+#line 5816 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -13008,7 +13008,7 @@ yyreduce:
     break;
 
   case 552:
-#line 5839 "Gmsh.y"
+#line 5832 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13020,7 +13020,7 @@ yyreduce:
     break;
 
   case 553:
-#line 5848 "Gmsh.y"
+#line 5841 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13032,7 +13032,7 @@ yyreduce:
     break;
 
   case 554:
-#line 5857 "Gmsh.y"
+#line 5850 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -13045,7 +13045,7 @@ yyreduce:
     break;
 
   case 555:
-#line 5867 "Gmsh.y"
+#line 5860 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -13059,7 +13059,7 @@ yyreduce:
     break;
 
   case 556:
-#line 5878 "Gmsh.y"
+#line 5871 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (8)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (8)].d), (int)(yyvsp[(7) - (8)].d));
@@ -13070,7 +13070,7 @@ yyreduce:
     break;
 
   case 557:
-#line 5886 "Gmsh.y"
+#line 5879 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (6)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (6)].d), std::string::npos);
@@ -13081,14 +13081,14 @@ yyreduce:
     break;
 
   case 558:
-#line 5894 "Gmsh.y"
+#line 5887 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 559:
-#line 5898 "Gmsh.y"
+#line 5891 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = printListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -13110,7 +13110,7 @@ yyreduce:
     break;
 
   case 560:
-#line 5917 "Gmsh.y"
+#line 5910 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13120,7 +13120,7 @@ yyreduce:
     break;
 
   case 561:
-#line 5924 "Gmsh.y"
+#line 5917 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13129,7 +13129,7 @@ yyreduce:
     break;
 
   case 562:
-#line 5930 "Gmsh.y"
+#line 5923 "Gmsh.y"
     {
       std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13139,7 +13139,7 @@ yyreduce:
     break;
 
   case 563:
-#line 5937 "Gmsh.y"
+#line 5930 "Gmsh.y"
     {
       std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -13149,12 +13149,12 @@ yyreduce:
     break;
 
   case 564:
-#line 5944 "Gmsh.y"
+#line 5937 "Gmsh.y"
     { init_options(); ;}
     break;
 
   case 565:
-#line 5946 "Gmsh.y"
+#line 5939 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -13165,7 +13165,7 @@ yyreduce:
     break;
 
   case 566:
-#line 5954 "Gmsh.y"
+#line 5947 "Gmsh.y"
     {
       std::string out;
       const std::string * key_struct = NULL;
@@ -13189,37 +13189,37 @@ yyreduce:
     break;
 
   case 567:
-#line 5978 "Gmsh.y"
+#line 5971 "Gmsh.y"
     { struct_namespace = std::string(""); (yyval.d) = (yyvsp[(2) - (2)].d); ;}
     break;
 
   case 568:
-#line 5980 "Gmsh.y"
+#line 5973 "Gmsh.y"
     { struct_namespace = (yyvsp[(1) - (4)].c); Free((yyvsp[(1) - (4)].c)); (yyval.d) = (yyvsp[(4) - (4)].d); ;}
     break;
 
   case 569:
-#line 5986 "Gmsh.y"
+#line 5979 "Gmsh.y"
     { (yyval.l) = (yyvsp[(3) - (4)].l); ;}
     break;
 
   case 570:
-#line 5991 "Gmsh.y"
+#line 5984 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 571:
-#line 5993 "Gmsh.y"
+#line 5986 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 572:
-#line 5998 "Gmsh.y"
+#line 5991 "Gmsh.y"
     { (yyval.l) = (yyvsp[(2) - (3)].l); ;}
     break;
 
   case 573:
-#line 6003 "Gmsh.y"
+#line 5996 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -13227,19 +13227,19 @@ yyreduce:
     break;
 
   case 574:
-#line 6008 "Gmsh.y"
+#line 6001 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 575:
-#line 6010 "Gmsh.y"
+#line 6003 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].c)));
     ;}
     break;
 
   case 576:
-#line 6014 "Gmsh.y"
+#line 6007 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	char* c;
@@ -13251,7 +13251,7 @@ yyreduce:
     break;
 
   case 577:
-#line 6026 "Gmsh.y"
+#line 6019 "Gmsh.y"
     {
       (yyval.l) = List_Create(20, 20, sizeof(char *));
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (3)].c)))
@@ -13268,21 +13268,21 @@ yyreduce:
     break;
 
   case 578:
-#line 6041 "Gmsh.y"
+#line 6033 "Gmsh.y"
     {
       (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfString(NULL, (yyvsp[(1) - (5)].c), (yyvsp[(3) - (5)].c));
     ;}
     break;
 
   case 579:
-#line 6046 "Gmsh.y"
+#line 6037 "Gmsh.y"
     {
       (yyval.l) = treat_Struct_FullName_dot_tSTRING_ListOfString((yyvsp[(1) - (7)].c), (yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].c));
     ;}
     break;
 
   case 580:
-#line 6055 "Gmsh.y"
+#line 6044 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -13293,7 +13293,7 @@ yyreduce:
     break;
 
   case 581:
-#line 6064 "Gmsh.y"
+#line 6052 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -13304,7 +13304,7 @@ yyreduce:
     break;
 
   case 582:
-#line 6073 "Gmsh.y"
+#line 6060 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(7) - (8)].d));
@@ -13315,17 +13315,17 @@ yyreduce:
     break;
 
   case 583:
-#line 6085 "Gmsh.y"
+#line 6071 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 584:
-#line 6088 "Gmsh.y"
+#line 6073 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 585:
-#line 6092 "Gmsh.y"
+#line 6076 "Gmsh.y"
     { (yyval.c) = (yyvsp[(3) - (4)].c); ;}
     break;
 
@@ -13545,7 +13545,7 @@ yyreturn:
 }
 
 
-#line 6095 "Gmsh.y"
+#line 6079 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index e49c131db6..3de33fdf53 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -2144,7 +2144,6 @@ Shape :
       $$.Type = MSH_VOLUME;
       $$.Num = num;
     }
-
   | tCompound GeoEntity123 '(' FExpr ')' tAFFECT ListOfDouble tEND
     {
       int num = (int)$4;
@@ -2204,7 +2203,6 @@ Shape :
         yymsg(0, "GeoEntity dim out of range [2,2]");
       }
     }
-
   | tPhysical GeoEntity
     {
       dim_entity = $2;
@@ -2234,7 +2232,6 @@ Shape :
     }
 ;
 
-
 GeoEntity :
     tPoint
     { $$ = 0; }
@@ -2291,7 +2288,6 @@ GeoEntity02 :
     }
 ;
 
-
 //  T R A N S F O R M
 
 Transform :
@@ -3581,7 +3577,6 @@ Loop :
     }
 ;
 
-
 //  E X T R U D E
 
 Extrude :
@@ -4617,7 +4612,6 @@ Constraints :
     }
 ;
 
-
 //  C O H E R E N C E
 
 Coherence :
@@ -5132,7 +5126,6 @@ AppendOrNot :
     { $$ = $2; }
   ;
 
-
 VExpr :
     VExpr_Single
     {
@@ -6036,21 +6029,17 @@ MultiStringExprVar :
       }
       Free($1);
     }
-
   | String__Index '.' tSTRING_Member '(' ')'
     {
       $$ = treat_Struct_FullName_dot_tSTRING_ListOfString(NULL, $1, $3);
     }
-
   | String__Index tSCOPE String__Index '.' tSTRING_Member '(' ')'
     {
       $$ = treat_Struct_FullName_dot_tSTRING_ListOfString($1, $3, $5);
     }
 ;
 
-
 StringIndex :
-
     tSTRING '~' '{' FExpr '}'
     {
       char tmpstr[256];
@@ -6059,7 +6048,6 @@ StringIndex :
       strcpy($$, $1); strcat($$, tmpstr);
       Free($1);
     }
-
   | StringIndex '~' '{' FExpr '}'
     {
       char tmpstr[256];
@@ -6068,7 +6056,6 @@ StringIndex :
       strcpy($$, $1) ; strcat($$, tmpstr) ;
       Free($1);
     }
-
   | tStringToName '[' StringExprVar ']' '~' '{' FExpr '}'
     {
       char tmpstr[256];
@@ -6080,13 +6067,10 @@ StringIndex :
  ;
 
 String__Index :
-
     tSTRING
     { $$ = $1; }
-
   | StringIndex
     { $$ = $1; }
-
   // Create a name from any string
   | tStringToName '[' StringExprVar ']'
     { $$ = $3; }
diff --git a/README.txt b/README.txt
index 8f5d1f237b..c6d9c7710a 100644
--- a/README.txt
+++ b/README.txt
@@ -72,12 +72,11 @@ Build Gmsh from the command line
     cd lib
     cmake -DDEFAULT=0 -DENABLE_BUILD_LIB=1 -DENABLE_POST=1 -DENABLE_PARSER=1 ..
     make lib
-    make shared
     make install/fast
 
-  (Note that "make install/fast" allows you to install only the targets that you
-  just built--i.e. "lib" and "shared", and will not trigger the recompilation of
-  the default target "gmsh".)
+  (Note that "make install/fast" allows you to install only the target that you
+  just built, i.e. "lib", and will not trigger the recompilation of the default
+  target "gmsh".)
 
 * To see a detailed compilation log use
 
-- 
GitLab