diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index d6e51979133181b3f7bd21b729251b8a75c43471..ddeb8632c9f3aa6a0e9d8bdd17ac2813849ef08c 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -980,36 +980,36 @@ static const yytype_uint16 yyrline[] =
      284,   285,   286,   287,   288,   292,   294,   299,   301,   307,
      453,   306,   471,   478,   489,   488,   507,   514,   525,   524,
      542,   557,   577,   576,   590,   591,   592,   593,   594,   598,
-     599,   606,   628,   655,   695,   704,   712,   720,   732,   741,
-     746,   754,   772,   790,   799,   811,   816,   824,   844,   867,
-     874,   880,   900,   921,   947,   959,   976,   980,   990,   993,
-    1011,  1034,  1050,  1072,  1090,  1108,  1126,  1152,  1170,  1196,
-    1216,  1234,  1252,  1278,  1295,  1314,  1332,  1371,  1377,  1383,
-    1390,  1415,  1440,  1456,  1476,  1494,  1511,  1532,  1537,  1542,
-    1547,  1552,  1563,  1569,  1577,  1586,  1587,  1592,  1595,  1599,
-    1622,  1645,  1668,  1696,  1705,  1709,  1724,  1745,  1762,  1776,
-    1782,  1788,  1797,  1811,  1859,  1877,  1892,  1911,  1923,  1947,
-    1951,  1956,  1961,  1973,  1990,  2007,  2026,  2045,  2073,  2081,
-    2087,  2094,  2098,  2107,  2115,  2123,  2132,  2131,  2144,  2143,
-    2156,  2155,  2168,  2167,  2180,  2187,  2194,  2201,  2208,  2215,
-    2222,  2229,  2236,  2244,  2243,  2255,  2254,  2266,  2265,  2277,
-    2276,  2288,  2287,  2299,  2298,  2310,  2309,  2321,  2320,  2332,
-    2331,  2346,  2349,  2355,  2364,  2384,  2407,  2411,  2435,  2453,
-    2471,  2489,  2518,  2553,  2558,  2585,  2599,  2612,  2629,  2635,
-    2641,  2644,  2653,  2657,  2673,  2674,  2675,  2676,  2677,  2678,
-    2679,  2680,  2681,  2688,  2689,  2690,  2691,  2692,  2693,  2694,
-    2695,  2696,  2697,  2698,  2699,  2700,  2701,  2702,  2703,  2704,
-    2705,  2706,  2707,  2708,  2709,  2710,  2711,  2712,  2713,  2714,
-    2715,  2716,  2717,  2718,  2719,  2721,  2722,  2723,  2724,  2725,
-    2726,  2727,  2728,  2729,  2730,  2731,  2732,  2733,  2734,  2735,
-    2736,  2737,  2738,  2739,  2740,  2741,  2750,  2751,  2752,  2753,
-    2754,  2755,  2756,  2760,  2773,  2785,  2800,  2810,  2820,  2838,
-    2843,  2848,  2858,  2868,  2876,  2880,  2884,  2888,  2892,  2899,
-    2903,  2907,  2911,  2918,  2923,  2930,  2935,  2939,  2944,  2948,
-    2956,  2967,  2975,  2983,  2989,  3000,  3020,  3030,  3040,  3050,
-    3070,  3075,  3079,  3083,  3095,  3099,  3111,  3118,  3128,  3132,
-    3147,  3152,  3159,  3163,  3176,  3184,  3195,  3199,  3207,  3215,
-    3229,  3243,  3247
+     599,   606,   628,   655,   695,   705,   713,   721,   733,   742,
+     747,   755,   773,   791,   800,   812,   817,   825,   845,   868,
+     875,   881,   901,   922,   948,   960,   977,   981,   991,   994,
+    1012,  1035,  1051,  1073,  1091,  1109,  1127,  1153,  1171,  1197,
+    1217,  1235,  1253,  1279,  1296,  1315,  1333,  1372,  1378,  1384,
+    1391,  1416,  1441,  1457,  1477,  1495,  1512,  1533,  1538,  1543,
+    1548,  1553,  1564,  1570,  1578,  1587,  1588,  1593,  1596,  1600,
+    1623,  1646,  1669,  1697,  1706,  1710,  1725,  1746,  1763,  1777,
+    1783,  1789,  1798,  1812,  1860,  1878,  1893,  1912,  1924,  1948,
+    1952,  1957,  1962,  1974,  1991,  2008,  2027,  2046,  2074,  2082,
+    2088,  2095,  2099,  2108,  2116,  2124,  2133,  2132,  2145,  2144,
+    2157,  2156,  2169,  2168,  2181,  2188,  2195,  2202,  2209,  2216,
+    2223,  2230,  2237,  2245,  2244,  2256,  2255,  2267,  2266,  2278,
+    2277,  2289,  2288,  2300,  2299,  2311,  2310,  2322,  2321,  2333,
+    2332,  2347,  2350,  2356,  2365,  2385,  2408,  2412,  2436,  2454,
+    2472,  2490,  2519,  2554,  2559,  2586,  2600,  2613,  2630,  2636,
+    2642,  2645,  2654,  2658,  2674,  2675,  2676,  2677,  2678,  2679,
+    2680,  2681,  2682,  2689,  2690,  2691,  2692,  2693,  2694,  2695,
+    2696,  2697,  2698,  2699,  2700,  2701,  2702,  2703,  2704,  2705,
+    2706,  2707,  2708,  2709,  2710,  2711,  2712,  2713,  2714,  2715,
+    2716,  2717,  2718,  2719,  2720,  2722,  2723,  2724,  2725,  2726,
+    2727,  2728,  2729,  2730,  2731,  2732,  2733,  2734,  2735,  2736,
+    2737,  2738,  2739,  2740,  2741,  2742,  2751,  2752,  2753,  2754,
+    2755,  2756,  2757,  2761,  2774,  2786,  2801,  2811,  2821,  2839,
+    2844,  2849,  2859,  2869,  2877,  2881,  2885,  2889,  2893,  2900,
+    2904,  2908,  2912,  2919,  2924,  2931,  2936,  2940,  2945,  2949,
+    2957,  2968,  2976,  2984,  2990,  3001,  3021,  3031,  3041,  3051,
+    3071,  3076,  3080,  3084,  3096,  3100,  3112,  3119,  3129,  3133,
+    3148,  3153,  3160,  3164,  3177,  3185,  3196,  3200,  3208,  3216,
+    3230,  3244,  3248
 };
 #endif
 
@@ -4355,15 +4355,16 @@ yyreduce:
     {
       if(gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
 	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].clear();
+      gmsh_yysymbols[(yyvsp[(1) - (6)].c)] = std::vector<double>();
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
-	gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
+        gmsh_yysymbols[(yyvsp[(1) - (6)].c)].push_back(*(double*)List_Pointer((yyvsp[(5) - (6)].l), i));
       Free((yyvsp[(1) - (6)].c));
       List_Delete((yyvsp[(5) - (6)].l));
     ;}
     break;
 
   case 65:
-#line 705 "Gmsh.y"
+#line 706 "Gmsh.y"
     {
       // appends to the list
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++)
@@ -4374,7 +4375,7 @@ yyreduce:
     break;
 
   case 66:
-#line 713 "Gmsh.y"
+#line 714 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c)); 
@@ -4385,7 +4386,7 @@ yyreduce:
     break;
 
   case 67:
-#line 721 "Gmsh.y"
+#line 722 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c)); 
@@ -4400,7 +4401,7 @@ yyreduce:
     break;
 
   case 68:
-#line 733 "Gmsh.y"
+#line 734 "Gmsh.y"
     { 
       gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
       Free((yyvsp[(1) - (4)].c));
@@ -4409,7 +4410,7 @@ yyreduce:
     break;
 
   case 69:
-#line 742 "Gmsh.y"
+#line 743 "Gmsh.y"
     { 
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
@@ -4417,7 +4418,7 @@ yyreduce:
     break;
 
   case 70:
-#line 747 "Gmsh.y"
+#line 748 "Gmsh.y"
     { 
       StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), (yyvsp[(8) - (9)].c));
       Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
@@ -4425,7 +4426,7 @@ yyreduce:
     break;
 
   case 71:
-#line 755 "Gmsh.y"
+#line 756 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
@@ -4446,7 +4447,7 @@ yyreduce:
     break;
 
   case 72:
-#line 773 "Gmsh.y"
+#line 774 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
@@ -4467,7 +4468,7 @@ yyreduce:
     break;
 
   case 73:
-#line 791 "Gmsh.y"
+#line 792 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
@@ -4479,7 +4480,7 @@ yyreduce:
     break;
 
   case 74:
-#line 800 "Gmsh.y"
+#line 801 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
@@ -4491,7 +4492,7 @@ yyreduce:
     break;
 
   case 75:
-#line 812 "Gmsh.y"
+#line 813 "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));
@@ -4499,7 +4500,7 @@ yyreduce:
     break;
 
   case 76:
-#line 817 "Gmsh.y"
+#line 818 "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));
@@ -4507,7 +4508,7 @@ yyreduce:
     break;
 
   case 77:
-#line 825 "Gmsh.y"
+#line 826 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable(0);
       if(!ct)
@@ -4530,7 +4531,7 @@ yyreduce:
     break;
 
   case 78:
-#line 845 "Gmsh.y"
+#line 846 "Gmsh.y"
     {
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (9)].d));
       if(!ct)
@@ -4553,7 +4554,7 @@ yyreduce:
     break;
 
   case 79:
-#line 868 "Gmsh.y"
+#line 869 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
 	GModel::current()->getFields()->background_field = (int)(yyvsp[(4) - (5)].d);
@@ -4563,7 +4564,7 @@ yyreduce:
     break;
 
   case 80:
-#line 875 "Gmsh.y"
+#line 876 "Gmsh.y"
     {
       if(!GModel::current()->getFields()->new_field((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
 	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
@@ -4572,7 +4573,7 @@ yyreduce:
     break;
 
   case 81:
-#line 881 "Gmsh.y"
+#line 882 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4595,7 +4596,7 @@ yyreduce:
     break;
 
   case 82:
-#line 901 "Gmsh.y"
+#line 902 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
       if(field){
@@ -4619,7 +4620,7 @@ yyreduce:
     break;
 
   case 83:
-#line 922 "Gmsh.y"
+#line 923 "Gmsh.y"
     {
       Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
       if(field){
@@ -4645,7 +4646,7 @@ yyreduce:
     break;
 
   case 84:
-#line 948 "Gmsh.y"
+#line 949 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4660,7 +4661,7 @@ yyreduce:
     break;
 
   case 85:
-#line 960 "Gmsh.y"
+#line 961 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       try {
@@ -4675,14 +4676,14 @@ yyreduce:
     break;
 
   case 86:
-#line 977 "Gmsh.y"
+#line 978 "Gmsh.y"
     { 
       (yyval.i) = (int)(yyvsp[(1) - (1)].d); 
     ;}
     break;
 
   case 87:
-#line 981 "Gmsh.y"
+#line 982 "Gmsh.y"
     { 
       (yyval.i) = GModel::current()->setPhysicalName
 	(std::string((yyvsp[(1) - (1)].c)), ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
@@ -4691,14 +4692,14 @@ yyreduce:
     break;
 
   case 88:
-#line 990 "Gmsh.y"
+#line 991 "Gmsh.y"
     {
       (yyval.l) = 0;
     ;}
     break;
 
   case 89:
-#line 994 "Gmsh.y"
+#line 995 "Gmsh.y"
     {
       (yyval.l) = List_Create(4, 4, sizeof(double));
       Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
@@ -4713,7 +4714,7 @@ yyreduce:
     break;
 
   case 90:
-#line 1012 "Gmsh.y"
+#line 1013 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindPoint(num)){
@@ -4739,7 +4740,7 @@ yyreduce:
     break;
 
   case 91:
-#line 1035 "Gmsh.y"
+#line 1036 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
@@ -4758,7 +4759,7 @@ yyreduce:
     break;
 
   case 92:
-#line 1051 "Gmsh.y"
+#line 1052 "Gmsh.y"
     {      
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -4780,7 +4781,7 @@ yyreduce:
     break;
 
   case 93:
-#line 1073 "Gmsh.y"
+#line 1074 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4801,7 +4802,7 @@ yyreduce:
     break;
 
   case 94:
-#line 1091 "Gmsh.y"
+#line 1092 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4822,7 +4823,7 @@ yyreduce:
     break;
 
   case 95:
-#line 1109 "Gmsh.y"
+#line 1110 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4843,7 +4844,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1127 "Gmsh.y"
+#line 1128 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4872,7 +4873,7 @@ yyreduce:
     break;
 
   case 97:
-#line 1153 "Gmsh.y"
+#line 1154 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4893,7 +4894,7 @@ yyreduce:
     break;
 
   case 98:
-#line 1171 "Gmsh.y"
+#line 1172 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindCurve(num)){
@@ -4922,7 +4923,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1198 "Gmsh.y"
+#line 1199 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (17)].d);
       if(FindCurve(num)){
@@ -4944,7 +4945,7 @@ yyreduce:
     break;
 
   case 100:
-#line 1217 "Gmsh.y"
+#line 1218 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4965,7 +4966,7 @@ yyreduce:
     break;
 
   case 101:
-#line 1235 "Gmsh.y"
+#line 1236 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -4986,7 +4987,7 @@ yyreduce:
     break;
 
   case 102:
-#line 1253 "Gmsh.y"
+#line 1254 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -5015,7 +5016,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1279 "Gmsh.y"
+#line 1280 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -5035,7 +5036,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1296 "Gmsh.y"
+#line 1297 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
@@ -5054,7 +5055,7 @@ yyreduce:
     break;
 
   case 105:
-#line 1315 "Gmsh.y"
+#line 1316 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -5075,7 +5076,7 @@ yyreduce:
     break;
 
   case 106:
-#line 1333 "Gmsh.y"
+#line 1334 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -5117,7 +5118,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1372 "Gmsh.y"
+#line 1373 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -5126,7 +5127,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1378 "Gmsh.y"
+#line 1379 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -5135,7 +5136,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1384 "Gmsh.y"
+#line 1385 "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));
@@ -5145,7 +5146,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1391 "Gmsh.y"
+#line 1392 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5173,7 +5174,7 @@ yyreduce:
     break;
 
   case 111:
-#line 1416 "Gmsh.y"
+#line 1417 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -5201,7 +5202,7 @@ yyreduce:
     break;
 
   case 112:
-#line 1441 "Gmsh.y"
+#line 1442 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -5220,7 +5221,7 @@ yyreduce:
     break;
 
   case 113:
-#line 1457 "Gmsh.y"
+#line 1458 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -5239,7 +5240,7 @@ yyreduce:
     break;
 
   case 114:
-#line 1477 "Gmsh.y"
+#line 1478 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -5260,7 +5261,7 @@ yyreduce:
     break;
 
   case 115:
-#line 1495 "Gmsh.y"
+#line 1496 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -5280,7 +5281,7 @@ yyreduce:
     break;
 
   case 116:
-#line 1512 "Gmsh.y"
+#line 1513 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -5299,7 +5300,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1533 "Gmsh.y"
+#line 1534 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5307,7 +5308,7 @@ yyreduce:
     break;
 
   case 118:
-#line 1538 "Gmsh.y"
+#line 1539 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -5315,7 +5316,7 @@ yyreduce:
     break;
 
   case 119:
-#line 1543 "Gmsh.y"
+#line 1544 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -5323,7 +5324,7 @@ yyreduce:
     break;
 
   case 120:
-#line 1548 "Gmsh.y"
+#line 1549 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -5331,7 +5332,7 @@ yyreduce:
     break;
 
   case 121:
-#line 1553 "Gmsh.y"
+#line 1554 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -5345,7 +5346,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1564 "Gmsh.y"
+#line 1565 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -5354,7 +5355,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1570 "Gmsh.y"
+#line 1571 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp=ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -5365,7 +5366,7 @@ yyreduce:
     break;
 
   case 124:
-#line 1578 "Gmsh.y"
+#line 1579 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       BoundaryShapes((yyvsp[(3) - (4)].l), (yyval.l));
@@ -5374,31 +5375,31 @@ yyreduce:
     break;
 
   case 125:
-#line 1586 "Gmsh.y"
+#line 1587 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 126:
-#line 1587 "Gmsh.y"
+#line 1588 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 127:
-#line 1592 "Gmsh.y"
+#line 1593 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 128:
-#line 1596 "Gmsh.y"
+#line 1597 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 129:
-#line 1600 "Gmsh.y"
+#line 1601 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5424,7 +5425,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1623 "Gmsh.y"
+#line 1624 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5450,7 +5451,7 @@ yyreduce:
     break;
 
   case 131:
-#line 1646 "Gmsh.y"
+#line 1647 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5476,7 +5477,7 @@ yyreduce:
     break;
 
   case 132:
-#line 1669 "Gmsh.y"
+#line 1670 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -5502,7 +5503,7 @@ yyreduce:
     break;
 
   case 133:
-#line 1697 "Gmsh.y"
+#line 1698 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5514,14 +5515,14 @@ yyreduce:
     break;
 
   case 134:
-#line 1706 "Gmsh.y"
+#line 1707 "Gmsh.y"
     {
       GModel::current()->getFields()->delete_field((int)(yyvsp[(4) - (6)].d));
     ;}
     break;
 
   case 135:
-#line 1710 "Gmsh.y"
+#line 1711 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -5539,7 +5540,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1725 "Gmsh.y"
+#line 1726 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Model") || !strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
 	GModel::current()->destroy();
@@ -5563,7 +5564,7 @@ yyreduce:
     break;
 
   case 137:
-#line 1746 "Gmsh.y"
+#line 1747 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -5578,7 +5579,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1763 "Gmsh.y"
+#line 1764 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -5590,7 +5591,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1777 "Gmsh.y"
+#line 1778 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -5599,7 +5600,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1783 "Gmsh.y"
+#line 1784 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -5608,7 +5609,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1789 "Gmsh.y"
+#line 1790 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5620,7 +5621,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1798 "Gmsh.y"
+#line 1799 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -5632,7 +5633,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1812 "Gmsh.y"
+#line 1813 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -5683,7 +5684,7 @@ yyreduce:
     break;
 
   case 144:
-#line 1860 "Gmsh.y"
+#line 1861 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -5704,7 +5705,7 @@ yyreduce:
     break;
 
   case 145:
-#line 1878 "Gmsh.y"
+#line 1879 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -5722,7 +5723,7 @@ yyreduce:
     break;
 
   case 146:
-#line 1893 "Gmsh.y"
+#line 1894 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -5744,7 +5745,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1912 "Gmsh.y"
+#line 1913 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
        try {
@@ -5759,7 +5760,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1924 "Gmsh.y"
+#line 1925 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -5786,14 +5787,14 @@ yyreduce:
     break;
 
   case 149:
-#line 1948 "Gmsh.y"
+#line 1949 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 150:
-#line 1952 "Gmsh.y"
+#line 1953 "Gmsh.y"
     {
       CTX.forced_bbox = 0;
       SetBoundingBox();
@@ -5801,7 +5802,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1957 "Gmsh.y"
+#line 1958 "Gmsh.y"
     {
       CTX.forced_bbox = 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));
@@ -5809,7 +5810,7 @@ yyreduce:
     break;
 
   case 152:
-#line 1962 "Gmsh.y"
+#line 1963 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -5818,7 +5819,7 @@ yyreduce:
     break;
 
   case 153:
-#line 1974 "Gmsh.y"
+#line 1975 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -5838,7 +5839,7 @@ yyreduce:
     break;
 
   case 154:
-#line 1991 "Gmsh.y"
+#line 1992 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -5858,7 +5859,7 @@ yyreduce:
     break;
 
   case 155:
-#line 2008 "Gmsh.y"
+#line 2009 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -5880,7 +5881,7 @@ yyreduce:
     break;
 
   case 156:
-#line 2027 "Gmsh.y"
+#line 2028 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -5902,7 +5903,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2046 "Gmsh.y"
+#line 2047 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -5933,7 +5934,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2074 "Gmsh.y"
+#line 2075 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname,
 						      gmsh_yylineno))
@@ -5944,7 +5945,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2082 "Gmsh.y"
+#line 2083 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction(&gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -5953,7 +5954,7 @@ yyreduce:
     break;
 
   case 160:
-#line 2088 "Gmsh.y"
+#line 2089 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -5963,20 +5964,20 @@ yyreduce:
     break;
 
   case 161:
-#line 2095 "Gmsh.y"
+#line 2096 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 162:
-#line 2099 "Gmsh.y"
+#line 2100 "Gmsh.y"
     {
     ;}
     break;
 
   case 163:
-#line 2108 "Gmsh.y"
+#line 2109 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -5987,7 +5988,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2116 "Gmsh.y"
+#line 2117 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -5998,7 +5999,7 @@ yyreduce:
     break;
 
   case 165:
-#line 2124 "Gmsh.y"
+#line 2125 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6009,14 +6010,14 @@ yyreduce:
     break;
 
   case 166:
-#line 2132 "Gmsh.y"
+#line 2133 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 167:
-#line 2136 "Gmsh.y"
+#line 2137 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6027,14 +6028,14 @@ yyreduce:
     break;
 
   case 168:
-#line 2144 "Gmsh.y"
+#line 2145 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 169:
-#line 2148 "Gmsh.y"
+#line 2149 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6045,14 +6046,14 @@ yyreduce:
     break;
 
   case 170:
-#line 2156 "Gmsh.y"
+#line 2157 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 171:
-#line 2160 "Gmsh.y"
+#line 2161 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6063,14 +6064,14 @@ yyreduce:
     break;
 
   case 172:
-#line 2168 "Gmsh.y"
+#line 2169 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 173:
-#line 2172 "Gmsh.y"
+#line 2173 "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.,
@@ -6080,7 +6081,7 @@ yyreduce:
     break;
 
   case 174:
-#line 2181 "Gmsh.y"
+#line 2182 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6090,7 +6091,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2188 "Gmsh.y"
+#line 2189 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6100,7 +6101,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2195 "Gmsh.y"
+#line 2196 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6110,7 +6111,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2202 "Gmsh.y"
+#line 2203 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6120,7 +6121,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2209 "Gmsh.y"
+#line 2210 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6130,7 +6131,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2216 "Gmsh.y"
+#line 2217 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6140,7 +6141,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2223 "Gmsh.y"
+#line 2224 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6150,7 +6151,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2230 "Gmsh.y"
+#line 2231 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6160,7 +6161,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2237 "Gmsh.y"
+#line 2238 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6170,14 +6171,14 @@ yyreduce:
     break;
 
   case 183:
-#line 2244 "Gmsh.y"
+#line 2245 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 184:
-#line 2248 "Gmsh.y"
+#line 2249 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6187,14 +6188,14 @@ yyreduce:
     break;
 
   case 185:
-#line 2255 "Gmsh.y"
+#line 2256 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 186:
-#line 2259 "Gmsh.y"
+#line 2260 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6204,14 +6205,14 @@ yyreduce:
     break;
 
   case 187:
-#line 2266 "Gmsh.y"
+#line 2267 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 188:
-#line 2270 "Gmsh.y"
+#line 2271 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6221,14 +6222,14 @@ yyreduce:
     break;
 
   case 189:
-#line 2277 "Gmsh.y"
+#line 2278 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 190:
-#line 2281 "Gmsh.y"
+#line 2282 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6238,14 +6239,14 @@ yyreduce:
     break;
 
   case 191:
-#line 2288 "Gmsh.y"
+#line 2289 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 192:
-#line 2292 "Gmsh.y"
+#line 2293 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6255,14 +6256,14 @@ yyreduce:
     break;
 
   case 193:
-#line 2299 "Gmsh.y"
+#line 2300 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 194:
-#line 2303 "Gmsh.y"
+#line 2304 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6272,14 +6273,14 @@ yyreduce:
     break;
 
   case 195:
-#line 2310 "Gmsh.y"
+#line 2311 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 196:
-#line 2314 "Gmsh.y"
+#line 2315 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6289,14 +6290,14 @@ yyreduce:
     break;
 
   case 197:
-#line 2321 "Gmsh.y"
+#line 2322 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 198:
-#line 2325 "Gmsh.y"
+#line 2326 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6306,14 +6307,14 @@ yyreduce:
     break;
 
   case 199:
-#line 2332 "Gmsh.y"
+#line 2333 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 200:
-#line 2336 "Gmsh.y"
+#line 2337 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6323,19 +6324,19 @@ yyreduce:
     break;
 
   case 201:
-#line 2347 "Gmsh.y"
+#line 2348 "Gmsh.y"
     {
     ;}
     break;
 
   case 202:
-#line 2350 "Gmsh.y"
+#line 2351 "Gmsh.y"
     {
     ;}
     break;
 
   case 203:
-#line 2356 "Gmsh.y"
+#line 2357 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6347,7 +6348,7 @@ yyreduce:
     break;
 
   case 204:
-#line 2365 "Gmsh.y"
+#line 2366 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -6370,7 +6371,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2385 "Gmsh.y"
+#line 2386 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -6396,14 +6397,14 @@ yyreduce:
     break;
 
   case 206:
-#line 2408 "Gmsh.y"
+#line 2409 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 207:
-#line 2412 "Gmsh.y"
+#line 2413 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6425,7 +6426,7 @@ yyreduce:
     break;
 
   case 208:
-#line 2436 "Gmsh.y"
+#line 2437 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6446,7 +6447,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2454 "Gmsh.y"
+#line 2455 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6467,7 +6468,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2472 "Gmsh.y"
+#line 2473 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6488,7 +6489,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2490 "Gmsh.y"
+#line 2491 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (8)].d));
       if(!s)
@@ -6520,7 +6521,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2519 "Gmsh.y"
+#line 2520 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (9)].d));
       if(!s)
@@ -6558,7 +6559,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2554 "Gmsh.y"
+#line 2555 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6566,7 +6567,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2559 "Gmsh.y"
+#line 2560 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(4) - (8)].d));
       if(!v)
@@ -6596,7 +6597,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2586 "Gmsh.y"
+#line 2587 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6613,7 +6614,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2600 "Gmsh.y"
+#line 2601 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double d;
@@ -6629,7 +6630,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2613 "Gmsh.y"
+#line 2614 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6643,7 +6644,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2630 "Gmsh.y"
+#line 2631 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6652,7 +6653,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2636 "Gmsh.y"
+#line 2637 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6661,26 +6662,26 @@ yyreduce:
     break;
 
   case 220:
-#line 2642 "Gmsh.y"
+#line 2643 "Gmsh.y"
     {
     ;}
     break;
 
   case 221:
-#line 2645 "Gmsh.y"
+#line 2646 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2654 "Gmsh.y"
+#line 2655 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 223:
-#line 2658 "Gmsh.y"
+#line 2659 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -6693,47 +6694,47 @@ yyreduce:
     break;
 
   case 224:
-#line 2673 "Gmsh.y"
+#line 2674 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 225:
-#line 2674 "Gmsh.y"
+#line 2675 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 226:
-#line 2675 "Gmsh.y"
+#line 2676 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 227:
-#line 2676 "Gmsh.y"
+#line 2677 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 228:
-#line 2677 "Gmsh.y"
+#line 2678 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 229:
-#line 2678 "Gmsh.y"
+#line 2679 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 230:
-#line 2679 "Gmsh.y"
+#line 2680 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 231:
-#line 2680 "Gmsh.y"
+#line 2681 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 232:
-#line 2682 "Gmsh.y"
+#line 2683 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -6743,307 +6744,307 @@ yyreduce:
     break;
 
   case 233:
-#line 2688 "Gmsh.y"
+#line 2689 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 234:
-#line 2689 "Gmsh.y"
+#line 2690 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 235:
-#line 2690 "Gmsh.y"
+#line 2691 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 236:
-#line 2691 "Gmsh.y"
+#line 2692 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 237:
-#line 2692 "Gmsh.y"
+#line 2693 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 238:
-#line 2693 "Gmsh.y"
+#line 2694 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 239:
-#line 2694 "Gmsh.y"
+#line 2695 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 240:
-#line 2695 "Gmsh.y"
+#line 2696 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 241:
-#line 2696 "Gmsh.y"
+#line 2697 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 242:
-#line 2697 "Gmsh.y"
+#line 2698 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 243:
-#line 2698 "Gmsh.y"
+#line 2699 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 244:
-#line 2699 "Gmsh.y"
+#line 2700 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 245:
-#line 2700 "Gmsh.y"
+#line 2701 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 246:
-#line 2701 "Gmsh.y"
+#line 2702 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 247:
-#line 2702 "Gmsh.y"
+#line 2703 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 248:
-#line 2703 "Gmsh.y"
+#line 2704 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 249:
-#line 2704 "Gmsh.y"
+#line 2705 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 250:
-#line 2705 "Gmsh.y"
+#line 2706 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 251:
-#line 2706 "Gmsh.y"
+#line 2707 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 252:
-#line 2707 "Gmsh.y"
+#line 2708 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 253:
-#line 2708 "Gmsh.y"
+#line 2709 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 254:
-#line 2709 "Gmsh.y"
+#line 2710 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 255:
-#line 2710 "Gmsh.y"
+#line 2711 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 256:
-#line 2711 "Gmsh.y"
+#line 2712 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 257:
-#line 2712 "Gmsh.y"
+#line 2713 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 258:
-#line 2713 "Gmsh.y"
+#line 2714 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 259:
-#line 2714 "Gmsh.y"
+#line 2715 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 260:
-#line 2715 "Gmsh.y"
+#line 2716 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 261:
-#line 2716 "Gmsh.y"
+#line 2717 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 262:
-#line 2717 "Gmsh.y"
+#line 2718 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 263:
-#line 2718 "Gmsh.y"
+#line 2719 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 264:
-#line 2719 "Gmsh.y"
+#line 2720 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 265:
-#line 2721 "Gmsh.y"
+#line 2722 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 266:
-#line 2722 "Gmsh.y"
+#line 2723 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 267:
-#line 2723 "Gmsh.y"
+#line 2724 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 268:
-#line 2724 "Gmsh.y"
+#line 2725 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 269:
-#line 2725 "Gmsh.y"
+#line 2726 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 270:
-#line 2726 "Gmsh.y"
+#line 2727 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 271:
-#line 2727 "Gmsh.y"
+#line 2728 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 2728 "Gmsh.y"
+#line 2729 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 273:
-#line 2729 "Gmsh.y"
+#line 2730 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 274:
-#line 2730 "Gmsh.y"
+#line 2731 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 2731 "Gmsh.y"
+#line 2732 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 276:
-#line 2732 "Gmsh.y"
+#line 2733 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 2733 "Gmsh.y"
+#line 2734 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 278:
-#line 2734 "Gmsh.y"
+#line 2735 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 2735 "Gmsh.y"
+#line 2736 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 2736 "Gmsh.y"
+#line 2737 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 281:
-#line 2737 "Gmsh.y"
+#line 2738 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 2738 "Gmsh.y"
+#line 2739 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 283:
-#line 2739 "Gmsh.y"
+#line 2740 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 284:
-#line 2740 "Gmsh.y"
+#line 2741 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 285:
-#line 2741 "Gmsh.y"
+#line 2742 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 286:
-#line 2750 "Gmsh.y"
+#line 2751 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 287:
-#line 2751 "Gmsh.y"
+#line 2752 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 288:
-#line 2752 "Gmsh.y"
+#line 2753 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 289:
-#line 2753 "Gmsh.y"
+#line 2754 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 290:
-#line 2754 "Gmsh.y"
+#line 2755 "Gmsh.y"
     { (yyval.d) = Get_GmshMajorVersion(); ;}
     break;
 
   case 291:
-#line 2755 "Gmsh.y"
+#line 2756 "Gmsh.y"
     { (yyval.d) = Get_GmshMinorVersion(); ;}
     break;
 
   case 292:
-#line 2756 "Gmsh.y"
+#line 2757 "Gmsh.y"
     { (yyval.d) = Get_GmshPatchVersion(); ;}
     break;
 
   case 293:
-#line 2761 "Gmsh.y"
+#line 2762 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7056,7 +7057,7 @@ yyreduce:
     break;
 
   case 294:
-#line 2774 "Gmsh.y"
+#line 2775 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7071,7 +7072,7 @@ yyreduce:
     break;
 
   case 295:
-#line 2786 "Gmsh.y"
+#line 2787 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -7089,7 +7090,7 @@ yyreduce:
     break;
 
   case 296:
-#line 2801 "Gmsh.y"
+#line 2802 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -7102,7 +7103,7 @@ yyreduce:
     break;
 
   case 297:
-#line 2811 "Gmsh.y"
+#line 2812 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -7115,7 +7116,7 @@ yyreduce:
     break;
 
   case 298:
-#line 2821 "Gmsh.y"
+#line 2822 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -7133,7 +7134,7 @@ yyreduce:
     break;
 
   case 299:
-#line 2839 "Gmsh.y"
+#line 2840 "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));
@@ -7141,7 +7142,7 @@ yyreduce:
     break;
 
   case 300:
-#line 2844 "Gmsh.y"
+#line 2845 "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));
@@ -7149,7 +7150,7 @@ yyreduce:
     break;
 
   case 301:
-#line 2849 "Gmsh.y"
+#line 2850 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -7162,7 +7163,7 @@ yyreduce:
     break;
 
   case 302:
-#line 2859 "Gmsh.y"
+#line 2860 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -7175,7 +7176,7 @@ yyreduce:
     break;
 
   case 303:
-#line 2869 "Gmsh.y"
+#line 2870 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7183,70 +7184,70 @@ yyreduce:
     break;
 
   case 304:
-#line 2877 "Gmsh.y"
+#line 2878 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 305:
-#line 2881 "Gmsh.y"
+#line 2882 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 306:
-#line 2885 "Gmsh.y"
+#line 2886 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 307:
-#line 2889 "Gmsh.y"
+#line 2890 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 308:
-#line 2893 "Gmsh.y"
+#line 2894 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 309:
-#line 2900 "Gmsh.y"
+#line 2901 "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 310:
-#line 2904 "Gmsh.y"
+#line 2905 "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 311:
-#line 2908 "Gmsh.y"
+#line 2909 "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 312:
-#line 2912 "Gmsh.y"
+#line 2913 "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 313:
-#line 2919 "Gmsh.y"
+#line 2920 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -7254,14 +7255,14 @@ yyreduce:
     break;
 
   case 314:
-#line 2924 "Gmsh.y"
+#line 2925 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 315:
-#line 2931 "Gmsh.y"
+#line 2932 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7269,14 +7270,14 @@ yyreduce:
     break;
 
   case 316:
-#line 2936 "Gmsh.y"
+#line 2937 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 317:
-#line 2940 "Gmsh.y"
+#line 2941 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -7284,14 +7285,14 @@ yyreduce:
     break;
 
   case 318:
-#line 2945 "Gmsh.y"
+#line 2946 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 319:
-#line 2949 "Gmsh.y"
+#line 2950 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7302,7 +7303,7 @@ yyreduce:
     break;
 
   case 320:
-#line 2957 "Gmsh.y"
+#line 2958 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7313,7 +7314,7 @@ yyreduce:
     break;
 
   case 321:
-#line 2968 "Gmsh.y"
+#line 2969 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7324,7 +7325,7 @@ yyreduce:
     break;
 
   case 322:
-#line 2976 "Gmsh.y"
+#line 2977 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7335,7 +7336,7 @@ yyreduce:
     break;
 
   case 323:
-#line 2984 "Gmsh.y"
+#line 2985 "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)); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
@@ -7344,7 +7345,7 @@ yyreduce:
     break;
 
   case 324:
-#line 2990 "Gmsh.y"
+#line 2991 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -7358,7 +7359,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3001 "Gmsh.y"
+#line 3002 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -7381,7 +7382,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3021 "Gmsh.y"
+#line 3022 "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++){
@@ -7394,7 +7395,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3031 "Gmsh.y"
+#line 3032 "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++){
@@ -7407,7 +7408,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3041 "Gmsh.y"
+#line 3042 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -7420,7 +7421,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3051 "Gmsh.y"
+#line 3052 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -7440,7 +7441,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3071 "Gmsh.y"
+#line 3072 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7448,21 +7449,21 @@ yyreduce:
     break;
 
   case 331:
-#line 3076 "Gmsh.y"
+#line 3077 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 332:
-#line 3080 "Gmsh.y"
+#line 3081 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 333:
-#line 3084 "Gmsh.y"
+#line 3085 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7474,21 +7475,21 @@ yyreduce:
     break;
 
   case 334:
-#line 3096 "Gmsh.y"
+#line 3097 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 335:
-#line 3100 "Gmsh.y"
+#line 3101 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 336:
-#line 3112 "Gmsh.y"
+#line 3113 "Gmsh.y"
     {
       int flag;
       (yyval.u) = Get_ColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7498,7 +7499,7 @@ yyreduce:
     break;
 
   case 337:
-#line 3119 "Gmsh.y"
+#line 3120 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -7508,14 +7509,14 @@ yyreduce:
     break;
 
   case 338:
-#line 3129 "Gmsh.y"
+#line 3130 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 339:
-#line 3133 "Gmsh.y"
+#line 3134 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7530,7 +7531,7 @@ yyreduce:
     break;
 
   case 340:
-#line 3148 "Gmsh.y"
+#line 3149 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -7538,21 +7539,21 @@ yyreduce:
     break;
 
   case 341:
-#line 3153 "Gmsh.y"
+#line 3154 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 342:
-#line 3160 "Gmsh.y"
+#line 3161 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 343:
-#line 3164 "Gmsh.y"
+#line 3165 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7568,7 +7569,7 @@ yyreduce:
     break;
 
   case 344:
-#line 3177 "Gmsh.y"
+#line 3178 "Gmsh.y"
     { 
       const char *val = "";
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), val);
@@ -7579,7 +7580,7 @@ yyreduce:
     break;
 
   case 345:
-#line 3185 "Gmsh.y"
+#line 3186 "Gmsh.y"
     { 
       const char *val = "";
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), val);
@@ -7590,14 +7591,14 @@ yyreduce:
     break;
 
   case 346:
-#line 3196 "Gmsh.y"
+#line 3197 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 347:
-#line 3200 "Gmsh.y"
+#line 3201 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -7608,7 +7609,7 @@ yyreduce:
     break;
 
   case 348:
-#line 3208 "Gmsh.y"
+#line 3209 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -7619,7 +7620,7 @@ yyreduce:
     break;
 
   case 349:
-#line 3216 "Gmsh.y"
+#line 3217 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -7636,7 +7637,7 @@ yyreduce:
     break;
 
   case 350:
-#line 3230 "Gmsh.y"
+#line 3231 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -7653,14 +7654,14 @@ yyreduce:
     break;
 
   case 351:
-#line 3244 "Gmsh.y"
+#line 3245 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 352:
-#line 3248 "Gmsh.y"
+#line 3249 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7683,7 +7684,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 7687 "Gmsh.tab.cpp"
+#line 7688 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -7897,7 +7898,7 @@ yyreturn:
 }
 
 
-#line 3268 "Gmsh.y"
+#line 3269 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 742d061c5e8008ce9c2b2837c1b597fff1b8dd1a..5da20140997842d48aacaba34f7efd27b7731fdc 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -696,8 +696,9 @@ Affectation :
     {
       if(gmsh_yysymbols.count($1))
 	gmsh_yysymbols[$1].clear();
+      gmsh_yysymbols[$1] = std::vector<double>();
       for(int i = 0; i < List_Nbr($5); i++)
-	gmsh_yysymbols[$1].push_back(*(double*)List_Pointer($5, i));
+        gmsh_yysymbols[$1].push_back(*(double*)List_Pointer($5, i));
       Free($1);
       List_Delete($5);
     }