From d2e6c92bb9475e9e4a7433a79c0cc40d913b1ec6 Mon Sep 17 00:00:00 2001 From: Emil Lauridsen Date: Mon, 14 Mar 2016 13:32:38 +0100 Subject: [PATCH] Cleanup flag situtation in Variable --- src/ast/ast.go | 6 ++---- src/ast/constructor.go | 8 ++++---- src/ast/mangle.go | 3 --- src/ast/visitor.go | 1 - src/parser/parse_tree.go | 2 +- src/parser/parser.go | 2 +- src/semantic/unused.go | 2 +- 7 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/ast/ast.go b/src/ast/ast.go index 998eba42..124d031e 100644 --- a/src/ast/ast.go +++ b/src/ast/ast.go @@ -136,13 +136,11 @@ type Variable struct { Name string Mutable bool Attrs parser.AttrGroup - FromStruct bool ParentStruct StructType ParentModule *Module - IsParameter bool - IsArgument bool - IsReceiver bool // TODO separate this out so it isn't as messy + // Is the variable not from an variable decl + IsImplicit bool } func (v Variable) String() string { diff --git a/src/ast/constructor.go b/src/ast/constructor.go index e123ff04..9fa6a4ad 100644 --- a/src/ast/constructor.go +++ b/src/ast/constructor.go @@ -434,7 +434,7 @@ func (c *Constructor) constructVarDeclNode(v *parser.VarDeclNode) *VariableDecl Attrs: v.Attrs(), Mutable: v.Mutable.Value != "", ParentModule: c.module, - IsReceiver: v.IsReceiver, + IsImplicit: v.IsImplicit, } if v.Type != nil { @@ -872,8 +872,8 @@ func (c *Constructor) constructFunctionNode(v *parser.FunctionNode) *Function { if v.Header.Receiver != nil { function.Receiver = c.constructVarDeclNode(v.Header.Receiver) - if !function.Receiver.Variable.IsReceiver { - panic("INTERNAL ERROR: Reciever variable was not marked a reciever") + if !function.Receiver.Variable.IsImplicit { + panic("INTERNAL ERROR: Reciever variable was not marked implicit") } // Propagate generic parameters from reciever to method @@ -900,7 +900,7 @@ func (c *Constructor) constructFunctionNode(v *parser.FunctionNode) *Function { for _, arg := range v.Header.Arguments { // TODO rename v.Header.Arguments to v.Header.Parameters arguments = append(arguments, arg) decl := c.constructVarDeclNode(arg) - decl.Variable.IsParameter = true + decl.Variable.IsImplicit = true function.Parameters = append(function.Parameters, decl) function.Type.Parameters = append(function.Type.Parameters, decl.Variable.Type) } diff --git a/src/ast/mangle.go b/src/ast/mangle.go index 205686d7..6a3112b8 100644 --- a/src/ast/mangle.go +++ b/src/ast/mangle.go @@ -173,9 +173,6 @@ func (v Variable) MangledName(typ MangleType) string { switch typ { case MANGLE_ARK_UNSTABLE: result := fmt.Sprintf("_V%d%s", len(v.Name), v.Name) - if v.FromStruct { - result = v.ParentModule.MangledName(typ) + result - } return result default: panic("") diff --git a/src/ast/visitor.go b/src/ast/visitor.go index 4d921e4a..04846ee5 100644 --- a/src/ast/visitor.go +++ b/src/ast/visitor.go @@ -183,7 +183,6 @@ func (v *ASTVisitor) VisitChildren(n Node) { n.Subscript = v.VisitExpr(n.Subscript) case *SizeofExpr: - // TODO: Maybe visit sizeofExpr.Type at some point? n.Expr = v.VisitExpr(n.Expr) case *ArrayLenExpr: diff --git a/src/parser/parse_tree.go b/src/parser/parse_tree.go index e5956046..f33b459e 100644 --- a/src/parser/parse_tree.go +++ b/src/parser/parse_tree.go @@ -218,7 +218,7 @@ type VarDeclNode struct { Value ParseNode Mutable LocatedString - IsReceiver bool + IsImplicit bool ReceiverGenericSigil *GenericSigilNode } diff --git a/src/parser/parser.go b/src/parser/parser.go index e6f4347e..10200994 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -727,7 +727,7 @@ func (v *parser) parseVarDeclBody(isReceiver bool) *VarDeclNode { res := &VarDeclNode{ Name: NewLocatedString(name), Type: varType, - IsReceiver: isReceiver, + IsImplicit: isReceiver, } start := name.Where.Start() if mutable != nil { diff --git a/src/semantic/unused.go b/src/semantic/unused.go index 60b528a7..9db95c37 100644 --- a/src/semantic/unused.go +++ b/src/semantic/unused.go @@ -65,7 +65,7 @@ func (v *UnusedCheck) AnalyzeUsage(s *SemanticAnalyzer) { decl := v.encounteredDecl[idx] switch it := it.(type) { case *ast.Variable: - if !it.IsParameter && !it.IsReceiver && !it.FromStruct && v.uses[it] == 0 { + if !it.IsImplicit && v.uses[it] == 0 { s.Warn(decl, "Unused variable `%s`", it.Name) }