From 6054f90447b61cf65c3dd20ff7a312c1b9080905 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Fri, 29 Sep 2017 10:06:52 -0400 Subject: [PATCH] rta: visit the superstring created by explain_assert MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- src/rapid_type_analysis.nit | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/rapid_type_analysis.nit b/src/rapid_type_analysis.nit index a6e4bef..01042e4 100644 --- a/src/rapid_type_analysis.nit +++ b/src/rapid_type_analysis.nit @@ -24,6 +24,7 @@ module rapid_type_analysis import semantize +private import explain_assert_api import csv # for live_types_to_csv private import ordered_tree # for live_methods_to_tree @@ -668,6 +669,31 @@ redef class AAsCastExpr end end +redef class AAssertExpr + redef fun accept_rapid_type_visitor(v) + do + if can_explain_assert(v.analysis.modelbuilder) then + var str = explain_assert_str + if str != null then str.accept_rapid_type_visitor(v) + end + end + + # Does `modelbuilder` know the classes to build a superstring to explain a failed assert? + private fun can_explain_assert(modelbuilder: ModelBuilder): Bool + do + var nas = modelbuilder.model.get_mclasses_by_name("NativeArray") + if nas == null then return false + + nas = modelbuilder.model.get_mclasses_by_name("Array") + if nas == null or nas.is_empty then return false + + nas = modelbuilder.model.get_mclasses_by_name("String") + if nas == null or nas.is_empty then return false + + return true + end +end + redef class ASendExpr redef fun accept_rapid_type_visitor(v) do -- 1.7.9.5