Skip to content

Commit

Permalink
Add support for anonymous Sequence members
Browse files Browse the repository at this point in the history
  • Loading branch information
Sam committed Nov 7, 2019
1 parent 29786cc commit 6f616f2
Show file tree
Hide file tree
Showing 9 changed files with 1,520 additions and 1,276 deletions.
2 changes: 1 addition & 1 deletion 3rd_party/abseil-cpp
Submodule abseil-cpp updated 241 files
2 changes: 2 additions & 0 deletions include/fast_ber/compiler/CompilerTypes.hpp
Expand Up @@ -491,3 +491,5 @@ bool is_oid(const Type& type);
bool is_defined(const Type& type);

struct Context;

std::string gen_anon_member_name();
6 changes: 6 additions & 0 deletions src/compiler/CompilerTypes.cpp
Expand Up @@ -292,3 +292,9 @@ bool is_oid(const Type& type)
}

bool is_defined(const Type& type) { return absl::holds_alternative<DefinedType>(type); }

std::string gen_anon_member_name()
{
static size_t count = 0;
return "anonymous_member_" + std::to_string(count++);
}
8 changes: 7 additions & 1 deletion src/compiler/asn_compiler.yacc
Expand Up @@ -1227,7 +1227,13 @@ ComponentTypeList:
{ $1.push_back($3); $$ = $1; }
ComponentType:
NamedType
Type
{ $$ = ComponentType{{gen_anon_member_name(), $1}, false, absl::nullopt, absl::nullopt}; }
| Type OPTIONAL
{ $$ = ComponentType{{gen_anon_member_name(), $1}, true, absl::nullopt, absl::nullopt}; }
| Type DEFAULT SingleValue
{ $$ = ComponentType{{gen_anon_member_name(), $1}, false, $3, absl::nullopt}; }
| NamedType
{ $$ = ComponentType{$1, false, absl::nullopt, absl::nullopt}; }
| NamedType OPTIONAL
{ $$ = ComponentType{$1, true, absl::nullopt, absl::nullopt}; }
Expand Down
2,733 changes: 1,460 additions & 1,273 deletions src/compiler/autogen_copy/asn_compiler.hpp

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion test/CMakeLists.txt
Expand Up @@ -25,6 +25,8 @@ fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/parameterized_types.asn paramete
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/sequence_of.asn sequence_of)
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/time.asn time)
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/circular.asn circular)
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/defaults.asn defaults)
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/anonymous_members.asn anonymous_members)
fast_ber_generate(${CMAKE_SOURCE_DIR}/testfiles/SGSN-CDR-def-v2009A.asn real_schema)
fast_ber_generate2(${CMAKE_SOURCE_DIR}/testfiles/multi_file_import_1.asn
${CMAKE_SOURCE_DIR}/testfiles/multi_file_import_2.asn multi_file_import)
Expand All @@ -49,7 +51,9 @@ add_executable(fast_ber_tests Test ${TEST_SRC} autogen/choice.hpp
autogen/parameterized_types.hpp
autogen/sequence_of.hpp
autogen/time.hpp
autogen/circular.hpp)
autogen/circular.hpp
autogen/defaults.hpp
autogen/anonymous_members.hpp)
target_include_directories(fast_ber_tests PRIVATE SYSTEM ${CMAKE_SOURCE_DIR}/3rd_party/Catch2/single_include)
target_include_directories(fast_ber_tests PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries (fast_ber_tests fast_ber_lib)
Expand Down
10 changes: 10 additions & 0 deletions test/compiler/Anonymous.cpp
@@ -0,0 +1,10 @@
#include "autogen/anonymous_members.hpp"

#include "catch2/catch.hpp"

static_assert(std::is_same<decltype(fast_ber::Anonymous::Anon::anonymous_member_0), fast_ber::Null<>>::value, "Anon");
static_assert(std::is_same<decltype(fast_ber::Anonymous::Anon::anonymous_member_1),
fast_ber::SequenceOf<fast_ber::OctetString<>>>::value,
"Anon");
static_assert(std::is_same<decltype(fast_ber::Anonymous::Anon::anonymous_member_2), fast_ber::Integer<>>::value,
"Anon");
15 changes: 15 additions & 0 deletions testfiles/anonymous_members.asn
@@ -0,0 +1,15 @@
Anonymous

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

Anon ::= SEQUENCE
{
NULL,
SEQUENCE OF OCTET STRING,
...,
INTEGER
}

END
14 changes: 14 additions & 0 deletions testfiles/defaults.asn
@@ -0,0 +1,14 @@
Defaults

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

SequenceWithDefault ::= SEQUENCE
{
flag BOOLEAN DEFAULT FALSE,
seq SEQUENCE OF INTEGER,
...
}

END

0 comments on commit 6f616f2

Please sign in to comment.