demangle.go
func (st *state) parmlist() []AST {
	var ret []AST
	for {
		if len(st.str) < 1 {
			break
		}
		if st.str[0] == 'E' || st.str[0] == '.' {
			break
		}
		if (st.str[0] == 'R' || st.str[0] == 'O') && len(st.str) > 1 && st.str[1] == 'E' {
			// This is a function ref-qualifier.
			break
		}
		ptype := st.demangleType(false)
		ret = append(ret, ptype)
	}

	// There should always be at least one type.  A function that
	// takes no arguments will have a single parameter type
	// "void".
	if len(ret) == 0 {
		st.fail("expected at least one type in type list")
	}

	// Omit a single parameter type void.
	if len(ret) == 1 {
		if bt, ok := ret[0].(*BuiltinType); ok && bt.Name == "void" {
			ret = nil
		}
	}

	return ret
}
func (st *state) parmlist() []AST {
	var ret []AST
	for {
		if len(st.str) < 1 {
			break
		}
		if st.str[0] == 'E' || st.str[0] == '.' {
			break
		}
		if (st.str[0] == 'R' || st.str[0] == 'O') && len(st.str) > 1 && st.str[1] == 'E' {
			// This is a function ref-qualifier.
			break
		}
		ptype := st.demangleType(false)
		ret = append(ret, ptype)
	}

	// There should always be at least one type.  A function that
	// takes no arguments will have a single parameter type
	// "void".
	if len(ret) == 0 {
		st.fail("expected at least one type in type list")
	}

	// Omit a single parameter type void.
	if len(ret) == 1 {
		if bt, ok := ret[0].(*BuiltinType); ok && bt.Name == "void" {
			ret = nil
		}
	}

	return ret
}
func ( st * state ) parmlist ( ) [ ] AST { var ret [ ] AST for { if len ( st . str ) < 1 { break } if st . str [ 0 ] == 'E' || st . str [ 0 ] == '.' { break } if ( st . str [ 0 ] == 'R' || st . str [ 0 ] == 'O' ) && len ( st . str ) > 1 && st . str [ 1 ] == 'E' { // This is a function ref-qualifier. break } ptype := st . demangleType ( false ) ret = append ( ret , ptype ) } // There should always be at least one type.  A function that // takes no arguments will have a single parameter type // "void". if len ( ret ) == 0 { st . fail ( " " ) } // Omit a single parameter type void. if len ( ret ) == 1 { if bt , ok := ret [ 0 ] . ( * BuiltinType ) ; ok && bt . Name == " " { ret = nil } } return ret }
// <type>+
<type > +