本文整理汇总了C++中TypeSpec::is_array方法的典型用法代码示例。如果您正苦于以下问题:C++ TypeSpec::is_array方法的具体用法?C++ TypeSpec::is_array怎么用?C++ TypeSpec::is_array使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TypeSpec
的用法示例。
在下文中一共展示了TypeSpec::is_array方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TypeSpec
TypeSpec
ASTternary_expression::typecheck (TypeSpec expected)
{
// FIXME - closures
TypeSpec c = typecheck_list (cond(), TypeDesc::TypeInt);
TypeSpec t = typecheck_list (trueexpr(), expected);
TypeSpec f = typecheck_list (falseexpr(), expected);
if (c.is_closure())
error ("Cannot use a closure as a condition");
if (c.is_structure())
error ("Cannot use a struct as a condition");
if (c.is_array())
error ("Cannot use an array as a condition");
// No arrays
if (t.is_array() || t.is_array()) {
error ("Not allowed: '%s ? %s : %s'",
type_c_str(c), type_c_str(t), type_c_str(f));
return TypeSpec ();
}
// The true and false clauses need to be equivalent types, or one
// needs to be assignable to the other (so one can be upcast).
if (assignable (t, f) || assignable (f, t))
m_typespec = higherprecision (t.simpletype(), f.simpletype());
else
error ("Not allowed: '%s ? %s : %s'",
type_c_str(c), type_c_str(t), type_c_str(f));
return m_typespec;
}
示例2: error
void
ASTvariable_declaration::typecheck_initlist (ref init, TypeSpec type,
const char *name)
{
// Loop over a list of initializers (it's just 1 if not an array)...
for (int i = 0; init; init = init->next(), ++i) {
// Check for too many initializers for an array
if (type.is_array() && i > type.arraylength()) {
error ("Too many initializers for a '%s'", type_c_str(type));
break;
}
// Special case: ok to assign a literal 0 to a closure to
// initialize it.
if (type.is_closure() && ! init->typespec().is_closure() &&
init->typespec().is_int_or_float() &&
init->nodetype() == literal_node &&
((ASTliteral *)init.get())->floatval() == 0.0f) {
continue; // it's ok
}
if (! type.is_array() && i > 0)
error ("Can't assign array initializers to non-array %s %s",
type_c_str(type), name);
if (! assignable(type.elementtype(), init->typespec()))
error ("Can't assign '%s' to %s %s", type_c_str(init->typespec()),
type_c_str(type), name);
}
}
示例3: cond
TypeSpec
ASTconditional_statement::typecheck (TypeSpec expected)
{
typecheck_list (cond ());
oslcompiler->push_nesting (false);
typecheck_list (truestmt ());
typecheck_list (falsestmt ());
oslcompiler->pop_nesting (false);
TypeSpec c = cond()->typespec();
if (c.is_closure())
error ("Cannot use a closure as an 'if' condition");
if (c.is_structure())
error ("Cannot use a struct as an 'if' condition");
if (c.is_array())
error ("Cannot use an array as an 'if' condition");
return m_typespec = TypeDesc (TypeDesc::NONE);
}
示例4: if
std::string
OSLCompilerImpl::code_from_type (TypeSpec type) const
{
std::string out;
TypeDesc elem = type.elementtype().simpletype();
if (type.is_structure()) {
out = Strutil::format ("S%d", type.structure());
} else if (type.is_closure()) {
out = 'C';
} else {
if (elem == TypeDesc::TypeInt)
out = 'i';
else if (elem == TypeDesc::TypeFloat)
out = 'f';
else if (elem == TypeDesc::TypeColor)
out = 'c';
else if (elem == TypeDesc::TypePoint)
out = 'p';
else if (elem == TypeDesc::TypeVector)
out = 'v';
else if (elem == TypeDesc::TypeNormal)
out = 'n';
else if (elem == TypeDesc::TypeMatrix)
out = 'm';
else if (elem == TypeDesc::TypeString)
out = 's';
else if (elem == TypeDesc::NONE)
out = 'x';
else
ASSERT (0);
}
if (type.is_array()) {
int len = type.arraylength ();
if (len > 0)
out += Strutil::format ("[%d]", len);
else
out += "[]";
}
return out;
}