view anagram/guisupport/tokentabdc.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-2002 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * tokentabdc.cpp
 */

#include "dc.h"
#include "items.h"
#include "q1glbl.h"
#include "rule.h"
#include "stacks.h"
#include "tokentabdc.h"
#include "ut.h"
#include "ws.h"


static int token_table_tabs[] = {6,9,13,21,0};

token_table_dc::token_table_dc(void)
  : dc("Token Table")
{
  tab_stops = token_table_tabs;
  columnHeadTitle = "Token\tFlags\tPrec\tType\tName";
  //des->c_size = cursor_bar_size;
  des->d_size.y = ntkns;
  //getWidth();
  //resize_window();
}

void token_table_dc::getLine(unsigned ln) const {
  token_number_map tm;
  const char *zl;
  char as;
  char *ts;
  char prbuf[20] = "   ";

  ln++;
  tm = map_token_number[ln];
  zl = tm.zero_length_flag ? "zl" : tm.non_terminal_flag ? "nt" : "  ";
  if (tm.precedence_level) {
    as = tm.left_associative ? 'l' : tm.right_associative ? 'r' : 'n';
    sprintf(prbuf, "%c%02d", as, tm.precedence_level);
  }
  else if (tm.sticky) {
    strcpy(prbuf, "s  ");
  }
  //ts = dict_str(cast_dict,tm.value_type);
  ts = Cast(tm.value_type)->pointer();
  ssprintf("T%03d\t%s\t%s\t(%s)\t", ln, zl, prbuf, ts);
  atkn(ln);
}

int token_table_dc::expansion_rules_ok(unsigned ln) {
  return build_item_list_ok(ln+1);
}

dc_ref token_table_dc::expansion_rules(unsigned ln) {
  return build_item_list(ln+1);
}

int token_table_dc::productions_ok(unsigned ln) {
  return productions_window_ok(ln+1);
}

dc_ref token_table_dc::productions(unsigned ln) {
  return productions_window(ln+1);
}

int token_table_dc::set_elements_ok(unsigned ln) {
  return token_set_window_ok(ln+1);
}

dc_ref token_table_dc::set_elements(unsigned ln) {
  return token_set_window(ln+1);
}

int token_table_dc::usage_ok(unsigned ln) {
  return token_usage_window_ok(ln+1);
}

dc_ref token_table_dc::usage(unsigned ln) {
  return token_usage_window(ln+1);
}