GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — RustPython/scripts/crawl_sourcecode.py at main · RustPython/RustPython Expand file tree/ Copy pathcrawl_sourcecode.pyMore file actions 87 lines (69 loc) · 2.17 KB / Copy pathcrawl_sourcecode.pyFile metadata and controls87 lines (69 loc) · 2.17 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 """This script can be used to test the equivalence in parsing between rustpython and cpython. Usage example: $ python crawl_sourcecode.py crawl_sourcecode.py > cpython.txt $ cargo run crawl_sourcecode.py crawl_sourcecode.py > rustpython.txt $ diff cpython.txt rustpython.txt """ import ast import dis import symtable import sys filename = sys.argv[1] print("Crawling file:", filename) with open(filename, "r") as f: source = f.read() t = ast.parse(source) print(t) shift = 3 def print_node(node, indent=0): indents = " " * indent if isinstance(node, ast.AST): lineno = "row={}".format(node.lineno) if hasattr(node, "lineno") else "" print(indents, "NODE", node.__class__.__name__, lineno) for field in node._fields: print(indents, "-", field) f = getattr(node, field) if isinstance(f, list): for f2 in f: print_node(f2, indent=indent + shift) else: print_node(f, indent=indent + shift) else: print(indents, "OBJ", node) print_node(t) # print(ast.dump(t)) flag_names = [ "is_referenced", "is_assigned", "is_global", "is_local", "is_parameter", "is_free", ] def print_table(table, indent=0): indents = " " * indent print(indents, "table:", table.get_name()) print(indents, " ", "name:", table.get_name()) print(indents, " ", "type:", table.get_type()) print(indents, " ", "line:", table.get_lineno()) print(indents, " ", "identifiers:", table.get_identifiers()) print(indents, " ", "Syms:") for sym in table.get_symbols(): flags = [] for flag_name in flag_names: func = getattr(sym, flag_name) if func(): flags.append(flag_name) print(indents, " sym:", sym.get_name(), "flags:", " ".join(flags)) if table.has_children(): print(indents, " ", "Child tables:") for child in table.get_children(): print_table(child, indent=indent + shift) table = symtable.symtable(source, "a", "exec") print_table(table) print() print("======== dis.dis ========") print() co = compile(source, filename, "exec") dis.dis(co) |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |