mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
169 lines
3 KiB
Text
169 lines
3 KiB
Text
# @TEST-EXEC: zeek -b %INPUT >out
|
|
# @TEST-EXEC: btest-diff out
|
|
|
|
type mutable_aggregate: record { x: count; };
|
|
|
|
function shallow_copy_capture() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[a, b]() { print ++a, --b$x; };
|
|
f();
|
|
++a;
|
|
--b$x;
|
|
f();
|
|
|
|
return f;
|
|
}
|
|
|
|
function deep_copy_capture() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[copy a, copy b]() { print ++a, --b$x; };
|
|
f();
|
|
++a;
|
|
--b$x;
|
|
f();
|
|
|
|
return f;
|
|
}
|
|
|
|
function mixed_copy_capture_a() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[copy a, b]() { print ++a, --b$x; };
|
|
f();
|
|
++a;
|
|
--b$x;
|
|
f();
|
|
|
|
return f;
|
|
}
|
|
|
|
function mixed_copy_capture_b() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[a, copy b]() { print ++a, --b$x; };
|
|
f();
|
|
++a;
|
|
--b$x;
|
|
f();
|
|
|
|
return f;
|
|
}
|
|
|
|
function shallow_copy_capture_double() : function() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[a,b]() : function() {
|
|
local c = mutable_aggregate($x=88);
|
|
print ++a;
|
|
local f2 = function[a, b, c]() { print a -= 2, --b$x, c$x += 3; };
|
|
c$x = c$x / 2;
|
|
return f2;
|
|
};
|
|
f()();
|
|
++a;
|
|
--b$x;
|
|
f()();
|
|
|
|
return f;
|
|
}
|
|
|
|
function deep_copy1_capture_double() : function() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[copy a, copy b]() : function() {
|
|
local c = mutable_aggregate($x=88);
|
|
print ++a;
|
|
local f2 = function[a, b, c]() { print a -= 2, --b$x, c$x += 3; };
|
|
c$x = c$x / 2;
|
|
return f2;
|
|
};
|
|
f()();
|
|
++a;
|
|
--b$x;
|
|
f()();
|
|
|
|
return f;
|
|
}
|
|
|
|
function deep_copy2_capture_double() : function() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[a, b]() : function() {
|
|
local c = mutable_aggregate($x=88);
|
|
print ++a;
|
|
local f2 = function[copy a, copy b, copy c]()
|
|
{ print a -= 2, --b$x, c$x += 3; };
|
|
c$x = c$x / 2;
|
|
return f2;
|
|
};
|
|
f()();
|
|
++a;
|
|
--b$x;
|
|
f()();
|
|
|
|
return f;
|
|
}
|
|
|
|
function deep_copy3_capture_double() : function() : function()
|
|
{
|
|
local a = 3;
|
|
local b = mutable_aggregate($x=11);
|
|
local f = function[copy a, copy b]() : function() {
|
|
local c = mutable_aggregate($x=88);
|
|
print ++a;
|
|
local f2 = function[copy a, copy b, copy c]()
|
|
{ print a -= 2, --b$x, c$x += 3; };
|
|
c$x = c$x / 2;
|
|
return f2;
|
|
};
|
|
f()();
|
|
++a;
|
|
--b$x;
|
|
f()();
|
|
|
|
return f;
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
print "shallow copy";
|
|
local scc = shallow_copy_capture();
|
|
scc();
|
|
|
|
print "deep copy";
|
|
local dcc = deep_copy_capture();
|
|
dcc();
|
|
|
|
print "mixed copy, case 1";
|
|
local mcca = mixed_copy_capture_a();
|
|
mcca();
|
|
|
|
print "mixed copy, case 2";
|
|
local mccb = mixed_copy_capture_b();
|
|
mccb();
|
|
|
|
print "double shallow copy";
|
|
local scc2 = shallow_copy_capture_double();
|
|
scc2()();
|
|
|
|
print "double deep copy, case 1";
|
|
local dcc2_1 = deep_copy1_capture_double();
|
|
dcc2_1()();
|
|
|
|
print "double deep copy, case 2";
|
|
local dcc2_2 = deep_copy2_capture_double();
|
|
dcc2_2()();
|
|
|
|
print "double deep copy, case 3";
|
|
local dcc2_3 = deep_copy3_capture_double();
|
|
dcc2_3()();
|
|
}
|