git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: rework treatment of size_t and array index operator
commit81aa981054b17591ffff94e92c34511271db292e authorAndy Arvanitis <andyarvanitis@gmail.com> dateFri 23 Dec 2016, 11:22 (10 years ago) parent8698eaa
3 files changed+7−12
pcc/runtime/purescript.cc+6−9 pcc/runtime/purescript.hh+1−2 src/Language/PureScript/Pretty/Cpp.hs−1
pcc/runtime/purescript.cc+6−9
@@ -64,6 +64,12 @@ any::operator char() const {
6464 RETURN_VALUE(tag_t::Character, c,)
6565}
6666
67+any::operator size_t() const {
68+ const auto sz = cast<int>(*this);
69+ assert(sz >= 0);
70+ return static_cast<size_t>(sz);
71+}
72+
6773any::operator cstring() const {
6874 const any& variant = unthunkVariant(*this);
6975 if (variant.tag == tag_t::StringLiteral) {
@@ -89,20 +95,11 @@ auto any::unthunkVariant(const any& a) -> const any& {
8995 return *variant;
9096}
9197
92−auto any::operator[](const symbol_t key) const -> const any& {
93− return PureScript::map::get(key, cast<map<unknown_size>>(*this));
94−}
95−
9698auto any::operator[](const size_t rhs) const -> const any& {
9799 const auto& xs = cast<array>(*this);
98100 return xs[rhs];
99101}
100102
101−auto any::operator[](const any& rhs) const -> const any& {
102− const auto& xs = cast<array>(*this);
103− return xs[cast<int>(rhs)];
104−}
105−
106103auto any::size() const -> size_t {
107104 return cast<array>(*this).size();
108105}
pcc/runtime/purescript.hh+1−2
@@ -337,12 +337,11 @@ class any {
337337 operator double() const;
338338 operator bool() const;
339339 operator char() const;
340+ operator size_t() const;
340341 operator cstring() const;
341342 operator const array&() const;
342343
343− auto operator[](const symbol_t) const -> const any&;
344344 auto operator[](const size_t) const -> const any&;
345− auto operator[](const any&) const -> const any&;
346345
347346 auto size() const -> size_t;
348347 auto empty() const -> bool;
src/Language/PureScript/Pretty/Cpp.hs−1
@@ -399,7 +399,6 @@ accessor = mkPattern match
399399indexer :: Pattern PrinterState Cpp (Text, Cpp)
400400indexer = mkPattern' match
401401 where
402− match (CppIndexer (CppNumericLiteral (Left 0)) val) = return ("0UL", val)
403402 match (CppIndexer (CppNumericLiteral (Left index)) val) = return (show' index, val)
404403 match (CppIndexer index val) = do
405404 index' <- prettyPrintCpp' index