示例#1
0
 void ProtoBufExport::ParameterVariable(clang::ParmVarDecl const *param) {
     exportData([&](ct::proto::Envelope &env) {
         auto var = env.mutable_var();
         mapper.ResolveName(*var->mutable_name(), *param);
         mapper.ResolveType(*var->mutable_own_type(), param->getType());
         var->set_kind(ct::proto::Var_VarKind_PARAMETER);
     });
 }
示例#2
0
 void ProtoBufExport::LocalVariable(clang::VarDecl const *varDecl) {
     exportData([&](ct::proto::Envelope &env) {
         auto var = env.mutable_var();
         mapper.ResolveName(*var->mutable_name(), *varDecl);
         mapper.ResolveType(*var->mutable_own_type(), varDecl->getType());
         var->set_kind(ct::proto::Var_VarKind_LOCAL);
     });
 }
示例#3
0
    void ProtoBufExport::MemberVariable(clang::FieldDecl const *field) {
        exportData([&](ct::proto::Envelope &env) {
            auto c_var = env.mutable_c_var();
            mapper.ResolveType(*c_var->mutable_parent(), clang::QualType(field->getParent()->getTypeForDecl(), 0));

            auto var = c_var->mutable_base();
            mapper.ResolveName(*var->mutable_name(), *field);
            mapper.ResolveType(*var->mutable_own_type(), field->getType());
            var->set_kind(ct::proto::Var_VarKind_CLASS);
        });
    }
示例#4
0
WORD new_index(BYTE *val, WORD kind, BYTE *name)
{
	if (rcs_ndxno >= NDXSIZE)
		return (NIL);
	else
	{
		set_value(rcs_ndxno, val);
		set_kind(rcs_ndxno, kind);
		set_name(rcs_ndxno, name);
		return (rcs_ndxno++);
	}
}
示例#5
0
    sieve_relation::sieve_relation(sieve_relation_plugin & p, const relation_signature & s,
                const bool * inner_columns, relation_base * inner) 
            : relation_base(p, s), m_inner_cols(s.size(), inner_columns), m_inner(inner) { 
        unsigned n = s.size();
        for(unsigned i=0; i<n; i++) {
            if(inner_columns && inner_columns[i]) {
                unsigned inner_idx = m_inner2sig.size();
                SASSERT(get_inner().get_signature()[inner_idx]==s[i]);
                m_sig2inner.push_back(inner_idx);
                m_inner2sig.push_back(i);
            }
            else {
                m_sig2inner.push_back(UINT_MAX);
                m_ignored_cols.push_back(i);
            }
        }

        set_kind(p.get_relation_kind(*this, inner_columns));
    }
示例#6
0
文件: cci_tkn.c 项目: kzfm1024/misc
Token nextTkn(void) /* 次のトークン */
{
  Token  tkn = {NulKind, "", 0};
  int    errF = FALSE, num, ct, n;
  char   *p = tkn.text, *p_end31 = p+ID_SIZ;
  char   lite[100+1], *lite_end = lite+100;
  static int ch = ' ';                        /* 前回文字を保持するためstatic */

  while (isspace(ch)) { ch = nextCh(); }                      /* 空白読み捨て */
  if (ch == EOF) { tkn.kind = EofTkn; return tkn; }                    /* EOF */

  switch (ctyp[ch]) {
  case Letter:
    for ( ; ctyp[ch]==Letter || ctyp[ch]==Digit; ch = nextCh()) {
      if (p < p_end31) *p++ = ch;               /* 識別子は最大31文字まで有効 */
    }
    *p = '\0';
    break;
  case Digit:                                                     /* 数値定数 */
    for (num=0; ctyp[ch]==Digit; ch = nextCh()) {
       num = num*10 + (ch-'0');
    }
    tkn.kind = IntNum;
    tkn.intVal = num;                                               /* 値格納 */
    sprintf(tkn.text, "%d", num);                             /* エラー表示用 */
    break;
  case SngQ:                                                      /* 文字定数 */
    for (ct=0,ch=nextCh(); ch!=EOF && ch!='\n' && ch!='\''; ch=nextCh()) {
      if (ch == '\\') { if ((ch=nextCh()) == 'n') ch = '\n'; }    /* \nの処理 */
      if (++ct == 1) tkn.intVal = ch;                       /* 文字定数値格納 */
    }
    if (ct != 1) errF = TRUE;
    if (ch == '\'') ch = nextCh(); else errF = TRUE;
    if (errF) err_s("不正な文字定数");
    tkn.kind = IntNum;                            /* 以降は整数定数として扱う */
    sprintf(tkn.text, "'%c'", tkn.intVal);                    /* エラー表示用 */
    break;
  case DblQ:                                                    /* 文字列定数 */
    p = lite; ch = nextCh();
    while (ch!=EOF && ch!='\n' && ch!='"') {
      if (errF) { ch = nextCh(); continue; }
      if ((n=is_kanji(ch)) > 0) {
        while (n--) { if (p < lite_end) P_SET(); else errF = TRUE; }
        continue;
      }
      if (ch == '\\') { if ((ch=nextCh()) == 'n') ch = '\n'; }    /* \nの処理 */
      if (p < lite_end) P_SET(); else errF = TRUE;
    }
    *p = '\0';
    if (errF) err_s("文字列リテラルが長すぎる");
    if (ch == '"') ch = nextCh(); else err_s("文字列リテラルが閉じていない");
    tkn.kind = String;
    tkn.intVal = mallocS(lite);           /* 文字列をメモリに確保し番地を格納 */

    tkn.text[0] = '\"';                         /*以下エラー表示用に文字列確保*/
    strncat(tkn.text+1, lite, 29);
    if (strlen(tkn.text) <= 29) strcat(tkn.text, "\"");
    break;
  default:                                                            /* 記号 */
    if (ch<0 || 127<ch) err_s("不正な文字が使われている");
    if ((n=is_kanji(ch)) > 0) { while (n--) P_SET(); }
    else P_SET();
    if (is_ope2(*(p-1), ch)) P_SET();                              /* == など */
    *p = '\0';
  }
  if (tkn.kind == NulKind) tkn = set_kind(tkn);                   /* 種別設定 */
  if (tkn.kind == Others) err_ss("不正なトークン", tkn.text);
  return tkn;
}