import re test.compile("source.cpp") test.computeGCTypes() body = test.process_body(test.load_db_entry("src_body", re.compile(r'root_arg'))[0]) # Rendering positive and negative integers marker1 = body.assignment_line('MARKER1') equal(body.edge_from_line(marker1 + 2)['Exp'][1]['String'], '1') equal(body.edge_from_line(marker1 + 3)['Exp'][1]['String'], '-1') equal(body.edge_from_point(body.assignment_point('u1'))['Exp'][1]['String'], '1') equal(body.edge_from_point(body.assignment_point('u2'))['Exp'][1]['String'], '4294967295') assert('obj' in body['Variables']) assert('random' in body['Variables']) assert('other1' in body['Variables']) assert('other2' in body['Variables']) # Test function annotations js_GC = test.process_body(test.load_db_entry("src_body", re.compile(r'js_GC'))[0]) annotations = js_GC['Variables']['void js_GC()']['Annotation'] assert(annotations) found_call_tag = False for annotation in annotations: (annType, value) = annotation['Name'] if annType == 'Tag' and value == 'GC Call': found_call_tag = True assert(found_call_tag) # Test type annotations # js::gc::Cell first cell = test.load_db_entry("src_comp", 'js::gc::Cell')[0] assert(cell['Kind'] == 'Struct') annotations = cell['Annotation'] assert(len(annotations) == 1) (tag, value) = annotations[0]['Name'] assert(tag == 'Tag') assert(value == 'GC Thing') # Check JSObject inheritance. JSObject = test.load_db_entry("src_comp", 'JSObject')[0] bases = [ b['Base'] for b in JSObject['CSUBaseClass'] ] assert('js::gc::Cell' in bases) assert('Bogon' in bases) assert(len(bases) == 2) # Check type analysis gctypes = test.load_gcTypes() assert('js::gc::Cell' in gctypes['GCThings']) assert('JustACell' in gctypes['GCThings']) assert('JSObject' in gctypes['GCThings']) assert('SpecialObject' in gctypes['GCThings']) assert('UnrootedPointer' in gctypes['GCPointers']) assert('Bogon' not in gctypes['GCThings']) assert('Bogon' not in gctypes['GCPointers']) assert('ErrorResult' not in gctypes['GCPointers']) assert('OkContainer' not in gctypes['GCPointers']) assert('class Rooted' not in gctypes['GCPointers'])