rta: visit the superstring created by explain_assert
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 29 Sep 2017 14:06:52 +0000 (10:06 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Fri, 16 Feb 2018 20:05:17 +0000 (15:05 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/rapid_type_analysis.nit

index a6e4bef..01042e4 100644 (file)
@@ -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