STATIC void cpp_primary_data_type(type *t) { if (tyref(t->Tty)) { #if 1 // C++98 8.3.2 says cv-qualified references are ignored CHAR('A'); #else switch (t->Tty & (mTYconst | mTYvolatile)) { case 0: CHAR('A'); break; case mTYvolatile: CHAR('B'); break; // Digital Mars extensions case mTYconst | mTYvolatile: CHAR('_'); CHAR('L'); break; case mTYconst: CHAR('_'); CHAR('M'); break; } #endif cpp_reference_type(t); } else cpp_basic_data_type(t); }
STATIC void cpp_reference_data_type(type *t, int flag) { if (tybasic(t->Tty) == TYarray) { int ndim; type *tn; int i; CHAR('Y'); // Compute number of dimensions (we have at least one) ndim = 0; tn = t; do { ndim++; tn = tn->Tnext; } while (tybasic(tn->Tty) == TYarray); cpp_dimension(ndim); for (; tybasic(t->Tty) == TYarray; t = t->Tnext) { if (t->Tflags & TFvla) CHAR('X'); // DMC++ extension else cpp_dimension(t->Tdim); } // DMC++ extension if (flag) // if template type argument { i = cpp_cvidx(t->Tty); if (i) { CHAR('_'); //CHAR('X' + i - 1); // _X, _Y, _Z CHAR('O' + i - 1); // _O, _P, _Q } } cpp_basic_data_type(t); } else cpp_basic_data_type(t); }