vweb: first step to revive it
parent
2032da7fe2
commit
892d1c6aab
|
@ -3,7 +3,7 @@ module main
|
|||
import vweb
|
||||
|
||||
const (
|
||||
Port = 8082
|
||||
port = 8082
|
||||
)
|
||||
|
||||
struct App {
|
||||
|
@ -13,7 +13,9 @@ pub mut:
|
|||
}
|
||||
|
||||
fn main() {
|
||||
vweb.run<App>(Port)
|
||||
mut app := App{}
|
||||
vweb.run(app, port)
|
||||
//vweb.run<App>(Port)
|
||||
}
|
||||
|
||||
pub fn (app mut App) init() {
|
|
@ -275,8 +275,8 @@ fn (p mut Parser) fn_decl() {
|
|||
// C function header def? (fn C.NSMakeRect(int,int,int,int))
|
||||
is_c := f.name == 'C' && p.tok == .dot
|
||||
// Just fn signature? only builtin.v + default build mode
|
||||
if p.pref.build_mode == .build_module {
|
||||
//println('\n\nfn_decl() name=$f.name receiver_typ=$receiver_typ nogen=$p.cgen.nogen')
|
||||
if p.pref.is_verbose { // p.pref.build_mode == .build_module {
|
||||
println('\n\nfn_decl() name=$f.name receiver_typ=$receiver_typ nogen=$p.cgen.nogen')
|
||||
}
|
||||
if is_c {
|
||||
p.check(.dot)
|
||||
|
@ -561,8 +561,10 @@ fn (p mut Parser) check_unused_variables() {
|
|||
if !var.is_used && !p.pref.is_repl && !var.is_arg && !p.pref.translated {
|
||||
p.production_error_with_token_index('`$var.name` declared and not used', var.token_idx )
|
||||
}
|
||||
if !var.is_changed && var.is_mut && !p.pref.is_repl && !p.pref.translated {
|
||||
p.error_with_token_index( '`$var.name` is declared as mutable, but it was never changed', var.token_idx )
|
||||
if !var.is_changed && var.is_mut && !p.pref.is_repl &&
|
||||
!p.pref.translated && var.typ != 'T*'
|
||||
{
|
||||
p.error_with_token_index('`$var.name` is declared as mutable, but it was never changed', var.token_idx )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -472,7 +472,7 @@ fn (p mut Parser) import_statement() {
|
|||
if p.tok != .name {
|
||||
p.error('bad import format')
|
||||
}
|
||||
if p.peek() == .number { // && p.scanner.text[p.scanner.pos + 1] == `.` {
|
||||
if p.peek() == .number {
|
||||
p.error('bad import format. module/submodule names cannot begin with a number')
|
||||
}
|
||||
import_tok_idx := p.token_idx-1
|
||||
|
@ -513,14 +513,6 @@ fn (p mut Parser) const_decl() {
|
|||
if is_pub {
|
||||
p.next()
|
||||
}
|
||||
if p.tok == .key_import {
|
||||
p.error_with_token_index(
|
||||
'`import const` was removed from the language, ' +
|
||||
'because predeclaring C constants is not needed anymore. ' +
|
||||
'You can use them directly with C.CONST_NAME',
|
||||
p.cur_tok_index()
|
||||
)
|
||||
}
|
||||
p.inside_const = true
|
||||
p.check(.key_const)
|
||||
p.fspace()
|
||||
|
@ -659,13 +651,13 @@ fn (p mut Parser) interface_method(field_name, receiver string) &Fn {
|
|||
|
||||
fn key_to_type_cat(tok TokenKind) TypeCategory {
|
||||
match tok {
|
||||
.key_interface { return TypeCategory.interface_ }
|
||||
.key_struct { return TypeCategory.struct_ }
|
||||
.key_union { return TypeCategory.union_ }
|
||||
//TokenKind.key_ => return .interface_
|
||||
.key_interface { return .interface_ }
|
||||
.key_struct { return .struct_ }
|
||||
.key_union { return .union_ }
|
||||
//TokenKind.key_ => return .interface_
|
||||
}
|
||||
verror('Unknown token: $tok')
|
||||
return TypeCategory.builtin
|
||||
return .builtin
|
||||
}
|
||||
|
||||
// check_name checks for a name token and returns its literal
|
||||
|
@ -727,10 +719,10 @@ fn (p mut Parser) check(expected TokenKind) {
|
|||
*/
|
||||
p.next()
|
||||
|
||||
if p.scanner.line_comment != '' {
|
||||
//p.fgenln('// ! "$p.scanner.line_comment"')
|
||||
//p.scanner.line_comment = ''
|
||||
}
|
||||
//if p.scanner.line_comment != '' {
|
||||
//p.fgenln('// ! "$p.scanner.line_comment"')
|
||||
//p.scanner.line_comment = ''
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
@ -894,7 +886,7 @@ fn (p mut Parser) get_type() string {
|
|||
p.error('unknown type `$typ`')
|
||||
}
|
||||
}
|
||||
else if !t.is_public && t.mod != p.mod && t.name != '' {
|
||||
else if !t.is_public && t.mod != p.mod && t.name != '' && !p.first_pass() {
|
||||
p.error('type `$t.name` is private')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,6 +81,7 @@ fn (p mut Parser) struct_decl() {
|
|||
typ.is_placeholder = false
|
||||
typ.cat = cat
|
||||
typ.parent = objc_parent
|
||||
typ.is_public = is_pub
|
||||
p.table.rewrite_type(typ)
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -11,7 +11,7 @@ const (
|
|||
max_redirects = 4
|
||||
)
|
||||
|
||||
struct Request {
|
||||
pub struct Request {
|
||||
pub:
|
||||
headers map[string]string
|
||||
method string
|
||||
|
@ -27,7 +27,7 @@ pub:
|
|||
user_agent string
|
||||
}
|
||||
|
||||
struct Response {
|
||||
pub struct Response {
|
||||
pub:
|
||||
text string
|
||||
headers map[string]string
|
||||
|
|
|
@ -2,7 +2,7 @@ module net
|
|||
|
||||
import os
|
||||
|
||||
struct Socket {
|
||||
pub struct Socket {
|
||||
pub:
|
||||
sockfd int
|
||||
family int
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
// Copyright (c) 2019 Alexander Medvednikov. All rights reserved.
|
||||
// Use of this source code is governed by an MIT license
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
module vweb
|
||||
|
||||
import (
|
||||
|
@ -27,16 +31,16 @@ const (
|
|||
}
|
||||
)
|
||||
|
||||
struct Context {
|
||||
static_files map[string]string
|
||||
static_mime_types map[string]string
|
||||
pub:
|
||||
req http.Request
|
||||
conn net.Socket
|
||||
form map[string]string
|
||||
// TODO Response
|
||||
mut:
|
||||
headers string // response headers
|
||||
pub struct Context {
|
||||
static_files map[string]string
|
||||
static_mime_types map[string]string
|
||||
pub:
|
||||
req http.Request
|
||||
conn net.Socket
|
||||
form map[string]string
|
||||
// TODO Response
|
||||
mut:
|
||||
headers string // response headers
|
||||
}
|
||||
|
||||
pub fn (ctx Context) html(html string) {
|
||||
|
@ -84,10 +88,11 @@ fn (ctx mut Context) get_header(key string) string {
|
|||
return ctx.headers.find_between('\r\n$key: ', '\r\n')
|
||||
}
|
||||
|
||||
pub fn run<T>(port int) {
|
||||
//pub fn run<T>(port int) {
|
||||
pub fn run<T>(app T, port int) {
|
||||
println('Running vweb app on http://localhost:$port ...')
|
||||
l := net.listen(port) or { panic('failed to listen') }
|
||||
mut app := T{}
|
||||
//mut app := T{}
|
||||
app.init()
|
||||
for {
|
||||
conn := l.accept() or {
|
||||
|
|
Loading…
Reference in New Issue