in scripts/generate_json_outfuncs.rb [19:72]
def generate_outmethods!
@outmethods = {}
['nodes/parsenodes', 'nodes/primnodes'].each do |group|
@struct_defs[group].each do |node_type, struct_def|
@outmethods[node_type] = format(" WRITE_NODE_TYPE(\"%s\");\n\n", node_type)
struct_def['fields'].each do |field_def|
name = field_def['name']
orig_type = field_def['c_type']
next unless name && orig_type
type = TYPE_OVERRIDES[[node_type, name]] || orig_type
if type == :skip || type == 'Expr'
elsif type == 'NodeTag'
elsif ['bool', 'long', 'char'].include?(type)
@outmethods[node_type] += format(" WRITE_%s_FIELD(%s);\n", type.upcase, name)
elsif ['int', 'int16', 'int32', 'AttrNumber'].include?(type)
@outmethods[node_type] += format(" WRITE_INT_FIELD(%s);\n", name)
elsif ['uint', 'uint16', 'uint32', 'Index', 'bits32', 'Oid'].include?(type)
@outmethods[node_type] += format(" WRITE_UINT_FIELD(%s);\n", name)
elsif type == 'char*'
@outmethods[node_type] += format(" WRITE_STRING_FIELD(%s);\n", name)
elsif ['float', 'double', 'Cost', 'Selectivity'].include?(type)
@outmethods[node_type] += format(" WRITE_FLOAT_FIELD(%s);\n", name)
elsif ['Bitmapset*', 'Relids'].include?(type)
@outmethods[node_type] += format(" WRITE_BITMAPSET_FIELD(%s);\n", name)
elsif ['Value'].include?(type)
@outmethods[node_type] += format(" WRITE_NODE_FIELD(%s);\n", name)
elsif ['CreateStmt'].include?(type)
@outmethods[node_type] += format(" WRITE_NODE_FIELD_WITH_TYPE(%s, %s);\n", name, type)
elsif type == 'Node*' || @nodetypes.include?(type[0..-2])
@outmethods[node_type] += format(" WRITE_NODE_PTR_FIELD(%s);\n", name)
elsif type.end_with?('*')
puts format('ERR: %s %s', name, type)
else
@outmethods[node_type] += format(" WRITE_ENUM_FIELD(%s);\n", name)
end
end
end
end
@typedefs.each do |typedef|
next unless @outmethods[typedef['source_type']]
@outmethods[typedef['new_type_name']] = @outmethods[typedef['source_type']]
end
end