v2: imports
parent
0ec5680156
commit
d9cf98f772
|
@ -460,7 +460,6 @@ pub fn (a []int) reduce(iter fn(accum, curr int)int, accum_start int) int {
|
|||
return _accum
|
||||
}
|
||||
|
||||
/*
|
||||
// array_eq<T> checks if two arrays contain all the same elements in the same order.
|
||||
// []int == []int (also for: i64, f32, f64, byte, string)
|
||||
fn array_eq<T>(a1, a2 []T) bool {
|
||||
|
@ -494,7 +493,6 @@ pub fn (a []byte) eq(a2 []byte) bool {
|
|||
pub fn (a []f32) eq(a2 []f32) bool {
|
||||
return array_eq(a, a2)
|
||||
}
|
||||
*/
|
||||
|
||||
// compare_i64 for []f64 sort_with_compare()
|
||||
// sort []i64 with quicksort
|
||||
|
|
|
@ -311,6 +311,8 @@ pub fn (v mut V) compile() {
|
|||
}
|
||||
cgen.save()
|
||||
v.cc()
|
||||
//println(v.table.imports)
|
||||
//println(v.table.modules)
|
||||
}
|
||||
|
||||
pub fn (v mut V) compile2() {
|
||||
|
|
|
@ -90,6 +90,15 @@ pub fn (p mut Parser) parse_type() table.Type {
|
|||
if p.tok.kind == .question {
|
||||
p.next()
|
||||
}
|
||||
if p.peek_tok.kind == .dot {
|
||||
///if !(p.tok.lit in p.table.imports) {
|
||||
if !p.table.known_import(p.tok.lit) {
|
||||
println(p.table.imports)
|
||||
p.error('unknown module `$p.tok.lit`')
|
||||
}
|
||||
p.next()
|
||||
p.check(.dot)
|
||||
}
|
||||
name := p.tok.lit
|
||||
match p.tok.kind {
|
||||
// func
|
||||
|
|
|
@ -211,6 +211,12 @@ pub fn (p mut Parser) top_stmt() ast.Stmt {
|
|||
.hash {
|
||||
return p.hash()
|
||||
}
|
||||
.key_type {
|
||||
return p.type_decl()
|
||||
}
|
||||
.key_enum {
|
||||
return p.enum_decl()
|
||||
}
|
||||
else {
|
||||
p.error('parser: bad top level statement')
|
||||
return ast.Stmt{}
|
||||
|
@ -470,7 +476,7 @@ pub fn (p mut Parser) name_expr() (ast.Expr,table.Type) {
|
|||
p.next()
|
||||
p.check(.dot)
|
||||
}
|
||||
else if p.tok.lit in ['strings', 'strconv'] {
|
||||
if p.peek_tok.kind == .dot && p.tok.lit in p.table.imports {
|
||||
p.next()
|
||||
p.check(.dot)
|
||||
}
|
||||
|
@ -1020,6 +1026,18 @@ fn (p mut Parser) string_expr() (ast.Expr,table.Type) {
|
|||
fn (p mut Parser) array_init() (ast.Expr,table.Type) {
|
||||
mut node := ast.Expr{}
|
||||
p.check(.lsbr)
|
||||
// `[]` - empty array with an automatically deduced type
|
||||
/*
|
||||
if p.peek_tok.kind == .rsbr && p.expected_type.kind == .array {
|
||||
node = ast.ArrayInit{
|
||||
// typ: array_type
|
||||
exprs: []
|
||||
pos: p.tok.position()
|
||||
}
|
||||
return node,p.expected_type
|
||||
}
|
||||
*/
|
||||
|
||||
mut val_type := table.void_type
|
||||
mut exprs := []ast.Expr
|
||||
mut is_fixed := false
|
||||
|
@ -1103,16 +1121,17 @@ fn (p mut Parser) module_decl() ast.Module {
|
|||
}
|
||||
|
||||
fn (p mut Parser) parse_import() ast.Import {
|
||||
mod_name := p.check_name()
|
||||
mut mod_name := p.check_name()
|
||||
if p.tok.kind == .dot {
|
||||
p.next()
|
||||
p.check_name()
|
||||
mod_name += '.' + p.check_name()
|
||||
}
|
||||
mut mod_alias := mod_name
|
||||
if p.tok.kind == .key_as {
|
||||
p.check(.key_as)
|
||||
mod_alias = p.check_name()
|
||||
}
|
||||
p.table.imports << mod_name
|
||||
return ast.Import{
|
||||
mod: mod_name
|
||||
alias: mod_alias
|
||||
|
@ -1372,6 +1391,10 @@ fn (p mut Parser) global_decl() ast.GlobalDecl {
|
|||
|
||||
fn (p mut Parser) match_expr() (ast.Expr,table.Type) {
|
||||
p.check(.key_match)
|
||||
is_mut := p.tok.kind == .key_mut
|
||||
if is_mut {
|
||||
p.next()
|
||||
}
|
||||
cond,typ := p.expr(0)
|
||||
p.check(.lcbr)
|
||||
mut blocks := []ast.StmtBlock
|
||||
|
@ -1443,6 +1466,10 @@ fn (p mut Parser) enum_decl() ast.EnumDecl {
|
|||
val := p.check_name()
|
||||
vals << val
|
||||
p.warn('enum val $val')
|
||||
if p.tok.kind == .assign {
|
||||
p.next()
|
||||
p.expr(0)
|
||||
}
|
||||
}
|
||||
p.check(.rcbr)
|
||||
return ast.EnumDecl{
|
||||
|
|
|
@ -19,7 +19,8 @@ pub mut:
|
|||
fns map[string]Fn
|
||||
consts map[string]Var
|
||||
tmp_cnt int
|
||||
imports []string
|
||||
imports []string // List of all imports
|
||||
modules []string // List of all modules registered by the application
|
||||
}
|
||||
|
||||
pub struct Fn {
|
||||
|
@ -577,3 +578,13 @@ pub fn (t &Table) get_expr_typ(expr ast.Expr) TypeSymbol {
|
|||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
pub fn (t &Table) known_import(name string) bool {
|
||||
for i in t.imports {
|
||||
if i.all_after('.') == name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue