Exemplo n.º 1
0
Arquivo: EED.cpp Projeto: Stretto/mago
    void FillValueTraits( EvalResult& result, Expression* expr )
    {
        result.ReadOnly = true;
        result.HasString = false;
        result.HasChildren = false;

        if ( !expr || expr->Kind == DataKind_Value )
        {
            RefPtr<Type>    type = result.ObjVal._Type;

            if ( (type->AsTypeStruct() != NULL)
                || type->IsSArray() )
            {
                // some types just don't allow assignment
            }
            else if ( result.ObjVal.Addr != 0 )
            {
                result.ReadOnly = false;
            }
            else if ( expr && expr->AsNamingExpression() != NULL ) 
            {
                Declaration* decl = expr->AsNamingExpression()->Decl;
                result.ReadOnly = (decl == NULL) || decl->IsConstant();
            }

            if ( (type->AsTypeNext() != NULL) && type->AsTypeNext()->GetNext()->IsChar() )
            {
                if ( type->IsPointer() || type->IsSArray() || type->IsDArray() )
                    result.HasString = true;
            }

            if ( type->IsPointer() || type->IsSArray() || type->IsDArray()  || type->IsAArray()
                || (type->AsTypeStruct() != NULL) )
            {
                result.HasChildren = true;
            }
        }
    }