aboutsummaryrefslogtreecommitdiff
path: root/decl.go
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-08-30 19:29:38 +0200
committerHimbeer <himbeer@disroot.org>2024-08-30 19:29:38 +0200
commit358edcaaeadfe632ff9a3a0479b11785c9ca2466 (patch)
tree1005e1c959c1d1970df07de181c1a8db2653df70 /decl.go
parent56ccd1992d5a0e420200b36e394f9ee39458e9eb (diff)
Add redeclaration checks for functions and locals
Closes #1.
Diffstat (limited to 'decl.go')
-rw-r--r--decl.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/decl.go b/decl.go
new file mode 100644
index 0000000..179acb2
--- /dev/null
+++ b/decl.go
@@ -0,0 +1,28 @@
+// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package main
+
+var funcs = map[string]struct{}{}
+var localConsts = map[string]map[string]string{}
+var localMuts = map[string]map[string]struct{}{}
+
+func isDeclared(name string, toplevel bool) bool {
+ if toplevel {
+ return isDeclaredToplevel(name)
+ }
+
+ return isDeclaredLocal(currentFunc, name)
+}
+
+func isDeclaredToplevel(name string) bool {
+ _, ok := funcs[name]
+ return ok
+}
+
+func isDeclaredLocal(function string, local string) bool {
+ _, constant := localConsts[function][local]
+ _, mutable := localMuts[function][local]
+ return constant || mutable
+}