|
@@ -37,20 +37,22 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
url = tree.get_children("MV_URL")[0]
|
|
|
target = tree.get_children("MODEL_ID")[0]
|
|
|
#self.constructors.extend(["import_node", url.get_text(), target.get_text()])
|
|
|
- self.code += "\timport_node(%s, %s)\n" % (url.get_text(), target.get_text())
|
|
|
+ self.code += '\tElement %s\n' % target.get_text()
|
|
|
+ self.code += '\t%s = import_node("%s")\n' % (target.get_text(), url.get_text())
|
|
|
|
|
|
def visit_export(self, tree):
|
|
|
url = tree.get_children("MV_URL")[0]
|
|
|
target = tree.get_children("MODEL_ID")[0]
|
|
|
#self.constructors.extend(["export_node", target.get_text(), url.get_text()])
|
|
|
- self.code += "\texport_node(%s, %s)\n" % (target.get_text(), url.get_text())
|
|
|
+ self.code += '\texport_node(%s, "%s")\n' % (target.get_text(), url.get_text())
|
|
|
|
|
|
def visit_model(self, tree):
|
|
|
children = tree.get_children("MODEL_ID")
|
|
|
model_type = children[0].get_text()
|
|
|
model_name = children[-1].get_text()
|
|
|
#self.constructors.extend(["instantiate_model", model_type, model_name])
|
|
|
- self.code += "\tinstantiate_model(%s, %s)\n" % (model_type, model_name)
|
|
|
+ self.code += "\tElement %s\n" % model_name
|
|
|
+ self.code += '\t%s = instantiate_model("%s")\n' % (model_name, model_type)
|
|
|
self.current_model = model_name
|
|
|
self.names = set()
|
|
|
for element in tree.get_children("model_element"):
|
|
@@ -78,10 +80,10 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
raise Exception("Target of link %s unknown: %s" % (element_name, target_name))
|
|
|
|
|
|
#self.constructors.extend(["instantiate_link", self.current_model, element_type, element_name, source_name, target_name])
|
|
|
- self.code += "\tinstantiate_link(%s, %s, %s, %s, %s)\n" % (self.current_model, element_type, element_name, source_name, target_name)
|
|
|
+ self.code += '\tinstantiate_link(%s, "%s", "%s", "%s", "%s")\n' % (self.current_model, element_type, element_name, source_name, target_name)
|
|
|
else:
|
|
|
#self.constructors.extend(["instantiate_node", self.current_model, element_type, element_name])
|
|
|
- self.code += "\tinstantiate_node(%s, %s, %s)\n" % (self.current_model, element_type, element_name)
|
|
|
+ self.code += '\tinstantiate_node(%s, "%s", "%s")\n' % (self.current_model, element_type, element_name)
|
|
|
|
|
|
self.names.add(element_name)
|
|
|
self.current_element.append(element_name)
|
|
@@ -103,7 +105,7 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
raise Exception("Superclass %s is undefined" % superclass)
|
|
|
|
|
|
#self.constructors.extend(["instantiate_link", self.current_model, "Inheritance", "%s_inherits_from_%s" % (self.current_element[-1], superclass), self.current_element[-1], superclass])
|
|
|
- self.code += '\tinstantiate_link(%s, "Inheritance", "%s_inherits_from_%s", %s, %s)\n' % (self.current_model, self.current_element[-1], superclass, self.current_element[-1], superclass)
|
|
|
+ self.code += '\tinstantiate_link(%s, "Inheritance", "%s_inherits_from_%s", "%s", "%s")\n' % (self.current_model, self.current_element[-1], superclass, self.current_element[-1], superclass)
|
|
|
self.names.add("%s_inherits_from_%s" % (self.current_element[-1], superclass))
|
|
|
|
|
|
def visit_model_attribute(self, tree):
|
|
@@ -117,7 +119,7 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
attr_optional = len(tree.get_children("OPTIONAL")) > 0
|
|
|
attr_type = children[1].get_text()
|
|
|
#self.constructors.extend(["model_define_attribute", self.current_model, self.current_element[-1], attr_name, attr_optional, attr_type])
|
|
|
- self.code += "\tmodel_define_attribute(%s, %s, %s, %s, %s)\n" % (self.current_model, self.current_element[-1], attr_name, attr_optional, attr_type)
|
|
|
+ self.code += '\tmodel_define_attribute(%s, "%s", "%s", "%s", %s)\n' % (self.current_model, self.current_element[-1], attr_name, attr_optional, attr_type)
|
|
|
full_attribute_name = self.current_element[-1] + "_" + attr_name
|
|
|
|
|
|
if is_assign:
|
|
@@ -176,7 +178,7 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
else:
|
|
|
raise Exception(attr_value.head)
|
|
|
#self.constructors.extend(["instantiate_attribute", self.current_model, self.current_element[-1], attr_name, attr_value])
|
|
|
- self.code += "\tinstantiate_attribute(%s, %s, %s, %s)\n" % (self.current_model, self.current_element[-1], attr_name, attr_value)
|
|
|
+ self.code += '\tinstantiate_attribute(%s, "%s", "%s", %s)\n' % (self.current_model, self.current_element[-1], attr_name, attr_value)
|
|
|
elif tree.get_children("DOLLAR"):
|
|
|
# Coded attribute
|
|
|
#self.constructors.extend(["instantiate_attribute_code", self.current_model, self.current_element[-1], attr_name])
|
|
@@ -192,14 +194,14 @@ class ModelBootstrapVisitor(Visitor):
|
|
|
code = "\n".join(code_fragments)
|
|
|
|
|
|
func_name = "__code__%s" % abs(hash(code))
|
|
|
- self.code += "\tinstantiate_attribute_code(%s, %s, %s, %s)\n" % (self.current_model, self.current_element[-1], attr_name, func_name)
|
|
|
+ self.code += '\tinstantiate_attribute_code(%s, "%s", "%s", %s)\n' % (self.current_model, self.current_element[-1], attr_name, func_name)
|
|
|
|
|
|
# Rewrite the name of the function to func_name
|
|
|
prepend = code
|
|
|
before, after = prepend.split("function ", 1)
|
|
|
before = before + "function "
|
|
|
after = "(" + after.split("(", 1)[1]
|
|
|
- prepend = before + func_name + after
|
|
|
+ prepend = before + func_name + after + "\n"
|
|
|
|
|
|
# And prepend the actual code block
|
|
|
self.code = prepend + self.code
|