aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-04-08 16:14:47 +0100
committergingerBill <bill@gingerbill.org>2024-04-08 16:14:47 +0100
commitec455046316ba1bf44a6f2118512341a3f68b10c (patch)
tree117a32f4d05ae6831dcb56fffa5f8b140f140aa2 /src
parent810cf22e5ddd772ee214eec306b1ba148623302c (diff)
Obfuscate `#line`
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp6
-rw-r--r--src/common.cpp8
-rw-r--r--src/llvm_backend_const.cpp11
3 files changed, 15 insertions, 10 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 7d8e0f829..b893b3a00 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -8164,8 +8164,12 @@ gb_internal ExprKind check_basic_directive_expr(CheckerContext *c, Operand *o, A
o->type = t_untyped_string;
o->value = exact_value_string(file);
} else if (name == "line") {
+ i32 line = bd->token.pos.line;
+ if (build_context.obfuscate_source_code_locations) {
+ line = obfuscate_i32(line);
+ }
o->type = t_untyped_integer;
- o->value = exact_value_i64(bd->token.pos.line);
+ o->value = exact_value_i64(line);
} else if (name == "procedure") {
if (c->curr_proc_decl == nullptr) {
error(node, "#procedure may only be used within procedures");
diff --git a/src/common.cpp b/src/common.cpp
index 6a53332d9..e0a579c5d 100644
--- a/src/common.cpp
+++ b/src/common.cpp
@@ -364,6 +364,14 @@ gb_internal String obfuscate_string(String const &s, char const *prefix) {
return make_string_c(res);
}
+gb_internal i32 obfuscate_i32(i32 i) {
+ i32 x = cast(i32)gb_fnv64a(&i, sizeof(i));
+ if (x < 0) {
+ x = 1-x;
+ }
+ return cast(i32)x;
+}
+
struct StringIntern {
diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp
index 5b2af1049..8035336d3 100644
--- a/src/llvm_backend_const.cpp
+++ b/src/llvm_backend_const.cpp
@@ -287,13 +287,6 @@ gb_internal lbValue lb_expr_untyped_const_to_typed(lbModule *m, Ast *expr, Type
return lb_const_value(m, t, tv.value);
}
-gb_internal i32 lb_obfuscate_i32(i32 i) {
- i32 x = cast(i32)gb_fnv64a(&i, sizeof(i));
- if (x < 0) {
- x = 1-x;
- }
- return cast(i32)x;
-}
gb_internal lbValue lb_const_source_code_location_const(lbModule *m, String const &procedure_, TokenPos const &pos) {
String file = get_file_path_string(pos.file_id);
@@ -306,8 +299,8 @@ gb_internal lbValue lb_const_source_code_location_const(lbModule *m, String cons
file = obfuscate_string(file, "F");
procedure = obfuscate_string(procedure, "P");
- line = lb_obfuscate_i32(line);
- column = lb_obfuscate_i32(column);
+ line = obfuscate_i32(line);
+ column = obfuscate_i32(column);
}
LLVMValueRef fields[4] = {};