mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 18:48:20 +00:00
Fix init of local sets/vectors via curly brace initializer lists.
This commit is contained in:
parent
a2556642e6
commit
c88babf6ef
3 changed files with 98 additions and 5 deletions
15
src/Expr.cc
15
src/Expr.cc
|
@ -2507,17 +2507,28 @@ bool AssignExpr::TypeCheck(attr_list* attrs)
|
||||||
attr_copy->append((*attrs)[i]);
|
attr_copy->append((*attrs)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( op1->Type()->IsSet() )
|
||||||
|
op2 = new SetConstructorExpr(op2->AsListExpr(), attr_copy);
|
||||||
|
else
|
||||||
op2 = new TableConstructorExpr(op2->AsListExpr(), attr_copy);
|
op2 = new TableConstructorExpr(op2->AsListExpr(), attr_copy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( bt1 == TYPE_VECTOR && bt2 == bt1 &&
|
if ( bt1 == TYPE_VECTOR )
|
||||||
op2->Type()->AsVectorType()->IsUnspecifiedVector() )
|
{
|
||||||
|
if ( bt2 == bt1 && op2->Type()->AsVectorType()->IsUnspecifiedVector() )
|
||||||
{
|
{
|
||||||
op2 = new VectorCoerceExpr(op2, op1->Type()->AsVectorType());
|
op2 = new VectorCoerceExpr(op2, op1->Type()->AsVectorType());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( op2->Tag() == EXPR_LIST )
|
||||||
|
{
|
||||||
|
op2 = new VectorConstructorExpr(op2->AsListExpr());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( op1->Type()->Tag() == TYPE_RECORD &&
|
if ( op1->Type()->Tag() == TYPE_RECORD &&
|
||||||
op2->Type()->Tag() == TYPE_RECORD )
|
op2->Type()->Tag() == TYPE_RECORD )
|
||||||
{
|
{
|
||||||
|
|
44
testing/btest/Baseline/language.container-ctor-scope/out
Normal file
44
testing/btest/Baseline/language.container-ctor-scope/out
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
[2/tcp] = 2,
|
||||||
|
[1/tcp] = 1,
|
||||||
|
[3/tcp] = 3
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[2/tcp] = 2,
|
||||||
|
[1/tcp] = 1,
|
||||||
|
[3/tcp] = 3
|
||||||
|
}
|
||||||
|
{
|
||||||
|
2/tcp,
|
||||||
|
1/tcp,
|
||||||
|
3/tcp
|
||||||
|
}
|
||||||
|
{
|
||||||
|
2/tcp,
|
||||||
|
1/tcp,
|
||||||
|
3/tcp
|
||||||
|
}
|
||||||
|
[1/tcp, 2/tcp, 3/tcp, 1/tcp]
|
||||||
|
[1/tcp, 2/tcp, 3/tcp, 1/tcp]
|
||||||
|
{
|
||||||
|
[2/tcp] = 2,
|
||||||
|
[1/tcp] = 1,
|
||||||
|
[3/tcp] = 3
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[2/tcp] = 2,
|
||||||
|
[1/tcp] = 1,
|
||||||
|
[3/tcp] = 3
|
||||||
|
}
|
||||||
|
{
|
||||||
|
2/tcp,
|
||||||
|
1/tcp,
|
||||||
|
3/tcp
|
||||||
|
}
|
||||||
|
{
|
||||||
|
2/tcp,
|
||||||
|
1/tcp,
|
||||||
|
3/tcp
|
||||||
|
}
|
||||||
|
[1/tcp, 2/tcp, 3/tcp, 1/tcp]
|
||||||
|
[1/tcp, 2/tcp, 3/tcp, 1/tcp]
|
38
testing/btest/language/container-ctor-scope.bro
Normal file
38
testing/btest/language/container-ctor-scope.bro
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# @TEST-EXEC: bro -b %INPUT >out
|
||||||
|
# @TEST-EXEC: btest-diff out
|
||||||
|
|
||||||
|
# All various container contructors should work at both global and local scope.
|
||||||
|
|
||||||
|
global gt1: table[port] of count = table( [1/tcp] = 1, [2/tcp] = 2, [3/tcp] = 3 );
|
||||||
|
global gs1: set[port] = set( 1/tcp, 2/tcp, 3/tcp );
|
||||||
|
global gv1: vector of port = vector( 1/tcp, 2/tcp, 3/tcp, 1/tcp );
|
||||||
|
|
||||||
|
global gt2: table[port] of count = { [1/tcp] = 1, [2/tcp] = 2, [3/tcp] = 3 };
|
||||||
|
global gs2: set[port] = { 1/tcp, 2/tcp, 3/tcp };
|
||||||
|
global gv2: vector of port = { 1/tcp, 2/tcp, 3/tcp, 1/tcp };
|
||||||
|
|
||||||
|
local t1: table[port] of count = table( [1/tcp] = 1, [2/tcp] = 2, [3/tcp] = 3 );
|
||||||
|
local s1: set[port] = set( 1/tcp, 2/tcp, 3/tcp );
|
||||||
|
local v1: vector of port = vector( 1/tcp, 2/tcp, 3/tcp, 1/tcp );
|
||||||
|
|
||||||
|
local t2: table[port] of count = { [1/tcp] = 1, [2/tcp] = 2, [3/tcp] = 3 };
|
||||||
|
local s2: set[port] = { 1/tcp, 2/tcp, 3/tcp };
|
||||||
|
local v2: vector of port = { 1/tcp, 2/tcp, 3/tcp, 1/tcp };
|
||||||
|
|
||||||
|
print gt1;
|
||||||
|
print gt2;
|
||||||
|
|
||||||
|
print gs1;
|
||||||
|
print gs2;
|
||||||
|
|
||||||
|
print gv1;
|
||||||
|
print gv2;
|
||||||
|
|
||||||
|
print t1;
|
||||||
|
print t2;
|
||||||
|
|
||||||
|
print s1;
|
||||||
|
print s2;
|
||||||
|
|
||||||
|
print v1;
|
||||||
|
print v2;
|
Loading…
Add table
Add a link
Reference in a new issue