diff options
| author | Mel <einebeere@gmail.com> | 2022-07-12 01:31:27 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-07-12 01:31:27 +0200 |
| commit | e06aeb7fa2fcb9046b8861ed3c23417555e823f5 (patch) | |
| tree | 3edbaa3a329e0c545c0e8334aeefc77f2bb994d6 /pkg/lang/compiler/scope/scopes.go | |
| parent | c61e995b316ba3382798492b03ab7d5a60002237 (diff) | |
| download | jinx-e06aeb7fa2fcb9046b8861ed3c23417555e823f5.tar.zst jinx-e06aeb7fa2fcb9046b8861ed3c23417555e823f5.zip | |
Compile continue and break statements
Diffstat (limited to 'pkg/lang/compiler/scope/scopes.go')
| -rw-r--r-- | pkg/lang/compiler/scope/scopes.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/pkg/lang/compiler/scope/scopes.go b/pkg/lang/compiler/scope/scopes.go index 39e48ef..5cfcd5d 100644 --- a/pkg/lang/compiler/scope/scopes.go +++ b/pkg/lang/compiler/scope/scopes.go @@ -9,6 +9,7 @@ type ScopeKind int const ( ScopeKindNormal ScopeKind = iota ScopeKindFunction + ScopeKindLoop ) type SymbolScope struct { @@ -48,3 +49,29 @@ func (sf FunctionScope) Unit() code.Marker { func (sf FunctionScope) IsRootScope() bool { return sf.ID() == ScopeID(0) } + +type LoopScope struct { + id ScopeID + breakMarker code.Marker + continueMarker code.Marker +} + +func NewLoopScope(id ScopeID, breakMarker code.Marker, continueMarker code.Marker) LoopScope { + return LoopScope{ + id: id, + breakMarker: breakMarker, + continueMarker: continueMarker, + } +} + +func (sl LoopScope) ID() ScopeID { + return sl.id +} + +func (sl LoopScope) BreakMarker() code.Marker { + return sl.breakMarker +} + +func (sl LoopScope) ContinueMarker() code.Marker { + return sl.continueMarker +} |
