demangle.go
func (st *state) localName() AST {
	st.checkChar('Z')
	fn := st.encoding(true, forLocalName)
	if len(st.str) == 0 || st.str[0] != 'E' {
		st.fail("expected E after local name")
	}
	st.advance(1)
	if len(st.str) > 0 && st.str[0] == 's' {
		st.advance(1)
		var n AST = &Name{Name: "string literal"}
		n = st.discriminator(n)
		return &Qualified{Scope: fn, Name: n, LocalName: true}
	} else {
		num := -1
		if len(st.str) > 0 && st.str[0] == 'd' {
			// Default argument scope.
			st.advance(1)
			num = st.compactNumber()
		}
		n := st.name()
		n = st.discriminator(n)
		if num >= 0 {
			n = &DefaultArg{Num: num, Arg: n}
		}
		return &Qualified{Scope: fn, Name: n, LocalName: true}
	}
}
func (st *state) localName() AST {
	st.checkChar('Z')
	fn := st.encoding(true, forLocalName)
	if len(st.str) == 0 || st.str[0] != 'E' {
		st.fail("expected E after local name")
	}
	st.advance(1)
	if len(st.str) > 0 && st.str[0] == 's' {
		st.advance(1)
		var n AST = &Name{Name: "string literal"}
		n = st.discriminator(n)
		return &Qualified{Scope: fn, Name: n, LocalName: true}
	} else {
		num := -1
		if len(st.str) > 0 && st.str[0] == 'd' {
			// Default argument scope.
			st.advance(1)
			num = st.compactNumber()
		}
		n := st.name()
		n = st.discriminator(n)
		if num >= 0 {
			n = &DefaultArg{Num: num, Arg: n}
		}
		return &Qualified{Scope: fn, Name: n, LocalName: true}
	}
}
func ( st * state ) localName ( ) AST { st . checkChar ( 'Z' ) fn := st . encoding ( true , forLocalName ) if len ( st . str ) == 0 || st . str [ 0 ] != 'E' { st . fail ( " " ) } st . advance ( 1 ) if len ( st . str ) > 0 && st . str [ 0 ] == 's' { st . advance ( 1 ) var n AST = & Name { Name : " " } n = st . discriminator ( n ) return & Qualified { Scope : fn , Name : n , LocalName : true } } else { num := - 1 if len ( st . str ) > 0 && st . str [ 0 ] == 'd' { // Default argument scope. st . advance ( 1 ) num = st . compactNumber ( ) } n := st . name ( ) n = st . discriminator ( n ) if num >= 0 { n = & DefaultArg { Num : num , Arg : n } } return & Qualified { Scope : fn , Name : n , LocalName : true } } }
// <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
//              ::= Z <(function) encoding> E s [<discriminator>]
//              ::= Z <(function) encoding> E d [<parameter> number>] _ <entity name>
<local - name > :: = Z < ( function ) encoding > E < ( entity ) name > [ <discriminator > ] :: = Z < ( function ) encoding > E s [ <discriminator > ] :: = Z < ( function ) encoding > E d [ <parameter > number > ] _ <entity name >