summaryrefslogtreecommitdiff
path: root/src/hir/from_ast_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r--src/hir/from_ast_expr.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp
index 186ec232..415ff978 100644
--- a/src/hir/from_ast_expr.cpp
+++ b/src/hir/from_ast_expr.cpp
@@ -556,13 +556,17 @@ struct LowerHIR_ExprNode_Visitor:
else {
TU_MATCH_DEF(::AST::PathBinding, (v.m_path.binding()), (e),
(
- m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::UNKNOWN ) );
+ auto p = LowerHIR_Path(Span(v.get_pos()), v.m_path);
+ if( p.m_data.is_Generic() ) {
+ BUG(v.span(), "Unknown binding for PathValue but path is generic - " << v.m_path);
+ }
+ m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), mv$(p), ::HIR::ExprNode_PathValue::UNKNOWN ) );
),
(Struct,
assert( e.struct_ );
- // TODO: Check the form and emit a PathValue if not a unit
+ // Check the form and emit a PathValue if not a unit
if( e.struct_->m_data.is_Struct() ) {
- // ERROR.
+ ERROR(v.span(), E0000, "Named value referring to a struct that isn't tuple-like or unit-like - " << v.m_path);
}
else if( e.struct_->m_data.as_Tuple().ents.size() > 0 ) {
m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::STRUCT_CONSTR ) );