# -*- coding: utf-8 -*- """ Pre-built AST representing built-in Unlikely classes. $Id: stdlib.py 318 2010-01-07 01:49:38Z cpressey $ """ import ast stdlib = ast.ClassBase() continuation = stdlib.add_class_defn_by_name("Continuation", None, ["saturated", "abstract"]) program = stdlib.add_class_defn_by_name("Program", "Continuation", ["abstract"]) chain = stdlib.add_class_defn_by_name("Chain", "Program", ["abstract"]) passive = stdlib.add_class_defn_by_name("Passive", "Chain", ["abstract"]) # Now that we have Passive we patch property and method into Continuation # and all its subclasses so far continuation.add_dependant_by_name("Passive") program.add_dependant_by_name("Passive") chain.add_dependant_by_name("Passive") chain.add_dependant_by_name("Chain") chain.add_prop_defn_by_name("next", "Chain") passive.add_dependant_by_name("Passive") accumulator = continuation.add_prop_defn_by_name("accumulator", "Passive") continue_ = continuation.add_method_defn_by_name("continue") continue_.add_modifier("abstract") continue_.add_param_decl_by_name("accumulator", "Passive") # now we're done patching, we can continue defining further classes stop = stdlib.add_class_defn_by_name("Stop", "Program", ["final"]) boolean_ = stdlib.add_class_defn_by_name("Boolean", "Passive", ["abstract", "final"]) true_ = stdlib.add_class_defn_by_name("True", "Boolean", ["final", "forcible"]) false_ = stdlib.add_class_defn_by_name("False", "Boolean", ["final", "forcible"]) integer_ = stdlib.add_class_defn_by_name("Integer", "Passive", ["abstract", "final"]) # we have special logic elsewhere to recognize the countably infinite # number of subclasses of Integer string_ = stdlib.add_class_defn_by_name("String", "Passive", ["abstract", "final"]) # we have special logic elsewhere to recognize the countably infinite # number of subclasses of String binary_operation = stdlib.add_class_defn_by_name("BinaryOperation", "Chain", ["abstract"]) binary_operation.add_prop_defn_by_name("value", "Passive") add = stdlib.add_class_defn_by_name("Add", "BinaryOperation") subtract = stdlib.add_class_defn_by_name("Subtract", "BinaryOperation") multiply = stdlib.add_class_defn_by_name("Multiply", "BinaryOperation") divide = stdlib.add_class_defn_by_name("Divide", "BinaryOperation") condition = stdlib.add_class_defn_by_name("Condition", "BinaryOperation") equal = stdlib.add_class_defn_by_name("Equal", "Condition") greater_than = stdlib.add_class_defn_by_name("GreaterThan", "Condition") print_ = stdlib.add_class_defn_by_name("Print", "Chain") input_ = stdlib.add_class_defn_by_name("Input", "Chain") branch = stdlib.add_class_defn_by_name("Branch", "Chain", ["abstract"]) branch.add_prop_defn_by_name("else", "Chain") if_ = stdlib.add_class_defn_by_name("If", "Branch") switch = stdlib.add_class_defn_by_name("Switch", "Branch", ["abstract"]) switch.add_prop_defn_by_name("state", "Passive") loop = stdlib.add_class_defn_by_name("Loop", "Switch", ["abstract"]) while_loop = stdlib.add_class_defn_by_name("WhileLoop", "Loop") while_loop.add_prop_defn_by_name("test", "Chain") for_loop = stdlib.add_class_defn_by_name("ForLoop", "Loop") for_loop.add_prop_defn_by_name("value", "Integer") for_loop.add_prop_defn_by_name("delta", "Integer") for_loop.add_prop_defn_by_name("finish", "Integer")