const ACTION: POL_ADD_CHECK is action "POL_ADD_CHECK";
const ACTION: POL_CLEAR is action "POL_CLEAR";
const ACTION: POL_CPY is action "POL_CPY";
const ACTION: POL_GET_CHECK is action "POL_GET_CHECK";
const ACTION: POL_GET_FINDING is action "POL_GET_FINDING";
const ACTION: POL_HAS_NEXT is action "POL_HAS_NEXT";
const ACTION: POL_ITER_CHECKS is action "POL_ITER_CHECKS";
const ACTION: POL_ITER_FINDINGS is action "POL_ITER_FINDINGS";
const ACTION: POL_NEXT_FILE is action "POL_NEXT_FILE";
const ACTION: POL_POLL is action "POL_POLL";
const ACTION: POL_REMOVE_CHECK is action "POL_REMOVE_CHECK";
const ACTION: POL_VALUE is action "POL_VALUE";
const proc: pol_prototypes (inout file: c_prog) is func
begin
declareExtern(c_prog, "void polAddCheck (const pollType, const socketType, intType, const genericType);");
declareExtern(c_prog, "void polClear (const pollType);");
declareExtern(c_prog, "void polCpy (const pollType, const const_pollType);");
declareExtern(c_prog, "pollType polCreate (const const_pollType);");
declareExtern(c_prog, "void polDestr (const pollType);");
declareExtern(c_prog, "pollType polEmpty (void);");
declareExtern(c_prog, "intType polGetCheck (const const_pollType, const socketType);");
declareExtern(c_prog, "intType polGetFinding (const const_pollType, const socketType);");
declareExtern(c_prog, "boolType polHasNext (const pollType);");
declareExtern(c_prog, "void polIterChecks (const pollType, intType);");
declareExtern(c_prog, "void polIterFindings (const pollType, intType);");
declareExtern(c_prog, "genericType polNextFile (const pollType, const genericType);");
declareExtern(c_prog, "void polPoll (const pollType);");
declareExtern(c_prog, "void polRemoveCheck (const pollType, const socketType, intType);");
declareExtern(c_prog, "pollType polValue (const const_objRefType);");
end func;
const proc: process (POL_ADD_CHECK, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polAddCheck(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ", ";
process_expr(params[3], c_expr);
c_expr.expr &:= ", (genericType)(";
process_expr(params[4], c_expr);
c_expr.expr &:= "));\n";
end func;
const proc: process (POL_CLEAR, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polClear(";
process_expr(params[1], c_expr);
c_expr.expr &:= ");\n";
end func;
const proc: process (POL_CPY, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
local
var expr_type: statement is expr_type.value;
var expr_type: c_param1 is expr_type.value;
var expr_type: c_param3 is expr_type.value;
begin
statement.temp_num := c_expr.temp_num;
prepareAnyParamTemporarys(params[1], c_param1, statement);
c_param3.demand := ASSIGN_RESULT;
prepareAnyParamTemporarys(params[3], c_param3, statement);
if c_param3.result_expr <> "" then
statement.temp_decls &:= "pollType new_poll;\n";
statement.expr &:= "new_poll=";
statement.expr &:= c_param3.result_expr;
statement.expr &:= ";\n";
if isNormalVariable(params[1]) then
statement.expr &:= "polDestr(";
statement.expr &:= c_param1.expr;
statement.expr &:= ");\n";
statement.expr &:= c_param1.expr;
statement.expr &:= "=new_poll;\n";
else
statement.temp_decls &:= "pollType *poll_ptr=&(";
statement.temp_decls &:= c_param1.expr;
statement.temp_decls &:= ");\n";
statement.expr &:= "polDestr(*poll_ptr);\n";
statement.expr &:= "*poll_ptr=new_poll;\n";
end if;
else
statement.expr &:= "polCpy(";
statement.expr &:= c_param1.expr;
statement.expr &:= ", ";
statement.expr &:= c_param3.expr;
statement.expr &:= ");\n";
end if;
doLocalDeclsOfStatement(statement, c_expr);
end func;
const proc: process (POL_GET_CHECK, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
c_expr.expr &:= "polGetCheck(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ")";
end func;
const proc: process (POL_GET_FINDING, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
c_expr.expr &:= "polGetFinding(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ")";
end func;
const proc: process (POL_HAS_NEXT, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
c_expr.expr &:= "polHasNext(";
process_expr(params[1], c_expr);
c_expr.expr &:= ")";
end func;
const proc: process (POL_ITER_CHECKS, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polIterChecks(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ");\n";
end func;
const proc: process (POL_ITER_FINDINGS, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polIterFindings(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ");\n";
end func;
const proc: process (POL_NEXT_FILE, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
c_expr.expr &:= "polNextFile(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", (genericType)(";
process_expr(params[2], c_expr);
c_expr.expr &:= "))";
end func;
const proc: process (POL_POLL, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polPoll(";
process_expr(params[1], c_expr);
c_expr.expr &:= ");\n";
end func;
const proc: process (POL_REMOVE_CHECK, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
setDiagnosticLine(c_expr);
c_expr.expr &:= "polRemoveCheck(";
process_expr(params[1], c_expr);
c_expr.expr &:= ", ";
process_expr(params[2], c_expr);
c_expr.expr &:= ", ";
process_expr(params[3], c_expr);
c_expr.expr &:= ");\n";
end func;
const proc: process (POL_VALUE, in reference: function,
in ref_list: params, inout expr_type: c_expr) is func
begin
c_expr.expr &:= "polValue(";
process_expr(params[1], c_expr);
c_expr.expr &:= ")";
end func;