summaryrefslogtreecommitdiff
path: root/src/hir
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir')
-rw-r--r--src/hir/from_ast.cpp19
-rw-r--r--src/hir/pattern.cpp15
-rw-r--r--src/hir/pattern.hpp9
-rw-r--r--src/hir/visitor.cpp2
4 files changed, 39 insertions, 6 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp
index 17bbb2c3..e723d26b 100644
--- a/src/hir/from_ast.cpp
+++ b/src/hir/from_ast.cpp
@@ -361,6 +361,16 @@
BUG(sp, "Unknown type for integer literal in pattern - " << ct );
}
}
+ static ::HIR::CoreType get_float_type(const Span& sp, const ::eCoreType ct) {
+ switch(ct)
+ {
+ case CORETYPE_ANY: return ::HIR::CoreType::Str;
+ case CORETYPE_F32: return ::HIR::CoreType::F32;
+ case CORETYPE_F64: return ::HIR::CoreType::F64;
+ default:
+ BUG(sp, "Unknown type for float literal in pattern - " << ct );
+ }
+ }
static ::HIR::Pattern::Value lowerhir_pattern_value(const Span& sp, const ::AST::Pattern::Value& v) {
TU_MATCH(::AST::Pattern::Value, (v), (e),
(Invalid,
@@ -373,11 +383,10 @@
});
),
(Float,
- TODO(sp, "Floating point patterns");
- //return ::HIR::Pattern::Value::make_Float({
- // H::get_int_type(sp, e.type),
- // e.value
- // });
+ return ::HIR::Pattern::Value::make_Float({
+ H::get_float_type(sp, e.type),
+ e.value
+ });
),
(String,
return ::HIR::Pattern::Value::make_String(e);
diff --git a/src/hir/pattern.cpp b/src/hir/pattern.cpp
index c5c2ef93..a2c9ef27 100644
--- a/src/hir/pattern.cpp
+++ b/src/hir/pattern.cpp
@@ -1,10 +1,20 @@
-
+/*
+ * MRustC - Rust Compiler
+ * - By John Hodge (Mutabah/thePowersGang)
+ *
+ * hir/pattern.cpp
+ * - HIR Representation of patterns
+ */
#include "pattern.hpp"
namespace HIR {
::std::ostream& operator<<(::std::ostream& os, const Pattern::Value& x) {
TU_MATCH(Pattern::Value, (x), (e),
(Integer,
+ // TODO: Print with type (and signed-ness)
+ os << e.value;
+ ),
+ (Float,
// TODO: Print with type
os << e.value;
),
@@ -147,6 +157,9 @@ namespace {
(Integer,
return ::HIR::Pattern::Value::make_Integer(e);
),
+ (Float,
+ return ::HIR::Pattern::Value::make_Float(e);
+ ),
(String,
return ::HIR::Pattern::Value::make_String(e);
),
diff --git a/src/hir/pattern.hpp b/src/hir/pattern.hpp
index 205acfcb..17f06a29 100644
--- a/src/hir/pattern.hpp
+++ b/src/hir/pattern.hpp
@@ -1,4 +1,9 @@
/*
+ * MRustC - Rust Compiler
+ * - By John Hodge (Mutabah/thePowersGang)
+ *
+ * hir/pattern.hpp
+ * - HIR Representation of patterns
*/
#pragma once
@@ -50,6 +55,10 @@ struct Pattern
enum ::HIR::CoreType type; // Str == _
uint64_t value; // Signed numbers are encoded as 2's complement
}),
+ (Float, struct {
+ enum ::HIR::CoreType type; // Str == _
+ double value;
+ }),
(String, ::std::string),
(Named, struct {
Path path;
diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp
index 96c3a1d1..55cc9e66 100644
--- a/src/hir/visitor.cpp
+++ b/src/hir/visitor.cpp
@@ -387,6 +387,8 @@ void ::HIR::Visitor::visit_pattern_val(::HIR::Pattern::Value& val)
TU_MATCH(::HIR::Pattern::Value, (val), (e),
(Integer,
),
+ (Float,
+ ),
(String,
),
(Named,