Skip to content

Commit d06811d

Browse files
committed
added --preserve-case
1 parent 95053e6 commit d06811d

File tree

67 files changed

+20046
-274
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+20046
-274
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ tests/monsterdata_javascript_wire.mon
7575
tests/monsterdata_lobster_wire.mon
7676
tests/monsterdata_rust_wire.mon
7777
tests/php/
78+
tests/ts/preserve_case/
79+
tests/java_preserve_case_*/
7880
CMakeLists.txt.user
7981
CMakeScripts/**
8082
CTestTestfile.cmake
@@ -156,4 +158,3 @@ kotlin/**/generated
156158
MODULE.bazel.lock
157159

158160
# Ignore the generated docs
159-
docs/site

CMakeLists.txt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ endif()
112112
add_definitions(-DFLATBUFFERS_LOCALE_INDEPENDENT=$<BOOL:${FLATBUFFERS_LOCALE_INDEPENDENT}>)
113113

114114
if(NOT WIN32)
115-
include(CheckSymbolExists)
116115
check_symbol_exists(realpath "stdlib.h" HAVE_REALPATH)
117116
if(NOT HAVE_REALPATH)
118117
add_definitions(-DFLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION)
@@ -136,6 +135,7 @@ set(FlatBuffers_Library_SRCS
136135
include/flatbuffers/hash.h
137136
include/flatbuffers/idl.h
138137
include/flatbuffers/minireflect.h
138+
include/flatbuffers/options.h
139139
include/flatbuffers/reflection.h
140140
include/flatbuffers/reflection_generated.h
141141
include/flatbuffers/registry.h
@@ -151,6 +151,7 @@ set(FlatBuffers_Library_SRCS
151151
src/idl_gen_text.cpp
152152
src/reflection.cpp
153153
src/util.cpp
154+
src/options.cpp
154155
)
155156

156157
set(FlatBuffers_Compiler_SRCS
@@ -449,26 +450,35 @@ if(FLATBUFFERS_BUILD_FLATLIB)
449450
endif()
450451
endif()
451452

453+
option(ENABLE_DEBUG_SYMBOLS "Enable debug symbols for flatc" OFF)
454+
452455
if(FLATBUFFERS_BUILD_FLATC)
453456
add_executable(flatc ${FlatBuffers_Compiler_SRCS})
457+
454458
if(FLATBUFFERS_ENABLE_PCH)
455459
add_pch_to_target(flatc include/flatbuffers/pch/flatc_pch.h)
456460
endif()
457461

458462
target_link_libraries(flatc PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
463+
459464
target_compile_options(flatc
460465
PRIVATE
461466
$<$<AND:$<BOOL:${MSVC_LIKE}>,$<CONFIG:Release>>:
462467
/MT
463468
>
469+
$<$<BOOL:${ENABLE_DEBUG_SYMBOLS}>:
470+
-g -O0
471+
>
464472
)
465473

466474
if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
467475
add_fsanitize_to_target(flatc ${FLATBUFFERS_CODE_SANITIZE})
468476
endif()
477+
469478
if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
470479
set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
471480
endif()
481+
472482
if(FLATBUFFERS_STATIC_FLATC AND NOT MSVC)
473483
target_link_libraries(flatc PRIVATE -static)
474484
endif()
@@ -723,3 +733,18 @@ target_include_directories(
723733
FlatBuffers
724734
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
725735
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>)
736+
737+
# Add WASM target
738+
739+
add_custom_target(flatc_wasm
740+
COMMAND ${CMAKE_COMMAND} -E echo "Running flatc WebAssembly build via script..."
741+
COMMAND ${CMAKE_COMMAND} -E env bash ${CMAKE_SOURCE_DIR}/scripts/build_flatc_wasm.sh
742+
COMMENT "Builds flatc.js and flatc.wasm from source"
743+
USES_TERMINAL
744+
)
745+
# Cleans the WebAssembly build directory
746+
add_custom_target(clean_flatc_wasm
747+
COMMAND ${CMAKE_COMMAND} -E echo "Cleaning WebAssembly build directory..."
748+
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/wasm_build
749+
COMMENT "Remove wasm_build directory and all contents"
750+
)

PRESERVE_CASE_STATUS.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Preserve Case Test Coverage
2+
---------------------------
3+
4+
- C++: ✅ (covered by `tests/CppTest.sh`)
5+
- Dart: ✅ (default + preserve-case via `tests/DartTest.sh`)
6+
- Go: ✅ (tests run in `tests/GoTest.sh`)
7+
- PHP: ✅ (tests run in `tests/PHPTest.sh`)
8+
- Python: ✅ (tests run in `tests/PythonTest.sh`)
9+
- TypeScript: ✅ (default + preserve-case via `tests/TypeScriptTest.sh`)
10+
- Java: ✅ (default + preserve-case via `tests/JavaTest.sh`)
11+
- JSON Schema: ✅ (tests run in `tests/JsonSchemaTest.sh`)
12+
- Rust: ✅ (preserve-case suites in `tests/rust_usage_test/tests/*_preserve_case.rs`)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Test for #7355
2+
table Foo {
3+
my_foo : foo_properties;
4+
}
5+
6+
struct foo_properties
7+
{
8+
a : bool;
9+
b : bool;
10+
}
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
// automatically generated by the FlatBuffers compiler, do not modify
2+
// ignore_for_file: unused_import, unused_field, unused_element, unused_local_variable, constant_identifier_names
3+
4+
import 'dart:typed_data' show Uint8List;
5+
import 'package:flat_buffers/flat_buffers.dart' as fb;
6+
7+
8+
class Foo {
9+
Foo._(this._bc, this._bcOffset);
10+
factory Foo(List<int> bytes) {
11+
final rootRef = fb.BufferContext.fromBytes(bytes);
12+
return reader.read(rootRef, 0);
13+
}
14+
15+
static const fb.Reader<Foo> reader = _FooReader();
16+
17+
final fb.BufferContext _bc;
18+
final int _bcOffset;
19+
20+
foo_properties? get my_foo => foo_properties.reader.vTableGetNullable(_bc, _bcOffset, 4);
21+
foo_properties? get myFoo => my_foo;
22+
23+
@override
24+
String toString() {
25+
return 'Foo{myFoo: ${myFoo}}';
26+
}
27+
28+
FooT unpack() => FooT(
29+
my_foo: my_foo?.unpack());
30+
31+
static int pack(fb.Builder fbBuilder, FooT? object) {
32+
if (object == null) return 0;
33+
return object.pack(fbBuilder);
34+
}
35+
}
36+
37+
class FooT implements fb.Packable {
38+
foo_propertiesT? my_foo;
39+
foo_propertiesT? get myFoo => my_foo;
40+
set myFoo(foo_propertiesT? value) => my_foo = value;
41+
42+
FooT({
43+
this.my_foo});
44+
45+
@override
46+
int pack(fb.Builder fbBuilder) {
47+
fbBuilder.startTable(1);
48+
if (my_foo != null) {
49+
fbBuilder.addStruct(0, my_foo!.pack(fbBuilder));
50+
}
51+
return fbBuilder.endTable();
52+
}
53+
54+
@override
55+
String toString() {
56+
return 'FooT{myFoo: ${myFoo}}';
57+
}
58+
}
59+
60+
class _FooReader extends fb.TableReader<Foo> {
61+
const _FooReader();
62+
63+
@override
64+
Foo createObject(fb.BufferContext bc, int offset) =>
65+
Foo._(bc, offset);
66+
}
67+
68+
class FooBuilder {
69+
FooBuilder(this.fbBuilder);
70+
71+
final fb.Builder fbBuilder;
72+
73+
void begin() {
74+
fbBuilder.startTable(1);
75+
}
76+
77+
int addMyFoo(int offset) {
78+
fbBuilder.addStruct(0, offset);
79+
return fbBuilder.offset;
80+
}
81+
82+
int finish() {
83+
return fbBuilder.endTable();
84+
}
85+
}
86+
87+
class FooObjectBuilder extends fb.ObjectBuilder {
88+
final foo_propertiesObjectBuilder? _my_foo;
89+
90+
FooObjectBuilder({
91+
foo_propertiesObjectBuilder? my_foo,
92+
foo_propertiesObjectBuilder? myFoo,
93+
})
94+
: _my_foo = myFoo ?? my_foo;
95+
96+
/// Finish building, and store into the [fbBuilder].
97+
@override
98+
int finish(fb.Builder fbBuilder) {
99+
fbBuilder.startTable(1);
100+
if (_my_foo != null) {
101+
fbBuilder.addStruct(0, _my_foo!.finish(fbBuilder));
102+
}
103+
return fbBuilder.endTable();
104+
}
105+
106+
/// Convenience method to serialize to byte list.
107+
@override
108+
Uint8List toBytes([String? fileIdentifier]) {
109+
final fbBuilder = fb.Builder(deduplicateTables: false);
110+
fbBuilder.finish(finish(fbBuilder), fileIdentifier);
111+
return fbBuilder.buffer;
112+
}
113+
}
114+
class foo_properties {
115+
foo_properties._(this._bc, this._bcOffset);
116+
117+
static const fb.Reader<foo_properties> reader = _foo_propertiesReader();
118+
119+
final fb.BufferContext _bc;
120+
final int _bcOffset;
121+
122+
bool get a => const fb.BoolReader().read(_bc, _bcOffset + 0);
123+
bool get b => const fb.BoolReader().read(_bc, _bcOffset + 1);
124+
125+
@override
126+
String toString() {
127+
return 'foo_properties{a: ${a}, b: ${b}}';
128+
}
129+
130+
foo_propertiesT unpack() => foo_propertiesT(
131+
a: a,
132+
b: b);
133+
134+
static int pack(fb.Builder fbBuilder, foo_propertiesT? object) {
135+
if (object == null) return 0;
136+
return object.pack(fbBuilder);
137+
}
138+
}
139+
140+
class foo_propertiesT implements fb.Packable {
141+
bool a;
142+
bool b;
143+
144+
foo_propertiesT({
145+
required this.a,
146+
required this.b});
147+
148+
@override
149+
int pack(fb.Builder fbBuilder) {
150+
fbBuilder.putBool(b);
151+
fbBuilder.putBool(a);
152+
return fbBuilder.offset;
153+
}
154+
155+
@override
156+
String toString() {
157+
return 'foo_propertiesT{a: ${a}, b: ${b}}';
158+
}
159+
}
160+
161+
class _foo_propertiesReader extends fb.StructReader<foo_properties> {
162+
const _foo_propertiesReader();
163+
164+
@override
165+
int get size => 2;
166+
167+
@override
168+
foo_properties createObject(fb.BufferContext bc, int offset) =>
169+
foo_properties._(bc, offset);
170+
}
171+
172+
class foo_propertiesBuilder {
173+
foo_propertiesBuilder(this.fbBuilder);
174+
175+
final fb.Builder fbBuilder;
176+
177+
int finish(bool a, bool b) {
178+
fbBuilder.putBool(b);
179+
fbBuilder.putBool(a);
180+
return fbBuilder.offset;
181+
}
182+
183+
}
184+
185+
class foo_propertiesObjectBuilder extends fb.ObjectBuilder {
186+
final bool _a;
187+
final bool _b;
188+
189+
foo_propertiesObjectBuilder({
190+
required bool a,
191+
required bool b,
192+
})
193+
: _a = a,
194+
_b = b;
195+
196+
/// Finish building, and store into the [fbBuilder].
197+
@override
198+
int finish(fb.Builder fbBuilder) {
199+
fbBuilder.putBool(_b);
200+
fbBuilder.putBool(_a);
201+
return fbBuilder.offset;
202+
}
203+
204+
/// Convenience method to serialize to byte list.
205+
@override
206+
Uint8List toBytes([String? fileIdentifier]) {
207+
final fbBuilder = fb.Builder(deduplicateTables: false);
208+
fbBuilder.finish(finish(fbBuilder), fileIdentifier);
209+
return fbBuilder.buffer;
210+
}
211+
}
212+
typedef FooProperties = foo_properties;
213+
214+
typedef FooPropertiesT = foo_propertiesT;
215+
216+
typedef FooPropertiesObjectBuilder = foo_propertiesObjectBuilder;
217+
218+
typedef FooPropertiesBuilder = foo_propertiesBuilder;
219+

dart/test_preserve_case/enums.fbs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
enum OptionsEnum : uint32
2+
{
3+
A = 1,
4+
B = 2,
5+
C = 3
6+
}
7+
8+
table MyTable {
9+
options : [OptionsEnum];
10+
}

0 commit comments

Comments
 (0)