Browse Source

Change parser to use `^Expr` rather than `string` for the foreign import paths

gingerBill 1 year ago
parent
commit
d91054b615
3 changed files with 8 additions and 6 deletions
  1. 1 1
      core/odin/ast/ast.odin
  2. 6 4
      core/odin/parser/parser.odin
  3. 1 1
      src/parser.cpp

+ 1 - 1
core/odin/ast/ast.odin

@@ -538,7 +538,7 @@ Foreign_Import_Decl :: struct {
 	import_tok:      tokenizer.Token,
 	name:            ^Ident,
 	collection_name: string,
-	fullpaths:       []string,
+	fullpaths:       []^Expr,
 	comment:         ^Comment_Group,
 }
 

+ 6 - 4
core/odin/parser/parser.odin

@@ -1190,12 +1190,12 @@ parse_foreign_decl :: proc(p: ^Parser) -> ^ast.Decl {
 			error(p, name.pos, "illegal foreign import name: '_'")
 		}
 
-		fullpaths: [dynamic]string
+		fullpaths: [dynamic]^ast.Expr
 		if allow_token(p, .Open_Brace) {
 			for p.curr_tok.kind != .Close_Brace &&
 				p.curr_tok.kind != .EOF {
-				path := expect_token(p, .String)
-				append(&fullpaths, path.text)
+				path := parse_expr(p, false)
+				append(&fullpaths, path)
 
 				allow_token(p, .Comma) or_break
 			}
@@ -1203,7 +1203,9 @@ parse_foreign_decl :: proc(p: ^Parser) -> ^ast.Decl {
 		} else {
 			path := expect_token(p, .String)
 			reserve(&fullpaths, 1)
-			append(&fullpaths, path.text)
+			bl := ast.new(ast.Basic_Lit, path.pos, end_pos(path))
+			bl.tok = tok
+			append(&fullpaths, bl)
 		}
 
 		if len(fullpaths) == 0 {

+ 1 - 1
src/parser.cpp

@@ -4894,7 +4894,7 @@ gb_internal Ast *parse_foreign_decl(AstFile *f) {
 			while (f->curr_token.kind != Token_CloseBrace &&
 			       f->curr_token.kind != Token_EOF) {
 
-				Ast *path = parse_expr(f, true);
+				Ast *path = parse_expr(f, false);
 				array_add(&filepaths, path);
 
 				if (!allow_field_separator(f)) {