strct->members.body.splice(strct->members.body.begin(), iface.members->body);
stage->content.body.insert(type_insert_point, strct);
stage->types.insert(make_pair(strct->name, strct));
strct->members.body.splice(strct->members.body.begin(), iface.members->body);
stage->content.body.insert(type_insert_point, strct);
stage->types.insert(make_pair(strct->name, strct));
{
/* Block names can be reused in different interfaces. Prefix the name with
the first character of the interface to avoid conflicts. */
{
/* Block names can be reused in different interfaces. Prefix the name with
the first character of the interface to avoid conflicts. */
if(!iface.instance_name.empty())
stage->interface_blocks.insert(make_pair("_"+iface.instance_name, &iface));
if(!iface.instance_name.empty())
stage->interface_blocks.insert(make_pair("_"+iface.instance_name, &iface));
in_block->members = new Block;
in_block->instance_name = out_block.instance_name;
if(stage->type==Stage::GEOMETRY)
in_block->members = new Block;
in_block->instance_name = out_block.instance_name;
if(stage->type==Stage::GEOMETRY)
if(!in_block->instance_name.empty())
stage->interface_blocks.insert(make_pair("_"+in_block->instance_name, in_block));
if(!in_block->instance_name.empty())
stage->interface_blocks.insert(make_pair("_"+in_block->instance_name, in_block));
if(!iface.linked_block && stage->previous)
{
const map<string, InterfaceBlock *> &prev_blocks = stage->previous->interface_blocks;
if(!iface.linked_block && stage->previous)
{
const map<string, InterfaceBlock *> &prev_blocks = stage->previous->interface_blocks;