1 /* This file is part of Shapes.
3 * Shapes is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
8 * Shapes is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with Shapes. If not, see <http://www.gnu.org/licenses/>.
16 * Copyright 2008 Henrik Tidefelt
20 #include "shapesexceptions.h"
23 Kernel::Thunk
< T
>::Thunk
< T
>( Ast::Expression
* _expr
, const Kernel::GraphicsState
* _metaState
, Kernel::PassedEnv _env
)
24 : expr( _expr
), metaState( *_metaState
), env( _env
), forced( false ), val( NullPtr
< const T
>( ) )
28 Kernel::Thunk
< T
>::Thunk
< T
>( const RefCountPtr
< const T
> & _val
)
29 : forced( true ), val( _val
)
33 Kernel::Thunk
< T
>::~Thunk
< T
>( )
37 RefCountPtr
< const T
>
38 Kernel::Thunk
< T
>::getVal( ) const
42 RefCountPtr
< const Lang::Value
> untypedVal
= expr
->value( & metaState
, env
);
43 val
= untypedVal
.down_cast
< const T
>( );
44 if( val
== NullPtr
< const T
>( ) )
46 throw Exceptions::TypeMismatch( expr
, untypedVal
->getTypeName( ), T::staticTypeName( ) );