mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Merge pull request #2789 from fabiansperber/fix-odin-parser
Fix issues with core:odin parser
This commit is contained in:
+25
-3
@@ -553,6 +553,27 @@ unparen_expr :: proc(expr: ^Expr) -> (val: ^Expr) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strip_or_return_expr :: proc(expr: ^Expr) -> (val: ^Expr) {
|
||||||
|
val = expr
|
||||||
|
if expr == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
inner: ^Expr
|
||||||
|
#partial switch e in val.derived {
|
||||||
|
case ^Or_Return_Expr:
|
||||||
|
inner = e.expr
|
||||||
|
case ^Paren_Expr:
|
||||||
|
inner = e.expr
|
||||||
|
}
|
||||||
|
if inner == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
val = inner
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
Field_Flags :: distinct bit_set[Field_Flag]
|
Field_Flags :: distinct bit_set[Field_Flag]
|
||||||
|
|
||||||
Field_Flag :: enum {
|
Field_Flag :: enum {
|
||||||
@@ -563,7 +584,7 @@ Field_Flag :: enum {
|
|||||||
Using,
|
Using,
|
||||||
No_Alias,
|
No_Alias,
|
||||||
C_Vararg,
|
C_Vararg,
|
||||||
Auto_Cast,
|
Const,
|
||||||
Any_Int,
|
Any_Int,
|
||||||
Subtype,
|
Subtype,
|
||||||
By_Ptr,
|
By_Ptr,
|
||||||
@@ -582,7 +603,7 @@ field_flag_strings := [Field_Flag]string{
|
|||||||
.Using = "using",
|
.Using = "using",
|
||||||
.No_Alias = "#no_alias",
|
.No_Alias = "#no_alias",
|
||||||
.C_Vararg = "#c_vararg",
|
.C_Vararg = "#c_vararg",
|
||||||
.Auto_Cast = "auto_cast",
|
.Const = "#const",
|
||||||
.Any_Int = "#any_int",
|
.Any_Int = "#any_int",
|
||||||
.Subtype = "#subtype",
|
.Subtype = "#subtype",
|
||||||
.By_Ptr = "#by_ptr",
|
.By_Ptr = "#by_ptr",
|
||||||
@@ -596,6 +617,7 @@ field_flag_strings := [Field_Flag]string{
|
|||||||
field_hash_flag_strings := []struct{key: string, flag: Field_Flag}{
|
field_hash_flag_strings := []struct{key: string, flag: Field_Flag}{
|
||||||
{"no_alias", .No_Alias},
|
{"no_alias", .No_Alias},
|
||||||
{"c_vararg", .C_Vararg},
|
{"c_vararg", .C_Vararg},
|
||||||
|
{"const", .Const},
|
||||||
{"any_int", .Any_Int},
|
{"any_int", .Any_Int},
|
||||||
{"subtype", .Subtype},
|
{"subtype", .Subtype},
|
||||||
{"by_ptr", .By_Ptr},
|
{"by_ptr", .By_Ptr},
|
||||||
@@ -616,7 +638,7 @@ Field_Flags_Signature :: Field_Flags{
|
|||||||
.Using,
|
.Using,
|
||||||
.No_Alias,
|
.No_Alias,
|
||||||
.C_Vararg,
|
.C_Vararg,
|
||||||
.Auto_Cast,
|
.Const,
|
||||||
.Any_Int,
|
.Any_Int,
|
||||||
.By_Ptr,
|
.By_Ptr,
|
||||||
.Default_Parameters,
|
.Default_Parameters,
|
||||||
|
|||||||
@@ -1666,9 +1666,6 @@ is_token_field_prefix :: proc(p: ^Parser) -> ast.Field_Flag {
|
|||||||
case .Using:
|
case .Using:
|
||||||
advance_token(p)
|
advance_token(p)
|
||||||
return .Using
|
return .Using
|
||||||
case .Auto_Cast:
|
|
||||||
advance_token(p)
|
|
||||||
return .Auto_Cast
|
|
||||||
case .Hash:
|
case .Hash:
|
||||||
tok: tokenizer.Token
|
tok: tokenizer.Token
|
||||||
advance_token(p)
|
advance_token(p)
|
||||||
@@ -2153,7 +2150,7 @@ parse_inlining_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#partial switch e in ast.unparen_expr(expr).derived_expr {
|
#partial switch e in ast.strip_or_return_expr(expr).derived_expr {
|
||||||
case ^ast.Proc_Lit:
|
case ^ast.Proc_Lit:
|
||||||
if e.inlining != .None && e.inlining != pi {
|
if e.inlining != .None && e.inlining != pi {
|
||||||
error(p, expr.pos, "both 'inline' and 'no_inline' cannot be applied to a procedure literal")
|
error(p, expr.pos, "both 'inline' and 'no_inline' cannot be applied to a procedure literal")
|
||||||
|
|||||||
Reference in New Issue
Block a user