@@ -36,6 +36,7 @@
37namespace PureScript {
37namespace PureScript {
39+using integer = std::intptr_t;
39using cstring = const char *;
40using cstring = const char *;
40using nullptr_t = std::nullptr_t;
41using nullptr_t = std::nullptr_t;
@@ -45,6 +46,9 @@ public:
45 runtime_error(const char message[]) : std::runtime_error(std::string(message)) {}
46 runtime_error(const char message[]) : std::runtime_error(std::string(message)) {}
49+const integer INTEGER_MIN = INTPTR_MIN;
50+const integer INTEGER_MAX = INTPTR_MAX;
48const bool undefined = false;
52const bool undefined = false;
49const size_t constructor = 0;
53const size_t constructor = 0;
@@ -133,7 +137,7 @@ class any {
135 mutable thunk t;
139 mutable thunk t;
136− mutable long i;
140+ mutable integer i;
137 mutable double d;
141 mutable double d;
138 mutable char c;
142 mutable char c;
139 mutable bool b;
143 mutable bool b;
@@ -151,7 +155,7 @@ class any {
154− any(const long val) noexcept : type(Type::Integer), i(val) {}
158+ any(const integer val) noexcept : type(Type::Integer), i(val) {}
155 any(const int val) noexcept : type(Type::Integer), i(val) {}
159 any(const int val) noexcept : type(Type::Integer), i(val) {}
156 any(const unsigned int val) noexcept : type(Type::Integer), i(val) {}
160 any(const unsigned int val) noexcept : type(Type::Integer), i(val) {}
157 any(const double val) noexcept : type(Type::Double), d(val) {}
161 any(const double val) noexcept : type(Type::Double), d(val) {}
@@ -273,7 +277,7 @@ class any {
273 auto operator()(const as_thunk) const -> const any&;
277 auto operator()(const as_thunk) const -> const any&;
274 auto operator()() const -> any;
278 auto operator()() const -> any;
276− operator long() const;
280+ operator integer() const;
277 operator double() const;
281 operator double() const;
278 operator bool() const;
282 operator bool() const;
279 operator char() const;
283 operator char() const;
@@ -302,15 +306,15 @@ class any {
303 #define DEFINE_INT_OPERATOR(op, rty) \
307 #define DEFINE_INT_OPERATOR(op, rty) \
304 inline friend auto operator op (const any& lhs, int rhs) -> rty { \
308 inline friend auto operator op (const any& lhs, int rhs) -> rty { \
305− return (long)lhs op (long)rhs; \
309+ return (integer)lhs op (integer)rhs; \
307 inline friend auto operator op (int lhs, const any& rhs) -> rty { \
311 inline friend auto operator op (int lhs, const any& rhs) -> rty { \
308− return (long)lhs op (long)rhs; \
312+ return (integer)lhs op (integer)rhs; \
311 #define DECLARE_COMPARISON_OPERATOR(op) \
315 #define DECLARE_COMPARISON_OPERATOR(op) \
312 friend auto operator op (const any&, const any&) -> bool; \
316 friend auto operator op (const any&, const any&) -> bool; \
313− DEFINE_OPERATOR(op, long, bool) \
317+ DEFINE_OPERATOR(op, integer, bool) \
314 DEFINE_OPERATOR(op, double, bool) \
318 DEFINE_OPERATOR(op, double, bool) \
315 DEFINE_OPERATOR(op, char, bool) \
319 DEFINE_OPERATOR(op, char, bool) \
316 DEFINE_INT_OPERATOR(op, bool) \
320 DEFINE_INT_OPERATOR(op, bool) \
@@ -326,39 +330,39 @@ class any {
327 friend auto operator+(const any&, const any&) -> any;
331 friend auto operator+(const any&, const any&) -> any;
329− DEFINE_OPERATOR(+, long, long)
333+ DEFINE_OPERATOR(+, integer, integer)
330 DEFINE_OPERATOR(+, double, double)
334 DEFINE_OPERATOR(+, double, double)
331 DEFINE_OPERATOR(+, char, char)
335 DEFINE_OPERATOR(+, char, char)
332− DEFINE_INT_OPERATOR(+, long)
336+ DEFINE_INT_OPERATOR(+, integer)
333 friend auto operator+(const any& lhs, const char * const rhs) -> std::string;
337 friend auto operator+(const any& lhs, const char * const rhs) -> std::string;
334 friend auto operator+(const char * const lhs, const any& rhs) -> std::string;
338 friend auto operator+(const char * const lhs, const any& rhs) -> std::string;
336 friend auto operator-(const any&, const any&) -> any;
340 friend auto operator-(const any&, const any&) -> any;
338− DEFINE_OPERATOR(-, long, long)
342+ DEFINE_OPERATOR(-, integer, integer)
339 DEFINE_OPERATOR(-, double, double)
343 DEFINE_OPERATOR(-, double, double)
340 DEFINE_OPERATOR(-, char, char)
344 DEFINE_OPERATOR(-, char, char)
341− DEFINE_INT_OPERATOR(-, long)
345+ DEFINE_INT_OPERATOR(-, integer)
343 friend auto operator*(const any&, const any&) -> any;
347 friend auto operator*(const any&, const any&) -> any;
345− DEFINE_OPERATOR(*, long, long)
349+ DEFINE_OPERATOR(*, integer, integer)
346 DEFINE_OPERATOR(*, double, double)
350 DEFINE_OPERATOR(*, double, double)
347 DEFINE_OPERATOR(*, char, char)
351 DEFINE_OPERATOR(*, char, char)
348− DEFINE_INT_OPERATOR(*, long)
352+ DEFINE_INT_OPERATOR(*, integer)
350 friend auto operator/(const any&, const any&) -> any;
354 friend auto operator/(const any&, const any&) -> any;
352− DEFINE_OPERATOR(/, long, long)
356+ DEFINE_OPERATOR(/, integer, integer)
353 DEFINE_OPERATOR(/, double, double)
357 DEFINE_OPERATOR(/, double, double)
354 DEFINE_OPERATOR(/, char, char)
358 DEFINE_OPERATOR(/, char, char)
355− DEFINE_INT_OPERATOR(/, long)
359+ DEFINE_INT_OPERATOR(/, integer)
357 friend auto operator%(const any&, const any&) -> any;
361 friend auto operator%(const any&, const any&) -> any;
359− DEFINE_OPERATOR(%, long, long)
363+ DEFINE_OPERATOR(%, integer, integer)
360 DEFINE_OPERATOR(%, char, char)
364 DEFINE_OPERATOR(%, char, char)
361− DEFINE_INT_OPERATOR(%, long)
365+ DEFINE_INT_OPERATOR(%, integer)
363 friend auto operator-(const any&) -> any; // unary negate
367 friend auto operator-(const any&) -> any; // unary negate