mirror of https://github.com/KLayout/klayout.git
Fixed #787 - the results of const reference return values need to be copied as the holder object may go out of scope
This commit is contained in:
parent
918e1487c2
commit
f6c9df7d28
|
|
@ -1488,3 +1488,24 @@ TEST(63)
|
|||
|
||||
EXPECT_EQ (g.under_construction (), false);
|
||||
}
|
||||
|
||||
// issue-787
|
||||
TEST(64)
|
||||
{
|
||||
db::Layout g;
|
||||
init_layout (g);
|
||||
|
||||
{
|
||||
db::LayoutQuery q ("select inst.dtrans from instances of .*.*");
|
||||
db::LayoutQueryIterator iq (q, &g);
|
||||
std::string s = q2s_var (iq, "data");
|
||||
EXPECT_EQ (s, "r0 0.01,-0.02,m45 -0.01,0.02,m45 -0.01,0.02,m45 -0.01,0.02,r0 0.01,-0.02,m45 -0.01,0.02");
|
||||
}
|
||||
|
||||
{
|
||||
db::LayoutQuery q ("select inst.dtrans.disp.x,inst.dtrans.disp.y from instances of .*.*");
|
||||
db::LayoutQueryIterator iq (q, &g);
|
||||
std::string s = q2s_var (iq, "data");
|
||||
EXPECT_EQ (s, "0.01,-0.02,-0.01,0.02,-0.01,0.02,-0.01,0.02,0.01,-0.02,-0.01,0.02");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -901,6 +901,13 @@ struct reader<ObjectType>
|
|||
|
||||
tl_assert (cls != 0);
|
||||
*out = tl::Variant ();
|
||||
|
||||
// consider prefer_copy
|
||||
if (! owner && atype.prefer_copy () && !clsact->is_managed () && clsact->can_copy ()) {
|
||||
obj = clsact->clone (obj);
|
||||
owner = true;
|
||||
}
|
||||
|
||||
out->set_user (obj, cls, owner);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1189,3 +1189,24 @@ TEST(19)
|
|||
v = e.parse ("# A comment\nvar i=CellInstArray.new(17,tr,a,b,100,200); i.to_s(); # A final comment").execute ();
|
||||
EXPECT_EQ (v.to_string (), std::string ("#17 r90 10,20 [1,2*100;11,22*200]"));
|
||||
}
|
||||
|
||||
// issue-787
|
||||
TEST(20)
|
||||
{
|
||||
tl::Eval e;
|
||||
e.parse ("var ly=Layout.new(true)").execute ();
|
||||
e.parse ("var top=ly.create_cell('TOP')").execute ();
|
||||
e.parse ("var cell=ly.create_cell('CHILD')").execute ();
|
||||
e.parse ("var i1 = top.insert(CellInstArray.new(cell.cell_index,Trans.new(Vector.new(100,200))))").execute ();
|
||||
e.parse ("var i2 = top.insert(CellInstArray.new(cell.cell_index,Trans.new(Vector.new(-100,300))))").execute ();
|
||||
|
||||
tl::Variant v;
|
||||
v = e.parse ("i1.dtrans.disp.x").execute ();
|
||||
EXPECT_EQ (v.to_string (), std::string ("0.1"));
|
||||
v = e.parse ("i1.dtrans.disp.y").execute ();
|
||||
EXPECT_EQ (v.to_string (), std::string ("0.2"));
|
||||
v = e.parse ("i2.dtrans.disp.x").execute ();
|
||||
EXPECT_EQ (v.to_string (), std::string ("-0.1"));
|
||||
v = e.parse ("i2.dtrans.disp.y").execute ();
|
||||
EXPECT_EQ (v.to_string (), std::string ("0.3"));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue