Skip to content
Snippets Groups Projects
Gmsh.tab.cpp 409 KiB
Newer Older
	/* 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);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

	yyss = yyss1;
	yyvs = yyvs1;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
# ifndef YYSTACK_RELOCATE
      goto yyexhaustedlab;
# else
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if (YYMAXDEPTH <= yystacksize)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if (YYMAXDEPTH < yystacksize)
	yystacksize = YYMAXDEPTH;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

      {
	yytype_int16 *yyss1 = yyss;
	union yyalloc *yyptr =
	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
	if (! yyptr)
	  goto yyexhaustedlab;
	YYSTACK_RELOCATE (yyss_alloc, yyss);
	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
#  undef YYSTACK_RELOCATE
	if (yyss1 != yyssa)
	  YYSTACK_FREE (yyss1);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
# endif
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
		  (unsigned long int) yystacksize));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

      if (yyss + yystacksize - 1 <= yyssp)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
/*-----------.
| yybackup.  |
`-----------*/
yybackup:
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  /* Do appropriate processing given the current state.  Read a
     lookahead token if we need one and don't already have one.  */
  /* First try to decide what to do without reference to lookahead token.  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
  if (yyn == YYPACT_NINF)
  /* Not known => get a lookahead token if don't already have one.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      YYDPRINTF ((stderr, "Reading a token: "));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  if (yychar <= YYEOF)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      yytoken = YYTRANSLATE (yychar);
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  /* 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)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  if (yyn <= 0)
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      if (yyn == 0 || yyn == YYTABLE_NINF)
	goto yyerrlab;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  /* Count tokens shifted since error; after three, turn off error
     status.  */
  if (yyerrstatus)
    yyerrstatus--;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
  /* Discard the shifted token.  */
  yychar = YYEMPTY;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  yystate = yyn;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

  goto yynewstate;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  goto yyreduce;

Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
/*-----------------------------.
| yyreduce -- Do a reduction.  |
`-----------------------------*/
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  /* yyn is the number of a rule to reduce with.  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed

Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  /* If YYLEN is nonzero, implement the default value of the action:
     `$$ = $1'.
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
     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's avatar
 
Christophe Geuzaine committed
  YY_REDUCE_PRINT (yyn);
  switch (yyn)
    {
        case 3:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { yyerrok; return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 6:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 7:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 8:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 9:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 10:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 11:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 12:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 13:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 14:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { List_Delete((yyvsp[(1) - (1)].l)); return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

  case 15:
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 188 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 189 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 190 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 191 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 192 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
#line 193 "Gmsh.y"
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { return 1; ;}
Matti Pellika's avatar
 
Matti Pellika committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (5)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
    {
      Msg::Error((yyvsp[(3) - (5)].c));
      Free((yyvsp[(3) - (5)].c));
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
      FILE *fp = fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!fp){
	yymsg(0, "Unable to open file '%s'", tmp.c_str());
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
	fprintf(fp, "%s\n", (yyvsp[(3) - (7)].c));
	fclose(fp);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (7)].c));
      Free((yyvsp[(6) - (7)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      char tmpstring[5000];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(i < 0)
	yymsg(0, "Too few arguments in Printf");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(i > 0)
	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else
	Msg::Direct(tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (7)].c));
      List_Delete((yyvsp[(5) - (7)].l));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      char tmpstring[5000];
      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));
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      char tmpstring[5000];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(i < 0)
	yymsg(0, "Too few arguments in Printf");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else if(i > 0)
	yymsg(0, "%d extra argument%s in Printf", i, (i > 1) ? "s" : "");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
        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);
	}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (9)].c));
      Free((yyvsp[(8) - (9)].c));
      List_Delete((yyvsp[(5) - (9)].l));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
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's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      else
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(2) - (6)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!strcmp((yyvsp[(2) - (6)].c), "View")){
	int index = (int)(yyvsp[(4) - (6)].d);
	if(index >= 0 && index < (int)PView::list.size())
	  new PView(PView::list[index], false);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(2) - (6)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(!strcmp((yyvsp[(2) - (6)].c), "View")){
	int index = (int)(yyvsp[(4) - (6)].d);
	if(index >= 0 && index < (int)PView::list.size())
	  new PView(PView::list[index], true);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(2) - (6)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData = new PViewDataList();
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
	ViewValueList = &ViewData->SP; ViewNumList = &ViewData->NbSP;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VP", 2)){
	ViewValueList = &ViewData->VP; ViewNumList = &ViewData->NbVP;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TP", 2)){
	ViewValueList = &ViewData->TP; ViewNumList = &ViewData->NbTP;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SL", 2)){
	ViewValueList = &ViewData->SL; ViewNumList = &ViewData->NbSL;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VL", 2)){
	ViewValueList = &ViewData->VL; ViewNumList = &ViewData->NbVL;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TL", 2)){
	ViewValueList = &ViewData->TL; ViewNumList = &ViewData->NbTL;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_LIN);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "ST", 2)){
	ViewValueList = &ViewData->ST; ViewNumList = &ViewData->NbST;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VT", 2)){
	ViewValueList = &ViewData->VT; ViewNumList = &ViewData->NbVT;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TT", 2)){
	ViewValueList = &ViewData->TT; ViewNumList = &ViewData->NbTT;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SQ", 2)){
	ViewValueList = &ViewData->SQ; ViewNumList = &ViewData->NbSQ;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VQ", 2)){
	ViewValueList = &ViewData->VQ; ViewNumList = &ViewData->NbVQ;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TQ", 2)){
	ViewValueList = &ViewData->TQ; ViewNumList = &ViewData->NbTQ;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_QUA);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SS", 2)){
	ViewValueList = &ViewData->SS; ViewNumList = &ViewData->NbSS;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VS", 2)){
	ViewValueList = &ViewData->VS; ViewNumList = &ViewData->NbVS;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TS", 2)){
	ViewValueList = &ViewData->TS; ViewNumList = &ViewData->NbTS;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_TET);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SH", 2)){
	ViewValueList = &ViewData->SH; ViewNumList = &ViewData->NbSH;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VH", 2)){
	ViewValueList = &ViewData->VH; ViewNumList = &ViewData->NbVH;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TH", 2)){
	ViewValueList = &ViewData->TH; ViewNumList = &ViewData->NbTH;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_HEX);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SI", 2)){
	ViewValueList = &ViewData->SI; ViewNumList = &ViewData->NbSI;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VI", 2)){
	ViewValueList = &ViewData->VI; ViewNumList = &ViewData->NbVI;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TI", 2)){
	ViewValueList = &ViewData->TI; ViewNumList = &ViewData->NbTI;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PRI);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "SY", 2)){
	ViewValueList = &ViewData->SY; ViewNumList = &ViewData->NbSY;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "VY", 2)){
	ViewValueList = &ViewData->VY; ViewNumList = &ViewData->NbVY;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else if(!strncmp((yyvsp[(1) - (1)].c), "TY", 2)){
	ViewValueList = &ViewData->TY; ViewNumList = &ViewData->NbTY;
        if(strlen((yyvsp[(1) - (1)].c)) > 2) ViewData->setOrder2(TYPE_PYR);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
      else{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	yymsg(0, "Unknown element type '%s'", (yyvsp[(1) - (1)].c));
	ViewValueList = 0; ViewNumList = 0;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      ViewCoord.clear();
      Free((yyvsp[(1) - (1)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(ViewValueList){
	for(int i = 0; i < 3; i++)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
	  for(unsigned int j = 0; j < ViewCoord.size() / 3; j++)
	    ViewValueList->push_back(ViewCoord[3 * j + i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      }
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      if(ViewValueList) (*ViewNumList)++;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(1) - (1)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (3)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->T2D.push_back((yyvsp[(3) - (8)].d));
      ViewData->T2D.push_back((yyvsp[(5) - (8)].d));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->T2D.push_back((yyvsp[(7) - (8)].d));
      ViewData->T2D.push_back(ViewData->T2C.size());
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->NbT2++;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(1) - (1)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      Free((yyvsp[(3) - (3)].c));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
      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's avatar
 
Christophe Geuzaine committed
      ViewData->T3D.push_back(ViewData->T3C.size());
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->NbT3++;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
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 :
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (8)].l)),
                                         ListOfListOfDouble2Matrix((yyvsp[(6) - (8)].l)));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
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 :
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      ViewData->setInterpolationMatrices(type, ListOfListOfDouble2Matrix((yyvsp[(3) - (14)].l)),
                                         ListOfListOfDouble2Matrix((yyvsp[(6) - (14)].l)),
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
                                         ListOfListOfDouble2Matrix((yyvsp[(9) - (14)].l)),
                                         ListOfListOfDouble2Matrix((yyvsp[(12) - (14)].l)));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
#if defined(HAVE_POST)
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 0; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 2; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 3; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 4; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = 1; ;}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
Christophe Geuzaine committed
    { (yyval.i) = -1; ;}
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
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));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
        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));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
      List_Delete((yyvsp[(3) - (4)].l));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
      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));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    {
      int index = (int)(yyvsp[(3) - (7)].d);
      if(!gmsh_yysymbols.count((yyvsp[(1) - (7)].c))){
	if(!(yyvsp[(5) - (7)].i)){
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
          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));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
        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));
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    break;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */
    {
      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));
      }
      else{
        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));
Christophe Geuzaine's avatar
Christophe Geuzaine committed
/* Line 1464 of yacc.c  */