Newer
Older
/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate. |
`------------------------------------------------------------*/
yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
/* Get the current used size of the three stacks, in elements. */
#ifdef yyoverflow
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into
memory. */
YYSTYPE *yyvs1 = yyvs;
yytype_int16 *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */
yyoverflow (YY_("memory exhausted"),
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
yyss = yyss1;
yyvs = yyvs1;
#else /* no yyoverflow */
/* Extend the stack our own way. */
goto yyexhaustedlab;
yystacksize *= 2;
yystacksize = YYMAXDEPTH;
yytype_int16 *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyexhaustedlab;

Christophe Geuzaine
committed
YYSTACK_RELOCATE (yyss_alloc, yyss);
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
#endif /* no yyoverflow */
(unsigned long int) yystacksize));
}

Christophe Geuzaine
committed
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
/*-----------.
| yybackup. |
`-----------*/
yybackup:

Christophe Geuzaine
committed
lookahead token if we need one and don't already have one. */

Christophe Geuzaine
committed
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
goto yydefault;

Christophe Geuzaine
committed
/* Not known => get a lookahead token if don't already have one. */

Christophe Geuzaine
committed
/* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (yychar == YYEMPTY)
{
yychar = YYLEX;
}
{
yychar = yytoken = YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else
{
yytoken = YYTRANSLATE (yychar);
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
detect an error, take that action. */
yyn += yytoken;
if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
goto yydefault;
yyn = yytable[yyn];
{
if (yytable_value_is_error (yyn))
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
/* Count tokens shifted since error; after three, turn off error
status. */
if (yyerrstatus)
yyerrstatus--;

Christophe Geuzaine
committed
/* Shift the lookahead token. */

Christophe Geuzaine
committed
/* Discard the shifted token. */
yychar = YYEMPTY;
*++yyvsp = yylval;
/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state. |
`-----------------------------------------------------------*/
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
/*-----------------------------.
| yyreduce -- Do a reduction. |
`-----------------------------*/
yyreduce:
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
`$$ = $1'.
Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison
users should not rely upon it. Assigning to YYVAL
unconditionally makes the parser a bit smaller, and it avoids a
GCC warning that YYVAL may be used uninitialized. */
yyval = yyvsp[1-yylen];

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed
{ List_Delete((yyvsp[(1) - (1)].l)); return 1; }

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed
{ List_Delete((yyvsp[(1) - (1)].l)); return 1; }

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed
break;
case 21:

Christophe Geuzaine
committed

Christophe Geuzaine
committed

Christophe Geuzaine
committed
(yyval.c) = (char*)"w";

Christophe Geuzaine
committed
(yyval.c) = (char*)"a";

Christophe Geuzaine
committed
Msg::Direct((yyvsp[(3) - (5)].c));

Christophe Geuzaine
committed
{
Msg::Error((yyvsp[(3) - (5)].c));
Free((yyvsp[(3) - (5)].c));
break;
case 27:
std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
FILE *fp = fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
yymsg(0, "Unable to open file '%s'", tmp.c_str());
fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
fclose(fp);
case 28:

Christophe Geuzaine
committed
int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
yymsg(0, "Too few arguments in Printf");
yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
Msg::Direct(tmpstring);
Free((yyvsp[(3) - (7)].c));
List_Delete((yyvsp[(5) - (7)].l));
case 29:
{
int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
if(i < 0)
yymsg(0, "Too few arguments in Error");
else if(i > 0)
yymsg(0, "%d extra argument%s in Error", i, (i > 1) ? "s" : "");
else
Msg::Error(tmpstring);
Free((yyvsp[(3) - (7)].c));
List_Delete((yyvsp[(5) - (7)].l));
break;
case 30:

Christophe Geuzaine
committed
int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
yymsg(0, "Too few arguments in Printf");
yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(8) - (9)].c));
FILE *fp = fopen(tmp.c_str(), (yyvsp[(7) - (9)].c));
if(!fp){
yymsg(0, "Unable to open file '%s'", tmp.c_str());
}
else{
fprintf(fp, "%s\n", tmpstring);
fclose(fp);
}
Free((yyvsp[(3) - (9)].c));
Free((yyvsp[(8) - (9)].c));
List_Delete((yyvsp[(5) - (9)].l));
case 31:

Christophe Geuzaine
committed
if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
ViewData->setName((yyvsp[(2) - (6)].c));
ViewData->setFileName(gmsh_yyname);
ViewData->setFileIndex(gmsh_yyviewindex++);
new PView(ViewData);

Christophe Geuzaine
committed
#endif
case 32:

Christophe Geuzaine
committed
int index = (int)(yyvsp[(4) - (6)].d);
if(index >= 0 && index < (int)PView::list.size())
new PView(PView::list[index], false);

Christophe Geuzaine
committed
#endif
case 33:

Christophe Geuzaine
committed
int index = (int)(yyvsp[(4) - (6)].d);
if(index >= 0 && index < (int)PView::list.size())
new PView(PView::list[index], true);

Christophe Geuzaine
committed
#endif
case 34:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
#endif
case 40:

Christophe Geuzaine
committed
{ ViewCoord.push_back((yyvsp[(1) - (1)].d)); }
case 41:

Christophe Geuzaine
committed
{ ViewCoord.push_back((yyvsp[(3) - (3)].d)); }
case 42:

Christophe Geuzaine
committed
{ if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); }
case 43:

Christophe Geuzaine
committed
{ if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); }
break;
case 44:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);

Christophe Geuzaine
committed
else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;

Jean-François Remacle
committed
if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
ViewValueList = 0; ViewNumList = 0;

Christophe Geuzaine
committed
#endif
case 45:

Christophe Geuzaine
committed
for(int i = 0; i < 3; i++)
ViewValueList->push_back(ViewCoord[3 * j + i]);

Christophe Geuzaine
committed
#endif
case 46:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
#endif
case 47:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);

Christophe Geuzaine
committed
#endif
case 48:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);

Christophe Geuzaine
committed
#endif
case 49:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
ViewData->T2D.push_back((yyvsp[(5) - (8)].d));
ViewData->T2D.push_back((yyvsp[(7) - (8)].d));
ViewData->T2D.push_back(ViewData->T2C.size());

Christophe Geuzaine
committed
#endif
case 50:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
#endif
case 51:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);

Christophe Geuzaine
committed
#endif
case 52:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);

Christophe Geuzaine
committed
#endif
case 53:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
ViewData->T3D.push_back((yyvsp[(7) - (10)].d)); ViewData->T3D.push_back((yyvsp[(9) - (10)].d));

Christophe Geuzaine
committed
#endif
case 54:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
#endif
case 55:

Christophe Geuzaine
committed
int type =
(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN :
(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI :
(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA :
(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET :
(ViewData->NbSY || ViewData->NbVY) ? TYPE_PYR :
(ViewData->NbSI || ViewData->NbVI) ? TYPE_PRI :
(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX :
ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (8)].l)),
ListOfListOfDouble2Matrix((yyvsp[(6) - (8)].l)));

Christophe Geuzaine
committed
#endif
case 56:

Christophe Geuzaine
committed
int type =
(ViewData->NbSL || ViewData->NbVL) ? TYPE_LIN :
(ViewData->NbST || ViewData->NbVT) ? TYPE_TRI :
(ViewData->NbSQ || ViewData->NbVQ) ? TYPE_QUA :
(ViewData->NbSS || ViewData->NbVS) ? TYPE_TET :
(ViewData->NbSH || ViewData->NbVH) ? TYPE_HEX :
ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (14)].l)),
ListOfListOfDouble2Matrix((yyvsp[(6) - (14)].l)),
ListOfListOfDouble2Matrix((yyvsp[(12) - (14)].l)));

Christophe Geuzaine
committed
#endif
case 57:

Christophe Geuzaine
committed

Christophe Geuzaine
committed
ViewValueList = &ViewData->Time;

Christophe Geuzaine
committed
#endif
case 58:

Christophe Geuzaine
committed
case 59:

Christophe Geuzaine
committed
case 60:

Christophe Geuzaine
committed
case 61:

Christophe Geuzaine
committed
case 62:

Christophe Geuzaine
committed
case 63:

Christophe Geuzaine
committed
case 64:

Christophe Geuzaine
committed
case 65:

Christophe Geuzaine
committed
case 67:

Christophe Geuzaine
committed
if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c)) && (yyvsp[(2) - (4)].i) && List_Nbr((yyvsp[(3) - (4)].l)) == 1){
yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (4)].c)]);
if(!(yyvsp[(2) - (4)].i)) s.list = (List_Nbr((yyvsp[(3) - (4)].l)) != 1); // list if 0 or > 1 elements
if(!s.list){ // single expression
if(List_Nbr((yyvsp[(3) - (4)].l)) != 1){
yymsg(0, "Cannot assign list to variable '%s'", (yyvsp[(1) - (4)].c));
}
else{
double d;
List_Read((yyvsp[(3) - (4)].l), 0, &d);
if(s.value.empty()){
if((yyvsp[(2) - (4)].i)) yymsg(1, "Uninitialized variable '%s'", (yyvsp[(1) - (4)].c));
s.value.resize(1, 0.);
}
switch((yyvsp[(2) - (4)].i)){
case 0 : s.value[0] = d; break;
case 1 : s.value[0] += d; break;
case 2 : s.value[0] -= d; break;
case 3 : s.value[0] *= d; break;
case 4 :
if(d) s.value[0] /= d;
else yymsg(0, "Division by zero in '%s /= %g'", (yyvsp[(1) - (4)].c), d);
break;
}
}
}
else{ // list of expressions
switch((yyvsp[(2) - (4)].i)){
case 0: // affect
s.value.clear(); // fall-through
case 1: // append
for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
double d;
List_Read((yyvsp[(3) - (4)].l), i, &d);
s.value.push_back(d);
}
break;
case 2: // remove
for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
double d;
List_Read((yyvsp[(3) - (4)].l), i, &d);
std::vector<double>::iterator it = std::find(s.value.begin(),
s.value.end(), d);
if(it != s.value.end()) s.value.erase(it);
}
break;
default:
yymsg(0, "Operators *= and /= not available for lists");
break;
}
}
}
Free((yyvsp[(1) - (4)].c));
case 68:

Christophe Geuzaine
committed
#line 677 "Gmsh.y"
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
{
gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
s.list = true;
double d;
switch((yyvsp[(4) - (6)].i)){
case 0: // affect
s.value.clear(); // fall-through
case 1: // append
for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
List_Read((yyvsp[(5) - (6)].l), i, &d);
s.value.push_back(d);
}
break;
case 2: // remove
for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
List_Read((yyvsp[(5) - (6)].l), i, &d);
std::vector<double>::iterator it = std::find(s.value.begin(),
s.value.end(), d);
if(it != s.value.end()) s.value.erase(it);
}
break;
default:
yymsg(0, "Operators *= and /= not available for lists");
break;
}
Free((yyvsp[(1) - (6)].c));
List_Delete((yyvsp[(5) - (6)].l));
case 69:
#line 707 "Gmsh.y"
int index = (int)(yyvsp[(3) - (7)].d);
if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
if(!(yyvsp[(5) - (7)].i)){
gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (7)].c)]);
s.list = true;
s.value.resize(index + 1, 0.);
s.value[index] = (yyvsp[(6) - (7)].d);
}
else
yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (7)].c));
gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (7)].c)]);
if(s.list){
if((int)s.value.size() < index + 1) s.value.resize(index + 1, 0.);
switch((yyvsp[(5) - (7)].i)){
case 0 : s.value[index] = (yyvsp[(6) - (7)].d); break;
case 1 : s.value[index] += (yyvsp[(6) - (7)].d); break;
case 2 : s.value[index] -= (yyvsp[(6) - (7)].d); break;
case 3 : s.value[index] *= (yyvsp[(6) - (7)].d); break;
case 4 :
if((yyvsp[(6) - (7)].d)) s.value[index] /= (yyvsp[(6) - (7)].d);
else yymsg(0, "Division by zero in '%s[%d] /= %g'", (yyvsp[(1) - (7)].c), index, (yyvsp[(6) - (7)].d));
break;
}
}
else
yymsg(0, "Variable '%s' is not a list", (yyvsp[(1) - (7)].c));
Free((yyvsp[(1) - (7)].c));
case 70:

Christophe Geuzaine
committed
#line 742 "Gmsh.y"
{
int index = (int)(yyvsp[(3) - (7)].d);
if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
if(!(yyvsp[(5) - (7)].i)){
gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (7)].c)]);
s.list = true;