Skip to content

Commit 6486ada

Browse files
authored
Apply clang-tidy code improvements (#56)
This PR is a long list of changes suggested by clang-tidy, or inspired by some of the feedback. While this represents a lot of churn, it also allows us to enable many clang-tidy checks, and hopefully keep a more consistent style now. Performance, I believe is unaffected: https://rebench.dev/SOMpp/compare/dc3c3acd1c15f1f4f9dfb41e3ed09d5b5c0a4cdf..b4f880fd6e096dfed57b1daa2b6dcf42f85824a0
2 parents dc3c3ac + b4f880f commit 6486ada

File tree

128 files changed

+1759
-1761
lines changed

Some content is hidden

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

128 files changed

+1759
-1761
lines changed

.clang-tidy

+52-33
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,67 @@
11
---
2-
Checks: '*include*,
3-
-altera-unroll-loops,
2+
Checks: '*,
43
-altera-id-dependent-backward-branch,
4+
-altera-unroll-loops,
5+
-bugprone-casting-through-void,
56
-bugprone-easily-swappable-parameters,
7+
-bugprone-reserved-identifier,
8+
-cert-dcl37-c,
9+
-cert-dcl50-cpp,
10+
-cert-dcl51-cpp,
11+
-cert-err58-cpp,
12+
-cert-msc30-c,
13+
-cert-msc32-c,
14+
-cert-msc50-cpp,
15+
-cert-msc51-cpp,
16+
-concurrency-mt-unsafe,
17+
-cppcoreguidelines-avoid-c-arrays,
18+
-cppcoreguidelines-avoid-const-or-ref-data-members,
619
-cppcoreguidelines-avoid-do-while,
20+
-cppcoreguidelines-avoid-magic-numbers,
21+
-cppcoreguidelines-avoid-non-const-global-variables,
22+
-cppcoreguidelines-macro-to-enum,
23+
-cppcoreguidelines-macro-usage,
24+
-cppcoreguidelines-no-malloc,
25+
-cppcoreguidelines-non-private-member-variables-in-classes,
26+
-cppcoreguidelines-owning-memory,
27+
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
28+
-cppcoreguidelines-pro-bounds-constant-array-index,
29+
-cppcoreguidelines-pro-bounds-pointer-arithmetic,
30+
-cppcoreguidelines-pro-type-cstyle-cast,
31+
-cppcoreguidelines-pro-type-static-cast-downcast,
32+
-cppcoreguidelines-pro-type-vararg,
33+
-cppcoreguidelines-special-member-functions,
34+
-fuchsia-default-arguments-calls,
35+
-fuchsia-default-arguments-declarations,
36+
-fuchsia-overloaded-operator,
37+
-fuchsia-statically-constructed-objects,
38+
-google-build-using-namespace,
39+
-google-default-arguments,
40+
-google-global-names-in-headers,
41+
-google-readability-casting,
42+
-hicpp-avoid-c-arrays,
43+
-hicpp-no-array-decay,
44+
-hicpp-no-malloc,
45+
-hicpp-special-member-functions,
46+
-hicpp-vararg,
747
-llvm-header-guard,
848
-llvmlibc-*,
949
-misc-no-recursion,
50+
-misc-non-private-member-variables-in-classes,
51+
-misc-use-anonymous-namespace,
52+
-modernize-avoid-bind,
53+
-modernize-avoid-c-arrays,
54+
-modernize-macro-to-enum,
1055
-modernize-use-trailing-return-type,
56+
-modernize-use-using,
57+
-performance-no-int-to-ptr,
1158
-readability-function-cognitive-complexity,
1259
-readability-identifier-length,
60+
-readability-magic-numbers,
61+
-readability-redundant-inline-specifier,
1362
'
14-
# '*,
15-
# '
16-
# -bugprone-exception-escape,
17-
# -concurrency-mt-unsafe,
18-
# -cppcoreguidelines-avoid-const-or-ref-data-members,
19-
# -cppcoreguidelines-avoid-magic-numbers,
20-
# -cppcoreguidelines-avoid-non-const-global-variables
21-
# -cppcoreguidelines-non-private-member-variables-in-classes,
22-
# -cppcoreguidelines-pro-bounds-constant-array-index,
23-
# -fuchsia-default-arguments-calls,
24-
# -fuchsia-default-arguments-declarations,
25-
# -fuchsia-statically-constructed-objects,
26-
# -fuchsia-virtual-inheritance,
27-
# -google-global-names-in-headers,
28-
# -hicpp-named-parameter,
29-
# -hicpp-use-auto,
30-
# -llvm-include-order,
31-
# -llvmlibc-*,
32-
# -misc-no-recursion,
33-
# -misc-non-private-member-variables-in-classes,
34-
# -misc-use-anonymous-namespace,
35-
# -readability-delete-null-pointer,
36-
# -readability-convert-member-functions-to-static,
37-
# -readability-magic-numbers,
38-
# -readability-named-parameter,
39-
# -readability-simplify-boolean-expr,
40-
# -cppcoreguidelines-special-member-functions,
41-
# -hicpp-special-member-functions,
42-
# -cppcoreguidelines-pro-bounds-pointer-arithmetic,
43-
# -cppcoreguidelines-owning-memory,
4463
WarningsAsErrors: '*'
45-
HeaderFilterRegex: '^(?!.*cppunit).*$'
64+
HeaderFilterRegex: '^.*/src/.*$'
4665
# AnalyzeTemporaryDtors: false
4766
FormatStyle: none
4867
User: smarr

lint.sh

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ clang-tidy-mp-18 --config-file=.clang-tidy src/**/*.cpp \
44
--fix \
55
-- -I/opt/local/include/ -fdiagnostics-absolute-paths \
66
-DGC_TYPE=GENERATIONAL -DUSE_TAGGING=false -DCACHE_INTEGER=false -DUNITTESTS
7+
clang-format-mp-18 -i --style=file --Werror src/*.cpp src/**/*.cpp src/**/*.h

src/Main.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include "vmobjects/VMObject.h"
3636
#include "vmobjects/VMString.h"
3737

38-
int main(int argc, char** argv) {
38+
int32_t main(int32_t argc, char** argv) {
3939
cout << "This is SOM++" << endl;
4040

4141
if (GC_TYPE == GENERATIONAL) {

src/compiler/BytecodeGenerator.cpp

+30-28
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,18 @@
4040
#include "../vmobjects/VMSymbol.h"
4141

4242
void Emit1(MethodGenerationContext& mgenc, uint8_t bytecode,
43-
size_t stackEffect) {
43+
int64_t stackEffect) {
4444
mgenc.AddBytecode(bytecode, stackEffect);
4545
}
4646

4747
void Emit2(MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
48-
size_t stackEffect) {
48+
int64_t stackEffect) {
4949
mgenc.AddBytecode(bytecode, stackEffect);
5050
mgenc.AddBytecodeArgument(idx);
5151
}
5252

5353
void Emit3(MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
54-
size_t ctx, size_t stackEffect) {
54+
size_t ctx, int64_t stackEffect) {
5555
mgenc.AddBytecode(bytecode, stackEffect);
5656
mgenc.AddBytecodeArgument(idx);
5757
mgenc.AddBytecodeArgument(ctx);
@@ -65,7 +65,7 @@ void EmitDUP(MethodGenerationContext& mgenc) {
6565
Emit1(mgenc, BC_DUP, 1);
6666
}
6767

68-
void EmitPUSHLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
68+
void EmitPUSHLOCAL(MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
6969
assert(idx >= 0);
7070
assert(ctx >= 0);
7171
if (ctx == 0) {
@@ -85,7 +85,7 @@ void EmitPUSHLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
8585
Emit3(mgenc, BC_PUSH_LOCAL, idx, ctx, 1);
8686
}
8787

88-
void EmitPUSHARGUMENT(MethodGenerationContext& mgenc, long idx, int ctx) {
88+
void EmitPUSHARGUMENT(MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
8989
assert(idx >= 0);
9090
assert(ctx >= 0);
9191

@@ -120,7 +120,7 @@ void EmitPUSHFIELD(MethodGenerationContext& mgenc, VMSymbol* field) {
120120
}
121121

122122
void EmitPUSHBLOCK(MethodGenerationContext& mgenc, VMInvokable* block) {
123-
const int8_t idx = mgenc.AddLiteralIfAbsent(block);
123+
const uint8_t idx = mgenc.AddLiteralIfAbsent(block);
124124
Emit2(mgenc, BC_PUSH_BLOCK, idx, 1);
125125
}
126126

@@ -130,11 +130,11 @@ void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, vm_oop_t cst) {
130130
// we also make sure that we don't miss anything in the else
131131
// branch of the class check
132132
if (CLASS_OF(cst) == load_ptr(integerClass)) {
133-
if (INT_VAL(cst) == 0ll) {
133+
if (INT_VAL(cst) == 0LL) {
134134
Emit1(mgenc, BC_PUSH_0, 1);
135135
return;
136136
}
137-
if (INT_VAL(cst) == 1ll) {
137+
if (INT_VAL(cst) == 1LL) {
138138
Emit1(mgenc, BC_PUSH_1, 1);
139139
return;
140140
}
@@ -147,7 +147,7 @@ void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, vm_oop_t cst) {
147147
return;
148148
}
149149

150-
const int8_t idx = mgenc.AddLiteralIfAbsent(cst);
150+
const uint8_t idx = mgenc.AddLiteralIfAbsent(cst);
151151
if (idx == 0) {
152152
Emit1(mgenc, BC_PUSH_CONSTANT_0, 1);
153153
return;
@@ -180,7 +180,7 @@ void EmitPUSHGLOBAL(MethodGenerationContext& mgenc, VMSymbol* global) {
180180
} else if (global == SymbolFor("false")) {
181181
EmitPUSHCONSTANT(mgenc, load_ptr(falseObject));
182182
} else {
183-
const int8_t idx = mgenc.AddLiteralIfAbsent(global);
183+
const uint8_t idx = mgenc.AddLiteralIfAbsent(global);
184184
Emit2(mgenc, BC_PUSH_GLOBAL, idx, 1);
185185
}
186186
}
@@ -191,7 +191,7 @@ void EmitPOP(MethodGenerationContext& mgenc) {
191191
}
192192
}
193193

194-
void EmitPOPLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
194+
void EmitPOPLOCAL(MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
195195
assert(idx >= 0);
196196
assert(ctx >= 0);
197197
if (ctx == 0) {
@@ -214,7 +214,7 @@ void EmitPOPLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
214214
Emit3(mgenc, BC_POP_LOCAL, idx, ctx, -1);
215215
}
216216

217-
void EmitPOPARGUMENT(MethodGenerationContext& mgenc, long idx, int ctx) {
217+
void EmitPOPARGUMENT(MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
218218
Emit3(mgenc, BC_POP_ARGUMENT, idx, ctx, -1);
219219
}
220220

@@ -229,19 +229,18 @@ void EmitPOPFIELD(MethodGenerationContext& mgenc, VMSymbol* field) {
229229
}
230230

231231
void EmitSEND(MethodGenerationContext& mgenc, VMSymbol* msg) {
232-
const int8_t idx = mgenc.AddLiteralIfAbsent(msg);
232+
const uint8_t idx = mgenc.AddLiteralIfAbsent(msg);
233233

234-
const int numArgs = Signature::GetNumberOfArguments(msg);
235-
const size_t stackEffect = -numArgs + 1; // +1 for the result
234+
const uint8_t numArgs = Signature::GetNumberOfArguments(msg);
235+
const int64_t stackEffect = -numArgs + 1; // +1 for the result
236236

237237
Emit2(mgenc, numArgs == 1 ? BC_SEND_1 : BC_SEND, idx, stackEffect);
238238
}
239239

240240
void EmitSUPERSEND(MethodGenerationContext& mgenc, VMSymbol* msg) {
241-
const int8_t idx = mgenc.AddLiteralIfAbsent(msg);
242-
243-
const int numArgs = Signature::GetNumberOfArguments(msg);
244-
const size_t stackEffect = -numArgs + 1; // +1 for the result
241+
const uint8_t idx = mgenc.AddLiteralIfAbsent(msg);
242+
const uint8_t numArgs = Signature::GetNumberOfArguments(msg);
243+
const int64_t stackEffect = -numArgs + 1; // +1 for the result
245244

246245
Emit2(mgenc, BC_SUPER_SEND, idx, stackEffect);
247246
}
@@ -276,6 +275,9 @@ void EmitRETURNFIELD(MethodGenerationContext& mgenc, size_t index) {
276275
case 2:
277276
bc = BC_RETURN_FIELD_2;
278277
break;
278+
default:
279+
bc = 0;
280+
break;
279281
}
280282
Emit1(mgenc, bc, 0);
281283
}
@@ -302,8 +304,8 @@ size_t EmitJumpOnBoolWithDummyOffset(MethodGenerationContext& mgenc,
302304
// This is because if the test passes, the block is inlined directly.
303305
// But if the test fails, we need to jump.
304306
// Thus, an `#ifTrue:` needs to generated a jump_on_false.
305-
uint8_t bc;
306-
size_t stackEffect;
307+
uint8_t bc = 0;
308+
int64_t stackEffect = 0;
307309

308310
if (needsPop) {
309311
bc = isIfTrue ? BC_JUMP_ON_FALSE_POP : BC_JUMP_ON_TRUE_POP;
@@ -315,36 +317,36 @@ size_t EmitJumpOnBoolWithDummyOffset(MethodGenerationContext& mgenc,
315317

316318
Emit1(mgenc, bc, stackEffect);
317319

318-
size_t idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
320+
size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
319321
mgenc.AddBytecodeArgument(0);
320322
return idx;
321323
}
322324

323325
size_t EmitJumpWithDumyOffset(MethodGenerationContext& mgenc) {
324326
Emit1(mgenc, BC_JUMP, 0);
325-
size_t idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
327+
size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
326328
mgenc.AddBytecodeArgument(0);
327329
return idx;
328330
}
329331

330332
size_t EmitJumpIfGreaterWithDummyOffset(MethodGenerationContext& mgenc) {
331333
Emit1(mgenc, BC_JUMP_IF_GREATER, 0);
332-
size_t idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
334+
size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex(0);
333335
mgenc.AddBytecodeArgument(0);
334336
return idx;
335337
}
336338

337339
void EmitJumpBackwardWithOffset(MethodGenerationContext& mgenc,
338340
size_t jumpOffset) {
339-
uint8_t jumpBytecode =
341+
uint8_t const jumpBytecode =
340342
jumpOffset <= 0xFF ? BC_JUMP_BACKWARD : BC_JUMP2_BACKWARD;
341-
Emit3(mgenc, jumpBytecode, jumpOffset & 0xFF, jumpOffset >> 8, 0);
343+
Emit3(mgenc, jumpBytecode, jumpOffset & 0xFFU, jumpOffset >> 8U, 0);
342344
}
343345

344346
size_t Emit3WithDummy(MethodGenerationContext& mgenc, uint8_t bytecode,
345-
size_t stackEffect) {
347+
int64_t stackEffect) {
346348
mgenc.AddBytecode(bytecode, stackEffect);
347-
size_t index = mgenc.AddBytecodeArgumentAndGetIndex(0);
349+
size_t const index = mgenc.AddBytecodeArgumentAndGetIndex(0);
348350
mgenc.AddBytecodeArgument(0);
349351
return index;
350352
}

src/compiler/BytecodeGenerator.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,25 @@
3333
#include "MethodGenerationContext.h"
3434

3535
void Emit1(MethodGenerationContext& mgenc, uint8_t bytecode,
36-
size_t stackEffect);
36+
int64_t stackEffect);
3737
void Emit2(MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
38-
size_t stackEffect);
38+
int64_t stackEffect);
3939
void Emit3(MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
40-
size_t ctx, size_t stackEffect);
40+
size_t ctx, int64_t stackEffect);
4141

4242
void EmitHALT(MethodGenerationContext& mgenc);
4343
void EmitDUP(MethodGenerationContext& mgenc);
44-
void EmitPUSHLOCAL(MethodGenerationContext& mgenc, long idx, int ctx);
45-
void EmitPUSHARGUMENT(MethodGenerationContext& mgenc, long idx, int ctx);
44+
void EmitPUSHLOCAL(MethodGenerationContext& mgenc, size_t idx, size_t ctx);
45+
void EmitPUSHARGUMENT(MethodGenerationContext& mgenc, size_t idx, size_t ctx);
4646
void EmitPUSHFIELD(MethodGenerationContext& mgenc, VMSymbol* field);
4747
void EmitPUSHBLOCK(MethodGenerationContext& mgenc, VMInvokable* block);
4848
void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, vm_oop_t cst);
4949
void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, uint8_t literalIndex);
5050
void EmitPUSHCONSTANTString(MethodGenerationContext& mgenc, VMString* str);
5151
void EmitPUSHGLOBAL(MethodGenerationContext& mgenc, VMSymbol* global);
5252
void EmitPOP(MethodGenerationContext& mgenc);
53-
void EmitPOPLOCAL(MethodGenerationContext& mgenc, long idx, int ctx);
54-
void EmitPOPARGUMENT(MethodGenerationContext& mgenc, long idx, int ctx);
53+
void EmitPOPLOCAL(MethodGenerationContext& mgenc, size_t idx, size_t ctx);
54+
void EmitPOPARGUMENT(MethodGenerationContext& mgenc, size_t idx, size_t ctx);
5555
void EmitPOPFIELD(MethodGenerationContext& mgenc, VMSymbol* field);
5656
void EmitSEND(MethodGenerationContext& mgenc, VMSymbol* msg);
5757
void EmitSUPERSEND(MethodGenerationContext& mgenc, VMSymbol* msg);
@@ -73,7 +73,7 @@ size_t EmitJumpIfGreaterWithDummyOffset(MethodGenerationContext& mgenc);
7373
void EmitJumpBackwardWithOffset(MethodGenerationContext& mgenc,
7474
size_t jumpOffset);
7575
size_t Emit3WithDummy(MethodGenerationContext& mgenc, uint8_t bytecode,
76-
size_t stackEffect);
76+
int64_t stackEffect);
7777

7878
void EmitPushFieldWithIndex(MethodGenerationContext& mgenc, uint8_t fieldIdx);
7979
void EmitPopFieldWithIndex(MethodGenerationContext& mgenc, uint8_t fieldIdx);

src/compiler/ClassGenerationContext.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@
4242
#include "../vmobjects/VMInvokable.h"
4343
#include "../vmobjects/VMSymbol.h"
4444

45-
ClassGenerationContext::ClassGenerationContext()
46-
: name(nullptr), superName(nullptr), classSide(false), instanceFields(),
47-
instanceMethods(), classFields(), classMethods() {}
45+
ClassGenerationContext::ClassGenerationContext() = default;
4846

4947
void ClassGenerationContext::AddClassField(VMSymbol* field) {
5048
classFields.push_back(field);
@@ -55,18 +53,18 @@ void ClassGenerationContext::AddInstanceField(VMSymbol* field) {
5553
}
5654

5755
void ClassGenerationContext::SetInstanceFieldsOfSuper(VMArray* fields) {
58-
size_t num = fields->GetNumberOfIndexableFields();
56+
size_t const num = fields->GetNumberOfIndexableFields();
5957
for (size_t i = 0; i < num; i++) {
60-
VMSymbol* fieldName = (VMSymbol*)fields->GetIndexableField(i);
58+
auto* fieldName = (VMSymbol*)fields->GetIndexableField(i);
6159
assert(IsVMSymbol(fieldName));
6260
instanceFields.push_back(fieldName);
6361
}
6462
}
6563

6664
void ClassGenerationContext::SetClassFieldsOfSuper(VMArray* fields) {
67-
size_t num = fields->GetNumberOfIndexableFields();
65+
size_t const num = fields->GetNumberOfIndexableFields();
6866
for (size_t i = 0; i < num; i++) {
69-
VMSymbol* fieldName = (VMSymbol*)fields->GetIndexableField(i);
67+
auto* fieldName = (VMSymbol*)fields->GetIndexableField(i);
7068
assert(IsVMSymbol(fieldName));
7169
classFields.push_back(fieldName);
7270
}
@@ -79,7 +77,7 @@ bool ClassGenerationContext::HasField(VMSymbol* field) {
7977
return Contains(instanceFields, field);
8078
}
8179

82-
int16_t ClassGenerationContext::GetFieldIndex(VMSymbol* field) {
80+
int64_t ClassGenerationContext::GetFieldIndex(VMSymbol* field) {
8381
if (IsClassSide()) {
8482
return IndexOf(classFields, field);
8583
}
@@ -96,7 +94,7 @@ void ClassGenerationContext::AddClassMethod(VMInvokable* method) {
9694

9795
VMClass* ClassGenerationContext::Assemble() {
9896
// build class class name
99-
std::string ccname = string(name->GetStdString()) + " class";
97+
std::string const ccname = string(name->GetStdString()) + " class";
10098

10199
// Load the super class
102100
VMClass* superClass = Universe::LoadClass(superName);

0 commit comments

Comments
 (0)