Lines Matching refs:cc
113 print(Excc_t* cc, Exnode_t* expr)
120 sfprintf(cc->ccdisc->text, "sfprintf(%s, \"%s", expr->data.print.descriptor->op == CONSTANT && expr->data.print.descriptor->data.constant.value.integer == 2 ? "sfstderr" : "sfstdout", fmtesq(x->format, quote));
122 sfprintf(cc->ccdisc->text, "%s", fmtesq(x->format, quote));
123 sfprintf(cc->ccdisc->text, "\"");
130 sfprintf(cc->ccdisc->text, ", (");
131 gen(cc, x->param[i]);
132 sfprintf(cc->ccdisc->text, ")");
134 sfprintf(cc->ccdisc->text, ", (");
135 gen(cc, x->arg);
136 sfprintf(cc->ccdisc->text, ")");
139 sfprintf(cc->ccdisc->text, ");\n");
148 scan(Excc_t* cc, Exnode_t* expr)
155 sfprintf(cc->ccdisc->text, "sfscanf(sfstdin, \"%s", fmtesq(x->format, quote));
157 sfprintf(cc->ccdisc->text, "%s", fmtesq(x->format, quote));
158 sfprintf(cc->ccdisc->text, "\"");
165 sfprintf(cc->ccdisc->text, ", &(");
166 gen(cc, x->param[i]);
167 sfprintf(cc->ccdisc->text, ")");
169 sfprintf(cc->ccdisc->text, ", &(");
170 gen(cc, x->arg);
171 sfprintf(cc->ccdisc->text, ")");
174 sfprintf(cc->ccdisc->text, ");\n");
183 gen(Excc_t* cc, register Exnode_t* expr)
200 sfprintf(cc->ccdisc->text, "break;\n");
203 sfprintf(cc->ccdisc->text, "continue;\n");
209 sfprintf(cc->ccdisc->text, "%g", expr->data.constant.value.floating);
212 sfprintf(cc->ccdisc->text, "\"%s\"", fmtesq(expr->data.constant.value.string, quote));
215 sfprintf(cc->ccdisc->text, "%I*u", sizeof(expr->data.constant.value.integer), expr->data.constant.value.integer);
218 sfprintf(cc->ccdisc->text, "%I*d", sizeof(expr->data.constant.value.integer), expr->data.constant.value.integer);
223 sfprintf(cc->ccdisc->text, "%s--", x->data.variable.symbol->name);
226 sfprintf(cc->ccdisc->text, "%s", expr->data.variable.symbol->name);
229 sfprintf(cc->ccdisc->text, "exit(");
230 gen(cc, x);
231 sfprintf(cc->ccdisc->text, ");\n");
234 sfprintf(cc->ccdisc->text, "if (");
235 gen(cc, x);
236 sfprintf(cc->ccdisc->text, ") {\n");
237 gen(cc, expr->data.operand.right->data.operand.left);
240 sfprintf(cc->ccdisc->text, "} else {\n");
241 gen(cc, expr->data.operand.right->data.operand.right);
243 sfprintf(cc->ccdisc->text, "}\n");
246 sfprintf(cc->ccdisc->text, "for (;");
247 gen(cc, x);
248 sfprintf(cc->ccdisc->text, ");");
251 sfprintf(cc->ccdisc->text, "(");
252 gen(cc, expr->data.operand.left);
253 sfprintf(cc->ccdisc->text, ")");
255 sfprintf(cc->ccdisc->text, ") {");
257 gen(cc, expr->data.operand.right);
258 sfprintf(cc->ccdisc->text, "}");
261 if (cc->ccdisc->ccf)
262 (*cc->ccdisc->ccf)(cc, expr, expr->data.variable.symbol, expr->data.variable.reference, expr->data.variable.index, cc->ccdisc);
264 sfprintf(cc->ccdisc->text, "%s", expr->data.variable.symbol->name);
267 sfprintf(cc->ccdisc->text, "%s++", x->data.variable.symbol->name);
272 sfprintf(cc->ccdisc->text, "{ Exassoc_t* %stmp_%d;", cc->id, ++cc->tmp);
273 sfprintf(cc->ccdisc->text, "for (%stmp_%d = (Exassoc_t*)dtfirst(%s); %stmp_%d && (%s = %stmp_%d->name); %stmp_%d = (Exassoc_t*)dtnext(%s, %stmp_%d)) {", cc->id, cc->tmp, expr->data.generate.array->data.variable.symbol->name, cc->id, cc->tmp, expr->data.generate.index->name, cc->id, cc->tmp, cc->id, cc->tmp, expr->data.generate.array->data.variable.symbol->name, cc->id, cc->tmp);
274 gen(cc, expr->data.generate.statement);
275 sfprintf(cc->ccdisc->text, "} }");
279 print(cc, expr);
282 sfprintf(cc->ccdisc->text, "return(");
283 gen(cc, x);
284 sfprintf(cc->ccdisc->text, ");\n");
287 scan(cc, expr);
291 sfprintf(cc->ccdisc->text, "{ %s %stmp_%d = ", extype(t), cc->id, ++cc->tmp);
292 gen(cc, x);
293 sfprintf(cc->ccdisc->text, ";");
300 sfprintf(cc->ccdisc->text, "else ");
309 sfprintf(cc->ccdisc->text, "||");
313 sfprintf(cc->ccdisc->text, "if (");
316 sfprintf(cc->ccdisc->text, "strmatch(%stmp_%d, \"%s\")", cc->id, cc->tmp, fmtesq(v->string, quote));
319 sfprintf(cc->ccdisc->text, "%stmp_%d == ", cc->id, cc->tmp);
324 sfprintf(cc->ccdisc->text, "%I*u", sizeof(v->integer), v->integer);
327 sfprintf(cc->ccdisc->text, "%g", v->floating);
332 sfprintf(cc->ccdisc->text, ") {");
333 gen(cc, x->data.select.statement);
334 sfprintf(cc->ccdisc->text, "}");
340 sfprintf(cc->ccdisc->text, "else ");
341 sfprintf(cc->ccdisc->text, "{");
342 gen(cc, y);
343 sfprintf(cc->ccdisc->text, "}");
345 sfprintf(cc->ccdisc->text, "}");
348 sfprintf(cc->ccdisc->text, "while (");
349 gen(cc, x);
350 sfprintf(cc->ccdisc->text, ") {");
352 gen(cc, expr->data.operand.right);
353 sfprintf(cc->ccdisc->text, "}");
356 sfprintf(cc->ccdisc->text, "(%s%s=", x->data.variable.symbol->name, expr->subop == '=' ? "" : opname(expr->subop));
357 gen(cc, expr->data.operand.right);
358 sfprintf(cc->ccdisc->text, ")");
364 switch (cc->lastop = expr->data.operand.left->op)
373 sfprintf(cc->ccdisc->text, "_%svalue=", cc->id);
376 gen(cc, expr->data.operand.left);
377 sfprintf(cc->ccdisc->text, ";\n");
380 switch (cc->lastop = expr->op)
391 sfprintf(cc->ccdisc->text, "_%svalue=", cc->id);
394 gen(cc, expr);
395 sfprintf(cc->ccdisc->text, ";\n");
400 sfprintf(cc->ccdisc->text, "(");
401 gen(cc, x);
404 sfprintf(cc->ccdisc->text, "), (");
405 gen(cc, expr->data.operand.left);
409 sfprintf(cc->ccdisc->text, "), (");
410 gen(cc, expr);
412 sfprintf(cc->ccdisc->text, ")");
415 sfprintf(cc->ccdisc->text, "(");
416 gen(cc, x);
417 sfprintf(cc->ccdisc->text, ") ? (");
418 gen(cc, expr->data.operand.right->data.operand.left);
419 sfprintf(cc->ccdisc->text, ") : (");
420 gen(cc, expr->data.operand.right->data.operand.right);
421 sfprintf(cc->ccdisc->text, ")");
424 sfprintf(cc->ccdisc->text, "(");
425 gen(cc, x);
426 sfprintf(cc->ccdisc->text, ") && (");
427 gen(cc, expr->data.operand.right);
428 sfprintf(cc->ccdisc->text, ")");
431 sfprintf(cc->ccdisc->text, "(");
432 gen(cc, x);
433 sfprintf(cc->ccdisc->text, ") || (");
434 gen(cc, expr->data.operand.right);
435 sfprintf(cc->ccdisc->text, ")");
438 sfprintf(cc->ccdisc->text, "(%s)(", extype(INTEGER));
439 gen(cc, x);
440 sfprintf(cc->ccdisc->text, ")");
443 sfprintf(cc->ccdisc->text, "(%s)(", extype(FLOATING));
444 gen(cc, x);
445 sfprintf(cc->ccdisc->text, ")");
448 sfprintf(cc->ccdisc->text, "strto%s(", sizeof(intmax_t) > sizeof(long) ? "ll" : "l");
449 gen(cc, x);
450 sfprintf(cc->ccdisc->text, ",(char**)0,0)");
459 sfprintf(cc->ccdisc->text, "*(");
460 gen(cc, x);
461 sfprintf(cc->ccdisc->text, ")!=0");
464 sfprintf(cc->ccdisc->text, "strtod(");
465 gen(cc, x);
466 sfprintf(cc->ccdisc->text, ",0)");
469 sfprintf(cc->ccdisc->text, "strtol(");
470 gen(cc, x);
471 sfprintf(cc->ccdisc->text, ",0,0)");
474 sfprintf(cc->ccdisc->text, "** cannot convert string value to external **");
477 sfprintf(cc->ccdisc->text, "!");
480 sfprintf(cc->ccdisc->text, "strmatch(");
481 gen(cc, x);
482 sfprintf(cc->ccdisc->text, ",");
483 gen(cc, y);
484 sfprintf(cc->ccdisc->text, ")");
492 sfprintf(cc->ccdisc->text, "** string bits not supported **");
513 sfprintf(cc->ccdisc->text, "strcoll(");
514 gen(cc, x);
515 sfprintf(cc->ccdisc->text, ",");
516 gen(cc, y);
517 sfprintf(cc->ccdisc->text, ")%s", s);
523 sfprintf(cc->ccdisc->text, "%s", opname(expr->op));
524 sfprintf(cc->ccdisc->text, "(");
525 gen(cc, x);
528 sfprintf(cc->ccdisc->text, ")%s(", opname(expr->op));
529 gen(cc, y);
531 sfprintf(cc->ccdisc->text, ")");
543 register Excc_t* cc = (Excc_t*)handle;
547 sfprintf(cc->ccdisc->text, "static %s %s;\n", extype(sym->type), sym->name);
558 register Excc_t* cc;
563 if (!(cc = newof(0, Excc_t, 1, strlen(id) + 2)))
565 cc->expr = expr;
566 cc->disc = expr->disc;
567 cc->id = (char*)(cc + 1);
568 cc->ccdisc = disc;
574 sfsprintf(cc->id, strlen(id) + 2, "%s_", id);
576 dtwalk(expr->symbols, global, cc);
578 return cc;
586 exccclose(Excc_t* cc)
590 if (!cc)
594 if (!(cc->ccdisc->flags & EX_CC_DUMP))
596 if (cc->ccdisc->text)
597 sfclose(cc->ccdisc->text);
601 free(cc);
611 excc(Excc_t* cc, const char* name, Exid_t* sym, int type)
615 if (!cc)
618 sym = name ? (Exid_t*)dtmatch(cc->expr->symbols, name) : &cc->expr->main;
622 sfprintf(cc->ccdisc->text, "\n%s %s%s(data) char** data; {\n%s _%svalue = 0;\n", t, cc->id, sym->name, t, cc->id);
623 gen(cc, sym->value->data.procedure.body);
624 sfprintf(cc->ccdisc->text, ";\n");
625 if (cc->lastop != RETURN)
626 sfprintf(cc->ccdisc->text, "return _%svalue;\n", cc->id);
627 sfprintf(cc->ccdisc->text, "}\n");
640 Excc_t* cc;
647 if (!(cc = exccopen(expr, &ccdisc)))
650 gen(cc, node);
656 gen(cc, sym->value->data.procedure.body);
659 return exccclose(cc);