Split up Func append and copy operations
Summary:
We do some hacky things to copy a FuncBase, in order to share code with the append operation. There's no reason to do that; FuncBase can just be copied directly.
The new "!blocks.empty()" assertions in the copy_into helper aren't required for correctness, but they should always pass for the append case and they confirm that we're not creating new copies of blocks that were shared before.
Reviewed By: ricklavoie
Differential Revision:
D23109829
fbshipit-source-id:
65dab505029fc793f20682b0d48c64459fbd9285