[if vfmt] for fgen() functions
							parent
							
								
									d81b0675f0
								
							
						
					
					
						commit
						d00fdca38f
					
				|  | @ -5,7 +5,7 @@ | |||
| module builtin | ||||
| 
 | ||||
| struct Option { | ||||
| 	data     [255]byte | ||||
| 	data     [300]byte | ||||
| 	error    string | ||||
| 	ecode    int | ||||
| 	ok       bool | ||||
|  | @ -14,8 +14,8 @@ struct Option { | |||
| 
 | ||||
| // `fn foo() ?Foo { return foo }` => `fn foo() ?Foo { return opt_ok(foo); }`
 | ||||
| fn opt_ok(data voidptr, size int) Option { | ||||
| 	if size >= 255 { | ||||
| 		panic('option size too big: $size (max is 255), this is a temporary limit') | ||||
| 	if size >= 300 { | ||||
| 		panic('option size too big: $size (max is 300), this is a temporary limit') | ||||
| 	} | ||||
| 	res := Option { | ||||
| 		ok: true | ||||
|  |  | |||
|  | @ -43,6 +43,7 @@ mut: | |||
| 	dispatch_of	  TypeInst	// current type inst of this generic instance
 | ||||
| 	body_idx	  int		// idx of the first body statement
 | ||||
| 	fn_name_token_idx int // used by error reporting
 | ||||
| 	comptime_define string | ||||
| } | ||||
| 
 | ||||
| struct TypeInst { | ||||
|  | @ -197,6 +198,7 @@ fn (p mut Parser) fn_decl() { | |||
| 		is_public: p.tok == .key_pub || p.is_vh // functions defined in .vh are always public
 | ||||
| 		is_unsafe: p.attr == 'unsafe_fn' | ||||
| 		is_deprecated: p.attr == 'deprecated' | ||||
| 		comptime_define: if p.attr.starts_with('if ') { p.attr.right(3) } else { '' } | ||||
| 	} | ||||
| 	is_live := p.attr == 'live' && !p.pref.is_so  && p.pref.is_live | ||||
| 	if p.attr == 'live' &&  p.first_pass() && !p.pref.is_live && !p.pref.is_so { | ||||
|  | @ -677,6 +679,10 @@ fn (p mut Parser) fn_call(f mut Fn, method_ph int, receiver_var, receiver_type s | |||
| 		} | ||||
| 		p.error('function `$f.name` is private') | ||||
| 	} | ||||
| 	is_comptime_define := f.comptime_define != '' && f.comptime_define != p.pref.comptime_define | ||||
| 	if is_comptime_define { | ||||
| 		p.cgen.nogen = true | ||||
| 	}	 | ||||
| 	p.calling_c = f.is_c | ||||
| 	if f.is_c && !p.builtin_mod { | ||||
| 		if f.name == 'free' { | ||||
|  | @ -739,6 +745,9 @@ fn (p mut Parser) fn_call(f mut Fn, method_ph int, receiver_var, receiver_type s | |||
| 
 | ||||
| 	p.gen(')') | ||||
| 	p.calling_c = false | ||||
| 	if is_comptime_define { | ||||
| 		p.cgen.nogen = false | ||||
| 	} | ||||
| 	// println('end of fn call typ=$f.typ')
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1853,9 +1853,6 @@ fn (p mut Parser) var_expr(v Var) string { | |||
| 	p.next() | ||||
| 	mut typ := v.typ | ||||
| 	// Function pointer?
 | ||||
| 
 | ||||
| 	//println('CALLING FN PTR')
 | ||||
| 	//p.print_tok()
 | ||||
| 	if typ.starts_with('fn ') && p.tok == .lpar { | ||||
| 		T := p.table.find_type(typ) | ||||
| 		p.gen('(') | ||||
|  | @ -2038,7 +2035,7 @@ struct $typ.name { | |||
| 		exit(1) | ||||
| 	} | ||||
| 	p.fn_call(mut method, method_ph, '', str_typ) | ||||
| 	// Methods returning `array` should return `array_string`
 | ||||
| 	// Methods returning `array` should return `array_string` etc
 | ||||
| 	if method.typ == 'array' && typ.name.starts_with('array_') { | ||||
| 		return typ.name | ||||
| 	} | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ fn (scanner mut Scanner) fgen(s_ string) { | |||
| 	scanner.fmt_line_empty = false | ||||
| } | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (scanner mut Scanner) fgenln(s_ string) { | ||||
| 	mut s := s_ | ||||
| 	if scanner.fmt_line_empty { | ||||
|  | @ -26,14 +27,17 @@ fn (scanner mut Scanner) fgenln(s_ string) { | |||
| 	scanner.fmt_line_empty = true | ||||
| } | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (p mut Parser) fgen(s string) { | ||||
| 	p.scanner.fgen(s) | ||||
| } | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (p mut Parser) fspace() { | ||||
| 	p.fgen(' ') | ||||
| } | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (p mut Parser) fgenln(s string) { | ||||
| 	p.scanner.fgenln(s) | ||||
| } | ||||
|  | @ -51,10 +55,12 @@ fn (p mut Parser) peek() TokenKind { | |||
| } | ||||
| */ | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (p mut Parser) fmt_inc() { | ||||
| 	p.scanner.fmt_indent++ | ||||
| } | ||||
| 
 | ||||
| //[if vfmt]
 | ||||
| fn (p mut Parser) fmt_dec() { | ||||
| 	p.scanner.fmt_indent-- | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue