Skip to content

Commit 1e9a3e5

Browse files
committed
Add the golang keywords to the set of identifier checks.
This causes the Car example to change as 'make' is reserved which is changed to 'brand'. This has cascading effects into the samples and benchmarks for both Java and CPP but it remains sane. It also adjust the number of expected errors in two of the ErrorHandler tests as 'true' and 'false' get additionally counted for golang.
1 parent 6aa2ed4 commit 1e9a3e5

22 files changed

+188
-90
lines changed

sbe-benchmarks/src/main/cpp/SbeCarCodecBench.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ using namespace uk::co::real_logic::sbe::benchmarks;
2424
char VEHICLE_CODE[] = {'a', 'b', 'c', 'd', 'e', 'f'};
2525
uint32_t SOMENUMBERS[] = { 1, 2, 3, 4, 5 };
2626
char MANUFACTURER_CODE[] = {'1', '2', '3'};
27-
const char *MAKE = "Honda";
28-
int MAKELEN = strlen(MAKE);
27+
const char *BRAND = "Honda";
28+
int BRANDLEN = strlen(BRAND);
2929
const char *MODEL = "Civic VTi";
3030
int MODELLEN = strlen(MODEL);
3131

@@ -73,7 +73,7 @@ class SbeCarCodecBench : public CodecBench<SbeCarCodecBench>
7373
.next().mph(60).seconds(7.1f)
7474
.next().mph(100).seconds(11.8f);
7575

76-
car.putMake(MAKE, MAKELEN);
76+
car.putBrand(BRAND, BRANDLEN);
7777
car.putModel(MODEL, MODELLEN);
7878

7979
return car.encodedLength();
@@ -130,7 +130,7 @@ class SbeCarCodecBench : public CodecBench<SbeCarCodecBench>
130130
}
131131
}
132132

133-
tmpChar = car.make();
133+
tmpChar = car.brand();
134134
tmpChar = car.model();
135135

136136
return car.encodedLength();

sbe-benchmarks/src/main/java/uk/co/real_logic/sbe/CarBenchmark.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
public class CarBenchmark
2626
{
27-
private static final byte[] MAKE;
27+
private static final byte[] BRAND;
2828
private static final byte[] MODEL;
2929
private static final byte[] ENG_MAN_CODE;
3030
private static final byte[] VEHICLE_CODE;
@@ -33,7 +33,7 @@ public class CarBenchmark
3333
{
3434
try
3535
{
36-
MAKE = "MAKE".getBytes(CarEncoder.makeCharacterEncoding());
36+
BRAND = "BRAND".getBytes(CarEncoder.brandCharacterEncoding());
3737
MODEL = "MODEL".getBytes(CarEncoder.modelCharacterEncoding());
3838
ENG_MAN_CODE = "abc".getBytes(EngineEncoder.manufacturerCodeCharacterEncoding());
3939
VEHICLE_CODE = "abcdef".getBytes(CarEncoder.vehicleCodeCharacterEncoding());
@@ -141,7 +141,7 @@ public static void encode(
141141
.next().mph(60).seconds(7.1f)
142142
.next().mph(100).seconds(11.8f);
143143

144-
car.putMake(MAKE, 0, MAKE.length);
144+
car.putBrand(BRAND, 0, BRAND.length);
145145
car.putModel(MODEL, 0, MODEL.length);
146146
}
147147

@@ -207,7 +207,7 @@ private static void decode(
207207
}
208208
}
209209

210-
car.getMake(tempBuffer, 0, tempBuffer.length);
210+
car.getBrand(tempBuffer, 0, tempBuffer.length);
211211
car.getModel(tempBuffer, 0, tempBuffer.length);
212212
}
213213

sbe-benchmarks/src/main/resources/car.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<field name="seconds" id="16" type="float"/>
7070
</group>
7171
</group>
72-
<data name="make" id="17" type="varDataEncoding"/>
72+
<data name="brand" id="17" type="varDataEncoding"/>
7373
<data name="model" id="18" type="varDataEncoding"/>
7474
</sbe:message>
7575
</sbe:messageSchema>

sbe-samples/src/main/cpp/GeneratedStubExample.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ using namespace baseline;
3232

3333
char VEHICLE_CODE[] = {'a', 'b', 'c', 'd', 'e', 'f'};
3434
char MANUFACTURER_CODE[] = {'1', '2', '3'};
35-
const char *MAKE = "Honda";
35+
const char *BRAND = "Honda";
3636
const char *MODEL = "Civic VTi";
3737
const int messageHeaderVersion = 0;
3838

@@ -117,7 +117,7 @@ std::size_t encodeCar(Car &car, char *buffer, std::uint64_t offset, std::uint64_
117117
.next().mph(60).seconds(7.1f)
118118
.next().mph(100).seconds(11.8f);
119119

120-
car.putMake(MAKE, 5)
120+
car.putBrand(BRAND, 5)
121121
.putModel(MODEL, 9)
122122
.putActivationCode("deadbeef", 8);
123123

@@ -198,8 +198,8 @@ std::size_t decodeCar(
198198
std::cout << "\ncar.performanceFigures.accelerationId=" << Car::PerformanceFigures::accelerationId();
199199
std::cout << "\ncar.performanceFigures.acceleration.mphId=" << Car::PerformanceFigures::Acceleration::mphId();
200200
std::cout << "\ncar.performanceFigures.acceleration.secondsId=" << Car::PerformanceFigures::Acceleration::secondsId();
201-
std::cout << "\ncar.makeId=" << Car::makeId();
202-
std::cout << "\ncar.makeCharacterEncoding=" << Car::makeCharacterEncoding();
201+
std::cout << "\ncar.brandId=" << Car::brandId();
202+
std::cout << "\ncar.brandCharacterEncoding=" << Car::brandCharacterEncoding();
203203
std::cout << "\ncar.modelId=" << Car::modelId();
204204
std::cout << "\ncar.modelCharacterEncoding=" << Car::modelCharacterEncoding();
205205
std::cout << "\ncar.activationCodeId=" << Car::activationCodeId();
@@ -282,9 +282,9 @@ std::size_t decodeCar(
282282
}
283283
}
284284

285-
bytesCopied = car.getMake(tmp, sizeof(tmp));
286-
std::cout << "\ncar.makeLength=" << bytesCopied;
287-
std::cout << "\ncar.make=" << std::string(tmp, bytesCopied);
285+
bytesCopied = car.getBrand(tmp, sizeof(tmp));
286+
std::cout << "\ncar.brandLength=" << bytesCopied;
287+
std::cout << "\ncar.brand=" << std::string(tmp, bytesCopied);
288288

289289
bytesCopied = car.getModel(tmp, sizeof(tmp));
290290
std::cout << "\ncar.modelLength=" << bytesCopied;

sbe-samples/src/main/cpp/OtfExample.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ static char MANUFACTURER_CODE[] = { '1', '2', '3' };
315315
static const char *FUEL_FIGURES_1_USAGE_DESCRIPTION = "Urban Cycle";
316316
static const char *FUEL_FIGURES_2_USAGE_DESCRIPTION = "Combined Cycle";
317317
static const char *FUEL_FIGURES_3_USAGE_DESCRIPTION = "Highway Cycle";
318-
static const char *MAKE = "Honda";
318+
static const char *BRAND = "Honda";
319319
static const char *MODEL = "Civic VTi";
320320
static const char *ACTIVATION_CODE = "deadbeef";
321321

@@ -417,7 +417,7 @@ std::uint64_t encodeHdrAndCar(char *buffer, std::uint64_t length)
417417
.next().mph(perf2bMph).seconds(perf2bSeconds)
418418
.next().mph(perf2cMph).seconds(perf2cSeconds);
419419

420-
car.putMake(MAKE, static_cast<int>(strlen(MAKE)))
420+
car.putBrand(BRAND, static_cast<int>(strlen(BRAND)))
421421
.putModel(MODEL, static_cast<int>(strlen(MODEL)))
422422
.putActivationCode(ACTIVATION_CODE, static_cast<int>(strlen(ACTIVATION_CODE)));
423423

@@ -463,4 +463,4 @@ int main(int argc, char **argv)
463463
}
464464

465465
return 0;
466-
}
466+
}

sbe-samples/src/main/java/uk/co/real_logic/sbe/examples/ExampleUsingGeneratedStub.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ExampleUsingGeneratedStub
3030
private static final String ENCODING_FILENAME = "sbe.encoding.filename";
3131
private static final byte[] VEHICLE_CODE;
3232
private static final byte[] MANUFACTURER_CODE;
33-
private static final byte[] MAKE;
33+
private static final byte[] BRAND;
3434
private static final byte[] MODEL;
3535
private static final UnsafeBuffer ACTIVATION_CODE;
3636

@@ -45,7 +45,7 @@ public class ExampleUsingGeneratedStub
4545
{
4646
VEHICLE_CODE = "abcdef".getBytes(CarEncoder.vehicleCodeCharacterEncoding());
4747
MANUFACTURER_CODE = "123".getBytes(EngineEncoder.manufacturerCodeCharacterEncoding());
48-
MAKE = "Honda".getBytes(CarEncoder.makeCharacterEncoding());
48+
BRAND = "Honda".getBytes(CarEncoder.brandCharacterEncoding());
4949
MODEL = "Civic VTi".getBytes(CarEncoder.modelCharacterEncoding());
5050
ACTIVATION_CODE = new UnsafeBuffer("abcdef".getBytes(CarEncoder.activationCodeCharacterEncoding()));
5151
}
@@ -158,7 +158,7 @@ public static int encode(final CarEncoder car, final UnsafeBuffer directBuffer,
158158

159159
// An exception will be raised if the string length is larger than can be encoded in the varDataEncoding length field
160160
// Please use a suitable schema type for varDataEncoding.length: uint8 <= 254, uint16 <= 65534
161-
car.make(new String(MAKE, StandardCharsets.UTF_8))
161+
car.brand(new String(BRAND, StandardCharsets.UTF_8))
162162
.putModel(MODEL, srcOffset, MODEL.length)
163163
.putActivationCode(ACTIVATION_CODE, 0, ACTIVATION_CODE.capacity());
164164

@@ -238,7 +238,7 @@ public static void decode(
238238
}
239239
}
240240

241-
sb.append("\ncar.make=").append(car.make());
241+
sb.append("\ncar.brand=").append(car.brand());
242242

243243
sb.append("\ncar.model=").append(
244244
new String(buffer, 0, car.getModel(buffer, 0, buffer.length), CarEncoder.modelCharacterEncoding()));

sbe-samples/src/main/java/uk/co/real_logic/sbe/examples/ExampleUsingGeneratedStubExtension.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class ExampleUsingGeneratedStubExtension
3131
private static final String ENCODING_FILENAME = "sbe.encoding.filename";
3232
private static final byte[] VEHICLE_CODE;
3333
private static final byte[] MANUFACTURER_CODE;
34-
private static final byte[] MAKE;
34+
private static final byte[] BRAND;
3535
private static final byte[] MODEL;
3636
private static final UnsafeBuffer ACTIVATION_CODE;
3737

@@ -46,7 +46,7 @@ public class ExampleUsingGeneratedStubExtension
4646
{
4747
VEHICLE_CODE = "abcdef".getBytes(baseline.CarEncoder.vehicleCodeCharacterEncoding());
4848
MANUFACTURER_CODE = "123".getBytes(baseline.EngineEncoder.manufacturerCodeCharacterEncoding());
49-
MAKE = "Honda".getBytes(baseline.CarEncoder.makeCharacterEncoding());
49+
BRAND = "Honda".getBytes(baseline.CarEncoder.brandCharacterEncoding());
5050
MODEL = "Civic VTi".getBytes(baseline.CarEncoder.modelCharacterEncoding());
5151
ACTIVATION_CODE = new UnsafeBuffer("abcdef".getBytes(baseline.CarEncoder.activationCodeCharacterEncoding()));
5252
}
@@ -157,7 +157,7 @@ public static int encode(final baseline.CarEncoder car, final UnsafeBuffer direc
157157
.next().mph(60).seconds(7.1f)
158158
.next().mph(100).seconds(11.8f);
159159

160-
car.putMake(MAKE, srcOffset, MAKE.length)
160+
car.putBrand(BRAND, srcOffset, BRAND.length)
161161
.putModel(MODEL, srcOffset, MODEL.length)
162162
.putActivationCode(ACTIVATION_CODE, 0, ACTIVATION_CODE.capacity());
163163

@@ -240,8 +240,8 @@ public static void decode(
240240
}
241241
}
242242

243-
sb.append("\ncar.make=").append(
244-
new String(buffer, 0, car.getMake(buffer, 0, buffer.length), extension.CarEncoder.makeCharacterEncoding()));
243+
sb.append("\ncar.brand=").append(
244+
new String(buffer, 0, car.getBrand(buffer, 0, buffer.length), extension.CarEncoder.brandCharacterEncoding()));
245245

246246
sb.append("\ncar.model=").append(
247247
new String(buffer, 0, car.getModel(buffer, 0, buffer.length), extension.CarEncoder.modelCharacterEncoding()));

sbe-samples/src/main/resources/example-extension-schema.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
<field name="seconds" id="17" type="float"/>
8484
</group>
8585
</group>
86-
<data name="make" id="18" type="varDataEncoding"/>
86+
<data name="brand" id="18" type="varDataEncoding"/>
8787
<data name="model" id="19" type="varDataEncoding"/>
8888
<data name="activationCode" id="20" type="varDataEncoding"/>
8989
</sbe:message>

sbe-samples/src/main/resources/example-schema.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
<field name="seconds" id="17" type="float"/>
8282
</group>
8383
</group>
84-
<data name="make" id="18" type="varDataEncoding"/>
84+
<data name="brand" id="18" type="varDataEncoding"/>
8585
<data name="model" id="19" type="varDataEncoding"/>
8686
<data name="activationCode" id="20" type="varDataEncoding"/>
8787
</sbe:message>

sbe-tool/src/main/java/uk/co/real_logic/sbe/util/ValidationUtil.java

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,97 @@ private static boolean isJavaIdentifier(final String token)
198198

199199
return true;
200200
}
201+
202+
private static final Set<String> GOLANG_KEYWORDS = new HashSet<>(
203+
Arrays.asList(new String[]
204+
{
205+
/* https://golang.org/ref/spec#Keywords */
206+
"break", "default", "func", "interface", "select",
207+
"case", "defer", "go", "map", "struct",
208+
"chan", "else", "goto", "package", "switch",
209+
"const", "fallthrough", "if", "range", "type",
210+
"continue", "for", "import", "return", "var",
211+
212+
/* https://golang.org/ref/spec#Predeclared_identifiers */
213+
/* types */
214+
"bool", "byte", "complex64", "complex128", "error", "float32", "float64",
215+
"int", "int8", "int16", "int32", "int64", "rune", "string",
216+
"uint", "uint8", "uint16", "uint32", "uint64", "uintptr",
217+
/* constants */
218+
"true", "false", "iota",
219+
/* zero value */
220+
"nil",
221+
/* functions */
222+
"append", "cap", "close", "complex", "copy", "delete", "imag", "len",
223+
"make", "new", "panic", "print", "println", "real", "recover"
224+
}));
225+
226+
/**
227+
* "Check" value for validity of usage as a golang identifier. From:
228+
* https://golang.org/ref/spec#Identifiers
229+
*
230+
* identifier = letter { letter | unicode_digit }
231+
* letter = unicode_letter | "_" .
232+
*
233+
* unicode_letter and unicode_digit are defined in section 4.5 of the the unicode
234+
* standard at http://www.unicode.org/versions/Unicode8.0.0/ and
235+
* the Java Character and Digit functions are unicode friendly
236+
*
237+
* @param value to check
238+
* @return true for validity as a golang name. false if not.
239+
*/
240+
public static boolean isSbeGolangName(final String value)
241+
{
242+
if (possibleGolangKeyword(value))
243+
{
244+
if (isGolangKeyword(value))
245+
{
246+
return false;
247+
}
248+
}
249+
else
250+
{
251+
return false;
252+
}
253+
254+
return true;
255+
}
256+
257+
public static boolean isGolangKeyword(final String token)
258+
{
259+
return GOLANG_KEYWORDS.contains(token);
260+
}
261+
262+
private static boolean possibleGolangKeyword(final String value)
263+
{
264+
for (int i = 0, size = value.length(); i < size; i++)
265+
{
266+
final char c = value.charAt(i);
267+
268+
if (i == 0 && isSbeGolangIdentifierStart(c))
269+
{
270+
continue;
271+
}
272+
273+
if (isSbeGolangIdentifierPart(c))
274+
{
275+
continue;
276+
}
277+
278+
return false;
279+
}
280+
281+
return true;
282+
}
283+
284+
private static boolean isSbeGolangIdentifierStart(final char c)
285+
{
286+
return Character.isLetter(c) || c == '_';
287+
}
288+
289+
private static boolean isSbeGolangIdentifierPart(final char c)
290+
{
291+
return Character.isLetterOrDigit(c) || c == '_';
292+
}
293+
201294
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/xml/XmlSchemaParser.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,11 @@ public static void checkForValidName(final Node node, final String name)
310310
{
311311
handleError(node, "name is not valid for Java: " + name);
312312
}
313+
314+
if (!ValidationUtil.isSbeGolangName(name))
315+
{
316+
handleError(node, "name is not valid for Golang: " + name);
317+
}
313318
}
314319

315320
private static void addTypeWithNameCheck(final Map<String, Type> typeByNameMap, final Type type, final Node node)

0 commit comments

Comments
 (0)