[{"op":"class","name":"Perk","bases":[{"k":"name","id":"object"}],"body":[{"op":"set","t":{"k":"name","id":"count"},"v":{"k":"const","v":0}},{"op":"def","name":"__init__","params":[{"n":"self","d":null,"kind":"p"},{"n":"name","d":null,"kind":"p"},{"n":"cost","d":{"k":"const","v":1},"kind":"p"}],"body":[{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"name"},"v":{"k":"name","id":"name"}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"cost"},"v":{"k":"name","id":"cost"}},{"op":"aug","t":{"k":"attr","o":{"k":"name","id":"Perk"},"a":"count"},"o":"+","v":{"k":"const","v":1}}],"decos":[]},{"op":"def","name":"__str__","params":[{"n":"self","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"bin","op":"%","l":{"k":"const","v":"Perk(%s)"},"r":{"k":"attr","o":{"k":"name","id":"self"},"a":"name"}}}],"decos":[]}]},{"op":"class","name":"Player","bases":[{"k":"name","id":"object"}],"body":[{"op":"def","name":"__init__","params":[{"n":"self","d":null,"kind":"p"},{"n":"name","d":null,"kind":"p"},{"n":"perks","d":null,"kind":"*"},{"n":"extra","d":null,"kind":"**"}],"body":[{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"name"},"v":{"k":"name","id":"name"}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"perks"},"v":{"k":"call","f":{"k":"name","id":"list"},"a":[{"k":"name","id":"perks"}],"kw":{}}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"extra"},"v":{"k":"name","id":"extra"}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"_hp"},"v":{"k":"const","v":10}}],"decos":[]},{"op":"def","name":"has_perk","params":[{"n":"self","d":null,"kind":"p"},{"n":"name","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"call","f":{"k":"name","id":"any"},"a":[{"k":"comp","e":{"k":"cmp","l":{"k":"attr","o":{"k":"name","id":"p"},"a":"name"},"ops":["=="],"r":[{"k":"name","id":"name"}]},"t":{"k":"name","id":"p"},"it":{"k":"attr","o":{"k":"name","id":"self"},"a":"perks"},"if":[]}],"kw":{}}}],"decos":[]},{"op":"def","name":"add","params":[{"n":"self","d":null,"kind":"p"},{"n":"perk","d":null,"kind":"p"}],"body":[{"op":"eval","e":{"k":"call","f":{"k":"attr","o":{"k":"attr","o":{"k":"name","id":"self"},"a":"perks"},"a":"append"},"a":[{"k":"name","id":"perk"}],"kw":{}}},{"op":"return","v":{"k":"name","id":"self"}}],"decos":[]},{"op":"def","name":"hp","params":[{"n":"self","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"attr","o":{"k":"name","id":"self"},"a":"_hp"}}],"decos":[{"k":"name","id":"property"}]},{"op":"def","name":"hp","params":[{"n":"self","d":null,"kind":"p"},{"n":"value","d":null,"kind":"p"}],"body":[{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"_hp"},"v":{"k":"call","f":{"k":"name","id":"max"},"a":[{"k":"const","v":0},{"k":"name","id":"value"}],"kw":{}}}],"decos":[{"k":"attr","o":{"k":"name","id":"hp"},"a":"setter"}]},{"op":"def","name":"make","params":[{"n":"name","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"call","f":{"k":"name","id":"Player"},"a":[{"k":"name","id":"name"}],"kw":{}}}],"decos":[{"k":"name","id":"staticmethod"}]},{"op":"def","name":"label","params":[{"n":"cls","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"cmp","l":{"k":"name","id":"cls"},"ops":["is"],"r":[{"k":"name","id":"Player"}]}}],"decos":[{"k":"name","id":"classmethod"}]}]},{"op":"class","name":"Hero","bases":[{"k":"name","id":"Player"}],"body":[{"op":"def","name":"__init__","params":[{"n":"self","d":null,"kind":"p"},{"n":"name","d":null,"kind":"p"}],"body":[{"op":"eval","e":{"k":"call","f":{"k":"attr","o":{"k":"call","f":{"k":"name","id":"super"},"a":[],"kw":{}},"a":"__init__"},"a":[{"k":"name","id":"name"},{"k":"call","f":{"k":"name","id":"Perk"},"a":[{"k":"const","v":"brave"}],"kw":{}}],"kw":{"role":{"k":"const","v":"hero"}}}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"self"},"a":"level"},"v":{"k":"const","v":1}}],"decos":[]},{"op":"def","name":"has_perk","params":[{"n":"self","d":null,"kind":"p"},{"n":"name","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"bool","op":"or","v":[{"k":"cmp","l":{"k":"name","id":"name"},"ops":["=="],"r":[{"k":"const","v":"legend"}]},{"k":"call","f":{"k":"attr","o":{"k":"call","f":{"k":"name","id":"super"},"a":[],"kw":{}},"a":"has_perk"},"a":[{"k":"name","id":"name"}],"kw":{}}]}}],"decos":[]}]},{"op":"set","t":{"k":"name","id":"total"},"v":{"k":"const","v":0}},{"op":"def","name":"bump","params":[{"n":"step","d":{"k":"const","v":1},"kind":"p"},{"n":"scale","d":{"k":"const","v":2},"kind":"k"}],"body":[{"op":"global","names":["total"]},{"op":"aug","t":{"k":"name","id":"total"},"o":"+","v":{"k":"bin","op":"*","l":{"k":"name","id":"step"},"r":{"k":"name","id":"scale"}}},{"op":"return","v":{"k":"name","id":"total"}}],"decos":[]},{"op":"def","name":"fact","params":[{"n":"n","d":null,"kind":"p"}],"body":[{"op":"return","v":{"k":"if","c":{"k":"cmp","l":{"k":"name","id":"n"},"ops":["<="],"r":[{"k":"const","v":1}]},"t":{"k":"const","v":1},"e":{"k":"bin","op":"*","l":{"k":"name","id":"n"},"r":{"k":"call","f":{"k":"name","id":"fact"},"a":[{"k":"bin","op":"-","l":{"k":"name","id":"n"},"r":{"k":"const","v":1}}],"kw":{}}}}}],"decos":[]},{"op":"def","name":"counter","params":[],"body":[{"op":"set","t":{"k":"name","id":"n"},"v":{"k":"const","v":0}},{"op":"def","name":"inc","params":[],"body":[{"op":"nonlocal","names":["n"]},{"op":"aug","t":{"k":"name","id":"n"},"o":"+","v":{"k":"const","v":1}},{"op":"return","v":{"k":"name","id":"n"}}],"decos":[]},{"op":"return","v":{"k":"name","id":"inc"}}],"decos":[]},{"op":"set","t":{"k":"name","id":"hero"},"v":{"k":"call","f":{"k":"name","id":"Hero"},"a":[{"k":"const","v":"Ann"}],"kw":{}}},{"op":"eval","e":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"hero"},"a":"add"},"a":[{"k":"call","f":{"k":"name","id":"Perk"},"a":[{"k":"const","v":"fast"}],"kw":{"cost":{"k":"const","v":3}}}],"kw":{}}},{"op":"set","t":{"k":"attr","o":{"k":"name","id":"hero"},"a":"hp"},"v":{"k":"unary","op":"-","v":{"k":"const","v":5}}},{"op":"set","t":{"k":"name","id":"call_args"},"v":{"k":"list","v":[{"k":"const","v":2}]}},{"op":"set","t":{"k":"name","id":"call_kw"},"v":{"k":"dict","v":[[{"k":"const","v":"scale"},{"k":"const","v":10}]]}},{"op":"set","t":{"k":"name","id":"result_brave"},"v":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"hero"},"a":"has_perk"},"a":[{"k":"const","v":"brave"}],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_legend"},"v":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"hero"},"a":"has_perk"},"a":[{"k":"const","v":"legend"}],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_missing"},"v":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"hero"},"a":"has_perk"},"a":[{"k":"const","v":"nope"}],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_count"},"v":{"k":"attr","o":{"k":"name","id":"Perk"},"a":"count"}},{"op":"set","t":{"k":"name","id":"result_str"},"v":{"k":"call","f":{"k":"name","id":"str"},"a":[{"k":"call","f":{"k":"name","id":"Perk"},"a":[{"k":"const","v":"x"}],"kw":{}}],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_hp"},"v":{"k":"attr","o":{"k":"name","id":"hero"},"a":"hp"}},{"op":"set","t":{"k":"name","id":"result_role"},"v":{"k":"sub","o":{"k":"attr","o":{"k":"name","id":"hero"},"a":"extra"},"i":{"k":"const","v":"role"}}},{"op":"set","t":{"k":"name","id":"result_static"},"v":{"k":"attr","o":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"Player"},"a":"make"},"a":[{"k":"const","v":"Bob"}],"kw":{}},"a":"name"}},{"op":"set","t":{"k":"name","id":"result_cls"},"v":{"k":"call","f":{"k":"attr","o":{"k":"name","id":"Player"},"a":"label"},"a":[],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_bump"},"v":{"k":"call","f":{"k":"name","id":"bump"},"a":[{"k":"star","v":{"k":"name","id":"call_args"}}],"kw":{},"ks":[{"k":"name","id":"call_kw"}]}},{"op":"set","t":{"k":"name","id":"result_total"},"v":{"k":"name","id":"total"}},{"op":"set","t":{"k":"name","id":"result_fact"},"v":{"k":"call","f":{"k":"name","id":"fact"},"a":[{"k":"const","v":6}],"kw":{}}},{"op":"set","t":{"k":"name","id":"tick"},"v":{"k":"call","f":{"k":"name","id":"counter"},"a":[],"kw":{}}},{"op":"eval","e":{"k":"call","f":{"k":"name","id":"tick"},"a":[],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_closure"},"v":{"k":"call","f":{"k":"name","id":"tick"},"a":[],"kw":{}}},{"op":"set","t":{"k":"name","id":"result_lambda"},"v":{"k":"call","f":{"k":"name","id":"sorted"},"a":[{"k":"list","v":[{"k":"const","v":3},{"k":"const","v":1},{"k":"const","v":2}]}],"kw":{"key":{"k":"lambda","params":[{"n":"v","d":null,"kind":"p"}],"body":{"k":"unary","op":"-","v":{"k":"name","id":"v"}}}}}},{"op":"set","t":{"k":"name","id":"result_isinstance"},"v":{"k":"list","v":[{"k":"call","f":{"k":"name","id":"isinstance"},"a":[{"k":"name","id":"hero"},{"k":"name","id":"Player"}],"kw":{}},{"k":"call","f":{"k":"name","id":"isinstance"},"a":[{"k":"name","id":"hero"},{"k":"name","id":"Perk"}],"kw":{}},{"k":"call","f":{"k":"name","id":"isinstance"},"a":[{"k":"const","v":1},{"k":"name","id":"int"}],"kw":{}}]}}]