Merge branch 'master' of https://github.com/catseye/ALPACA into develop-1.1
Chris Pressey
7 years ago
104 | 104 | self.file.write('}\n') |
105 | 105 | |
106 | 106 | def compile_class_defn(self, defn): |
107 | self.file.write("function evalClass_%s(pf, x, y) {\nvar id;\n" % defn.id); | |
107 | self.file.write("function evalClass_%s(pf, x, y, seen) {\nvar id;\nseen['%s'] = true;\n" % (defn.id, defn.id)); | |
108 | 108 | for rule in defn.rules: |
109 | 109 | dest = rule.state_ref |
110 | 110 | expr = rule.expr |
114 | 114 | self.compile_state_ref(dest) |
115 | 115 | self.file.write(";\n}\n") |
116 | 116 | for superclass in defn.classes: |
117 | self.file.write("id = evalClass_%s(pf, x, y);\n" % superclass.id) | |
117 | self.file.write("id = seen['%s'] ? undefined : evalClass_%s(pf, x, y, seen);\n" % (superclass.id, superclass.id)) | |
118 | 118 | self.file.write("if (id !== undefined) return id;\n") |
119 | 119 | self.file.write("return undefined;\n}\n\n") |
120 | 120 | |
130 | 130 | self.compile_state_ref(dest) |
131 | 131 | self.file.write(";\n}\n") |
132 | 132 | for superclass in defn.classes: |
133 | self.file.write("id = evalClass_%s(pf, x, y);\n" % superclass.id) | |
133 | self.file.write("id = evalClass_%s(pf, x, y, {});\n" % superclass.id) | |
134 | 134 | self.file.write("if (id !== undefined) return id;\n") |
135 | 135 | self.file.write("return '%s';\n}\n\n" % defn.id) |
136 | 136 |