- vec_push(sy.out, syexp(parser_ctx(parser), var));
- DEBUGSHUNTDO(con_out("push %s\n", parser_tokval(parser)));
- }
- else if (parser->tok == TOKEN_FLOATCONST) {
- ast_value *val;
- if (wantop) {
- parseerror(parser, "expected operator or end of statement, got constant");
- goto onerr;
- }
- wantop = true;
- val = parser_const_float(parser, (parser_token(parser)->constval.f));
- if (!val)
- return NULL;
- vec_push(sy.out, syexp(parser_ctx(parser), (ast_expression*)val));
- DEBUGSHUNTDO(con_out("push %g\n", parser_token(parser)->constval.f));
- }
- else if (parser->tok == TOKEN_INTCONST || parser->tok == TOKEN_CHARCONST) {
- ast_value *val;
- if (wantop) {
- parseerror(parser, "expected operator or end of statement, got constant");
- goto onerr;
- }
- wantop = true;
- val = parser_const_float(parser, (double)(parser_token(parser)->constval.i));
- if (!val)
- return NULL;
- vec_push(sy.out, syexp(parser_ctx(parser), (ast_expression*)val));
- DEBUGSHUNTDO(con_out("push %i\n", parser_token(parser)->constval.i));
- }
- else if (parser->tok == TOKEN_STRINGCONST) {
- ast_value *val;
- if (wantop) {
- parseerror(parser, "expected operator or end of statement, got constant");
- goto onerr;
- }
- wantop = true;
- val = parser_const_string(parser, parser_tokval(parser), false);
- if (!val)
- return NULL;
- vec_push(sy.out, syexp(parser_ctx(parser), (ast_expression*)val));
- DEBUGSHUNTDO(con_out("push string\n"));
- }
- else if (parser->tok == TOKEN_VECTORCONST) {
- ast_value *val;
- if (wantop) {
- parseerror(parser, "expected operator or end of statement, got constant");
- goto onerr;
- }
- wantop = true;
- val = parser_const_vector(parser, parser_token(parser)->constval.v);
- if (!val)
- return NULL;
- vec_push(sy.out, syexp(parser_ctx(parser), (ast_expression*)val));
- DEBUGSHUNTDO(con_out("push '%g %g %g'\n",
- parser_token(parser)->constval.v.x,
- parser_token(parser)->constval.v.y,
- parser_token(parser)->constval.v.z));
- }
- else if (parser->tok == '(') {
- parseerror(parser, "internal error: '(' should be classified as operator");
- goto onerr;