- Added a few new working keywords (means they're implemented)
break
continue
public
private
- Added the ability for a developer to specift if an argument should be a ep reference
(using the automatic deduction method) specify your argument as ep::argument_ref_ptr.
- Added implementation of binary files (use epcc to compile your *.ep file into a *.oep)
- Huge improvements/bug fixes to asignments (before you couldn't do object->x = 5, or get_x() = 5)
you can now! Yay.
- Added more C++ type safety.' You can no longer create value_reference of int and cast it to e.g double. - Fixed an assignment bug (I forgot to change a function) - Remade error message system completely and it now has better error messages. - Made some changes to value reference.
- Added 'type_info' type (use either typeid() or type_info() to construct)
it provides the basic utilites needed to check the run-time type information
of variables etc.
- Added standard type nullptr_t (use nullptr keyword/variable)
- Added ability to import dll's that are using the EP plugin format
(instead of specifying it inside of the ep::module constructor, it
can still be done like that though)
- Added optional new import syntax, totally didn't steal it from go ;)
You can now import multiple libraries or files with one import statement.
Example:
import( bo,
ios,
vector,
"somefile.ep",
"somelibrary.dll" );
- Optimized some of the evaluation code (Move semantics etc)
- Fixed an internal parser error when converting infix to (not actual) postfix.
The following expression would fail to be parsed because a trailing '(' was
added to the end of the postfix expression (no parentheses allowed):
typeid( "hi" )->bare_equal( typeid( 6 ) )
This is now fixed, and should produce a valid postfix output.
- Fixed a bug when accessing member methods, it didn't check the arity
of the arguments on the stack, so it caused an uncatchable exception.
- Fixed a few ep_error bugs (lol)
- Fixed a bug in 'vector::for_each' using the wrong argument.
- Fixed a value_reference bug (it would attempt to destroy references)
- Fixed a bug in bo::operator! (doing it with any other type than 'floating' would throw a conversion error)
- Fixed yet another access bug.
The error would happen whenever you did something like this:
type->get()->method( argument );
The postfix output would be falsely generated here, it would attempt to access 'method'
from 'argument', instead of the rvalue returned from 'type->get()'.

If you are sharing your ep source code, there is no need to give away your library modules (.dll) as well.
Because they're built into the generated *.oep compiled file! This is what took all of my debugging time, it was.. agitating.
Adding run-time overload-like behaviour, using the "specialize" keyword, you can specialize methods to certain expressions,
like such:
import( bo, type_traits );
method add( &a, &b )
{
// do some error reporting because a and b are invalid
};
specialize<is_arithmetic( a ) && is_arithmetic( b );>
method add( &a, &b )
{
return a + b;
};
specialize<is_string_literal( a ) && is_arithmetic( b );>
method add( &a, &b )
{
return a + b;
};
specialize<is_string_literal( a ) && is_string_literal( b );>
method add( &a, &b )
{
return a + b;
};
// here, we can only assume the operator '+' of 'a' only supports a same type
// rhs argument. (b)
specialize<is_same( a, b ) && type_has_method( a, "+" );>
method add( &a, &b )
{
return a + b;
};
-->> Type system: ---->> floating -------->> floating::floating( &other ) -------->> floating::~floating( ) -------->> floating::=( &rhs ) -------->> floating::+( &rhs ) -------->> floating::-( &rhs ) -------->> floating::*( &rhs ) -------->> floating::/( &rhs ) -------->> floating::&&( &rhs ) -------->> floating::||( &rhs ) -------->> floating::==( &rhs ) -------->> floating::!=( &rhs ) -------->> floating::>( &rhs ) -------->> floating::<( &rhs ) -------->> floating::>=( &rhs ) -------->> floating::<=( &rhs ) ---->> integral -------->> integral::integral( &other ) -------->> integral::~integral( ) -------->> integral::=( &rhs ) -------->> integral::+( &rhs ) -------->> integral::-( &rhs ) -------->> integral::*( &rhs ) -------->> integral::/( &rhs ) -------->> integral::%( &rhs ) -------->> integral::&( &rhs ) -------->> integral::|( &rhs ) -------->> integral::&&( &rhs ) -------->> integral::||( &rhs ) -------->> integral::==( &rhs ) -------->> integral::!=( &rhs ) -------->> integral::>( &rhs ) -------->> integral::<( &rhs ) -------->> integral::>=( &rhs ) -------->> integral::<=( &rhs ) -------->> integral::~( ) -------->> integral::^( &rhs ) ---->> string_literal -------->> string_literal::string_literal( &other ) -------->> string_literal::~string_literal( ) -------->> string_literal::=( &rhs ) -------->> string_literal::==( &rhs ) -------->> string_literal::!=( &rhs ) -------->> string_literal::+( &rhs ) ---->> type_info -------->> type_info::type_info( &other ) -------->> type_info::~type_info( ) -------->> type_info::bare_equal( &other ) -------->> type_info::get_name( ) -------->> type_info::==( &other ) -------->> type_info::!=( &other ) -------->> type_info::=( &other ) ---->> nullptr_t -------->> nullptr_t::~nullptr_t( ) ---->> vector -------->> vector::vector( ) -------->> vector::~vector( ) -------->> vector::emplace_back( &element ) -------->> vector::erase( &it ) -------->> vector::begin( ) -------->> vector::end( ) -------->> vector::for_each( &method ) -------->> vector::pop_back( ) -------->> vector::clear( ) -------->> vector::empty( ) -------->> vector::size( ) -------->> vector::capacity( ) ---->> vector::iterator -------->> vector::iterator::~vector::iterator( ) -------->> vector::iterator::<( &it1 ) -------->> vector::iterator::>( &it1 ) -------->> vector::iterator::increment( ) -------->> vector::iterator::decrement( ) -------->> vector::iterator::access( ) ---->> dx_Application -------->> dx_Application::~dx_Application( ) -------->> dx_Application::run( ) -------->> dx_Application::exit( ) -------->> dx_Application::register_window( &arg1 ) -------->> dx_Application::unregister_window( &arg1 ) -------->> dx_Application::set_tick_rate( &arg1 ) -------->> dx_Application::set_clipboard( &arg1 ) -------->> dx_Application::on_tick( &arg1 ) -------->> dx_Application::begin_invoke( &arg1 ) -------->> dx_Application::=( &arg1 ) ---->> dx_Vector2 -------->> dx_Vector2::dx_Vector2( &arg, &arg1 ) -------->> dx_Vector2::~dx_Vector2( ) -------->> dx_Vector2::intersects( &arg1 ) -------->> dx_Vector2::dot( &arg1 ) -------->> dx_Vector2::magnitude( ) -------->> dx_Vector2::+=( &arg1 ) -------->> dx_Vector2::-=( &arg1 ) -------->> dx_Vector2::=( &arg1 ) -------->> dx_Vector2::+( &arg1 ) -------->> dx_Vector2::-( &arg1 ) -------->> dx_Vector2::*( &arg1 ) -------->> dx_Vector2::/( &arg1 ) -------->> dx_Vector2::>( &arg1 ) -------->> dx_Vector2::<( &arg1 ) -------->> dx_Vector2::>=( &arg1 ) -------->> dx_Vector2::<=( &arg1 ) -------->> dx_Vector2::==( &arg1 ) -------->> dx_Vector2::!=( &arg1 ) -------->> dx_Vector2::get_x( ) -------->> dx_Vector2::get_y( ) ---->> dx_Region -------->> dx_Region::dx_Region( &arg, &arg1 ) -------->> dx_Region::~dx_Region( ) -------->> dx_Region::move_by( &arg1 ) -------->> dx_Region::move_to( &arg1 ) -------->> dx_Region::resize_by( &arg1 ) -------->> dx_Region::resize_to( &arg1 ) -------->> dx_Region::intersects( &arg1 ) -------->> dx_Region::get_position( ) -------->> dx_Region::get_size( ) ---->> dx_Path -------->> dx_Path::dx_Path( &arg ) -------->> dx_Path::~dx_Path( ) -------->> dx_Path::as_string( ) -------->> dx_Path::previous( ) -------->> dx_Path::upto_previous( ) -------->> dx_Path::root( ) -------->> dx_Path::filename( ) -------->> dx_Path::extension( ) -------->> dx_Path::branches( ) -------->> dx_Path::remove_extension( ) -------->> dx_Path::remove_directories( ) -------->> dx_Path::remove_filename( ) -------->> dx_Path::extension_is( &arg1 ) -------->> dx_Path::has_extension( ) -------->> dx_Path::has_filename( ) -------->> dx_Path::has_branches( ) -------->> dx_Path::is_directory( ) -------->> dx_Path::=( &arg1 ) ---->> dx_Texture -------->> dx_Texture::dx_Texture( &arg, &arg1 ) -------->> dx_Texture::~dx_Texture( ) -------->> dx_Texture::get_size( ) -------->> dx_Texture::paint( &arg1 ) -------->> dx_Texture::=( &arg1 ) ---->> dx_Pen -------->> dx_Pen::dx_Pen( &arg, &arg1 ) -------->> dx_Pen::~dx_Pen( ) -------->> dx_Pen::get_color( ) -------->> dx_Pen::set_color( &arg1 ) -------->> dx_Pen::get_thickness( ) -------->> dx_Pen::set_thickness( &arg1 ) -------->> dx_Pen::=( &arg1 ) ---->> dx_FontContext -------->> dx_FontContext::dx_FontContext( ) -------->> dx_FontContext::~dx_FontContext( ) -------->> dx_FontContext::get_height( ) -------->> dx_FontContext::get_weight( ) -------->> dx_FontContext::set_height( &arg1 ) -------->> dx_FontContext::set_weight( &arg1 ) -------->> dx_FontContext::make_proof_quality( ) -------->> dx_FontContext::make_default_quality( ) -------->> dx_FontContext::=( &arg1 ) ---->> dx_Font -------->> dx_Font::dx_Font( &arg, &arg1, &arg2 ) -------->> dx_Font::~dx_Font( ) -------->> dx_Font::get_context( ) -------->> dx_Font::string_size( &arg1 ) -------->> dx_Font::=( &arg1 ) ---->> dx_Line -------->> dx_Line::dx_Line( &arg, &arg1, &arg2 ) -------->> dx_Line::~dx_Line( ) -------->> dx_Line::get_position( ) -------->> dx_Line::get_target( ) -------->> dx_Line::get_pen( ) -------->> dx_Line::set_position( &arg1 ) -------->> dx_Line::set_target( &arg1 ) -------->> dx_Line::set_pen( &arg1 ) -------->> dx_Line::=( &arg1 ) ---->> dx_Text -------->> dx_Text::dx_Text( &arg, &arg1, &arg2, &arg3 ) -------->> dx_Text::~dx_Text( ) -------->> dx_Text::get_font( ) -------->> dx_Text::get_text( ) -------->> dx_Text::get_position( ) -------->> dx_Text::get_max_clip( ) -------->> dx_Text::set_font( &arg1 ) -------->> dx_Text::set_text( &arg1 ) -------->> dx_Text::set_position( &arg1 ) -------->> dx_Text::set_max_clip( &arg1 ) -------->> dx_Text::=( &arg1 ) ---->> dx_WindowMovedArgs -------->> dx_WindowMovedArgs::~dx_WindowMovedArgs( ) -------->> dx_WindowMovedArgs::is_handled( ) -------->> dx_WindowMovedArgs::get_region( ) -------->> dx_WindowMovedArgs::make_handled( ) ---->> dx_WindowResizedArgs -------->> dx_WindowResizedArgs::~dx_WindowResizedArgs( ) -------->> dx_WindowResizedArgs::is_handled( ) -------->> dx_WindowResizedArgs::get_region( ) -------->> dx_WindowResizedArgs::make_handled( ) ---->> dx_WindowClosingArgs -------->> dx_WindowClosingArgs::~dx_WindowClosingArgs( ) -------->> dx_WindowClosingArgs::is_handled( ) -------->> dx_WindowClosingArgs::get_should_close( ) -------->> dx_WindowClosingArgs::set_should_close( &arg1 ) -------->> dx_WindowClosingArgs::make_handled( ) ---->> dx_KeyDownArgs -------->> dx_KeyDownArgs::~dx_KeyDownArgs( ) -------->> dx_KeyDownArgs::is_handled( ) -------->> dx_KeyDownArgs::make_handled( ) -------->> dx_KeyDownArgs::is_ctrl_down( ) -------->> dx_KeyDownArgs::is_shift_down( ) -------->> dx_KeyDownArgs::get_key_code( ) ---->> dx_KeyUpArgs -------->> dx_KeyUpArgs::~dx_KeyUpArgs( ) -------->> dx_KeyUpArgs::is_handled( ) -------->> dx_KeyUpArgs::make_handled( ) -------->> dx_KeyUpArgs::is_ctrl_down( ) -------->> dx_KeyUpArgs::is_shift_down( ) -------->> dx_KeyUpArgs::get_key_code( ) ---->> dx_KeyDownCharArgs -------->> dx_KeyDownCharArgs::~dx_KeyDownCharArgs( ) -------->> dx_KeyDownCharArgs::is_handled( ) -------->> dx_KeyDownCharArgs::make_handled( ) -------->> dx_KeyDownCharArgs::get_string( ) ---->> dx_MouseMovedArgs -------->> dx_MouseMovedArgs::~dx_MouseMovedArgs( ) -------->> dx_MouseMovedArgs::is_handled( ) -------->> dx_MouseMovedArgs::make_handled( ) -------->> dx_MouseMovedArgs::is_ctrl_down( ) -------->> dx_MouseMovedArgs::is_shift_down( ) -------->> dx_MouseMovedArgs::get_position( ) ---->> dx_MouseClickedArgs -------->> dx_MouseClickedArgs::~dx_MouseClickedArgs( ) -------->> dx_MouseClickedArgs::is_handled( ) -------->> dx_MouseClickedArgs::make_handled( ) -------->> dx_MouseClickedArgs::is_ctrl_down( ) -------->> dx_MouseClickedArgs::is_shift_down( ) -------->> dx_MouseClickedArgs::get_key_code( ) -------->> dx_MouseClickedArgs::get_position( ) ---->> dx_MouseReleasedArgs -------->> dx_MouseReleasedArgs::~dx_MouseReleasedArgs( ) -------->> dx_MouseReleasedArgs::is_handled( ) -------->> dx_MouseReleasedArgs::make_handled( ) -------->> dx_MouseReleasedArgs::is_ctrl_down( ) -------->> dx_MouseReleasedArgs::is_shift_down( ) -------->> dx_MouseReleasedArgs::get_key_code( ) -------->> dx_MouseReleasedArgs::get_position( ) ---->> dx_ScrollArgs -------->> dx_ScrollArgs::~dx_ScrollArgs( ) -------->> dx_ScrollArgs::is_handled( ) -------->> dx_ScrollArgs::make_handled( ) -------->> dx_ScrollArgs::is_ctrl_down( ) -------->> dx_ScrollArgs::is_shift_down( ) -------->> dx_ScrollArgs::is_scrolling_up( ) -------->> dx_ScrollArgs::is_scrolling_down( ) ---->> dx_MessageDataArgs -------->> dx_MessageDataArgs::~dx_MessageDataArgs( ) -------->> dx_MessageDataArgs::is_handled( ) -------->> dx_MessageDataArgs::make_handled( ) -------->> dx_MessageDataArgs::get_lparam( ) -------->> dx_MessageDataArgs::get_wparam( ) -------->> dx_MessageDataArgs::get_msg_code( ) ---->> dx_Window -------->> dx_Window::dx_Window( &arg, &arg1, &arg2, &arg3 ) -------->> dx_Window::~dx_Window( ) -------->> dx_Window::get_title( ) -------->> dx_Window::get_class( ) -------->> dx_Window::client_to_screen( &arg1 ) -------->> dx_Window::screen_to_client( &arg1 ) -------->> dx_Window::hide( ) -------->> dx_Window::show( ) -------->> dx_Window::bring_to_top( ) -------->> dx_Window::minimize( ) -------->> dx_Window::maximize( ) -------->> dx_Window::restore( ) -------->> dx_Window::force_paint( ) -------->> dx_Window::enable( ) -------->> dx_Window::disable( ) -------->> dx_Window::load_icon( &arg1 ) -------->> dx_Window::load_icon_small( &arg1 ) -------->> dx_Window::close( ) -------->> dx_Window::get_parent( ) -------->> dx_Window::get_painter( ) -------->> dx_Window::set_painter( &arg1, &arg2 ) -------->> dx_Window::has_painter( ) -------->> dx_Window::get_width( ) -------->> dx_Window::get_height( ) -------->> dx_Window::is_ctrl_held( ) -------->> dx_Window::is_shift_held( ) -------->> dx_Window::is_key_down( &arg1 ) -------->> dx_Window::handle_tasks( ) -------->> dx_Window::poll_events( ) -------->> dx_Window::=( &arg1 ) -------->> dx_Window::dont_paint_on_event( ) -------->> dx_Window::paint_on_event( ) -------->> dx_Window::on_window_resize( &arg1 ) -------->> dx_Window::on_window_moved( &arg1 ) -------->> dx_Window::on_paint( &arg1 ) -------->> dx_Window::on_window_maximize( &arg1 ) -------->> dx_Window::on_window_minimize( &arg1 ) -------->> dx_Window::on_window_restored( &arg1 ) -------->> dx_Window::on_window_closed( &arg1 ) -------->> dx_Window::on_window_closing( &arg1 ) -------->> dx_Window::on_mouse_moved( &arg1 ) -------->> dx_Window::on_mouse_clicked( &arg1 ) -------->> dx_Window::on_mouse_released( &arg1 ) -------->> dx_Window::on_mouse_double_clicked( &arg1 ) -------->> dx_Window::on_mouse_scroll( &arg1 ) -------->> dx_Window::on_key_down( &arg1 ) -------->> dx_Window::on_key_up( &arg1 ) -------->> dx_Window::on_key_down_char( &arg1 ) -------->> dx_Window::on_handle_message( &arg1 ) ---->> dx_Painter -------->> dx_Painter::dx_Painter( &arg ) -------->> dx_Painter::~dx_Painter( ) -------->> dx_Painter::reset_painter( &arg1, &arg2 ) -------->> dx_Painter::begin_paint( ) -------->> dx_Painter::paint_text( &arg1, &arg2 ) -------->> dx_Painter::paint_rect( &arg1, &arg2 ) -------->> dx_Painter::paint_rect_outlined( &arg1, &arg2, &arg3 ) -------->> dx_Painter::paint_line( &arg1 ) -------->> dx_Painter::present_paint( ) -------->> dx_Painter::get_default_font( ) -------->> dx_Painter::set_default_font( &arg1 ) -------->> dx_Painter::=( &arg1 ) ---->> thread -------->> thread::thread( ) -------->> thread::~thread( ) -------->> thread::start( &arg1 ) -------->> thread::is_running( ) -------->> thread::wait( &arg1 ) -------->> thread::suspend( ) -------->> thread::resume( ) -------->> thread::kill( ) -------->> thread::sleep( &arg1 ) ---->> milliseconds -------->> milliseconds::milliseconds( &arg ) -------->> milliseconds::~milliseconds( ) -------->> milliseconds::count( ) ---->> fstream -------->> fstream::fstream( &fname, &ftype ) -------->> fstream::~fstream( ) -------->> fstream::close( ) -------->> fstream::eof( ) -------->> fstream::getln( ) -------->> fstream::putln( &input ) -------->> fstream::put( &input ) -------->> fstream::<<( &input ) -------->> fstream::>>( &output ) ---->> ostream -------->> ostream::~ostream( ) -------->> ostream::putln( &input ) -------->> ostream::put( &input ) -------->> ostream::<<( &input ) ---->> istream -------->> istream::~istream( ) -------->> istream::getln( ) -------->> istream::>>( &output ) ---->> std::endl -------->> std::endl::~std::endl( )
