Go: use string for strings instead of []byte
A few conversions more, a few conversions less.
This commit is contained in:
		
							parent
							
								
									f7bb33cc3d
								
							
						
					
					
						commit
						1e03aeacdd
					
				| @ -52,7 +52,7 @@ func main() { | ||||
| 	var args *ell.V | ||||
| 	tail := &args | ||||
| 	for i := 2; i < len(os.Args); i++ { | ||||
| 		*tail = ell.NewString([]byte(os.Args[i])) | ||||
| 		*tail = ell.NewString(os.Args[i]) | ||||
| 		tail = &(*tail).Next | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -46,7 +46,7 @@ func complete(L *ell.Ell, line string) (res []string) { | ||||
| 
 | ||||
| 	line = strings.ToLower(line) | ||||
| 	for v := L.Globals; v != nil; v = v.Next { | ||||
| 		name := string(v.Head.String) | ||||
| 		name := v.Head.String | ||||
| 		if strings.HasPrefix(strings.ToLower(name), line) { | ||||
| 			res = append(res, name) | ||||
| 		} | ||||
|  | ||||
							
								
								
									
										30
									
								
								ell/ell.go
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								ell/ell.go
									
									
									
									
									
								
							| @ -44,7 +44,7 @@ type V struct { | ||||
| 	Type   VType  // the type of this value | ||||
| 	Next   *V     // next value in sequence | ||||
| 	Head   *V     // the head of a VTypeList | ||||
| 	String []byte // the immutable contents of a VTypeString | ||||
| 	String string // the immutable contents of a VTypeString | ||||
| } | ||||
| 
 | ||||
| // Clone clones a value without following the rest of its chain. | ||||
| @ -56,8 +56,6 @@ func (v *V) Clone() *V { | ||||
| 		Type:   v.Type, | ||||
| 		Next:   nil, | ||||
| 		Head:   v.Head.CloneSeq(), | ||||
| 		// TODO: Consider actually storing the string as a string, | ||||
| 		// so that the compiler/runtime assure its immutability. | ||||
| 		String: v.String, | ||||
| 	} | ||||
| } | ||||
| @ -73,7 +71,7 @@ func (v *V) CloneSeq() *V { | ||||
| } | ||||
| 
 | ||||
| // NewString creates a new value containing a string. | ||||
| func NewString(string []byte) *V { | ||||
| func NewString(string string) *V { | ||||
| 	return &V{ | ||||
| 		Type:   VTypeString, | ||||
| 		String: string, | ||||
| @ -316,7 +314,7 @@ func printString(w io.Writer, s *V) bool { | ||||
| 		return false | ||||
| 	} | ||||
| 	if !printStringNeedsQuoting(s) { | ||||
| 		_, _ = w.Write(s.String) | ||||
| 		_, _ = w.Write([]byte(s.String)) | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| @ -457,7 +455,7 @@ func (p *Parser) skipNL() { | ||||
| } | ||||
| 
 | ||||
| func parsePrefixList(seq *V, name string) *V { | ||||
| 	prefix := NewString([]byte(name)) | ||||
| 	prefix := NewString(name) | ||||
| 	prefix.Next = seq | ||||
| 	return NewList(prefix) | ||||
| } | ||||
| @ -471,7 +469,7 @@ func (p *Parser) parseV() *V { | ||||
| 	p.skipNL() | ||||
| 	switch { | ||||
| 	case p.accept(tString): | ||||
| 		return NewString(p.lexer.buf) | ||||
| 		return NewString(string(p.lexer.buf)) | ||||
| 	case p.accept(tAt): | ||||
| 		result = p.parseV() | ||||
| 		return parsePrefixList(result, "set") | ||||
| @ -575,7 +573,7 @@ func scopeFind(scope **V, name string) **V { | ||||
| } | ||||
| 
 | ||||
| func scopePrepend(scope **V, name string, v *V) { | ||||
| 	key := NewString([]byte(name)) | ||||
| 	key := NewString(name) | ||||
| 	pair := NewList(key) | ||||
| 
 | ||||
| 	key.Next = v | ||||
| @ -791,7 +789,7 @@ func NewNumber(n float64) *V { | ||||
| 	if s[i-1] == '.' { | ||||
| 		i-- | ||||
| 	} | ||||
| 	return NewString([]byte(s[:i])) | ||||
| 	return NewString(s[:i]) | ||||
| } | ||||
| 
 | ||||
| // Truthy decides whether any value is logically true. | ||||
| @ -802,9 +800,9 @@ func Truthy(v *V) bool { | ||||
| // NewBoolean creates a new string value copying the boolean's truthiness. | ||||
| func NewBoolean(b bool) *V { | ||||
| 	if b { | ||||
| 		return NewString([]byte("1")) | ||||
| 		return NewString("1") | ||||
| 	} | ||||
| 	return NewString(nil) | ||||
| 	return NewString("") | ||||
| } | ||||
| 
 | ||||
| // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||
| @ -927,7 +925,7 @@ func fnPrint(ell *Ell, args *V, result **V) bool { | ||||
| 	for ; args != nil; args = args.Next { | ||||
| 		if args.Type != VTypeString { | ||||
| 			PrintV(os.Stdout, args) | ||||
| 		} else if _, err := os.Stdout.Write(args.String); err != nil { | ||||
| 		} else if _, err := os.Stdout.WriteString(args.String); err != nil { | ||||
| 			return ell.Errorf("write failed: %s", err) | ||||
| 		} | ||||
| 	} | ||||
| @ -940,10 +938,10 @@ func fnCat(ell *Ell, args *V, result **V) bool { | ||||
| 		if args.Type != VTypeString { | ||||
| 			PrintV(buf, args) | ||||
| 		} else { | ||||
| 			buf.Write(args.String) | ||||
| 			buf.WriteString(args.String) | ||||
| 		} | ||||
| 	} | ||||
| 	*result = NewString(buf.Bytes()) | ||||
| 	*result = NewString(buf.String()) | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| @ -978,7 +976,7 @@ func fnParse(ell *Ell, args *V, result **V) bool { | ||||
| 		return ell.Errorf("first argument must be string") | ||||
| 	} | ||||
| 
 | ||||
| 	res, err := NewParser(body.String).Run() | ||||
| 	res, err := NewParser([]byte(body.String)).Run() | ||||
| 	if err != nil { | ||||
| 		return ell.Errorf("%s", err) | ||||
| 	} | ||||
| @ -998,7 +996,7 @@ func fnTry(ell *Ell, args *V, result **V) bool { | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	msg := NewString([]byte(ell.Error)) | ||||
| 	msg := NewString(ell.Error) | ||||
| 	ell.Error = "" | ||||
| 	*result = nil | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user