diff options
| author | Kai Gunger <kgunger12@gmail.com> | 2025-12-30 23:16:01 -0500 |
|---|---|---|
| committer | Kai Gunger <kgunger12@gmail.com> | 2025-12-30 23:16:01 -0500 |
| commit | aef2a1e4fae812220b29ec939be239cee5225b1a (patch) | |
| tree | 7464ef01fb4957b8a4e726ea2072ce57ec677077 /tnslc/compile/scope.tnsl | |
| parent | 3a98cbd4d96041e78cb8748d674e9d5ea311054e (diff) | |
finding parent scopes
Diffstat (limited to 'tnslc/compile/scope.tnsl')
| -rw-r--r-- | tnslc/compile/scope.tnsl | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tnslc/compile/scope.tnsl b/tnslc/compile/scope.tnsl index 900d626..b7df075 100644 --- a/tnslc/compile/scope.tnsl +++ b/tnslc/compile/scope.tnsl @@ -241,6 +241,51 @@ struct Scope { return out ;/ + # Get closest breakable scope + + /; _closest_break [~Scope] + /; if (utils.ends_with(self.name, "#wrap\0")) + return ~self + ;; else if (utils.ends_with(self.name, "#loop\0")) + return ~self + ;/ + + /; if (self.parent == NULL) + return NULL + ;/ + + return self.parent`.closest_loop() + ;/ + + /; closest_break [~Scope] + /; if (self.parent == NULL) + return NULL + ;/ + + ~uint8 pname = self.parent`.name + /; if (utils.ends_with(pname, "#wrap\0")) + ~Scope par2 = self.parent`.parent + /; if (par2 !== NULL) + return par2`._closest_break() + ;/ + ;/ + + return self._closest_break() + ;/ + + # Get closest loop + /; closest_loop [~Scope] + /; if (utils.ends_with(self.name, "#loop\0")) + return ~self + ;/ + + /; if (self.parent == NULL) + return NULL + ;/ + + return self.parent`.closest_loop() + ;/ + # # Label generation |