runtime `as` type check: part 2
							parent
							
								
									2d187fb951
								
							
						
					
					
						commit
						48857090fc
					
				|  | @ -17,7 +17,7 @@ pub: | |||
| } | ||||
| 
 | ||||
| // Internal function, used by V (`nums := []int`)
 | ||||
| fn new_array(mylen int, cap int, elm_size int) array { | ||||
| fn __new_array(mylen int, cap int, elm_size int) array { | ||||
| 	cap_ := if cap == 0 { 1 } else { cap } | ||||
| 	arr := array{ | ||||
| 		len: mylen | ||||
|  | @ -27,14 +27,21 @@ fn new_array(mylen int, cap int, elm_size int) array { | |||
| 	} | ||||
| 	return arr | ||||
| } | ||||
| fn new_array(mylen int, cap int, elm_size int) array { | ||||
| 	cap_ := if cap == 0 { 1 } else { cap } | ||||
| 	arr := array{ | ||||
| 		len: mylen | ||||
| 		cap: cap_ | ||||
| 		element_size: elm_size | ||||
| 		data: vcalloc(cap_ * elm_size) | ||||
| 	} | ||||
| 	return arr | ||||
| 
 | ||||
| fn __new_array(mylen int, cap int, elm_size int) array { | ||||
| 	return new_array(mylen, cap, elm_size) | ||||
| } | ||||
| 
 | ||||
| // TODO
 | ||||
| pub fn make(len int, cap int, elm_size int) array { | ||||
| 	return new_array(len, cap, elm_size) | ||||
| 	return __new_array(len, cap, elm_size) | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  |  | |||
|  | @ -966,7 +966,7 @@ pub fn (s string) ustring() ustring { | |||
| 		// runes will have at least s.len elements, save reallocations
 | ||||
| 		// TODO use VLA for small strings?
 | ||||
| 
 | ||||
| 		runes: new_array(0, s.len, sizeof(int)) | ||||
| 		runes: __new_array(0, s.len, sizeof(int)) | ||||
| 	} | ||||
| 	for i := 0; i < s.len; i++ { | ||||
| 		char_len := utf8_char_len(s.str[i]) | ||||
|  | @ -984,7 +984,7 @@ __global g_ustring_runes []int | |||
| 
 | ||||
| pub fn (s string) ustring_tmp() ustring { | ||||
| 	if g_ustring_runes.len == 0 { | ||||
| 		g_ustring_runes = new_array(0, 128, sizeof(int)) | ||||
| 		g_ustring_runes = __new_array(0, 128, sizeof(int)) | ||||
| 	} | ||||
| 	mut res := ustring{ | ||||
| 		s: s | ||||
|  | @ -1032,7 +1032,7 @@ fn (u ustring) ge(a ustring) bool { | |||
| pub fn (u ustring) add(a ustring) ustring { | ||||
| 	mut res := ustring{ | ||||
| 		s: u.s + a.s | ||||
| 		runes: new_array(0, u.s.len + a.s.len, sizeof(int)) | ||||
| 		runes: __new_array(0, u.s.len + a.s.len, sizeof(int)) | ||||
| 	} | ||||
| 	mut j := 0 | ||||
| 	for i := 0; i < u.s.len; i++ { | ||||
|  |  | |||
|  | @ -2913,16 +2913,16 @@ fn (mut g Gen) as_cast(node ast.AsCast) { | |||
| 	styp := g.typ(node.typ) | ||||
| 	expr_type_sym := g.table.get_type_symbol(node.expr_type) | ||||
| 	if expr_type_sym.kind == .sum_type { | ||||
| 		/* | ||||
| 		g.write('/* as */ *($styp*)') | ||||
| 		g.expr(node.expr) | ||||
| 		g.write('.obj') | ||||
| 		/* | ||||
| */ | ||||
| 		g.write('/* as */ *($styp*)__as_cast(') | ||||
| 		g.expr(node.expr) | ||||
| 		g.write('.obj, ') | ||||
| 		g.expr(node.expr) | ||||
| 		g.write('.typ, /*expected:*/$node.typ)') | ||||
| */ | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue