cgen: implement IError.free() and use it for the builtin `none` const
							parent
							
								
									2e84773ef1
								
							
						
					
					
						commit
						99cc02685b
					
				|  | @ -62,3 +62,27 @@ fn opt_ok(data voidptr, mut option Option, size int) { | ||||||
| 		C.memcpy(byteptr(&option.err) + sizeof(IError), data, size) | 		C.memcpy(byteptr(&option.err) + sizeof(IError), data, size) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | [unsafe] | ||||||
|  | pub fn (e &Error) free() { | ||||||
|  | 	unsafe { e.msg.free() } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [unsafe] | ||||||
|  | pub fn (n &None__) free() { | ||||||
|  | 	unsafe { n.msg.free() } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [typedef] | ||||||
|  | struct C.IError { | ||||||
|  | 	_object voidptr | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [unsafe] | ||||||
|  | pub fn (ie &IError) free() { | ||||||
|  | 	unsafe { | ||||||
|  | 		ie.msg.free() | ||||||
|  | 		cie := &C.IError(ie) | ||||||
|  | 		C.free(cie._object) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -975,8 +975,9 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) { | ||||||
| 					stmt_pos = stmt.expr.position() | 					stmt_pos = stmt.expr.position() | ||||||
| 				} | 				} | ||||||
| 				if stmt_pos.pos == 0 { | 				if stmt_pos.pos == 0 { | ||||||
| 					print('autofree: first stmt pos = 0. ') | 					$if trace_autofree ? { | ||||||
| 					println(stmt.type_name()) | 						println('autofree: first stmt pos = 0. $stmt.type_name()') | ||||||
|  | 					} | ||||||
| 					return | 					return | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | @ -4849,6 +4850,8 @@ fn (mut g Gen) const_decl_init_later(mod string, name string, val string, typ ta | ||||||
| 			g.cleanups[mod].writeln('\tstring_free(&$cname);') | 			g.cleanups[mod].writeln('\tstring_free(&$cname);') | ||||||
| 		} else if sym.kind == .map { | 		} else if sym.kind == .map { | ||||||
| 			g.cleanups[mod].writeln('\tmap_free(&$cname);') | 			g.cleanups[mod].writeln('\tmap_free(&$cname);') | ||||||
|  | 		} else if styp == 'IError' { | ||||||
|  | 			g.cleanups[mod].writeln('\tIError_free(&$cname);') | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue