diff --git a/include/library/string.hpp b/include/library/string.hpp index 2f9a13ea..6d6ed663 100644 --- a/include/library/string.hpp +++ b/include/library/string.hpp @@ -111,7 +111,7 @@ public: /** * Create new end-of-sequence iterator. */ - token_iterator(); + token_iterator() : str(tmp) { ctor_eos(); } /** * Create a new start-of-sequence iterator. * @@ -120,28 +120,38 @@ public: * Parameter whole_sequence: If true, after seeing one separator, throw away separators until none more are found. */ token_iterator(const std::basic_string& s, std::initializer_list sep, - bool whole_sequence = false) throw(std::bad_alloc); + bool whole_sequence = false) throw(std::bad_alloc) : str(s) { ctor_itr(sep, whole_sequence); } /** * Compare. */ - bool operator==(const token_iterator& itr) const throw(); + bool operator==(const token_iterator& itr) const throw() { return equals_op(itr); } /** * Compare. */ - bool operator!=(const token_iterator& itr) const throw(); + bool operator!=(const token_iterator& itr) const throw() { return !equals_op(itr); } /** * Dereference. */ - const std::basic_string& operator*() const throw(); + const std::basic_string& operator*() const throw() { return dereference(); } /** * Increment. */ - token_iterator& operator++() throw(std::bad_alloc); + token_iterator& operator++() throw(std::bad_alloc) { return preincrement(); } /** * Increment. */ - token_iterator operator++(int) throw(std::bad_alloc); + token_iterator operator++(int) throw(std::bad_alloc) { return postincrement(); } +/** + * Do nothing, pull everything. + */ + static void pull_fn(); private: + void ctor_eos(); + void ctor_itr(std::initializer_list sep, bool whole_sequence = false) throw(std::bad_alloc); + token_iterator postincrement() throw(std::bad_alloc); + token_iterator& preincrement() throw(std::bad_alloc); + const std::basic_string& dereference() const throw(); + bool equals_op(const token_iterator& itr) const throw(); size_t is_sep(size_t pos); void load_helper(); const std::basic_string& str; diff --git a/src/core/misc.cpp b/src/core/misc.cpp index e6ea24e9..83d95b64 100644 --- a/src/core/misc.cpp +++ b/src/core/misc.cpp @@ -149,6 +149,7 @@ namespace void fatal_signal_handler(int sig) { + write(2, "Caught fatal signal!\n", 21); emerg_save_movie(our_movie, movb.get_movie().get_frame_vector()); signal(sig, SIG_DFL); raise(sig); @@ -156,6 +157,7 @@ namespace void terminate_handler() { + write(2, "Terminating abnormally!\n", 24); emerg_save_movie(our_movie, movb.get_movie().get_frame_vector()); std::cerr << "Exiting on fatal error" << std::endl; exit(1); diff --git a/src/library/skein512c.inc b/src/library/skein512c.inc index a6941e64..160185fd 100644 --- a/src/library/skein512c.inc +++ b/src/library/skein512c.inc @@ -518,7 +518,6 @@ static void skein256_compress(uint64_t* out, const uint64_t* in, const uint64_t* out[1]=in[1]^out[1]; out[2]=in[2]^out[2]; out[3]=in[3]^out[3]; - out[4]=in[4]^out[4]; } static void skein512_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak) { @@ -1556,7 +1555,6 @@ static void skein512_compress(uint64_t* out, const uint64_t* in, const uint64_t* out[5]=in[5]^out[5]; out[6]=in[6]^out[6]; out[7]=in[7]^out[7]; - out[8]=in[8]^out[8]; } static void skein1024_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak) { @@ -3850,5 +3848,4 @@ static void skein1024_compress(uint64_t* out, const uint64_t* in, const uint64_t out[13]=in[13]^out[13]; out[14]=in[14]^out[14]; out[15]=in[15]^out[15]; - out[16]=in[16]^out[16]; } diff --git a/src/library/skeincgen.lua b/src/library/skeincgen.lua index 2a22a937..f29dbe7c 100644 --- a/src/library/skeincgen.lua +++ b/src/library/skeincgen.lua @@ -50,7 +50,7 @@ for r=0,rounds do current_permute[i]=permutation[current_permute[i]+1]; end end -for i=0,okeys do print("\tout["..i.."]=in["..i.."]^out["..i.."];"); end +for i=0,okeys-1 do print("\tout["..i.."]=in["..i.."]^out["..i.."];"); end print("}"); end diff --git a/src/library/string.cpp b/src/library/string.cpp index d6cd3b3e..04ee7750 100644 --- a/src/library/string.cpp +++ b/src/library/string.cpp @@ -1,6 +1,7 @@ #include "string.hpp" #include "minmax.hpp" #include "threadtypes.hpp" +#include "eatarg.hpp" #include #include #include "map-pointer.hpp" @@ -282,26 +283,24 @@ string_list split_on_codepoint(const std::u32string& s, char32_t cp) return _split_on_codepoint(s, _cp); } -template token_iterator::token_iterator() - : str(tmp), is_end_iterator(true) +template void token_iterator::ctor_eos() { + is_end_iterator = true; } -template token_iterator::token_iterator(const std::basic_string& s, - std::initializer_list sep, bool whole_sequence) throw(std::bad_alloc) - : str(s), whole_seq(whole_sequence), is_end_iterator(false), bidx(0), eidx(0) +template void token_iterator::ctor_itr(std::initializer_list sep, bool whole_sequence) + throw(std::bad_alloc) { + whole_seq = whole_sequence; + is_end_iterator = false; + bidx = 0; + eidx = 0; for(auto i : sep) spliton.insert(i); load_helper(); } -template bool token_iterator::operator!=(const token_iterator& itr) const throw() -{ - return !(*this == itr); -} - -template bool token_iterator::operator==(const token_iterator& itr) const throw() +template bool token_iterator::equals_op(const token_iterator& itr) const throw() { bool is_end_a = is_end_iterator || (bidx >= str.length()); bool is_end_b = itr.is_end_iterator || (itr.bidx >= itr.str.length()); @@ -317,19 +316,19 @@ template bool token_iterator::operator==(const token_iterator& return bidx == itr.bidx; } -template const std::basic_string& token_iterator::operator*() const throw() +template const std::basic_string& token_iterator::dereference() const throw() { return tmp; } -template token_iterator token_iterator::operator++(int) throw(std::bad_alloc) +template token_iterator token_iterator::postincrement() throw(std::bad_alloc) { token_iterator t = *this; ++*this; return t; } -template token_iterator& token_iterator::operator++() throw(std::bad_alloc) +template token_iterator& token_iterator::preincrement() throw(std::bad_alloc) { bidx = eidx + is_sep(eidx); load_helper(); @@ -368,19 +367,23 @@ template size_t token_iterator::is_sep(size_t pos) } } +template void token_iterator::pull_fn() +{ + eat_argument(&token_iterator::ctor_itr); + eat_argument(&token_iterator::ctor_eos); + eat_argument(&token_iterator::postincrement); + eat_argument(&token_iterator::preincrement); + eat_argument(&token_iterator::dereference); + eat_argument(&token_iterator::equals_op); + eat_argument(&token_iterator::is_sep); + eat_argument(&token_iterator::load_helper); +} + namespace { template void pull_token_itr() { - int w = 0; - std::basic_string x; - token_iterator y(x, {}); - token_iterator z; - y++; - ++y; - x = *y; - if(y == z) w = 1; - if(y != z) w = 2; + token_iterator::pull_fn(); } void pull_token_itr2() diff --git a/src/platform/wxwidgets/main.cpp b/src/platform/wxwidgets/main.cpp index 100575c4..5b6a4316 100644 --- a/src/platform/wxwidgets/main.cpp +++ b/src/platform/wxwidgets/main.cpp @@ -358,6 +358,7 @@ IMPLEMENT_APP(lsnes_app) lsnes_app::lsnes_app() { settings_mode = false; + pluginmanager_mode = false; exit_immediately = false; }