register fn args; remove dup code
parent
460b35137a
commit
a6a9958cfc
2
v2.v
2
v2.v
|
@ -14,7 +14,7 @@ cdefs = '
|
||||||
typedef int bool;
|
typedef int bool;
|
||||||
typedef struct { char* str; } string;
|
typedef struct { char* str; } string;
|
||||||
typedef double f64;
|
typedef double f64;
|
||||||
string tos3(char* s) { return (string){ .str = s }; }
|
string tos3(char* s) { return (string){ .str = s, len = strlen(s) }; }
|
||||||
')
|
')
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
|
@ -70,10 +70,12 @@ fn (p mut Parser) fn_decl() ast.FnDecl {
|
||||||
for p.tok.kind != .rpar {
|
for p.tok.kind != .rpar {
|
||||||
arg_name := p.check_name()
|
arg_name := p.check_name()
|
||||||
typ := p.parse_type()
|
typ := p.parse_type()
|
||||||
args << table.Var{
|
arg := table.Var{
|
||||||
name: arg_name
|
name: arg_name
|
||||||
typ: typ
|
typ: typ
|
||||||
}
|
}
|
||||||
|
args << arg
|
||||||
|
p.table.register_var(arg)
|
||||||
ast_args << ast.Arg{
|
ast_args << ast.Arg{
|
||||||
typ: typ
|
typ: typ
|
||||||
name: arg_name
|
name: arg_name
|
||||||
|
@ -103,12 +105,12 @@ fn (p mut Parser) fn_decl() ast.FnDecl {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (p &Parser) check_fn_calls() {
|
pub fn (p &Parser) check_fn_calls() {
|
||||||
println('CHEKC FN CALLS')
|
println('check fn calls')
|
||||||
for call in p.table.unknown_calls {
|
for call in p.table.unknown_calls {
|
||||||
f := p.table.find_fn(call.name) or {
|
f := p.table.find_fn(call.name) or {
|
||||||
p.error_at_line('unknown function `$call.name`', call.tok.line_nr)
|
p.error_at_line('unknown function `$call.name`', call.tok.line_nr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
println(call.name)
|
println(f.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ pub fn parse_stmt(text string, table &table.Table) ast.Stmt {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_file(path string, table &table.Table) ast.File {
|
pub fn parse_file(path string, table &table.Table) ast.File {
|
||||||
|
println('parse file "$path"')
|
||||||
text := os.read_file(path) or {
|
text := os.read_file(path) or {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -66,33 +67,7 @@ pub fn parse_file(path string, table &table.Table) ast.File {
|
||||||
pub fn parse_files(paths []string, table &table.Table) []ast.File {
|
pub fn parse_files(paths []string, table &table.Table) []ast.File {
|
||||||
mut files := []ast.File
|
mut files := []ast.File
|
||||||
for path in paths {
|
for path in paths {
|
||||||
println('parse file "$path"')
|
files << parse_file(path, table)
|
||||||
mut stmts := []ast.Stmt
|
|
||||||
text := os.read_file(path) or {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
mut p := Parser{
|
|
||||||
scanner: scanner.new_scanner(text)
|
|
||||||
table: table
|
|
||||||
file_name: path
|
|
||||||
}
|
|
||||||
p.read_first_token()
|
|
||||||
for {
|
|
||||||
// res := s.scan()
|
|
||||||
if p.tok.kind == .eof {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
// println('expr at ' + p.tok.str())
|
|
||||||
s := p.stmt()
|
|
||||||
// println(s)
|
|
||||||
stmts << s // p.stmt()
|
|
||||||
}
|
|
||||||
p.check_fn_calls()
|
|
||||||
// println('nr stmts = $stmts.len')
|
|
||||||
// println(stmts[0])
|
|
||||||
files << ast.File{
|
|
||||||
stmts: stmts
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return files
|
return files
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue