Changeset 2152


Ignore:
Timestamp:
Dec 19, 2012, 9:49:58 PM (7 years ago)
Author:
sam
Message:

easymesh: motherfucking planetary gears demo.

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/easymesh/easymesh-parser.y

    r2151 r2152  
    3838    /* Can't use uin32_t here for some reason */
    3939    unsigned u32val;
    40     struct { float f0, f1, f2, f3, f4, f5, f6, f7; } args;
     40    struct { float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9; } args;
    4141}
    4242
     
    6161
    6262%type <fval> number
    63 %type <args> args1 args2 args3 args4 args5 args6 args7 args8
     63%type <args> args1 args2 args3 args4 args5 args6 args7 args8 args9 args10
    6464
    6565%{
     
    158158  | T_TRIANGLE args2       { mc.m_mesh.AppendSimpleTriangle($2.f0, (int)$2.f1); }
    159159  | T_QUAD args2           { mc.m_mesh.AppendSimpleQuad($2.f0, (int)$2.f1); }
    160   | T_COG args8            { mc.m_mesh.AppendCog((int)$2.f0, $2.f1,
    161                                  $2.f2 / 2, $2.f3 / 2, $2.f2, $2.f3, $2.f4,
    162                                  $2.f5, $2.f6, (int)$2.f7); }
     160  | T_COG args10           { mc.m_mesh.AppendCog((int)$2.f0, $2.f1,
     161                                 $2.f2, $2.f3, $2.f4, $2.f5, $2.f6,
     162                                 $2.f7, $2.f8, (int)$2.f9); }
    163163    ;
    164164
     
    171171args7: args6 number { $$ = $1; $$.f6 = $2; } ;
    172172args8: args7 number { $$ = $1; $$.f7 = $2; } ;
     173args9: args8 number { $$ = $1; $$.f8 = $2; } ;
     174args10: args9 number { $$ = $1; $$.f9 = $2; } ;
    173175
    174176number:
  • trunk/src/easymesh/easymesh.cpp

    r2151 r2152  
    792792    /* FIXME: enforce this some other way */
    793793    if (r12 < 0)
    794     {
    795         r10 *= 2.5;
    796         r20 *= 2.5;
    797794        h = -h;
    798     }
    799795
    800796    mat3 rotmat = mat3::rotate(180.0f / nbsides, 0.f, 1.f, 0.f);
  • trunk/src/generated/easymesh-parser.cpp

    r2151 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Skeleton implementation for Bison LALR(1) parsers in C++
    44   
    5       Copyright (C) 2002-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
     
    3636/* First part of user declarations.  */
    3737
    38 /* Line 310 of lalr1.cc  */
     38/* Line 293 of lalr1.cc  */
    3939#line 1 "easymesh/easymesh-parser.y"
    4040
     
    6262
    6363
    64 /* Line 310 of lalr1.cc  */
     64/* Line 293 of lalr1.cc  */
    6565#line 66 "generated/easymesh-parser.cpp"
    6666
     
    7070/* User implementation prologue.  */
    7171
    72 /* Line 316 of lalr1.cc  */
     72/* Line 299 of lalr1.cc  */
    7373#line 65 "easymesh/easymesh-parser.y"
    7474
     
    7979
    8080
    81 /* Line 316 of lalr1.cc  */
     81/* Line 299 of lalr1.cc  */
    8282#line 83 "generated/easymesh-parser.cpp"
    8383
     
    9494#endif
    9595
     96/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
     97   If N is 0, then set CURRENT to the empty location which ends
     98   the previous symbol: RHS[0] (always defined).  */
     99
     100#define YYRHSLOC(Rhs, K) ((Rhs)[K])
     101#ifndef YYLLOC_DEFAULT
     102# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
     103 do                                                                    \
     104   if (N)                                                              \
     105     {                                                                 \
     106       (Current).begin = YYRHSLOC (Rhs, 1).begin;                      \
     107       (Current).end   = YYRHSLOC (Rhs, N).end;                        \
     108     }                                                                 \
     109   else                                                                \
     110     {                                                                 \
     111       (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;        \
     112     }                                                                 \
     113 while (false)
     114#endif
     115
    96116/* Suppress unused-variable warnings by "using" E.  */
    97117#define YYUSE(e) ((void) (e))
     
    145165namespace lol {
    146166
    147 /* Line 379 of lalr1.cc  */
    148 #line 149 "generated/easymesh-parser.cpp"
    149 #if YYERROR_VERBOSE
     167/* Line 382 of lalr1.cc  */
     168#line 169 "generated/easymesh-parser.cpp"
    150169
    151170  /* Return YYSTR after stripping away unnecessary quotes and
     
    186205  }
    187206
    188 #endif
    189207
    190208  /// Build a parser object.
     
    287305#endif
    288306
     307  inline bool
     308  EasyMeshParser::yy_pact_value_is_default_ (int yyvalue)
     309  {
     310    return yyvalue == yypact_ninf_;
     311  }
     312
     313  inline bool
     314  EasyMeshParser::yy_table_value_is_error_ (int yyvalue)
     315  {
     316    return yyvalue == yytable_ninf_;
     317  }
     318
    289319  int
    290320  EasyMeshParser::parse ()
     
    308338    location_type yylloc;
    309339    /// The locations where the error started and ended.
    310     location_type yyerror_range[2];
     340    location_type yyerror_range[3];
    311341
    312342    /// $$.
     
    346376    /* Try to take a decision without lookahead.  */
    347377    yyn = yypact_[yystate];
    348     if (yyn == yypact_ninf_)
     378    if (yy_pact_value_is_default_ (yyn))
    349379      goto yydefault;
    350380
     
    379409    if (yyn <= 0)
    380410      {
    381         if (yyn == 0 || yyn == yytable_ninf_)
    382         goto yyerrlab;
     411        if (yy_table_value_is_error_ (yyn))
     412          goto yyerrlab;
    383413        yyn = -yyn;
    384414        goto yyreduce;
     
    436466          case 7:
    437467
    438 /* Line 677 of lalr1.cc  */
     468/* Line 690 of lalr1.cc  */
    439469#line 89 "easymesh/easymesh-parser.y"
    440470    { mc.m_mesh.OpenBrace(); }
     
    443473  case 8:
    444474
    445 /* Line 677 of lalr1.cc  */
     475/* Line 690 of lalr1.cc  */
    446476#line 93 "easymesh/easymesh-parser.y"
    447477    { mc.m_mesh.CloseBrace(); }
     
    450480  case 14:
    451481
    452 /* Line 677 of lalr1.cc  */
     482/* Line 690 of lalr1.cc  */
    453483#line 108 "easymesh/easymesh-parser.y"
    454484    { mc.m_mesh.SetCurColor(vec4((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3)); }
     
    457487  case 15:
    458488
    459 /* Line 677 of lalr1.cc  */
     489/* Line 690 of lalr1.cc  */
    460490#line 109 "easymesh/easymesh-parser.y"
    461491    { uint32_t x = (yysemantic_stack_[(2) - (2)].u32val);
     
    466496  case 16:
    467497
    468 /* Line 677 of lalr1.cc  */
     498/* Line 690 of lalr1.cc  */
    469499#line 112 "easymesh/easymesh-parser.y"
    470500    { mc.m_mesh.SetCurColor2(vec4((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3)); }
     
    473503  case 17:
    474504
    475 /* Line 677 of lalr1.cc  */
     505/* Line 690 of lalr1.cc  */
    476506#line 113 "easymesh/easymesh-parser.y"
    477507    { uint32_t x = (yysemantic_stack_[(2) - (2)].u32val);
     
    482512  case 18:
    483513
    484 /* Line 677 of lalr1.cc  */
     514/* Line 690 of lalr1.cc  */
    485515#line 119 "easymesh/easymesh-parser.y"
    486516    { mc.m_mesh.Chamfer((yysemantic_stack_[(2) - (2)].args).f0); }
     
    489519  case 19:
    490520
    491 /* Line 677 of lalr1.cc  */
     521/* Line 690 of lalr1.cc  */
    492522#line 120 "easymesh/easymesh-parser.y"
    493523    { mc.m_mesh.Translate(vec3((yysemantic_stack_[(2) - (2)].args).f0, 0, 0)); }
     
    496526  case 20:
    497527
    498 /* Line 677 of lalr1.cc  */
     528/* Line 690 of lalr1.cc  */
    499529#line 121 "easymesh/easymesh-parser.y"
    500530    { mc.m_mesh.Translate(vec3(0, (yysemantic_stack_[(2) - (2)].args).f0, 0)); }
     
    503533  case 21:
    504534
    505 /* Line 677 of lalr1.cc  */
     535/* Line 690 of lalr1.cc  */
    506536#line 122 "easymesh/easymesh-parser.y"
    507537    { mc.m_mesh.Translate(vec3(0, 0, (yysemantic_stack_[(2) - (2)].args).f0)); }
     
    510540  case 22:
    511541
    512 /* Line 677 of lalr1.cc  */
     542/* Line 690 of lalr1.cc  */
    513543#line 123 "easymesh/easymesh-parser.y"
    514544    { mc.m_mesh.Translate(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
     
    517547  case 23:
    518548
    519 /* Line 677 of lalr1.cc  */
     549/* Line 690 of lalr1.cc  */
    520550#line 124 "easymesh/easymesh-parser.y"
    521551    { mc.m_mesh.RotateX((yysemantic_stack_[(2) - (2)].args).f0); }
     
    524554  case 24:
    525555
    526 /* Line 677 of lalr1.cc  */
     556/* Line 690 of lalr1.cc  */
    527557#line 125 "easymesh/easymesh-parser.y"
    528558    { mc.m_mesh.RotateY((yysemantic_stack_[(2) - (2)].args).f0); }
     
    531561  case 25:
    532562
    533 /* Line 677 of lalr1.cc  */
     563/* Line 690 of lalr1.cc  */
    534564#line 126 "easymesh/easymesh-parser.y"
    535565    { mc.m_mesh.RotateZ((yysemantic_stack_[(2) - (2)].args).f0); }
     
    538568  case 26:
    539569
    540 /* Line 677 of lalr1.cc  */
     570/* Line 690 of lalr1.cc  */
    541571#line 127 "easymesh/easymesh-parser.y"
    542572    { mc.m_mesh.TaperX((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
     
    545575  case 27:
    546576
    547 /* Line 677 of lalr1.cc  */
     577/* Line 690 of lalr1.cc  */
    548578#line 128 "easymesh/easymesh-parser.y"
    549579    { mc.m_mesh.TaperY((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
     
    552582  case 28:
    553583
    554 /* Line 677 of lalr1.cc  */
     584/* Line 690 of lalr1.cc  */
    555585#line 129 "easymesh/easymesh-parser.y"
    556586    { mc.m_mesh.TaperZ((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
     
    559589  case 29:
    560590
    561 /* Line 677 of lalr1.cc  */
     591/* Line 690 of lalr1.cc  */
    562592#line 130 "easymesh/easymesh-parser.y"
    563593    { mc.m_mesh.Scale(vec3((yysemantic_stack_[(2) - (2)].args).f0, 1.0, 1.0)); }
     
    566596  case 30:
    567597
    568 /* Line 677 of lalr1.cc  */
     598/* Line 690 of lalr1.cc  */
    569599#line 131 "easymesh/easymesh-parser.y"
    570600    { mc.m_mesh.Scale(vec3(1.0, (yysemantic_stack_[(2) - (2)].args).f0, 1.0)); }
     
    573603  case 31:
    574604
    575 /* Line 677 of lalr1.cc  */
     605/* Line 690 of lalr1.cc  */
    576606#line 132 "easymesh/easymesh-parser.y"
    577607    { mc.m_mesh.Scale(vec3(1.0, 1.0, (yysemantic_stack_[(2) - (2)].args).f0)); }
     
    580610  case 32:
    581611
    582 /* Line 677 of lalr1.cc  */
     612/* Line 690 of lalr1.cc  */
    583613#line 133 "easymesh/easymesh-parser.y"
    584614    { mc.m_mesh.Scale(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
     
    587617  case 33:
    588618
    589 /* Line 677 of lalr1.cc  */
     619/* Line 690 of lalr1.cc  */
    590620#line 134 "easymesh/easymesh-parser.y"
    591621    { mc.m_mesh.MirrorX(); }
     
    594624  case 34:
    595625
    596 /* Line 677 of lalr1.cc  */
     626/* Line 690 of lalr1.cc  */
    597627#line 135 "easymesh/easymesh-parser.y"
    598628    { mc.m_mesh.MirrorY(); }
     
    601631  case 35:
    602632
    603 /* Line 677 of lalr1.cc  */
     633/* Line 690 of lalr1.cc  */
    604634#line 136 "easymesh/easymesh-parser.y"
    605635    { mc.m_mesh.MirrorZ(); }
     
    608638  case 36:
    609639
    610 /* Line 677 of lalr1.cc  */
     640/* Line 690 of lalr1.cc  */
    611641#line 137 "easymesh/easymesh-parser.y"
    612642    { mc.m_mesh.ToggleScaleWinding(); }
     
    615645  case 37:
    616646
    617 /* Line 677 of lalr1.cc  */
     647/* Line 690 of lalr1.cc  */
    618648#line 141 "easymesh/easymesh-parser.y"
    619649    { mc.m_mesh.AppendCylinder((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
     
    624654  case 38:
    625655
    626 /* Line 677 of lalr1.cc  */
     656/* Line 690 of lalr1.cc  */
    627657#line 144 "easymesh/easymesh-parser.y"
    628658    { mc.m_mesh.AppendBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2)); }
     
    631661  case 39:
    632662
    633 /* Line 677 of lalr1.cc  */
     663/* Line 690 of lalr1.cc  */
    634664#line 145 "easymesh/easymesh-parser.y"
    635665    { mc.m_mesh.AppendSmoothChamfBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
     
    639669  case 40:
    640670
    641 /* Line 677 of lalr1.cc  */
     671/* Line 690 of lalr1.cc  */
    642672#line 147 "easymesh/easymesh-parser.y"
    643673    { mc.m_mesh.AppendFlatChamfBox(vec3((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
     
    647677  case 41:
    648678
    649 /* Line 677 of lalr1.cc  */
     679/* Line 690 of lalr1.cc  */
    650680#line 149 "easymesh/easymesh-parser.y"
    651681    { mc.m_mesh.AppendSphere((yysemantic_stack_[(2) - (2)].args).f0,
     
    655685  case 42:
    656686
    657 /* Line 677 of lalr1.cc  */
     687/* Line 690 of lalr1.cc  */
    658688#line 151 "easymesh/easymesh-parser.y"
    659689    { mc.m_mesh.AppendCapsule((yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
     
    662692  case 43:
    663693
    664 /* Line 677 of lalr1.cc  */
     694/* Line 690 of lalr1.cc  */
    665695#line 152 "easymesh/easymesh-parser.y"
    666696    { mc.m_mesh.AppendTorus((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2); }
     
    669699  case 44:
    670700
    671 /* Line 677 of lalr1.cc  */
     701/* Line 690 of lalr1.cc  */
    672702#line 153 "easymesh/easymesh-parser.y"
    673703    { mc.m_mesh.AppendStar((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (yysemantic_stack_[(2) - (2)].args).f2,
     
    677707  case 45:
    678708
    679 /* Line 677 of lalr1.cc  */
     709/* Line 690 of lalr1.cc  */
    680710#line 155 "easymesh/easymesh-parser.y"
    681711    { mc.m_mesh.AppendExpandedStar((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
     
    685715  case 46:
    686716
    687 /* Line 677 of lalr1.cc  */
     717/* Line 690 of lalr1.cc  */
    688718#line 157 "easymesh/easymesh-parser.y"
    689719    { mc.m_mesh.AppendDisc((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1, (int)(yysemantic_stack_[(2) - (2)].args).f2); }
     
    692722  case 47:
    693723
    694 /* Line 677 of lalr1.cc  */
     724/* Line 690 of lalr1.cc  */
    695725#line 158 "easymesh/easymesh-parser.y"
    696726    { mc.m_mesh.AppendSimpleTriangle((yysemantic_stack_[(2) - (2)].args).f0, (int)(yysemantic_stack_[(2) - (2)].args).f1); }
     
    699729  case 48:
    700730
    701 /* Line 677 of lalr1.cc  */
     731/* Line 690 of lalr1.cc  */
    702732#line 159 "easymesh/easymesh-parser.y"
    703733    { mc.m_mesh.AppendSimpleQuad((yysemantic_stack_[(2) - (2)].args).f0, (int)(yysemantic_stack_[(2) - (2)].args).f1); }
     
    706736  case 49:
    707737
    708 /* Line 677 of lalr1.cc  */
     738/* Line 690 of lalr1.cc  */
    709739#line 160 "easymesh/easymesh-parser.y"
    710740    { mc.m_mesh.AppendCog((int)(yysemantic_stack_[(2) - (2)].args).f0, (yysemantic_stack_[(2) - (2)].args).f1,
    711                                  (yysemantic_stack_[(2) - (2)].args).f2 / 2, (yysemantic_stack_[(2) - (2)].args).f3 / 2, (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3, (yysemantic_stack_[(2) - (2)].args).f4,
    712                                  (yysemantic_stack_[(2) - (2)].args).f5, (yysemantic_stack_[(2) - (2)].args).f6, (int)(yysemantic_stack_[(2) - (2)].args).f7); }
     741                                 (yysemantic_stack_[(2) - (2)].args).f2, (yysemantic_stack_[(2) - (2)].args).f3, (yysemantic_stack_[(2) - (2)].args).f4, (yysemantic_stack_[(2) - (2)].args).f5, (yysemantic_stack_[(2) - (2)].args).f6,
     742                                 (yysemantic_stack_[(2) - (2)].args).f7, (yysemantic_stack_[(2) - (2)].args).f8, (int)(yysemantic_stack_[(2) - (2)].args).f9); }
    713743    break;
    714744
    715745  case 50:
    716746
    717 /* Line 677 of lalr1.cc  */
     747/* Line 690 of lalr1.cc  */
    718748#line 165 "easymesh/easymesh-parser.y"
    719749    { (yyval.args).f0 = (yysemantic_stack_[(1) - (1)].fval); }
     
    722752  case 51:
    723753
    724 /* Line 677 of lalr1.cc  */
     754/* Line 690 of lalr1.cc  */
    725755#line 166 "easymesh/easymesh-parser.y"
    726756    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f1 = (yysemantic_stack_[(2) - (2)].fval); }
     
    729759  case 52:
    730760
    731 /* Line 677 of lalr1.cc  */
     761/* Line 690 of lalr1.cc  */
    732762#line 167 "easymesh/easymesh-parser.y"
    733763    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f2 = (yysemantic_stack_[(2) - (2)].fval); }
     
    736766  case 53:
    737767
    738 /* Line 677 of lalr1.cc  */
     768/* Line 690 of lalr1.cc  */
    739769#line 168 "easymesh/easymesh-parser.y"
    740770    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f3 = (yysemantic_stack_[(2) - (2)].fval); }
     
    743773  case 54:
    744774
    745 /* Line 677 of lalr1.cc  */
     775/* Line 690 of lalr1.cc  */
    746776#line 169 "easymesh/easymesh-parser.y"
    747777    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f4 = (yysemantic_stack_[(2) - (2)].fval); }
     
    750780  case 55:
    751781
    752 /* Line 677 of lalr1.cc  */
     782/* Line 690 of lalr1.cc  */
    753783#line 170 "easymesh/easymesh-parser.y"
    754784    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f5 = (yysemantic_stack_[(2) - (2)].fval); }
     
    757787  case 56:
    758788
    759 /* Line 677 of lalr1.cc  */
     789/* Line 690 of lalr1.cc  */
    760790#line 171 "easymesh/easymesh-parser.y"
    761791    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f6 = (yysemantic_stack_[(2) - (2)].fval); }
     
    764794  case 57:
    765795
    766 /* Line 677 of lalr1.cc  */
     796/* Line 690 of lalr1.cc  */
    767797#line 172 "easymesh/easymesh-parser.y"
    768798    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f7 = (yysemantic_stack_[(2) - (2)].fval); }
     
    771801  case 58:
    772802
    773 /* Line 677 of lalr1.cc  */
    774 #line 175 "easymesh/easymesh-parser.y"
     803/* Line 690 of lalr1.cc  */
     804#line 173 "easymesh/easymesh-parser.y"
     805    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f8 = (yysemantic_stack_[(2) - (2)].fval); }
     806    break;
     807
     808  case 59:
     809
     810/* Line 690 of lalr1.cc  */
     811#line 174 "easymesh/easymesh-parser.y"
     812    { (yyval.args) = (yysemantic_stack_[(2) - (1)].args); (yyval.args).f9 = (yysemantic_stack_[(2) - (2)].fval); }
     813    break;
     814
     815  case 60:
     816
     817/* Line 690 of lalr1.cc  */
     818#line 177 "easymesh/easymesh-parser.y"
    775819    { (yyval.fval) = (yysemantic_stack_[(1) - (1)].fval); }
    776820    break;
    777821
    778   case 59:
    779 
    780 /* Line 677 of lalr1.cc  */
    781 #line 176 "easymesh/easymesh-parser.y"
     822  case 61:
     823
     824/* Line 690 of lalr1.cc  */
     825#line 178 "easymesh/easymesh-parser.y"
    782826    { (yyval.fval) = -(yysemantic_stack_[(2) - (2)].fval); }
    783827    break;
     
    785829
    786830
    787 /* Line 677 of lalr1.cc  */
    788 #line 789 "generated/easymesh-parser.cpp"
     831/* Line 690 of lalr1.cc  */
     832#line 833 "generated/easymesh-parser.cpp"
    789833        default:
    790834          break;
    791835      }
     836    /* User semantic actions sometimes alter yychar, and that requires
     837       that yytoken be updated with the new translation.  We take the
     838       approach of translating immediately before every use of yytoken.
     839       One alternative is translating here after every semantic action,
     840       but that translation would be missed if the semantic action
     841       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
     842       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
     843       destructor might then be invoked immediately.  In the case of
     844       YYERROR, subsequent parser actions might lead to an incorrect
     845       destructor call or verbose syntax error message before the
     846       lookahead is translated.  */
    792847    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
    793848
     
    813868  `------------------------------------*/
    814869  yyerrlab:
     870    /* Make sure we have latest lookahead translation.  See comments at
     871       user semantic actions for why this is necessary.  */
     872    yytoken = yytranslate_ (yychar);
     873
    815874    /* If not already recovering from an error, report this error.  */
    816875    if (!yyerrstatus_)
    817876      {
    818877        ++yynerrs_;
     878        if (yychar == yyempty_)
     879          yytoken = yyempty_;
    819880        error (yylloc, yysyntax_error_ (yystate, yytoken));
    820881      }
    821882
    822     yyerror_range[0] = yylloc;
     883    yyerror_range[1] = yylloc;
    823884    if (yyerrstatus_ == 3)
    824885      {
     
    855916      goto yyerrorlab;
    856917
    857     yyerror_range[0] = yylocation_stack_[yylen - 1];
     918    yyerror_range[1] = yylocation_stack_[yylen - 1];
    858919    /* Do not reclaim the symbols of the rule which action triggered
    859920       this YYERROR.  */
     
    872933      {
    873934        yyn = yypact_[yystate];
    874         if (yyn != yypact_ninf_)
     935        if (!yy_pact_value_is_default_ (yyn))
    875936        {
    876937          yyn += yyterror_;
     
    887948        YYABORT;
    888949
    889         yyerror_range[0] = yylocation_stack_[0];
     950        yyerror_range[1] = yylocation_stack_[0];
    890951        yydestruct_ ("Error: popping",
    891952                     yystos_[yystate],
     
    896957      }
    897958
    898     yyerror_range[1] = yylloc;
     959    yyerror_range[2] = yylloc;
    899960    // Using YYLLOC is tempting, but would change the location of
    900961    // the lookahead.  YYLOC is available though.
    901     YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
     962    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
    902963    yysemantic_stack_.push (yylval);
    903964    yylocation_stack_.push (yyloc);
     
    922983  yyreturn:
    923984    if (yychar != yyempty_)
    924       yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
     985      {
     986        /* Make sure we have latest lookahead translation.  See comments
     987           at user semantic actions for why this is necessary.  */
     988        yytoken = yytranslate_ (yychar);
     989        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
     990                     &yylloc);
     991      }
    925992
    926993    /* Do not reclaim the symbols of the rule which action triggered
     
    9411008  // Generate an error message.
    9421009  std::string
    943   EasyMeshParser::yysyntax_error_ (int yystate, int tok)
    944   {
    945     std::string res;
    946     YYUSE (yystate);
    947 #if YYERROR_VERBOSE
    948     int yyn = yypact_[yystate];
    949     if (yypact_ninf_ < yyn && yyn <= yylast_)
     1010  EasyMeshParser::yysyntax_error_ (int yystate, int yytoken)
     1011  {
     1012    std::string yyres;
     1013    // Number of reported tokens (one for the "unexpected", one per
     1014    // "expected").
     1015    size_t yycount = 0;
     1016    // Its maximum.
     1017    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
     1018    // Arguments of yyformat.
     1019    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
     1020
     1021    /* There are many possibilities here to consider:
     1022       - If this state is a consistent state with a default action, then
     1023         the only way this function was invoked is if the default action
     1024         is an error action.  In that case, don't check for expected
     1025         tokens because there are none.
     1026       - The only way there can be no lookahead present (in yytoken) is
     1027         if this state is a consistent state with a default action.
     1028         Thus, detecting the absence of a lookahead is sufficient to
     1029         determine that there is no unexpected or expected token to
     1030         report.  In that case, just report a simple "syntax error".
     1031       - Don't assume there isn't a lookahead just because this state is
     1032         a consistent state with a default action.  There might have
     1033         been a previous inconsistent state, consistent state with a
     1034         non-default action, or user semantic action that manipulated
     1035         yychar.
     1036       - Of course, the expected token list depends on states to have
     1037         correct lookahead information, and it depends on the parser not
     1038         to perform extra reductions after fetching a lookahead from the
     1039         scanner and before detecting a syntax error.  Thus, state
     1040         merging (from LALR or IELR) and default reductions corrupt the
     1041         expected token list.  However, the list is correct for
     1042         canonical LR with one exception: it will still contain any
     1043         token that will not be accepted due to an error action in a
     1044         later state.
     1045    */
     1046    if (yytoken != yyempty_)
    9501047      {
    951         /* Start YYX at -YYN if negative to avoid negative indexes in
    952            YYCHECK.  */
    953         int yyxbegin = yyn < 0 ? -yyn : 0;
    954 
    955         /* Stay within bounds of both yycheck and yytname.  */
    956         int yychecklim = yylast_ - yyn + 1;
    957         int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
    958         int count = 0;
    959         for (int x = yyxbegin; x < yyxend; ++x)
    960           if (yycheck_[x + yyn] == x && x != yyterror_)
    961             ++count;
    962 
    963         // FIXME: This method of building the message is not compatible
    964         // with internationalization.  It should work like yacc.c does it.
    965         // That is, first build a string that looks like this:
    966         // "syntax error, unexpected %s or %s or %s"
    967         // Then, invoke YY_ on this string.
    968         // Finally, use the string as a format to output
    969         // yytname_[tok], etc.
    970         // Until this gets fixed, this message appears in English only.
    971         res = "syntax error, unexpected ";
    972         res += yytnamerr_ (yytname_[tok]);
    973         if (count < 5)
    974           {
    975             count = 0;
    976             for (int x = yyxbegin; x < yyxend; ++x)
    977               if (yycheck_[x + yyn] == x && x != yyterror_)
    978                 {
    979                   res += (!count++) ? ", expecting " : " or ";
    980                   res += yytnamerr_ (yytname_[x]);
    981                 }
    982           }
     1048        yyarg[yycount++] = yytname_[yytoken];
     1049        int yyn = yypact_[yystate];
     1050        if (!yy_pact_value_is_default_ (yyn))
     1051          {
     1052            /* Start YYX at -YYN if negative to avoid negative indexes in
     1053               YYCHECK.  In other words, skip the first -YYN actions for
     1054               this state because they are default actions.  */
     1055            int yyxbegin = yyn < 0 ? -yyn : 0;
     1056            /* Stay within bounds of both yycheck and yytname.  */
     1057            int yychecklim = yylast_ - yyn + 1;
     1058            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
     1059            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
     1060              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
     1061                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
     1062                {
     1063                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
     1064                    {
     1065                      yycount = 1;
     1066                      break;
     1067                    }
     1068                  else
     1069                    yyarg[yycount++] = yytname_[yyx];
     1070                }
     1071          }
    9831072      }
    984     else
    985 #endif
    986       res = YY_("syntax error");
    987     return res;
     1073
     1074    char const* yyformat = 0;
     1075    switch (yycount)
     1076      {
     1077#define YYCASE_(N, S)                         \
     1078        case N:                               \
     1079          yyformat = S;                       \
     1080        break
     1081        YYCASE_(0, YY_("syntax error"));
     1082        YYCASE_(1, YY_("syntax error, unexpected %s"));
     1083        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
     1084        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
     1085        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
     1086        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
     1087#undef YYCASE_
     1088      }
     1089
     1090    // Argument number.
     1091    size_t yyi = 0;
     1092    for (char const* yyp = yyformat; *yyp; ++yyp)
     1093      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
     1094        {
     1095          yyres += yytnamerr_ (yyarg[yyi++]);
     1096          ++yyp;
     1097        }
     1098      else
     1099        yyres += *yyp;
     1100    return yyres;
    9881101  }
    9891102
     
    9911104  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    9921105     STATE-NUM.  */
    993   const signed char EasyMeshParser::yypact_ninf_ = -10;
     1106  const signed char EasyMeshParser::yypact_ninf_ = -48;
    9941107  const signed char
    9951108  EasyMeshParser::yypact_[] =
    9961109  {
    997         -3,    11,    87,     6,     6,     6,     6,   -10,     6,     6,
    998        6,     6,   -10,     6,     6,     6,     6,   -10,     6,     6,
    999      -10,     6,     6,     6,     6,     6,     6,     6,     6,     6,
    1000        6,     6,     6,     6,     6,   -10,    36,    43,    -3,    -3,
    1001       73,   -10,   -10,   -10,   -10,   -10,   -10,     6,     6,     6,
    1002        6,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,
    1003      -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,
    1004        6,     6,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,
    1005      -10,   -10,   -10,     6,     6,   -10,   -10,   -10,   -10,   -10,
    1006       10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,   -10,
    1007      -10,   -10
     1110        37,   -27,    89,   -32,   -32,   -32,   -32,   -48,   -32,   -32,
     1111     -32,   -32,   -48,   -32,   -32,   -32,   -32,   -48,   -32,   -32,
     1112     -48,   -32,   -32,   -32,   -32,   -32,   -32,   -32,   -32,   -32,
     1113     -32,   -32,   -32,   -32,   -32,   -48,     5,    13,    37,    37,
     1114      75,   -48,   -48,   -48,   -48,   -48,   -48,   -32,   -32,   -32,
     1115     -32,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,
     1116     -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,
     1117     -32,   -32,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,
     1118     -48,   -48,   -48,   -32,   -32,   -32,   -32,   -48,   -48,   -48,
     1119     -48,   -48,   -25,   -48,   -48,   -48,   -48,   -48,   -48,   -48,
     1120     -48,   -48,   -48,   -48,   -48,   -48
    10081121  };
    10091122
    1010   /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
    1011      doesn't specify something else to do.  Zero means the default is an
    1012      error.  */
     1123  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
     1124     YYTABLE doesn't specify something else to do.  Zero means the
     1125     default is an error.  */
    10131126  const unsigned char
    10141127  EasyMeshParser::yydefact_[] =
     
    10181131      36,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    10191132       0,     0,     0,     0,     0,     7,     0,     0,     3,     0,
    1020        5,     9,    11,    12,    13,    58,    15,     0,     0,     0,
     1133       5,     9,    11,    12,    13,    60,    15,     0,     0,     0,
    10211134       0,    14,    50,    17,    16,    19,    23,    26,    29,    20,
    10221135      24,    27,    30,    21,    25,    28,    31,    22,    32,    18,
    10231136       0,     0,    37,    38,    39,    40,    41,    42,    44,    45,
    1024       46,    47,    48,     0,     0,    49,    43,     1,     2,     4,
    1025        0,    10,    59,    51,    52,    53,    54,    55,    56,    57,
    1026       8,     6
     1137      46,    47,    48,     0,     0,     0,     0,    49,    43,     1,
     1138       2,     4,     0,    10,    61,    51,    52,    53,    54,    55,
     1139      56,    57,    58,    59,    8,     6
    10271140  };
    10281141
     
    10311144  EasyMeshParser::yypgoto_[] =
    10321145  {
    1033        -10,   -10,    -4,   -10,   -10,   -10,   -10,    14,   -10,   -10,
    1034      -10,   107,    26,    37,    44,    31,    30,   -10,   -10,    -9
     1146       -48,   -48,   -19,   -48,   -48,   -48,   -48,   -15,   -48,   -48,
     1147     -48,   109,    -4,    -1,     6,    -7,     1,   -48,   -48,   -48,
     1148     -48,   -47
    10351149  };
    10361150
     
    10391153  EasyMeshParser::yydefgoto_[] =
    10401154  {
    1041         -1,    36,    37,    38,    39,   101,    40,    41,    42,    43,
    1042       44,    48,    49,    50,    70,    71,    72,    84,    85,    52
     1155        -1,    36,    37,    38,    39,   105,    40,    41,    42,    43,
     1156      44,    48,    49,    50,    70,    71,    72,    84,    85,    86,
     1157      87,    52
    10431158  };
    10441159
    10451160  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    10461161     positive, shift that token.  If negative, reduce the rule which
    1047      number is the opposite.  If zero, do what YYDEFACT says.  */
     1162     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
    10481163  const signed char EasyMeshParser::yytable_ninf_ = -1;
    10491164  const unsigned char
    10501165  EasyMeshParser::yytable_[] =
    10511166  {
    1052          1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
     1167        94,    95,    96,    97,    57,    89,    45,    51,    54,    61,
     1168      47,    45,    46,    90,    65,    47,   104,    67,    68,    91,
     1169      92,    78,    73,    98,    99,    93,    77,    81,    82,    80,
     1170      74,    75,    76,    88,    83,    79,   100,   101,   102,   103,
     1171       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
    10531172      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    10541173      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
    1055       31,    32,    33,    34,    89,    90,    87,    35,    92,    93,
    1056       94,    95,    57,    88,    45,    51,    54,    61,    47,    45,
    1057       46,   100,    65,    47,    91,    67,    68,    81,    82,    78,
    1058       73,    96,    97,    83,    77,     0,     0,    80,    74,    75,
    1059       76,    86,     0,    79,    98,    99,     1,     2,     3,     4,
     1174      31,    32,    33,    34,     0,     0,     0,    35,     1,     2,
     1175       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     1176      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     1177      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
     1178      33,    34,    55,    56,     0,    58,     0,    59,    60,     0,
     1179      62,     0,    63,    64,     0,    66,     0,    45,    53,     0,
     1180      69,    47
     1181  };
     1182
     1183  /* YYCHECK.  */
     1184  const signed char
     1185  EasyMeshParser::yycheck_[] =
     1186  {
     1187        47,    48,    49,    50,     5,     0,    38,     1,     2,    10,
     1188      42,    38,    39,     0,    15,    42,    41,    18,    19,    38,
     1189      39,    28,    23,    70,    71,    40,    27,    31,    32,    30,
     1190      24,    25,    26,    34,    33,    29,    83,    84,    85,    86,
     1191       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     1192      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     1193      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
     1194      33,    34,    35,    36,    -1,    -1,    -1,    40,     3,     4,
    10601195       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    10611196      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    10621197      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
    1063       55,    56,     0,    58,     0,    59,    60,     0,    62,     0,
    1064       63,    64,     0,    66,     0,    45,    53,     0,    69,    47
    1065   };
    1066 
    1067   /* YYCHECK.  */
    1068   const signed char
    1069   EasyMeshParser::yycheck_[] =
    1070   {
    1071          3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    1072       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    1073       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
    1074       33,    34,    35,    36,    38,    39,     0,    40,    47,    48,
    1075       49,    50,     5,     0,    38,     1,     2,    10,    42,    38,
    1076       39,    41,    15,    42,    40,    18,    19,    31,    32,    28,
    1077       23,    70,    71,    33,    27,    -1,    -1,    30,    24,    25,
    1078       26,    34,    -1,    29,    83,    84,     3,     4,     5,     6,
    1079        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    1080       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    1081       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
    1082        3,     4,    -1,     6,    -1,     8,     9,    -1,    11,    -1,
    1083       13,    14,    -1,    16,    -1,    38,    39,    -1,    21,    42
     1198      35,    36,     3,     4,    -1,     6,    -1,     8,     9,    -1,
     1199      11,    -1,    13,    14,    -1,    16,    -1,    38,    39,    -1,
     1200      21,    42
    10841201  };
    10851202
     
    10941211      32,    33,    34,    35,    36,    40,    44,    45,    46,    47,
    10951212      49,    50,    51,    52,    53,    38,    39,    42,    54,    55,
    1096       56,    57,    62,    39,    57,    54,    54,    56,    54,    54,
     1213      56,    57,    64,    39,    57,    54,    54,    56,    54,    54,
    10971214      54,    56,    54,    54,    54,    56,    54,    56,    56,    54,
    10981215      57,    58,    59,    56,    57,    57,    57,    56,    58,    57,
    1099       56,    55,    55,    59,    60,    61,    56,     0,     0,    45,
    1100       45,    50,    62,    62,    62,    62,    62,    62,    62,    62,
    1101       41,    48
     1216      56,    55,    55,    59,    60,    61,    62,    63,    56,     0,
     1217       0,    45,    45,    50,    64,    64,    64,    64,    64,    64,
     1218      64,    64,    64,    64,    41,    48
    11021219  };
    11031220
     
    11251242      52,    52,    52,    52,    52,    52,    52,    53,    53,    53,
    11261243      53,    53,    53,    53,    53,    53,    53,    53,    53,    53,
    1127       54,    55,    56,    57,    58,    59,    60,    61,    62,    62
     1244      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
     1245      64,    64
    11281246  };
    11291247
     
    11371255       2,     2,     2,     1,     1,     1,     1,     2,     2,     2,
    11381256       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    1139        1,     2,     2,     2,     2,     2,     2,     2,     1,     2
     1257       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     1258       1,     2
    11401259  };
    11411260
     
    11571276  "mesh_open", "mesh_close", "mesh_command_list", "mesh_command",
    11581277  "color_command", "transform_command", "primitive_command", "args1",
    1159   "args2", "args3", "args4", "args5", "args6", "args7", "args8", "number", 0
     1278  "args2", "args3", "args4", "args5", "args6", "args7", "args8", "args9",
     1279  "args10", "number", 0
    11601280  };
    11611281#endif
     
    11791299      57,    -1,    29,    56,    -1,    36,    56,    -1,    30,    58,
    11801300      -1,    31,    57,    -1,    32,    56,    -1,    33,    55,    -1,
    1181       34,    55,    -1,    35,    61,    -1,    62,    -1,    54,    62,
    1182       -1,    55,    62,    -1,    56,    62,    -1,    57,    62,    -1,
    1183       58,    62,    -1,    59,    62,    -1,    60,    62,    -1,    38,
    1184       -1,    42,    62,    -1
     1301      34,    55,    -1,    35,    63,    -1,    64,    -1,    54,    64,
     1302      -1,    55,    64,    -1,    56,    64,    -1,    57,    64,    -1,
     1303      58,    64,    -1,    59,    64,    -1,    60,    64,    -1,    61,
     1304      64,    -1,    62,    64,    -1,    38,    -1,    42,    64,    -1
    11851305  };
    11861306
     
    11951315      80,    83,    86,    89,    91,    93,    95,    97,   100,   103,
    11961316     106,   109,   112,   115,   118,   121,   124,   127,   130,   133,
    1197      136,   138,   141,   144,   147,   150,   153,   156,   159,   161
     1317     136,   138,   141,   144,   147,   150,   153,   156,   159,   162,
     1318     165,   167
    11981319  };
    11991320
     
    12071328     131,   132,   133,   134,   135,   136,   137,   141,   144,   145,
    12081329     147,   149,   151,   152,   153,   155,   157,   158,   159,   160,
    1209      165,   166,   167,   168,   169,   170,   171,   172,   175,   176
     1330     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
     1331     177,   178
    12101332  };
    12111333
     
    12851407
    12861408  const int EasyMeshParser::yyeof_ = 0;
    1287   const int EasyMeshParser::yylast_ = 129;
    1288   const int EasyMeshParser::yynnts_ = 20;
     1409  const int EasyMeshParser::yylast_ = 131;
     1410  const int EasyMeshParser::yynnts_ = 22;
    12891411  const int EasyMeshParser::yyempty_ = -2;
    1290   const int EasyMeshParser::yyfinal_ = 87;
     1412  const int EasyMeshParser::yyfinal_ = 89;
    12911413  const int EasyMeshParser::yyterror_ = 1;
    12921414  const int EasyMeshParser::yyerrcode_ = 256;
     
    12991421} // lol
    13001422
    1301 /* Line 1053 of lalr1.cc  */
    1302 #line 1303 "generated/easymesh-parser.cpp"
    1303 
    1304 
    1305 /* Line 1055 of lalr1.cc  */
    1306 #line 179 "easymesh/easymesh-parser.y"
     1423/* Line 1136 of lalr1.cc  */
     1424#line 1425 "generated/easymesh-parser.cpp"
     1425
     1426
     1427/* Line 1138 of lalr1.cc  */
     1428#line 181 "easymesh/easymesh-parser.y"
    13071429
    13081430
  • trunk/src/generated/easymesh-parser.h

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Skeleton interface for Bison LALR(1) parsers in C++
    44   
    5       Copyright (C) 2002-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
     
    4141#include <iostream>
    4242#include "stack.hh"
    43 
    44 
    45 namespace lol {
    46 
    47 /* Line 34 of lalr1.cc  */
    48 #line 49 "generated/easymesh-parser.h"
    49   class position;
    50   class location;
    51 
    52 } // lol
    53 
    54 /* Line 34 of lalr1.cc  */
    55 #line 56 "generated/easymesh-parser.h"
    56 
    5743#include "location.hh"
    5844
     
    7561#endif
    7662
    77 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
    78    If N is 0, then set CURRENT to the empty location which ends
    79    the previous symbol: RHS[0] (always defined).  */
    80 
    81 #ifndef YYLLOC_DEFAULT
    82 # define YYLLOC_DEFAULT(Current, Rhs, N)                \
    83 do {                                                    \
    84   if (N)                                                \
    85     {                                                   \
    86       (Current).begin = (Rhs)[1].begin;                 \
    87       (Current).end   = (Rhs)[N].end;                   \
    88     }                                                   \
    89   else                                                  \
    90     {                                                   \
    91       (Current).begin = (Current).end = (Rhs)[0].end;   \
    92     }                                                   \
    93 } while (false)
    94 #endif
    95 
    9663
    9764namespace lol {
    9865
    99 /* Line 34 of lalr1.cc  */
    100 #line 101 "generated/easymesh-parser.h"
     66/* Line 35 of lalr1.cc  */
     67#line 68 "generated/easymesh-parser.h"
    10168
    10269  /// A Bison parser.
     
    10976    {
    11077
    111 /* Line 34 of lalr1.cc  */
     78/* Line 35 of lalr1.cc  */
    11279#line 36 "easymesh/easymesh-parser.y"
    11380
     
    11582    /* Can't use uin32_t here for some reason */
    11683    unsigned u32val;
    117     struct { float f0, f1, f2, f3, f4, f5, f6, f7; } args;
    118 
    119 
    120 
    121 /* Line 34 of lalr1.cc  */
    122 #line 123 "generated/easymesh-parser.h"
     84    struct { float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9; } args;
     85
     86
     87
     88/* Line 35 of lalr1.cc  */
     89#line 90 "generated/easymesh-parser.h"
    12390    };
    12491#else
     
    243210    location_stack_type yylocation_stack_;
    244211
     212    /// Whether the given \c yypact_ value indicates a defaulted state.
     213    /// \param yyvalue   the value to check
     214    static bool yy_pact_value_is_default_ (int yyvalue);
     215
     216    /// Whether the given \c yytable_ value indicates a syntax error.
     217    /// \param yyvalue   the value to check
     218    static bool yy_table_value_is_error_ (int yyvalue);
     219
    245220    /// Internal symbol numbers.
    246221    typedef unsigned char token_number_type;
     
    250225    static const signed char yypact_ninf_;
    251226
    252     /// For a state, default rule to reduce.
     227    /// For a state, default reduction number.
    253228    /// Unless\a  yytable_ specifies something else to do.
    254229    /// Zero means the default is an error.
     
    281256#endif
    282257
    283 #if YYERROR_VERBOSE
    284258    /// Convert the symbol name \a n to a form suitable for a diagnostic.
    285     virtual std::string yytnamerr_ (const char *n);
    286 #endif
     259    static std::string yytnamerr_ (const char *n);
    287260
    288261#if YYDEBUG
     
    342315} // lol
    343316
    344 /* Line 34 of lalr1.cc  */
    345 #line 346 "generated/easymesh-parser.h"
     317/* Line 35 of lalr1.cc  */
     318#line 319 "generated/easymesh-parser.h"
    346319
    347320
  • trunk/src/generated/location.hh

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Locations for Bison parsers in C++
    44   
    5       Copyright (C) 2002-2007, 2009-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2007, 2009-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
  • trunk/src/generated/lolfx-parser.cpp

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Skeleton implementation for Bison LALR(1) parsers in C++
    44   
    5       Copyright (C) 2002-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
     
    3636/* First part of user declarations.  */
    3737
    38 /* Line 310 of lalr1.cc  */
     38/* Line 293 of lalr1.cc  */
    3939#line 1 "gpu/lolfx-parser.y"
    4040
     
    5959
    6060
    61 /* Line 310 of lalr1.cc  */
     61/* Line 293 of lalr1.cc  */
    6262#line 63 "generated/lolfx-parser.cpp"
    6363
     
    6767/* User implementation prologue.  */
    6868
    69 /* Line 316 of lalr1.cc  */
     69/* Line 299 of lalr1.cc  */
    7070#line 241 "gpu/lolfx-parser.y"
    7171
     
    7676
    7777
    78 /* Line 316 of lalr1.cc  */
     78/* Line 299 of lalr1.cc  */
    7979#line 80 "generated/lolfx-parser.cpp"
    8080
     
    9191#endif
    9292
     93/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
     94   If N is 0, then set CURRENT to the empty location which ends
     95   the previous symbol: RHS[0] (always defined).  */
     96
     97#define YYRHSLOC(Rhs, K) ((Rhs)[K])
     98#ifndef YYLLOC_DEFAULT
     99# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
     100 do                                                                    \
     101   if (N)                                                              \
     102     {                                                                 \
     103       (Current).begin = YYRHSLOC (Rhs, 1).begin;                      \
     104       (Current).end   = YYRHSLOC (Rhs, N).end;                        \
     105     }                                                                 \
     106   else                                                                \
     107     {                                                                 \
     108       (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;        \
     109     }                                                                 \
     110 while (false)
     111#endif
     112
    93113/* Suppress unused-variable warnings by "using" E.  */
    94114#define YYUSE(e) ((void) (e))
     
    142162namespace lol {
    143163
    144 /* Line 379 of lalr1.cc  */
    145 #line 146 "generated/lolfx-parser.cpp"
    146 #if YYERROR_VERBOSE
     164/* Line 382 of lalr1.cc  */
     165#line 166 "generated/lolfx-parser.cpp"
    147166
    148167  /* Return YYSTR after stripping away unnecessary quotes and
     
    183202  }
    184203
    185 #endif
    186204
    187205  /// Build a parser object.
     
    284302#endif
    285303
     304  inline bool
     305  LolFxParser::yy_pact_value_is_default_ (int yyvalue)
     306  {
     307    return yyvalue == yypact_ninf_;
     308  }
     309
     310  inline bool
     311  LolFxParser::yy_table_value_is_error_ (int yyvalue)
     312  {
     313    return yyvalue == yytable_ninf_;
     314  }
     315
    286316  int
    287317  LolFxParser::parse ()
     
    305335    location_type yylloc;
    306336    /// The locations where the error started and ended.
    307     location_type yyerror_range[2];
     337    location_type yyerror_range[3];
    308338
    309339    /// $$.
     
    343373    /* Try to take a decision without lookahead.  */
    344374    yyn = yypact_[yystate];
    345     if (yyn == yypact_ninf_)
     375    if (yy_pact_value_is_default_ (yyn))
    346376      goto yydefault;
    347377
     
    376406    if (yyn <= 0)
    377407      {
    378         if (yyn == 0 || yyn == yytable_ninf_)
    379         goto yyerrlab;
     408        if (yy_table_value_is_error_ (yyn))
     409          goto yyerrlab;
    380410        yyn = -yyn;
    381411        goto yyreduce;
     
    433463          case 202:
    434464
    435 /* Line 677 of lalr1.cc  */
     465/* Line 690 of lalr1.cc  */
    436466#line 728 "gpu/lolfx-parser.y"
    437467    { std::cout << "New tech " << std::endl; }
     
    440470  case 203:
    441471
    442 /* Line 677 of lalr1.cc  */
     472/* Line 690 of lalr1.cc  */
    443473#line 736 "gpu/lolfx-parser.y"
    444474    { std::cout << "New name " << (yysemantic_stack_[(1) - (1)].sval) << std::endl; }
     
    447477  case 204:
    448478
    449 /* Line 677 of lalr1.cc  */
     479/* Line 690 of lalr1.cc  */
    450480#line 737 "gpu/lolfx-parser.y"
    451481    { std::cout << "New name " << (yysemantic_stack_[(1) - (1)].sval) << std::endl; }
     
    454484  case 207:
    455485
    456 /* Line 677 of lalr1.cc  */
     486/* Line 690 of lalr1.cc  */
    457487#line 750 "gpu/lolfx-parser.y"
    458488    { std::cout << "New pass " << std::endl; }
     
    461491  case 226:
    462492
    463 /* Line 677 of lalr1.cc  */
     493/* Line 690 of lalr1.cc  */
    464494#line 786 "gpu/lolfx-parser.y"
    465495    { std::cout << "new shader" << std::endl; }
     
    468498
    469499
    470 /* Line 677 of lalr1.cc  */
    471 #line 472 "generated/lolfx-parser.cpp"
     500/* Line 690 of lalr1.cc  */
     501#line 502 "generated/lolfx-parser.cpp"
    472502        default:
    473503          break;
    474504      }
     505    /* User semantic actions sometimes alter yychar, and that requires
     506       that yytoken be updated with the new translation.  We take the
     507       approach of translating immediately before every use of yytoken.
     508       One alternative is translating here after every semantic action,
     509       but that translation would be missed if the semantic action
     510       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
     511       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
     512       destructor might then be invoked immediately.  In the case of
     513       YYERROR, subsequent parser actions might lead to an incorrect
     514       destructor call or verbose syntax error message before the
     515       lookahead is translated.  */
    475516    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
    476517
     
    496537  `------------------------------------*/
    497538  yyerrlab:
     539    /* Make sure we have latest lookahead translation.  See comments at
     540       user semantic actions for why this is necessary.  */
     541    yytoken = yytranslate_ (yychar);
     542
    498543    /* If not already recovering from an error, report this error.  */
    499544    if (!yyerrstatus_)
    500545      {
    501546        ++yynerrs_;
     547        if (yychar == yyempty_)
     548          yytoken = yyempty_;
    502549        error (yylloc, yysyntax_error_ (yystate, yytoken));
    503550      }
    504551
    505     yyerror_range[0] = yylloc;
     552    yyerror_range[1] = yylloc;
    506553    if (yyerrstatus_ == 3)
    507554      {
     
    538585      goto yyerrorlab;
    539586
    540     yyerror_range[0] = yylocation_stack_[yylen - 1];
     587    yyerror_range[1] = yylocation_stack_[yylen - 1];
    541588    /* Do not reclaim the symbols of the rule which action triggered
    542589       this YYERROR.  */
     
    555602      {
    556603        yyn = yypact_[yystate];
    557         if (yyn != yypact_ninf_)
     604        if (!yy_pact_value_is_default_ (yyn))
    558605        {
    559606          yyn += yyterror_;
     
    570617        YYABORT;
    571618
    572         yyerror_range[0] = yylocation_stack_[0];
     619        yyerror_range[1] = yylocation_stack_[0];
    573620        yydestruct_ ("Error: popping",
    574621                     yystos_[yystate],
     
    579626      }
    580627
    581     yyerror_range[1] = yylloc;
     628    yyerror_range[2] = yylloc;
    582629    // Using YYLLOC is tempting, but would change the location of
    583630    // the lookahead.  YYLOC is available though.
    584     YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
     631    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
    585632    yysemantic_stack_.push (yylval);
    586633    yylocation_stack_.push (yyloc);
     
    605652  yyreturn:
    606653    if (yychar != yyempty_)
    607       yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
     654      {
     655        /* Make sure we have latest lookahead translation.  See comments
     656           at user semantic actions for why this is necessary.  */
     657        yytoken = yytranslate_ (yychar);
     658        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
     659                     &yylloc);
     660      }
    608661
    609662    /* Do not reclaim the symbols of the rule which action triggered
     
    624677  // Generate an error message.
    625678  std::string
    626   LolFxParser::yysyntax_error_ (int yystate, int tok)
     679  LolFxParser::yysyntax_error_ (int yystate, int yytoken)
    627680  {
    628     std::string res;
    629     YYUSE (yystate);
    630 #if YYERROR_VERBOSE
    631     int yyn = yypact_[yystate];
    632     if (yypact_ninf_ < yyn && yyn <= yylast_)
     681    std::string yyres;
     682    // Number of reported tokens (one for the "unexpected", one per
     683    // "expected").
     684    size_t yycount = 0;
     685    // Its maximum.
     686    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
     687    // Arguments of yyformat.
     688    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
     689
     690    /* There are many possibilities here to consider:
     691       - If this state is a consistent state with a default action, then
     692         the only way this function was invoked is if the default action
     693         is an error action.  In that case, don't check for expected
     694         tokens because there are none.
     695       - The only way there can be no lookahead present (in yytoken) is
     696         if this state is a consistent state with a default action.
     697         Thus, detecting the absence of a lookahead is sufficient to
     698         determine that there is no unexpected or expected token to
     699         report.  In that case, just report a simple "syntax error".
     700       - Don't assume there isn't a lookahead just because this state is
     701         a consistent state with a default action.  There might have
     702         been a previous inconsistent state, consistent state with a
     703         non-default action, or user semantic action that manipulated
     704         yychar.
     705       - Of course, the expected token list depends on states to have
     706         correct lookahead information, and it depends on the parser not
     707         to perform extra reductions after fetching a lookahead from the
     708         scanner and before detecting a syntax error.  Thus, state
     709         merging (from LALR or IELR) and default reductions corrupt the
     710         expected token list.  However, the list is correct for
     711         canonical LR with one exception: it will still contain any
     712         token that will not be accepted due to an error action in a
     713         later state.
     714    */
     715    if (yytoken != yyempty_)
    633716      {
    634         /* Start YYX at -YYN if negative to avoid negative indexes in
    635            YYCHECK.  */
    636         int yyxbegin = yyn < 0 ? -yyn : 0;
    637 
    638         /* Stay within bounds of both yycheck and yytname.  */
    639         int yychecklim = yylast_ - yyn + 1;
    640         int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
    641         int count = 0;
    642         for (int x = yyxbegin; x < yyxend; ++x)
    643           if (yycheck_[x + yyn] == x && x != yyterror_)
    644             ++count;
    645 
    646         // FIXME: This method of building the message is not compatible
    647         // with internationalization.  It should work like yacc.c does it.
    648         // That is, first build a string that looks like this:
    649         // "syntax error, unexpected %s or %s or %s"
    650         // Then, invoke YY_ on this string.
    651         // Finally, use the string as a format to output
    652         // yytname_[tok], etc.
    653         // Until this gets fixed, this message appears in English only.
    654         res = "syntax error, unexpected ";
    655         res += yytnamerr_ (yytname_[tok]);
    656         if (count < 5)
    657           {
    658             count = 0;
    659             for (int x = yyxbegin; x < yyxend; ++x)
    660               if (yycheck_[x + yyn] == x && x != yyterror_)
    661                 {
    662                   res += (!count++) ? ", expecting " : " or ";
    663                   res += yytnamerr_ (yytname_[x]);
    664                 }
    665           }
     717        yyarg[yycount++] = yytname_[yytoken];
     718        int yyn = yypact_[yystate];
     719        if (!yy_pact_value_is_default_ (yyn))
     720          {
     721            /* Start YYX at -YYN if negative to avoid negative indexes in
     722               YYCHECK.  In other words, skip the first -YYN actions for
     723               this state because they are default actions.  */
     724            int yyxbegin = yyn < 0 ? -yyn : 0;
     725            /* Stay within bounds of both yycheck and yytname.  */
     726            int yychecklim = yylast_ - yyn + 1;
     727            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
     728            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
     729              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
     730                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
     731                {
     732                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
     733                    {
     734                      yycount = 1;
     735                      break;
     736                    }
     737                  else
     738                    yyarg[yycount++] = yytname_[yyx];
     739                }
     740          }
    666741      }
    667     else
    668 #endif
    669       res = YY_("syntax error");
    670     return res;
     742
     743    char const* yyformat = 0;
     744    switch (yycount)
     745      {
     746#define YYCASE_(N, S)                         \
     747        case N:                               \
     748          yyformat = S;                       \
     749        break
     750        YYCASE_(0, YY_("syntax error"));
     751        YYCASE_(1, YY_("syntax error, unexpected %s"));
     752        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
     753        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
     754        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
     755        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
     756#undef YYCASE_
     757      }
     758
     759    // Argument number.
     760    size_t yyi = 0;
     761    for (char const* yyp = yyformat; *yyp; ++yyp)
     762      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
     763        {
     764          yyres += yytnamerr_ (yyarg[yyi++]);
     765          ++yyp;
     766        }
     767      else
     768        yyres += *yyp;
     769    return yyres;
    671770  }
    672771
     
    747846  };
    748847
    749   /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
    750      doesn't specify something else to do.  Zero means the default is an
    751      error.  */
     848  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
     849     YYTABLE doesn't specify something else to do.  Zero means the
     850     default is an error.  */
    752851  const unsigned short int
    753852  LolFxParser::yydefact_[] =
     
    856955  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    857956     positive, shift that token.  If negative, reduce the rule which
    858      number is the opposite.  If zero, do what YYDEFACT says.  */
     957     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
    859958  const short int LolFxParser::yytable_ninf_ = -323;
    860959  const short int
     
    37923891} // lol
    37933892
    3794 /* Line 1053 of lalr1.cc  */
    3795 #line 3796 "generated/lolfx-parser.cpp"
    3796 
    3797 
    3798 /* Line 1055 of lalr1.cc  */
     3893/* Line 1136 of lalr1.cc  */
     3894#line 3895 "generated/lolfx-parser.cpp"
     3895
     3896
     3897/* Line 1138 of lalr1.cc  */
    37993898#line 1298 "gpu/lolfx-parser.y"
    38003899
  • trunk/src/generated/lolfx-parser.h

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Skeleton interface for Bison LALR(1) parsers in C++
    44   
    5       Copyright (C) 2002-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
     
    4141#include <iostream>
    4242#include "stack.hh"
    43 
    44 
    45 namespace lol {
    46 
    47 /* Line 34 of lalr1.cc  */
    48 #line 49 "generated/lolfx-parser.h"
    49   class position;
    50   class location;
    51 
    52 } // lol
    53 
    54 /* Line 34 of lalr1.cc  */
    55 #line 56 "generated/lolfx-parser.h"
    56 
    5743#include "location.hh"
    5844
     
    7561#endif
    7662
    77 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
    78    If N is 0, then set CURRENT to the empty location which ends
    79    the previous symbol: RHS[0] (always defined).  */
    80 
    81 #ifndef YYLLOC_DEFAULT
    82 # define YYLLOC_DEFAULT(Current, Rhs, N)                \
    83 do {                                                    \
    84   if (N)                                                \
    85     {                                                   \
    86       (Current).begin = (Rhs)[1].begin;                 \
    87       (Current).end   = (Rhs)[N].end;                   \
    88     }                                                   \
    89   else                                                  \
    90     {                                                   \
    91       (Current).begin = (Current).end = (Rhs)[0].end;   \
    92     }                                                   \
    93 } while (false)
    94 #endif
    95 
    9663
    9764namespace lol {
    9865
    99 /* Line 34 of lalr1.cc  */
    100 #line 101 "generated/lolfx-parser.h"
     66/* Line 35 of lalr1.cc  */
     67#line 68 "generated/lolfx-parser.h"
    10168
    10269  /// A Bison parser.
     
    10976    {
    11077
    111 /* Line 34 of lalr1.cc  */
     78/* Line 35 of lalr1.cc  */
    11279#line 34 "gpu/lolfx-parser.y"
    11380
     
    11986
    12087
    121 /* Line 34 of lalr1.cc  */
    122 #line 123 "generated/lolfx-parser.h"
     88/* Line 35 of lalr1.cc  */
     89#line 90 "generated/lolfx-parser.h"
    12390    };
    12491#else
     
    641608    location_stack_type yylocation_stack_;
    642609
     610    /// Whether the given \c yypact_ value indicates a defaulted state.
     611    /// \param yyvalue   the value to check
     612    static bool yy_pact_value_is_default_ (int yyvalue);
     613
     614    /// Whether the given \c yytable_ value indicates a syntax error.
     615    /// \param yyvalue   the value to check
     616    static bool yy_table_value_is_error_ (int yyvalue);
     617
    643618    /// Internal symbol numbers.
    644619    typedef unsigned short int token_number_type;
     
    648623    static const short int yypact_ninf_;
    649624
    650     /// For a state, default rule to reduce.
     625    /// For a state, default reduction number.
    651626    /// Unless\a  yytable_ specifies something else to do.
    652627    /// Zero means the default is an error.
     
    679654#endif
    680655
    681 #if YYERROR_VERBOSE
    682656    /// Convert the symbol name \a n to a form suitable for a diagnostic.
    683     virtual std::string yytnamerr_ (const char *n);
    684 #endif
     657    static std::string yytnamerr_ (const char *n);
    685658
    686659#if YYDEBUG
     
    740713} // lol
    741714
    742 /* Line 34 of lalr1.cc  */
    743 #line 744 "generated/lolfx-parser.h"
     715/* Line 35 of lalr1.cc  */
     716#line 717 "generated/lolfx-parser.h"
    744717
    745718
  • trunk/src/generated/position.hh

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Positions for Bison parsers in C++
    44   
    5       Copyright (C) 2002-2007, 2009-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2007, 2009-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
  • trunk/src/generated/stack.hh

    r2116 r2152  
    1 /* A Bison parser, made by GNU Bison 2.4.2.  */
     1/* A Bison parser, made by GNU Bison 2.5.  */
    22
    33/* Stack handling for Bison parsers in C++
    44   
    5       Copyright (C) 2002-2010 Free Software Foundation, Inc.
     5      Copyright (C) 2002-2011 Free Software Foundation, Inc.
    66   
    77   This program is free software: you can redistribute it and/or modify
     
    3939namespace lol {
    4040
    41 /* Line 1066 of lalr1.cc  */
     41/* Line 1149 of lalr1.cc  */
    4242#line 43 "generated/stack.hh"
    4343  template <class T, class S = std::deque<T> >
     
    129129} // lol
    130130
    131 /* Line 1152 of lalr1.cc  */
     131/* Line 1235 of lalr1.cc  */
    132132#line 133 "generated/stack.hh"
    133133
  • trunk/tutorial/05_easymesh.cpp

    r2151 r2152  
    2121{
    2222public:
    23     void AddPiece(int x, int y, int h, int dx, int dy, int dh)
    24     {
    25         m_mesh.OpenBrace();
    26         for (int j = 0; j < y; ++j)
    27             for (int i = 0; i < x; ++i)
    28             {
    29                 m_mesh.OpenBrace();
    30                 m_mesh.Compile("ad12,2.2,0 ty.1 ac12,.2,2.4,2.2,0,1 ty.8 ac12,1.7,2.4,2.4,0,1 ty2.5");
    31                 m_mesh.Translate(vec3(i * 8.f, (h - 1) * 3.2f, j * 8.f));
    32                 m_mesh.CloseBrace();
    33             }
    34         m_mesh.OpenBrace();
    35         m_mesh.AppendFlatChamfBox(vec3(x * 8.f, h * 3.2f, y * 8.f), -.1f);
    36         m_mesh.Translate(vec3((x - 1) * 4.f, (h - 1) * 1.6f, (y - 1) * 4.f));
    37         m_mesh.CloseBrace();
    38         m_mesh.Translate(vec3(dx * 8.f, dh * 3.2f, dy * 8.f));
    39 
    40         m_mesh.CloseBrace();
    41     }
    42 
    4323    EasyMeshTutorial()
    4424    {
     25        m_gears.Push(EasyMesh(), mat4(1.0f), 0.0f);
     26        m_gears.Push(EasyMesh(), mat4(1.0f), 0.0f);
     27        m_gears.Push(EasyMesh(), mat4(1.0f), 180.0f / 18);
     28        m_gears.Push(EasyMesh(), mat4(1.0f), 180.0f / 18);
     29        m_gears.Push(EasyMesh(), mat4(1.0f), 180.0f / 18);
     30
     31        m_gears[0].m1.Compile("sc#f9f scb#f9f acg 12 10 5 5 20 20 5 5 0.1 0");
     32        m_gears[1].m1.Compile("sc#ff9 scb#ff9 acg 54 10 95 95 90 90 -5 -5 0.1 0");
     33        m_gears[2].m1.Compile("sc#9ff scb#9ff acg 18 10 5 5 30 30 5 5 0.1 0");
     34        m_gears[3].m1.Compile("sc#9ff scb#9ff acg 18 10 5 5 30 30 5 5 0.1 0");
     35        m_gears[4].m1.Compile("sc#9ff scb#9ff acg 18 10 5 5 30 30 5 5 0.1 0");
     36
    4537        m_angle = 0;
    46 
    47         //m_mesh.Compile("sc#ffb scb#ffb acg 12 10 30 30 5 5 0.1 0");
    48         m_mesh.Compile("sc#ffb scb#ffb acg 12 10 30 30 -5 -5 0.1 0");
    49 
    50 #if 0
    51         m_mesh.Compile("sc#8d3 [ato40 10 40 rx20 ry130 tx30]");
    52 
    53         m_mesh.OpenBrace();
    54         m_mesh.Compile("sc#800 [asph10 25 25 25]");
    55         m_mesh.Compile("ty50");
    56         m_mesh.RadialJitter(0.2f);
    57         m_mesh.Compile("ty-50 tx-40");
    58         m_mesh.CloseBrace();
    59 #endif
    60 
    61 #if 0
    62         //m_mesh.Compile("sc#94e scb#649 [asph3 7 7 7 tx-6 tz-9]");
    63         //m_mesh.Compile("sc#49e scb#469 [asph31 7 7 7 tx-6 tz9]");
    64         m_mesh.Compile("sc#1c1 scb#1c1");
    65         AddPiece(16, 16, 1, -8, -8, -4);
    66 
    67         /* Flat white LOL */
    68         m_mesh.Compile("sc#ccc scb#ccc");
    69 
    70         AddPiece(1, 4, 1, -7, -7, -3);
    71         AddPiece(2, 1, 1, -6, -4, -3);
    72 
    73         AddPiece(1, 4, 1, -3, -7, -3);
    74         AddPiece(2, 1, 1, -2, -7, -3);
    75         AddPiece(2, 1, 1, -2, -4, -3);
    76         AddPiece(1, 2, 1, -1, -6, -3);
    77 
    78         AddPiece(1, 4, 1, 1, -7, -3);
    79         AddPiece(2, 1, 1, 2, -4, -3);
    80 
    81         /* High red LOL */
    82         m_mesh.Compile("sc#e33 scb#e33");
    83 
    84         AddPiece(3, 1, 3, 3, 4, -3);
    85         AddPiece(1, 1, 3, 5, 4, 0);
    86         AddPiece(1, 1, 3, 5, 4, 3);
    87         AddPiece(1, 1, 3, 5, 4, 6);
    88 
    89         AddPiece(3, 1, 3, -1, 4, -3);
    90         AddPiece(1, 1, 3, 1, 4, 0);
    91         AddPiece(1, 1, 3, 1, 4, 3);
    92         AddPiece(1, 1, 3, -1, 4, 0);
    93         AddPiece(1, 1, 3, -1, 4, 3);
    94         AddPiece(3, 1, 3, -1, 4, 6);
    95 
    96         AddPiece(3, 1, 3, -5, 4, -3);
    97         AddPiece(1, 1, 3, -3, 4, 0);
    98         AddPiece(1, 1, 3, -3, 4, 3);
    99         AddPiece(1, 1, 3, -3, 4, 6);
    100 
    101         /* Some random crap */
    102         m_mesh.Compile("sc#e0e scb#e0e");
    103         AddPiece(1, 1, 1, -1, 0, 2);
    104         m_mesh.Compile("sc#0ee scb#0ee");
    105         AddPiece(2, 1, 1, -1, 0, 1);
    106         m_mesh.Compile("sc#e94 scb#e94");
    107         AddPiece(1, 1, 1, 0, 0, 0);
    108         m_mesh.Compile("sc#94e scb#94e");
    109         AddPiece(2, 1, 1, 0, 0, -1);
    110         m_mesh.Compile("sc#9e4 scb#9e4");
    111         AddPiece(1, 2, 3, -1, -1, -2);
    112         m_mesh.Compile("sc#49e scb#49e");
    113         AddPiece(2, 3, 1, 0, -1, -2);
    114         m_mesh.Compile("sc#4e9 scb#4e9");
    115         AddPiece(6, 2, 1, -2, 0, -3);
    116         m_mesh.Compile("sc#e49 scb#e49");
    117         AddPiece(6, 2, 1, -2, -2, -3);
    118 #endif
    119 
    120         /* Center everything -- is it needed? */
    121 //        m_mesh.Compile("tx4 tz4");
    12238
    12339        m_camera = new Camera(vec3(0.f, 600.f, 0.f),
     
    12642        m_camera->SetPerspective(70.f, 960.f, 600.f, .1f, 1000.f);
    12743        m_camera->SetTarget(vec3(0.f, -10.f, 0.f));
    128         m_camera->SetPosition(vec3(-100.f, 60.f, 0.f));
     44        m_camera->SetPosition(vec3(-150.f, 100.f, 0.f));
    12945        Ticker::Ref(m_camera);
    13046
    13147        m_ready = false;
     48    }
     49
     50    ~EasyMeshTutorial()
     51    {
     52        Ticker::Unref(m_camera);
    13253    }
    13354
     
    13657        WorldEntity::TickGame(seconds);
    13758
    138         m_angle += seconds * 80.0f;
     59        m_angle += seconds * 70.0f;
     60        m_mat = mat4::rotate(10.0f, vec3(0, 0, 1))
     61              * mat4::rotate(m_angle, vec3(0, 1, 0));
    13962
    140         mat4 anim = mat4::rotate(m_angle, vec3(0, 1, 0));
    141         mat4 model = mat4::translate(vec3(0, 0, 0));
     63        m_gears[0].m3 += seconds * 150.0f;
     64        m_gears[1].m3 += seconds * 150.0f * -2 / 9;
     65        m_gears[2].m3 += seconds * 150.0f * -2 / 3;
     66        m_gears[3].m3 += seconds * 150.0f * -2 / 3;
     67        m_gears[4].m3 += seconds * 150.0f * -2 / 3;
    14268
    143         m_matrix = model * anim;
     69        m_gears[0].m2 = mat4::translate(vec3(0, 0, 0))
     70                      * mat4::rotate(m_gears[0].m3, vec3(0, 1, 0));
     71        m_gears[1].m2 = mat4::translate(vec3(0, 0, 0))
     72                      * mat4::rotate(m_gears[1].m3, vec3(0, 1, 0));
     73        m_gears[2].m2 = mat4::translate(vec3(0, 0, 55))
     74                      * mat4::rotate(m_gears[2].m3, vec3(0, 1, 0));
     75        m_gears[3].m2 = mat4::translate(vec3(55 * lol::sqrt(3.f) * 0.5f, 0, -55 * 0.5f))
     76                      * mat4::rotate(m_gears[3].m3, vec3(0, 1, 0));
     77        m_gears[4].m2 = mat4::translate(vec3(-55 * lol::sqrt(3.f) * 0.5f, 0, -55 * 0.5f))
     78                      * mat4::rotate(m_gears[4].m3, vec3(0, 1, 0));
    14479    }
    14580
     
    15085        if (!m_ready)
    15186        {
    152             m_mesh.MeshConvert();
     87            for (int i = 0; i < m_gears.Count(); i++)
     88                m_gears[i].m1.MeshConvert();
    15389            m_ready = true;
    15490        }
     
    15692        Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    15793
    158         m_mesh.Render(m_matrix);
    159         m_mesh.Render(mat4::translate(vec3(-65, 0, -65) * lol::sqrt(0.5)) * mat4::rotate(-m_angle, vec3(0, 1, 0)));
    160         m_mesh.Render(mat4::translate(vec3(0, 0, 65)) * mat4::rotate(-m_angle, vec3(0, 1, 0)));
    161         m_mesh.Render(mat4::translate(vec3(-65, 0, 65)) * mat4::rotate(m_angle, vec3(0, 1, 0)));
     94        for (int i = 0; i < m_gears.Count(); i++)
     95            m_gears[i].m1.Render(m_mat * m_gears[i].m2);
    16296    }
    16397
    16498private:
     99    Array<EasyMesh, mat4, float> m_gears;
    165100    float m_angle;
    166     mat4 m_matrix;
    167     EasyMesh m_mesh;
     101    mat4 m_mat;
    168102    Camera *m_camera;
    169103
Note: See TracChangeset for help on using the changeset viewer.