Merge "Update drivetrain_lib_test to use y2016 stuff."
diff --git a/NO_BUILD_AMD64 b/NO_BUILD_AMD64
index 391b1cb..2536534 100644
--- a/NO_BUILD_AMD64
+++ b/NO_BUILD_AMD64
@@ -1,5 +1,4 @@
 -//aos/externals:wpilib
--//aos/externals:wpilib_2015
 -//third_party/allwpilib_2016/...
 -//third_party/ntcore_2016/...
 -//frc971/wpilib/...
diff --git a/frc971/analysis/analysis.py b/frc971/analysis/analysis.py
index e477bdd..48cc8bc 100755
--- a/frc971/analysis/analysis.py
+++ b/frc971/analysis/analysis.py
@@ -44,6 +44,8 @@
       None
     """
     pline = ParseLine(line)
+    pline_data = None
+
     for key in self.signal:
       value = self.signal[key]
       binary = key[0]
@@ -61,10 +63,12 @@
       # Make sure that we're looking at the right binary structure instance.
       if binary == pline.name:
         if pline.msg.startswith(struct_instance_name + ': '):
-          # Parse the structure and traverse it as specified in
-          # `data_search_path`. This lets the user access very deeply nested
-          # structures.
-          _, _, data = pline.ParseStruct()
+          # Parse the structure once.
+          if pline_data is None:
+              _, _, pline_data = pline.ParseStruct()
+          # Traverse the structure as specified in `data_search_path`.
+          # This lets the user access very deeply nested structures.
+          data = pline_data
           for path in data_search_path:
             data = data[path]