* Add suppport for ES6 style exports
Adds support for ECMAScript 6 module exports during Javascript
generation. This is useful as many development projects are
switching to this new standard and away from custom module
solutions. By integrating support into flatbuffers, users
do not need to perform additional post-processing of generated
files in order to use flatbuffers output directly in their
codebases.
Reference to ECMAScript 6 modules:
https://www.ecma-international.org/ecma-262/6.0/#sec-exports
Changes:
* Added `--es6-js-export` option to cli parser tool
* Added conditional code to generate a ES6 style export
line, replacing the normal NodeJS/RequireJS line.
* Fixed missing export statements
Added exports for definition and struct names that were not inside namespaces
* Updated Compiler.md with new generator option
Added entry to Compiler.md in docs for the `--es6-js-export` flag, including a brief description of the effects and usefulness.
This is to not need static variables, which could trip up users
with destruction order problems.
This potentially makes these operations slightly slower, but I
think they're infrequent enough that this should not be noticable.
Also there is one breaking API change, for a method that is not
used by any code in FlatBuffers and is assumed to affect very
few if any users. A namechange and comment ensures that those
affected, if any, will not run into trouble silently.
Change-Id: I16c1352d1dfc9092c816ddb7e353ed7f5f417444
Tested: on Linux.
Fix for the issue #4744: Ambiguous side-effect execution on vector_downward::make_space() method.
C++ does not impose evaluation order on the two expressions on the right side of the assignment, so compiler can freely decide. As ensure_space() method can change the value of "cur_" variable, the result of the subtraction may be different depending on the evaluation order, which is ambiguous in C++.
In order to make this code deterministic and correct, cur_ must be evaluated after ensure_space() is called.
* Add define/ifdef blocks for FLATBUFFERS_PREFER_PRINTF to avoid using std::*streams for idl_parser
* Use string::size() as limit in snprintf
* Refactored FLATBUFFERS_PREFER_PRINTF guarded feature into NumToStringImplWrapper around sprintf
* Remove '.0' where not needed from IntToDigitCount
* Remove leading dot from name in GetFullyQualifiedName when FLATBUFFERS_PREFER_PRINTF is enabled
* Return string directly from conversion functions where possible when FLATBUFFERS_PREFER_PRINTF is enabled
* Use string instead of stringstream for GetFullyQualifiedName
* Revert removing leading dot from GetFullyQualifiedName, it does need to be there for parity with the stringstream implementation
* Dot is single char in Namespace::GetFullyQualifiedName
* Remove trailing (duplicate) null-byte from NumToStringImplWrapper when using FLATBUFFERS_PREFER_PRINTF.
* Update preprocessor indenting (and use clang-format off/on) for FLATBUFFERS_PREFER_PRINTF
* Reduce whitespace, unneeded braces in FLATBUFFERS_PREFER_PRINTF string width functions
* Remove unneeded use of iostream from idl_parser.cpp, std::string is used instead
* Tell snprintf to use the trailing null byte expected at the end of std::string buffer
* Add view() method on flatbuffers::String, to return a string_view type
if support for std::string_view (or alternately
std::experimental::string_view) is found
* Move detection/definition of FLATBUFFERS_STRING_VIEW to base.h, use the
macro (if it is defined) as the argument type for an overload of CreateString
* Rename String::view() to String::string_view() and use the existing c_str() method for the data pointer
* Add and explain minimum C++ standard version checks for FLATBUFFERS_STRING_VIEW implementations
* Updated preprocessor indenting for FLATBUFFERS_STRING_VIEW
* Convert FLATBUFFERS_STRING_VIEW macro to typedef in flatbuffers:: namespace, and boolean feature toggle macro FLATBUFFERS_HAS_STRING_VIEW
* Prepend flatbuffers:: namespace to disambiguate flatbuffers::string_view typedef from String::string_view()
* clang-format as-she-is-spoke for FLATBUFFERS_HAS_STRING_VIEW
* Added support for the non-escaped print of utf-8 string.
* EscapeString: the first invalid symbol resets print_natural_utf8 flag to false.
* Move the test to ParseAndGenerateTextTest. Fixes.
* Removed dependence between `natural_utf8` and `allow_non_utf8` flags.
In file included from include/flatbuffers/flexbuffers.h:24,
from src/idl_gen_text.cpp:20:
include/flatbuffers/util.h: In function 'int flatbuffers::FromUTF8(const char**)':
include/flatbuffers/util.h:324:45: error: type qualifiers ignored on cast result type [-Werror=ignored-qualifiers]
if ((static_cast<const unsigned char>(**in) << len) & 0x80) return -1; // Bit after leading 1's must be 0.
^
cc1plus: all warnings being treated as errors
make[2]: *** [CMakeFiles/flatbuffers_shared.dir/build.make:92: CMakeFiles/flatbuffers_shared.dir/src/idl_gen_text.cpp.o] Error 1
Const does not make sense here, and compiler actually throws warning
(error with -Werror) when you would try to compile it.
In file included from include/flatbuffers/flexbuffers.h:24,
from include/flatbuffers/idl.h:26,
from include/flatbuffers/code_generators.h:22,
from src/code_generators.cpp:17:
include/flatbuffers/util.h: In function ‘int flatbuffers::FromUTF8(const char**)’:
include/flatbuffers/util.h:325:44: error: type qualifiers ignored on cast result type [-Werror=ignored-qualifiers]
if ((static_cast<const unsigned char>(tmp) << len) & 0x80) return -1; // Bit after leading 1's must be 0.
^
cc1plus: all warnings being treated as errors
This warning caught by gcc8:
$ g++ --version
g++ (GCC) 8.0.1 20180222 (Red Hat 8.0.1-0.16)
An assert in flexbuffers was bit-shifting a 64-bit number by
64 bits, which throws up warnings in some automated tools.
The same assert also checks to see if the number of bytes
being shifted is 8. Swapped the order, so that the bitshift
only occurs if the number of bits being shifted is not 64.
Should be the same behavior, but plays nicer with diagnostic
tools.
* Added '--oneof-union' option.
Used with the .proto -> .fbs converter, will translate protobuff oneofs to flatbuffer unions.
Updated proto test to check both methods of converting oneofs.
* Added '--oneof-union' option.
Used with the .proto -> .fbs converter, will translate protobuff oneofs to flatbuffer unions.
Updated proto test to check both methods of converting oneofs.
* FlatBuffers: Moved MakeCamel() into idl_parser.cpp
Removes library dependency on Java/C# generator code.
* added intended use-cases to monster_test.fbs
* added check for `cpp_ptr_type` on hashed fields
added default value 'naked' to `cpp_ptr_type` on hashed fields
* added C++ generation of cpp_type vectors
removed ctor call for vector fields
added condition !vector for cpp_type check
added Pack() and UnPack() code generation for vector of hashes
added generation of correct resolve/rehash for cpp_type elements
* added attribute 'cpp_ptr_type_get' to hold accessor for pointer types possible where '.get()' does not work
use case: cpp_ptr_type:"std::weak_ptr", cpp_ptr_type_get:".lock().get()"
* run flatc to re-generate headers
* added bool param is_ctor to GetDefaultScalarValue() to differentiate between usage places
* modified monster_test.fbs to remove usage of shared_ptr/weak_ptr
reason: STLport does not support std::shared_ptr and std::weak_ptr
* run flatc again to re-generate headers
* fixed symbol unique_ptr not in namespace std when building with STLport
It was missing some helpers when we choose to use
size prefixed FlatBuffers.
* Add general helper : GetPrefixedSize
* Add generated helpers :
* GetSizePrefixedXXX
* VerfifySizePrefixedXXXBuffer
* FinishSizePrefixedXXXBuffer
- Fixed ForceVectorAlignment (and possibly other call-sites) not
setting minalign_.
- Fixed flipped alignment parameters in CopyTable (reflection).
- Made aligment for FlatBufferBuilder internal buffer configurable
(useful when reading a constructed buffer directly).
- Ensured Alignment rounding is always up.
Change-Id: I33ca4887d92a09cb11a369c14a109f4b07ae707a
Tested: on Linux.
Some implementations (e.g. C++98) won't support 64-bit enum values,
but there is no reason to silently truncate them.
Change-Id: I8629563523a96e887068f9c0efcd53741f60e0d6
Tested: on Linux.
Date: Mon Jan 15 11:38:20 2018 -0200
Compilation failure with grpc.h
If cmake run with flag FLATBUFFERS_BUILD_GRPCTEST=ON
compilation fails.
Fix :
-Fix argument list for overriden function in grpc.
-Fix member function name called by FlatBufferBuilder from
buf() to scratch_data()
Previously, FlatBufferBuilder used 3 resizable buffers:
- serialization (vector_downward)
- field offsets (std::vector)
- vtable offsets (std::vector)
Since the serialization buffer grows downwards, the bottom part of
it can be used as a "scratchpad" storage for the other two. Since
field offsets are only accumulated during table construction, and
vtable offsets only after table construction, the two can trivially
share the same storage.
Not only does this reduce the amount of allocation, it also removes
the bulk of std::vector usage from FlatBufferBuilder which was
the #1 cause of slow-down in debug mode, see e.g.:
https://stackoverflow.com/questions/36085285/any-way-to-improve-flatbuffer-performance-in-debug-c-msvc
Change-Id: I0224cf2f2a863d2d7ef762bc9163b52fdc149522
Tested: on Linux.
Without this change, the compiler tries to select the following overload
when CreateString is passed a `char *`:
template<typename T>
Offset<String> CreateString(const T &str) {
return CreateString(str.c_str(), str.length());
}
which is not valid since char pointers don't have methods.
(Fixes#4579)
Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
* grpc bindings generator for Java and a few minor supporting changes in improvements
* restored formatting before my previous changes for ease of review
* Fixed grpc java code generation bug resulting in duplicate extractor declarations in case the same is used in more than a single RPC method
In some debug environments using vector[i] does bounds checking even
though the standard specifies that it should not. Using
*(vector.begin()) sidesteps this though, giving the same result without
the bounds checking.
This CL also introduces the following changes to allow the generation of the
Go library for flatbuffers:
- add support for --gen-onefile for Go to simplify the build rule (mapping each
input .fbs to a single separate .go file)
- add a new --go-import flag to override the default import line (currently
github.com/google/flatbuffers/go)
- add new go_library in BUILD for flatbuffer (for files in flatbuffers/go)
(mirrored from cr/171126159)
Change-Id: I83e705a9a9d9544837af0baf9366ec37757799aa
- Allowed enums to be declared before use.
- Generalized parsing of `required`.
- Reworked escaping of namespaces.
- Escaping field names that are C++ keywords.
- Many smaller fixes.
Change-Id: Ie580de7b70dc208f676f4f71bb0d061808648b8d
Tested: on Linux.