79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
/*  1 */ struct A { mut: v int }
 | 
						|
/*  2 */ struct B {      a A }
 | 
						|
/*  3 */ struct C { mut: b B }
 | 
						|
/*  4 */ struct D { mut: c C }
 | 
						|
 | 
						|
/*  5 */ struct E { mut: v []int }
 | 
						|
/*  6 */ struct F {      e []E }
 | 
						|
 | 
						|
/*  7 */ mut s := 'hello world'
 | 
						|
/*( 8)*/ s.len = 0   // Error (field len immutable)
 | 
						|
 | 
						|
/*  8 */ mut b := B{}
 | 
						|
/*( 9)*/ b.a.v = 1   // Error (field a immutable)
 | 
						|
/*( 9)*/ b.a = A{}   // Error (field a immutable)
 | 
						|
/*  9 */ b = B{A{2}} // Correct
 | 
						|
 | 
						|
/* 10 */ mut c := C{}
 | 
						|
/* 11 */ c.b = B{}   // Correct
 | 
						|
/*(12)*/ c.b.a = A{} // Error (field a immutable)
 | 
						|
/*(12)*/ c.b.a.v = 1 // Error (field a immutable)
 | 
						|
 | 
						|
/* 12 */ c2 := C{}
 | 
						|
/*(13)*/ c2.b = B{}  // Error (c2 immutable)
 | 
						|
/* 13 */ mut d := D{}
 | 
						|
/* 14 */ d.c.b = B{} // Correct
 | 
						|
 | 
						|
/* 15 */ mut f := F{}
 | 
						|
/*(16)*/ f.e << E{}      // Error (field e immutable)
 | 
						|
/*(16)*/ f.e[0].v << 1   // Error (field e immutable)
 | 
						|
 | 
						|
/* 16 */ e := E{}
 | 
						|
/*(17)*/ e.v << 1    // Error (e immutable)
 | 
						|
 | 
						|
===output===
 | 
						|
.vrepl_temp.v:8:14: cannot modify immutable field `len` (type `string`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct string {
 | 
						|
  mut:
 | 
						|
	len int
 | 
						|
}
 | 
						|
.vrepl_temp.v:9:14: cannot modify immutable field `a` (type `B`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct B {
 | 
						|
  mut:
 | 
						|
	a A
 | 
						|
}
 | 
						|
.vrepl_temp.v:9:12: cannot modify immutable field `a` (type `B`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct B {
 | 
						|
  mut:
 | 
						|
	a A
 | 
						|
}
 | 
						|
.vrepl_temp.v:12:14: cannot modify immutable field `a` (type `B`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct B {
 | 
						|
  mut:
 | 
						|
	a A
 | 
						|
}
 | 
						|
.vrepl_temp.v:12:16: cannot modify immutable field `a` (type `B`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct B {
 | 
						|
  mut:
 | 
						|
	a A
 | 
						|
}
 | 
						|
.vrepl_temp.v:13:15: `c2` is immutable.
 | 
						|
.vrepl_temp.v:16:12: cannot modify immutable field `e` (type `F`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct F {
 | 
						|
  mut:
 | 
						|
	e []E
 | 
						|
}
 | 
						|
.vrepl_temp.v:16:17: cannot modify immutable field `e` (type `F`)
 | 
						|
declare the field with `mut:`
 | 
						|
struct F {
 | 
						|
  mut:
 | 
						|
	e []E
 | 
						|
}
 | 
						|
.vrepl_temp.v:17:17: `e` is immutable (can't <<)
 |