From 6b2808a3f90b5664a78fe8593ee0a79ad7d891cd Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 23 Jun 2020 18:05:50 +0200 Subject: [PATCH] fmt: re-format parser.v and cgen.v --- cmd/tools/vfmt.v | 2 +- vlib/v/gen/cgen.v | 88 +++++++++++++++--------------------------- vlib/v/parser/parser.v | 22 ++++++----- vlib/vweb/vweb.v | 6 ++- 4 files changed, 50 insertions(+), 68 deletions(-) diff --git a/cmd/tools/vfmt.v b/cmd/tools/vfmt.v index 453b892e43..af6b95c289 100644 --- a/cmd/tools/vfmt.v +++ b/cmd/tools/vfmt.v @@ -44,7 +44,7 @@ fn main() { foptions := FormatOptions{ is_c: '-c' in args is_l: '-l' in args - is_w: '-ww' in args + is_w: '-w' in args is_diff: '-diff' in args is_verbose: '-verbose' in args || '--verbose' in args is_all: '-all' in args || '--all' in args diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 7ba144ca4b..e1e372cf51 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -14,33 +14,9 @@ import v.depgraph // NB: keywords after 'new' are reserved in C++ const ( c_reserved = ['delete', 'exit', 'unix', 'error', 'calloc', 'malloc', 'free', 'panic', 'auto', - 'char', - 'default', - 'do', - 'double', - 'extern', - 'float', - 'inline', - 'int', - 'long', - 'register', - 'restrict', - 'short', - 'signed', - 'sizeof', - 'static', - 'switch', - 'typedef', - 'union', - 'unsigned', - 'void', - 'volatile', - 'while', - 'new', - 'namespace', - 'class', - 'typename' - ] + 'char', 'default', 'do', 'double', 'extern', 'float', 'inline', 'int', 'long', 'register', + 'restrict', 'short', 'signed', 'sizeof', 'static', 'switch', 'typedef', 'union', 'unsigned', + 'void', 'volatile', 'while', 'new', 'namespace', 'class', 'typename'] // same order as in token.Kind cmp_str = ['eq', 'ne', 'gt', 'lt', 'ge', 'le'] // when operands are switched @@ -436,8 +412,7 @@ typedef struct { .alias { parent := &g.table.types[typ.parent_idx] styp := typ.name.replace('.', '__') - is_c_parent := parent.name.len > 2 && parent.name[0] == `C` && parent.name[1] == - `.` + is_c_parent := parent.name.len > 2 && parent.name[0] == `C` && parent.name[1] == `.` parent_styp := if is_c_parent { 'struct ' + parent.name[2..].replace('.', '__') } else { parent.name.replace('.', '__') } g.type_definitions.writeln('typedef $parent_styp $styp;') @@ -662,7 +637,7 @@ fn (mut g Gen) stmt(node ast.Stmt) { } } ast.FnDecl { - //g.tmp_count = 0 TODO + // g.tmp_count = 0 TODO mut skip := false pos := g.out.buf.len if g.pref.build_mode == .build_module { @@ -684,13 +659,15 @@ fn (mut g Gen) stmt(node ast.Stmt) { // just remember `it`; main code will be generated in finish() g.fn_main = node } else { - if node.name == 'backtrace' || node.name == 'backtrace_symbols' || node.name == - 'backtrace_symbols_fd' { + if node.name == 'backtrace' || + node.name == 'backtrace_symbols' || + node.name == 'backtrace_symbols_fd' { g.write('\n#ifndef __cplusplus\n') } g.gen_fn_decl(node) - if node.name == 'backtrace' || node.name == 'backtrace_symbols' || node.name == - 'backtrace_symbols_fd' { + if node.name == 'backtrace' || + node.name == 'backtrace_symbols' || + node.name == 'backtrace_symbols_fd' { g.write('\n#endif\n') } } @@ -770,9 +747,9 @@ fn (mut g Gen) stmt(node ast.Stmt) { g.write_autofree_stmts_when_needed(node) g.return_statement(node) } - ast.SqlInsertExpr{ + ast.SqlInsertExpr { g.sql_insert_expr(node) - } + } ast.StructDecl { name := if node.language == .c { node.name.replace('.', '__') } else { c_name(node.name) } // g.writeln('typedef struct {') @@ -915,9 +892,8 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type, expected_type table.Type) got_is_ptr := got_type.is_ptr() expected_is_ptr := expected_type.is_ptr() neither_void := table.voidptr_type !in [got_type, expected_type] - if got_is_ptr && !expected_is_ptr && neither_void && expected_sym.kind !in [.interface_, - .placeholder - ] { + if got_is_ptr && !expected_is_ptr && neither_void && + expected_sym.kind !in [.interface_, .placeholder] { got_deref_type := got_type.deref() deref_sym := g.table.get_type_symbol(got_deref_type) deref_will_match := expected_type in [got_type, got_deref_type, deref_sym.parent_idx] @@ -1588,9 +1564,6 @@ fn (mut g Gen) expr(node ast.Expr) { ast.SqlExpr { g.sql_select_expr(node) } - //ast.SqlInsertExpr { - //g.sql_insert_expr(node) - //} ast.StringLiteral { if node.is_raw { escaped_val := node.val.replace_each(['"', '\\"', '\\', '\\\\']) @@ -1859,8 +1832,8 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { } } else if unaliased_left.idx() in [table.u32_type_idx, table.u64_type_idx] && unaliased_right.is_signed() && node.op in [.eq, .ne, .gt, .lt, .ge, .le] { - bitsize := if unaliased_left.idx() == table.u32_type_idx && unaliased_right.idx() != - table.i64_type_idx { 32 } else { 64 } + bitsize := if unaliased_left.idx() == table.u32_type_idx && + unaliased_right.idx() != table.i64_type_idx { 32 } else { 64 } g.write('_us${bitsize}_${cmp_str[int(node.op)-int(token.Kind.eq)]}(') g.expr(node.left) g.write(',') @@ -1868,8 +1841,8 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { g.write(')') } else if unaliased_right.idx() in [table.u32_type_idx, table.u64_type_idx] && unaliased_left.is_signed() && node.op in [.eq, .ne, .gt, .lt, .ge, .le] { - bitsize := if unaliased_right.idx() == table.u32_type_idx && unaliased_left.idx() != - table.i64_type_idx { 32 } else { 64 } + bitsize := if unaliased_right.idx() == table.u32_type_idx && + unaliased_left.idx() != table.i64_type_idx { 32 } else { 64 } g.write('_us${bitsize}_${cmp_rev[int(node.op)-int(token.Kind.eq)]}(') g.expr(node.right) g.write(',') @@ -1911,8 +1884,7 @@ fn (mut g Gen) match_expr(node ast.MatchExpr) { g.writeln('// match 0') return } - is_expr := (node.is_expr && node.return_type != table.void_type) || g.inside_ternary > - 0 + is_expr := (node.is_expr && node.return_type != table.void_type) || g.inside_ternary > 0 if is_expr { g.inside_ternary++ // g.write('/* EM ret type=${g.typ(node.return_type)} expected_type=${g.typ(node.expected_type)} */') @@ -2395,8 +2367,8 @@ fn (mut g Gen) return_statement(node ast.Return) { // normal return return_sym := g.table.get_type_symbol(node.types[0]) // `return opt_ok(expr)` for functions that expect an optional - if fn_return_is_optional && !node.types[0].has_flag(.optional) && return_sym.name != - 'Option' { + if fn_return_is_optional && !node.types[0].has_flag(.optional) && + return_sym.name != 'Option' { styp := g.base_type(g.fn_decl.return_type) opt_type := g.typ(g.fn_decl.return_type) // Create a tmp for this option @@ -2994,8 +2966,8 @@ fn (mut g Gen) string_inter_literal(node ast.StringInterLiteral) { } else if node.expr_types[i] == table.bool_type { g.expr(expr) g.write(' ? _SLIT("true") : _SLIT("false")') - } else if node.expr_types[i].is_number() || node.expr_types[i].is_pointer() || node.fmts[i] == - `d` { + } else if node.expr_types[i].is_number() || node.expr_types[i].is_pointer() || + node.fmts[i] == `d` { if node.expr_types[i].is_signed() && node.fmts[i] in [`x`, `X`, `o`] { // convert to unsigned first befors C's integer propagation strikes if node.expr_types[i] == table.i8_type { @@ -3306,8 +3278,8 @@ fn (mut g Gen) or_block(var_name string, or_block ast.OrExpr, return_type table. g.writeln('\tstring err = ${cvar_name}.v_error;') g.writeln('\tint errcode = ${cvar_name}.ecode;') stmts := or_block.stmts - if stmts.len > 0 && stmts[or_block.stmts.len - 1] is ast.ExprStmt && (stmts[stmts.len - - 1] as ast.ExprStmt).typ != table.void_type { + if stmts.len > 0 && stmts[or_block.stmts.len - 1] is ast.ExprStmt && + (stmts[stmts.len - 1] as ast.ExprStmt).typ != table.void_type { g.indent++ for i, stmt in stmts { if i == stmts.len - 1 { @@ -3510,7 +3482,8 @@ fn (mut g Gen) comp_if_to_ifdef(name string, is_comptime_optional bool) string { return 'TARGET_ORDER_IS_BIG' } else { - if is_comptime_optional || (g.pref.compile_defines_all.len > 0 && name in g.pref.compile_defines_all) { + if is_comptime_optional || (g.pref.compile_defines_all.len > 0 && + name in g.pref.compile_defines_all) { return 'CUSTOM_DEFINE_$name' } verror('bad os ifdef name "$name"') @@ -4174,7 +4147,8 @@ fn (mut g Gen) gen_str_for_multi_return(info table.MultiReturn, styp, str_fn_nam sym_has_str_method, str_method_expects_ptr, _ := sym.str_method_info() mut arg_str_fn_name := '' if sym_has_str_method { - arg_str_fn_name = if is_arg_ptr { field_styp.replace('*', '') + '_str' } else { field_styp + '_str' } + arg_str_fn_name = if is_arg_ptr { field_styp.replace('*', '') + '_str' } else { field_styp + + '_str' } } else { arg_str_fn_name = styp_to_str_fn_name(field_styp) } @@ -4183,7 +4157,7 @@ fn (mut g Gen) gen_str_for_multi_return(info table.MultiReturn, styp, str_fn_nam } else if sym.kind in [.f32, .f64] { g.auto_str_funcs.writeln('\tstrings__Builder_write(&sb, _STR("%g", 1, a.arg$i));') } else if sym.kind == .string { - g.auto_str_funcs.writeln('\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg$i));') + g.auto_str_funcs.writeln("\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg$i));") } else { if (str_method_expects_ptr && is_arg_ptr) || (!str_method_expects_ptr && !is_arg_ptr) { g.auto_str_funcs.writeln('\tstrings__Builder_write(&sb, ${arg_str_fn_name}(a.arg$i));') diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 53fa2eefaa..3194df1e11 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -734,8 +734,9 @@ fn (mut p Parser) parse_multi_expr(is_top_level bool) ast.Stmt { left0 := left[0] if p.tok.kind in [.assign, .decl_assign] || p.tok.kind.is_assign() { return p.partial_assign_stmt(left) - } else if is_top_level && tok.kind !in [.key_if, .key_match] && left0 !is ast.CallExpr && - left0 !is ast.PostfixExpr && !(left0 is ast.InfixExpr && (left0 as ast.InfixExpr).op == .left_shift) && + } else if is_top_level && tok.kind !in [.key_if, .key_match] && + left0 !is ast.CallExpr && left0 !is ast.PostfixExpr && !(left0 is ast.InfixExpr && + (left0 as ast.InfixExpr).op == .left_shift) && left0 !is ast.ComptimeCall { p.error_with_pos('expression evaluated but not used', left0.position()) } @@ -848,7 +849,8 @@ pub fn (mut p Parser) name_expr() ast.Expr { else {} } } - if p.peek_tok.kind == .dot && !known_var && (language != .v || p.known_import(p.tok.lit) || + if p.peek_tok.kind == .dot && !known_var && + (language != .v || p.known_import(p.tok.lit) || p.mod.all_after_last('.') == p.tok.lit) { if language == .c { mod = 'C' @@ -867,7 +869,8 @@ pub fn (mut p Parser) name_expr() ast.Expr { } // p.warn('name expr $p.tok.lit $p.peek_tok.str()') // fn call or type cast - if p.peek_tok.kind == .lpar || (p.peek_tok.kind == .lt && p.peek_tok2.kind == .name && + if p.peek_tok.kind == .lpar || + (p.peek_tok.kind == .lt && p.peek_tok2.kind == .name && p.peek_tok3.kind == .gt) { // foo() or foo() mut name := p.tok.lit @@ -877,7 +880,8 @@ pub fn (mut p Parser) name_expr() ast.Expr { name_w_mod := p.prepend_mod(name) // type cast. TODO: finish // if name in table.builtin_type_names { - if !known_var && (name in p.table.type_idxs || name_w_mod in p.table.type_idxs) && + if !known_var && (name in p.table.type_idxs || + name_w_mod in p.table.type_idxs) && name !in ['C.stat', 'C.sigaction'] { // TODO handle C.stat() mut to_typ := p.parse_type() @@ -914,8 +918,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { } else if p.peek_tok.kind == .lcbr && !p.inside_match && !p.inside_match_case && !p.inside_if && !p.inside_for { // && (p.tok.lit[0].is_capital() || p.builtin_mod) { return p.struct_init(false) // short_syntax: false - } else if p.peek_tok.kind == .dot && (p.tok.lit[0].is_capital() && !known_var && language == - .v) { + } else if p.peek_tok.kind == .dot && (p.tok.lit[0].is_capital() && !known_var && language == .v) { // `Color.green` mut enum_name := p.check_name() if mod != '' { @@ -1389,8 +1392,9 @@ const ( // left hand side of `=` or `:=` in `a,b,c := 1,2,3` fn (mut p Parser) global_decl() ast.GlobalDecl { if !p.pref.translated && !p.pref.is_livemain && !p.builtin_mod && !p.pref.building_v && - p.mod != 'ui' && p.mod != 'gg2' && p.mod != 'uiold' && !os.getwd().contains('/volt') && !p.pref.enable_globals && - !p.pref.is_fmt && p.mod !in global_enabled_mods { + p.mod != 'ui' && p.mod != 'gg2' && + p.mod != 'uiold' && !p.pref.enable_globals && !p.pref.is_fmt && + p.mod !in global_enabled_mods { p.error('use `v --enable-globals ...` to enable globals') } start_pos := p.tok.position() diff --git a/vlib/vweb/vweb.v b/vlib/vweb/vweb.v index 4b624e8eb4..0ba3b2049f 100644 --- a/vlib/vweb/vweb.v +++ b/vlib/vweb/vweb.v @@ -9,6 +9,7 @@ import net import net.http import net.urllib import strings +import time pub const ( methods_with_form = ['POST', 'PUT', 'PATCH'] @@ -52,6 +53,7 @@ pub mut: pub struct Result {} fn (mut ctx Context) send_response_to_client(mimetype string, res string) bool { + //println('send_response_to_client(mimetype=$mimetype)') if ctx.done { return false } ctx.done = true mut sb := strings.new_builder(1024) @@ -144,7 +146,9 @@ pub fn run_app(mut app T, port int) { for { conn := l.accept() or { panic('accept() failed') } //handle_conn(conn, mut app) + //t := time.ticks() handle_conn(conn, mut app) + //eprintln('handle conn() took ${time.ticks()-t}ms') // TODO move this to handle_conn(conn, app) //message := readall(conn) //println(message) @@ -176,7 +180,7 @@ fn handle_conn(conn net.Socket, mut app T) { //first_line := strip(lines[0]) first_line := conn.read_line() $if debug { - println('firstline="$first_line"') + println('handleconn() firstline="$first_line"') } // Parse the first line