forked from dillonhuff/test_gen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cpp_code.py
92 lines (69 loc) · 2.2 KB
/
cpp_code.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
def cpp_comment(text):
return '// ' + text
def cpp_top_level_items(item_list):
str = ""
for item in item_list:
str += item + "\n\n"
return str
def cpp_include(name):
return "#include \"" + name + "\""
def cpp_using(name):
return "using namespace " + name + ";"
def cpp_enum(enum_name, field_names):
str = "enum " + enum_name + " {\n"
for name in field_names:
str += "\t" + name + ",\n"
str += "};"
return str
def cpp_formal_param(param_type, param_name):
return param_type + " " + param_name
def cpp_function(return_type, name, template_params, args, body):
str = return_type + " " + name + "(" + cpp_param_list(args) + ")"
str += "{\n" + cpp_stmt_list(1, body) + "\n}"
return str
def cpp_assign(lhs, rhs):
return lhs + ' = ' + rhs
def cpp_funcall(name, template_params, args):
str = name
if len(template_params) > 0:
str += "<" + cpp_param_list(template_params) + ">"
str += "(" + cpp_param_list(args) + ")"
return str
def cpp_block(cpp_stmts):
return "{\n" + cpp_stmt_list(2, cpp_stmts) + "\n" + indent(1) + "}"
def cpp_stmt_list(n, cpp_stmts):
try:
lines = [indent(n) + stmt + ";" for stmt in cpp_stmts]
except:
assert False, "could not concatenate: '" + str(stmt)
return "\n".join(lines)
def indent(n):
return "" + n * "\t"
def cpp_param_list(formal_params):
if len(formal_params) == 0:
return ""
elif len(formal_params) == 1:
return formal_params[0]
else:
return formal_params[0] + ", " + cpp_param_list(formal_params[1:])
def cpp_const(cpp_type):
return "const " + cpp_type
def cpp_ref(cpp_type):
return cpp_type + "&"
def cpp_ptr(cpp_type):
return cpp_type + "*"
def cpp_var(name):
return name
def cpp_void():
return "void"
def cpp_int():
return "int"
def cpp_char():
return "char"
def cpp_empty_line():
return "\n\n"
def cpp_struct(name, statements):
return "struct " + name + " {\n" + cpp_stmt_list(1, statements) + "\n" + "};"
# specialized convenience methods:
def cpp_value_pair(value_type, value_name):
return "map<string, " + value_type + ">::value_type(\"" + value_name + "\", " + value_name + ")"