Website Summary Files Commits Branches @commit @diff @stats
path: root / spasm / src
diff options
context:
space:
mode:
Commit9468ccb2024e850bacfcddcabc5402968c29b956 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-22 14:17:21 +0200
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-22 14:17:21 +0200
Files3dd2ecc4577e02495123ace7982cb25a3bb922d5 /spasm/src
IPL-9468ccb2024e850bacfcddcabc5402968c29b956.tar
IPL-9468ccb2024e850bacfcddcabc5402968c29b956.tar.gz
IPL-9468ccb2024e850bacfcddcabc5402968c29b956.zip
Parent3ce342b97b6c22b7ce6dded7be7b5c6bf9edcc04 (diff)
Fixed linux build
4 files changed, 24 insertions, 11 deletions
-rw-r--r--spasm/src/asm/bytecode.cpp21
-rw-r--r--spasm/src/asm/bytecode.hpp6
-rw-r--r--spasm/src/asm/token.cpp2
-rw-r--r--spasm/src/asm/token.hpp6
diff --git a/spasm/src/asm/bytecode.cpp b/spasm/src/asm/bytecode.cpp
index ad436ce..a4a1e6e 100644
--- a/spasm/src/asm/bytecode.cpp
+++ b/spasm/src/asm/bytecode.cpp
@@ -26,7 +26,20 @@ void Bytecode_File::push_opcode(Bytecode_Stream::Opcode_t opcode)
push_byte(opcode);
}
-void Bytecode_File::push_integer(int number, int size)
+union DoubleToBits
+{
+ double as_double;
+ int64_t as_bits;
+};
+
+int64_t to_bits(double d)
+{
+ DoubleToBits v;
+ v.as_double = d;
+ return v.as_bits;
+};
+
+void Bytecode_File::push_integer(int64_t number, int size)
{
for (int i = 0; i < size; ++i)
push_byte((number >> (i << 3)) & 0xff);
@@ -34,7 +47,7 @@ void Bytecode_File::push_integer(int number, int size)
void Bytecode_File::push_double(double number)
{
- auto bits = *reinterpret_cast<size_t*>(&number);
+ auto bits = to_bits(number);
for (size_t i = 0; i < sizeof(size_t); ++i)
push_byte((bits >> (i << 3)) & 0xff);
}
@@ -49,7 +62,7 @@ void Bytecode_Memory::push_opcode(Bytecode_Stream::Opcode_t opcode)
push_byte(opcode);
}
-void Bytecode_Memory::push_integer(int number, int size)
+void Bytecode_Memory::push_integer(int64_t number, int size)
{
for (int i = 0; i < size; ++i)
push_byte((number >> (i << 3)) & 0xff);
@@ -57,7 +70,7 @@ void Bytecode_Memory::push_integer(int number, int size)
void Bytecode_Memory::push_double(double number)
{
- auto bits = *reinterpret_cast<size_t*>(&number);
+ auto bits = to_bits(number);
for (size_t i = 0; i < sizeof(size_t); ++i)
push_byte((bits >> (i << 3)) & 0xff);
}
diff --git a/spasm/src/asm/bytecode.hpp b/spasm/src/asm/bytecode.hpp
index 345b7a8..fb80122 100644
--- a/spasm/src/asm/bytecode.hpp
+++ b/spasm/src/asm/bytecode.hpp
@@ -18,7 +18,7 @@ class Bytecode_Stream
virtual ~Bytecode_Stream();
virtual void push_opcode(Opcode_t) = 0;
- virtual void push_integer(int, int size) = 0;
+ virtual void push_integer(int64_t, int size) = 0;
virtual void push_double(double) = 0;
virtual void push_location(size_t) = 0;
virtual void set_location(size_t, size_t) = 0;
@@ -31,7 +31,7 @@ class Bytecode_File : public Bytecode_Stream
Bytecode_File(const std::string&);
virtual void push_opcode(Opcode_t);
- virtual void push_integer(int, int size);
+ virtual void push_integer(int64_t, int size) override;
virtual void push_double(double) override;
private:
@@ -47,7 +47,7 @@ class Bytecode_Memory : public Bytecode_Stream
{
public:
virtual void push_opcode(Opcode_t);
- virtual void push_integer(int, int) override;
+ virtual void push_integer(int64_t, int) override;
virtual void push_double(double) override;
virtual void push_location(size_t);
virtual void set_location(size_t, size_t);
diff --git a/spasm/src/asm/token.cpp b/spasm/src/asm/token.cpp
index 3f8980d..fa612e3 100644
--- a/spasm/src/asm/token.cpp
+++ b/spasm/src/asm/token.cpp
@@ -57,7 +57,7 @@ Token::Token_type Token::type() const
return _type;
}
-int Token::value_int() const
+int64_t Token::value_int() const
{
return _value_int;
}
diff --git a/spasm/src/asm/token.hpp b/spasm/src/asm/token.hpp
index 6c64e89..8f18768 100644
--- a/spasm/src/asm/token.hpp
+++ b/spasm/src/asm/token.hpp
@@ -58,8 +58,8 @@ class Token
size_t lineno() const;
- int value_int() const;
- void set_int(int v) { _value_int = v; }
+ int64_t value_int() const;
+ void set_int(int64_t v) { _value_int = v; }
double value_double() const { return _value_double; }
@@ -70,7 +70,7 @@ class Token
size_t _lineno;
- int _value_int;
+ int64_t _value_int;
double _value_double;
std::string _value_str;