view anagram/guisupport/proctabdc.cpp @ 15:f5acaf0c8a29

Don't cast through "volatile int". Causes a gcc warning nowadays. XXX: should put something else back here to frighten the optimizer
author David A. Holland
date Tue, 31 May 2022 01:00:55 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993-1999 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * proctabdc.cpp
 */

//#include "brt.h"
#include "dc.h"
#include "proctabdc.h"
#include "rproc.h"
#include "rule.h"
#include "stacks.h"
#include "ut.h"
#include "wm1.h"

//#define INCLUDE_LOGGING
#include "log.h"


/*
void string_table_dc::init(void) {
  //LOGSECTION("string_table_dc::init");

  int width = 0;
  int nLines = text.size();

  for (int i = 0; i < nLines; i++) {
    width = max(width,text[i].size());
    //LOGV(text[i].pointer());
  }

  syntax_dependent = 0;
  //des->c_size = cursor_bar_size;
  des->d_size = cint(width, nLines);
}

void string_table_dc::reset(AgString name, AgArray<AgString> text_) {
  text = text_;
  head_title = name;
  init();
}

string_table_dc::string_table_dc(const AgString name, AgArray<AgString> text_)
  : dc(name)
  , text(text_)
{
  init();
  //sorted = 1;
  //resize_window();
}

void string_table_dc::getLine(unsigned ln) const {
  sss(text[ln].pointer());
}
*/
//extern int       rule_coverage;
//extern unsigned *rule_counts;

static int proc_table_tabs[] = {0,0};

proc_table_dc::proc_table_dc(void)
  : dc("Reduction Procedures")
{
  //des->c_size = cursor_bar_size;
  //des->d_size.y = n_auto_procs;
  des->d_size.y = Procedure::count() - 1;
  tab_stops = proc_table_tabs;
  //getWidth();
  //resize_window();
}

void proc_table_dc::getLine(unsigned ln) const {
  //proc_name_map pm;
  const char *cast, *cs;
  unsigned i;
  //char counts[20] = "";
  //int showCounts = rule_coverage && rule_counts != 0;

  ln++;
  //pm = map_proc_name[ln];
  Procedure proc(ln);
  Rule rule = proc->form_number;
  //tab_stops[0] = showCounts ? 7 : 0;
  tab_stops[0] = 0;
  //if (showCounts) sprintf(counts,"%5u\t", rule_counts[pm.form_number]);
  //cast = dict_str(cast_dict, pm.cast);
  //cast = dict_str(cast_dict, proc->cast);
  cast = Cast(proc->cast)->pointer();
  //assert(pm.cast == proc->cast);
  if (cast == NULL) {
    cast = "";
  }
  //ssprintf("%s%s %s(", counts, cast, proc_name_string(ln).pointer());
  ssprintf("%s %s(", cast, proc_name_string(ln).pointer());

  cs = "";
/*
  for (i = 0; i < pm.n_params; i++) {
    apprintf("%s%s",cs, dict_str(cast_dict,lstptr(pm,cast)[i]));
    cs = ", ";
  }
*/
  AgArray<RuleElement> elementList = rule->op_bias ? rule->hostElementList : rule->elementList;
  for (i = 0; i < elementList.size(); i++) {
    RuleElement &element = elementList[i];
    if (element.cVariable == 0) {
      continue;
    }
    //apprintf("%s%s", cs, dict_str(cast_dict,element.token->value_type));
    apprintf("%s%s", cs, Cast(element.token->value_type)->pointer());
    cs = ", ";
  }
  acs(')');
}

void proc_table_dc::synchCursor(unsigned ln) const {
  Procedure proc(ln+1);
  set_text_line(proc->line, proc->col, 0);
/*
  proc_name_map *mpn = &map_proc_name[ln+1];
  set_text_line(mpn->line, mpn->col,0);
*/
}