|
@@ -108,6 +108,11 @@ def bootstrap():
|
|
|
"time": ["Float"],
|
|
|
}
|
|
|
|
|
|
+ jit_primitives = {
|
|
|
+ "get_jit_enabled": ["Boolean"],
|
|
|
+ "set_jit_enabled": ["Void", "Boolean"]
|
|
|
+ }
|
|
|
+
|
|
|
### Actual script to generate the file
|
|
|
import os
|
|
|
import sys
|
|
@@ -136,38 +141,42 @@ def bootstrap():
|
|
|
f.write('Node __%s("%s")\n' % (node, node))
|
|
|
f.write("Edge ___%s(_%s, __%s)\n" % (node, node, node))
|
|
|
|
|
|
- f.write("Node primitives()\n")
|
|
|
- f.write("Edge _primitives(__hierarchy, primitives)\n")
|
|
|
- f.write('Node __primitives("primitives")\n')
|
|
|
- f.write("Edge ___primitives(_primitives, __primitives)\n")
|
|
|
+ def declare_primitive_class(primitive_class_name, primitive_decls):
|
|
|
+ f.write("Node %s()\n" % primitive_class_name)
|
|
|
+ f.write("Edge _%s(__hierarchy, %s)\n" % (primitive_class_name, primitive_class_name))
|
|
|
+ f.write('Node __%s("%s")\n' % (primitive_class_name, primitive_class_name))
|
|
|
+ f.write("Edge ___%s(_%s, __%s)\n" % (primitive_class_name, primitive_class_name, primitive_class_name))
|
|
|
+
|
|
|
+ # Define all primitive functions
|
|
|
+ for function, parameters in primitive_decls.iteritems():
|
|
|
+ f.write("Node _func_signature_%s()\n" % function)
|
|
|
+ f.write("Node _func_params_%s()\n" % function)
|
|
|
+ f.write("Node _func_body_%s()\n" % function)
|
|
|
+ f.write("Edge _%s_%s(%s, _func_signature_%s)\n" % (primitive_class_name, function, primitive_class_name, function))
|
|
|
+ f.write('Node _name_%s("%s")\n' % (function, function))
|
|
|
+ f.write("Edge _%s_name_%s(_%s_%s, _name_%s)\n" % (primitive_class_name, function, primitive_class_name, function, function))
|
|
|
|
|
|
- # Define all primitive functions
|
|
|
- for function, parameters in primitives.iteritems():
|
|
|
- f.write("Node _func_signature_%s()\n" % function)
|
|
|
- f.write("Node _func_params_%s()\n" % function)
|
|
|
- f.write("Node _func_body_%s()\n" % function)
|
|
|
- f.write("Edge _primitives_%s(primitives, _func_signature_%s)\n" % (function, function))
|
|
|
- f.write('Node _name_%s("%s")\n' % (function, function))
|
|
|
- f.write("Edge _primitives_name_%s(_primitives_%s, _name_%s)\n" % (function, function, function))
|
|
|
+ f.write('Node _body_%s("body")\n' % function)
|
|
|
+ f.write("Edge _signature_body_%s(_func_signature_%s, _func_body_%s)\n" % (function, function, function))
|
|
|
+ f.write("Edge _signature_body_str_%s(_signature_body_%s, _body_%s)\n" % (function, function, function))
|
|
|
|
|
|
- f.write('Node _body_%s("body")\n' % function)
|
|
|
- f.write("Edge _signature_body_%s(_func_signature_%s, _func_body_%s)\n" % (function, function, function))
|
|
|
- f.write("Edge _signature_body_str_%s(_signature_body_%s, _body_%s)\n" % (function, function, function))
|
|
|
+ f.write('Node _params_%s("params")\n' % function)
|
|
|
+ f.write("Edge _signature_params_%s(_func_signature_%s, _func_params_%s)\n" % (function, function, function))
|
|
|
+ f.write("Edge _signature_params_str_%s(_signature_params_%s, _params_%s)\n" % (function, function, function))
|
|
|
|
|
|
- f.write('Node _params_%s("params")\n' % function)
|
|
|
- f.write("Edge _signature_params_%s(_func_signature_%s, _func_params_%s)\n" % (function, function, function))
|
|
|
- f.write("Edge _signature_params_str_%s(_signature_params_%s, _params_%s)\n" % (function, function, function))
|
|
|
+ parameter_names = "abcdefghijklmnopqrstuvwxyz"
|
|
|
+ for number, param in enumerate(parameters[1:]):
|
|
|
+ param_encoding = "%s_%s" % (function, parameter_names[number])
|
|
|
+ f.write("Node _func_params_%s()\n" % (param_encoding))
|
|
|
+ f.write('Node _name_%s("%s")\n' % (param_encoding, parameter_names[number]))
|
|
|
+ f.write("Edge _param_link_%s(_func_params_%s, _func_params_%s)\n" % (param_encoding, function, param_encoding))
|
|
|
+ f.write("Edge _param_link_str_%s(_param_link_%s, _name_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
+ f.write('Node _name_str_%s("name")\n' % param_encoding)
|
|
|
+ f.write("Edge _param_name_%s(_func_params_%s, _name_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
+ f.write("Edge _param_name_str_%s(_param_name_%s, _name_str_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
|
|
|
- parameter_names = "abcdefghijklmnopqrstuvwxyz"
|
|
|
- for number, param in enumerate(parameters[1:]):
|
|
|
- param_encoding = "%s_%s" % (function, parameter_names[number])
|
|
|
- f.write("Node _func_params_%s()\n" % (param_encoding))
|
|
|
- f.write('Node _name_%s("%s")\n' % (param_encoding, parameter_names[number]))
|
|
|
- f.write("Edge _param_link_%s(_func_params_%s, _func_params_%s)\n" % (param_encoding, function, param_encoding))
|
|
|
- f.write("Edge _param_link_str_%s(_param_link_%s, _name_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
- f.write('Node _name_str_%s("name")\n' % param_encoding)
|
|
|
- f.write("Edge _param_name_%s(_func_params_%s, _name_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
- f.write("Edge _param_name_str_%s(_param_name_%s, _name_str_%s)\n" % (param_encoding, param_encoding, param_encoding))
|
|
|
+ declare_primitive_class('primitives', primitives)
|
|
|
+ declare_primitive_class('jit', jit_primitives)
|
|
|
|
|
|
# Create the initial user
|
|
|
f.write("Node user_root()\n")
|