diff options
author | Philip Herron <phil@nebuloninc.com> | 2020-05-16 23:05:19 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2020-11-28 19:13:36 +0000 |
commit | 289cbcc7e694ab3ed62011c86f2d43c8ee2e9dd9 (patch) | |
tree | 6f86579f21ffefcb739646b2e64af4099e2e6988 | |
parent | 821e1fb4a6ad8d969753524341fbb8bfb59ef4b8 (diff) | |
download | gcc-289cbcc7e694ab3ed62011c86f2d43c8ee2e9dd9.zip gcc-289cbcc7e694ab3ed62011c86f2d43c8ee2e9dd9.tar.gz gcc-289cbcc7e694ab3ed62011c86f2d43c8ee2e9dd9.tar.bz2 |
Infer types to scope for FunctionParams
-rw-r--r-- | gcc/rust/analysis/rust-resolution.cc | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/gcc/rust/analysis/rust-resolution.cc b/gcc/rust/analysis/rust-resolution.cc index 1c0fad1..a14b64c 100644 --- a/gcc/rust/analysis/rust-resolution.cc +++ b/gcc/rust/analysis/rust-resolution.cc @@ -254,9 +254,7 @@ TypeResolution::visit (AST::ComparisonExpr &expr) void TypeResolution::visit (AST::LazyBooleanExpr &expr) -{ - printf ("LazyBooleanExpr: %s\n", expr.as_string ().c_str ()); -} +{} void TypeResolution::visit (AST::TypeCastExpr &expr) @@ -270,9 +268,7 @@ TypeResolution::visit (AST::AssignmentExpr &expr) void TypeResolution::visit (AST::CompoundAssignmentExpr &expr) -{ - printf ("CompoundAssignmentExpr: %s\n", expr.as_string ().c_str ()); -} +{} void TypeResolution::visit (AST::GroupedExpr &expr) @@ -340,9 +336,13 @@ TypeResolution::visit (AST::EnumExprTuple &expr) void TypeResolution::visit (AST::EnumExprFieldless &expr) {} + void TypeResolution::visit (AST::CallExpr &expr) -{} +{ + printf ("CallExpr: %s\n", expr.as_string ().c_str ()); +} + void TypeResolution::visit (AST::MethodCallExpr &expr) {} @@ -481,18 +481,25 @@ TypeResolution::visit (AST::UseDeclaration &use_decl) void TypeResolution::visit (AST::Function &function) { + // always emit the function with return type in the event of nil return type + // its a marker for a void function scope.Insert (function.function_name, function.return_type.get ()); scope.Push (); - printf ("INSIDE FUNCTION: %s\n", function.function_name.c_str ()); - for (auto ¶m : function.function_params) { - printf ("FUNC PARAM: %s\n", param.as_string ().c_str ()); - } + auto before = letPatternBuffer.size (); + param.param_name->accept_vis (*this); + if (letPatternBuffer.size () <= before) + { + rust_error_at (param.locus, "failed to analyse parameter name"); + return; + } - // ensure return types - // TODO + auto paramName = letPatternBuffer.back (); + letPatternBuffer.pop_back (); + scope.Insert (paramName.variable_ident, param.type.get ()); + } // walk the expression body for (auto &stmt : function.function_body->statements) @@ -743,16 +750,12 @@ TypeResolution::visit (AST::LetStmt &stmt) void TypeResolution::visit (AST::ExprStmtWithoutBlock &stmt) { - printf ("ExprStmtWithoutBlock: %s\n", stmt.as_string ().c_str ()); stmt.expr->accept_vis (*this); } void TypeResolution::visit (AST::ExprStmtWithBlock &stmt) -{ - printf ("ExprStmtWithBlock: %s\n", stmt.as_string ().c_str ()); - stmt.expr->accept_vis (*this); -} +{} // rust-type.h void |