public override void CaseAStructFieldLvalue(AStructFieldLvalue node) { if (!IsConst) return; AALocalDecl decl = data.StructMethodFieldLinks[node]; if (decl.GetConst() == null) { IsConst = false; } }
public virtual void CaseAStructFieldLvalue(AStructFieldLvalue node) { DefaultCase(node); }
public static PLvalue Link(AAName name, Node refNode, List<Node> list, SharedData data) { List<TIdentifier> identifierList = new List<TIdentifier>(); { int count = name.GetIdentifier().Count; if (count < list.Count) { for (int i = 0; i < list.Count - count; i++) { if (list[i] is AStructDecl) identifierList.Add(((AStructDecl)list[i]).GetName()); } for (int i = 0; i < count; i++) { TIdentifier iden = (TIdentifier)name.GetIdentifier()[i]; identifierList.Add(iden); } } else for (int i = count - list.Count; i < count; i++) { TIdentifier iden = (TIdentifier)name.GetIdentifier()[i]; identifierList.Add(iden); } } PLvalue baseLvalue = null; Node node = list[0]; list.RemoveAt(0); TIdentifier identifier = identifierList[0]; identifierList.RemoveAt(0); if (node is AALocalDecl) { AALocalDecl aNode = (AALocalDecl)node; if (node.Parent() is AStructDecl) {//Struct local //Make it this->var or this.var AStructDecl pStruct = Util.GetAncestor<AStructDecl>(node); if (pStruct.GetClassToken() != null || Util.HasAncestor<AConstructorDecl>(refNode) || Util.HasAncestor<ADeconstructorDecl>(refNode)) {//(*this). baseLvalue = new AThisLvalue(new TThis("this")); baseLvalue = new APointerLvalue(new TStar("*"), new ALvalueExp(baseLvalue)); baseLvalue = new AStructLvalue(new ALvalueExp(baseLvalue), new ADotDotType(new TDot(".")), identifier); data.StructFieldLinks[(AStructLvalue)baseLvalue] = aNode; } else {//struct. baseLvalue = new AStructFieldLvalue(identifier); data.StructMethodFieldLinks[(AStructFieldLvalue)baseLvalue] = aNode; } } else {//Method/constructor/deconstructor local ALocalLvalue replaceNode = new ALocalLvalue(identifier); data.LocalLinks[replaceNode] = aNode; baseLvalue = replaceNode; } } else if (node is APropertyDecl) { APropertyDecl aNode = (APropertyDecl)node; if (Util.HasAncestor<AStructDecl>(node)) {//Property in current struct AStructDecl pStruct = Util.GetAncestor<AStructDecl>(node); if (pStruct.GetClassToken() != null || Util.HasAncestor<AConstructorDecl>(refNode) || Util.HasAncestor<ADeconstructorDecl>(refNode)) {//(*this). baseLvalue = new AThisLvalue(new TThis("this")); baseLvalue = new APointerLvalue(new TStar("*"), new ALvalueExp(baseLvalue)); baseLvalue = new AStructLvalue(new ALvalueExp(baseLvalue), new ADotDotType(new TDot(".")), identifier); data.StructPropertyLinks[(AStructLvalue)baseLvalue] = aNode; } else {//struct. baseLvalue = new AStructFieldLvalue(identifier); data.StructMethodPropertyLinks[(AStructFieldLvalue)baseLvalue] = aNode; } } else {//Global property baseLvalue = new APropertyLvalue(identifier); data.PropertyLinks[(APropertyLvalue)baseLvalue] = aNode; } } else if (node is AFieldDecl) { baseLvalue = new AFieldLvalue(identifier); data.FieldLinks[(AFieldLvalue)baseLvalue] = (AFieldDecl)node; } else if (node is AStructDecl) { AStructDecl targetStruct = (AStructDecl)node; node = list[0]; list.RemoveAt(0); identifier = identifierList[0]; identifierList.RemoveAt(0); AStructFieldLvalue lvalue = new AStructFieldLvalue(identifier); if (node is AALocalDecl) data.StructMethodFieldLinks[lvalue] = (AALocalDecl)node; else data.StructMethodPropertyLinks[lvalue] = (APropertyDecl)node; baseLvalue = lvalue; } while (list.Count > 0) { node = list[0]; list.RemoveAt(0); identifier = identifierList[0]; identifierList.RemoveAt(0); baseLvalue = new AStructLvalue(new ALvalueExp(baseLvalue), new ADotDotType(new TDot(".")), identifier); if (node is AALocalDecl) {//Struct local data.StructFieldLinks[(AStructLvalue) baseLvalue] = (AALocalDecl) node; } else if (node is APropertyDecl) {//Struct property data.StructPropertyLinks[(AStructLvalue) baseLvalue] = (APropertyDecl) node; } //Don't link array length stuff } return baseLvalue; }
public override void OutAStructFieldLvalue(AStructFieldLvalue node) { if (data.StructMethodFieldLinks.ContainsKey(node)) { AALocalDecl decl = data.StructMethodFieldLinks[node]; if (data.Enums.ContainsKey((AStructDecl) decl.Parent())) { AStructDecl str = (AStructDecl) decl.Parent(); ANamedType namedType = new ANamedType(new TIdentifier(str.GetName().Text), null); data.StructTypeLinks[namedType] = str; data.LvalueTypes[node] = namedType; } else data.LvalueTypes[node] = decl.GetType(); if (Util.IsStaticContext(node) && decl.GetStatic() == null) { errors.Add(new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText99"), false, new ErrorCollection.Error(decl.GetName(), LocRM.GetString("ErrorText100")))); } } else { APropertyDecl decl = data.StructMethodPropertyLinks[node]; data.LvalueTypes[node] = decl.GetType(); CheckPropertyAccessibility(decl, node.Parent() is AAssignmentExp, node.GetName()); if (Util.IsStaticContext(node) && decl.GetStatic() == null) { errors.Add(new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText101"), false, new ErrorCollection.Error(decl.GetName(), LocRM.GetString("ErrorText62")))); } } //If the lvalue is a static variable, it's okay if (data.StructMethodFieldLinks[node].GetStatic() == null && Util.GetAncestor<AMethodDecl>(node) == null && Util.GetAncestor<APropertyDecl>(node) == null) { errors.Add(new ErrorCollection.Error(node.GetName(), currentSourceFile, LocRM.GetString("ErrorText102"))); } }
ArrayList New339() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList6 = (ArrayList) Pop(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TLBracket tlbracketNode2 = (TLBracket)nodeArrayList4[0]; TIdentifier tidentifierNode5 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode4 = new AStructFieldLvalue ( tidentifierNode5 ); ALvalueExp pexpNode3 = new ALvalueExp ( plvalueNode4 ); PExp pexpNode6 = (PExp)nodeArrayList5[0]; AArrayLvalue plvalueNode1 = new AArrayLvalue ( tlbracketNode2, pexpNode3, pexpNode6 ); nodeList.Add(plvalueNode1); return nodeList; }
public override void OutAStructFieldLvalue(AStructFieldLvalue node) { if (!data.StructMethodFieldLinks.ContainsKey(node) && !data.StructMethodPropertyLinks.ContainsKey(node)) { AStructDecl str = Util.GetAncestor<AStructDecl>(node); AConstructorDecl constructor = Util.GetAncestor<AConstructorDecl>(node); if (str.GetClassToken() != null || constructor != null || Util.HasAncestor<ADeconstructorDecl>(node)) { errors.Add(new ErrorCollection.Error(node.GetName(), currentSourceFile, LocRM.GetString("ErrorText171"))); } if (str != null) { foreach (AALocalDecl localDecl in data.StructFields[str]) { if (localDecl.GetName().Text == node.GetName().Text) { data.StructMethodFieldLinks.Add(node, localDecl); return; } } foreach (APropertyDecl property in data.StructProperties[str]) { if (property.GetName().Text == node.GetName().Text) { data.StructMethodPropertyLinks.Add(node, property); return; } } } errors.Add( new ErrorCollection.Error(node.GetName(), currentSourceFile, node.GetName().Text + LocRM.GetString("ErrorText172"), false), true); } //We can be sure this is linked. If in an array index, it must be constant. if (foldIntegerConstants) { if (data.StructMethodPropertyLinks.ContainsKey(node)) { errors.Add( new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText61"), false, new ErrorCollection.Error( data.StructMethodPropertyLinks[node].GetName(), LocRM.GetString("ErrorText62"))), true); throw new ParserException(node.GetName(), "TypeLinking.OutAStructFieldLvalue"); } AALocalDecl field = data.StructMethodFieldLinks[node]; if (!(field.GetType() is ANamedType && ((ANamedType)field.GetType()).IsPrimitive("int"))) { errors.Add( new ErrorCollection.Error(node.GetName(), "Dimensions of array types must be integer expressions.", false, new ErrorCollection.Error(field.GetName(), "Matching field")), true); throw new ParserException(node.GetName(), "TypeLinking.OutAStructFieldLvalue"); } if (field.GetConst() == null) { foldingFailed = true; if (!isInANewExp) { errors.Add( new ErrorCollection.Error(node.GetName(), currentSourceFile, LocRM.GetString("ErrorText61"), false, new ErrorCollection.Error(field.GetName(), LocRM.GetString("ErrorText60"))), true); throw new ParserException(node.GetName(), "TypeLinking.OutAFieldLvalue"); } } if (field.GetInit() == null)//An error will be given earlier - constant fields must have an initializer { throw new ParserException(node.GetName(), "TypeLinking.OutAFieldLvalue"); } field.GetInit().Apply(this); } //base.CaseAStructFieldLvalue(node); }
ArrayList New537() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList6 = (ArrayList) Pop(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TypedList listNode3 = new TypedList(); TypedList listNode7 = new TypedList(); TypedList listNode9 = new TypedList(); TypedList listNode11 = new TypedList(); TConst tconstNode2 = (TConst)nodeArrayList1[0]; TIdentifier tidentifierNode5 = (TIdentifier)nodeArrayList4[0]; AStructFieldLvalue plvalueNode4 = new AStructFieldLvalue ( tidentifierNode5 ); TypedList listNode8 = (TypedList)nodeArrayList5[0]; if ( listNode8 != null ) { listNode9.AddAll(listNode8); } TypedList listNode10 = (TypedList)nodeArrayList6[0]; if ( listNode10 != null ) { listNode11.AddAll(listNode10); } AShadySAssignmentExp pexpNode1 = new AShadySAssignmentExp ( tconstNode2, listNode3, plvalueNode4, null, listNode7, listNode9, listNode11 ); nodeList.Add(pexpNode1); return nodeList; }
public virtual void OutAStructFieldLvalue(AStructFieldLvalue node) { DefaultOut(node); }
ArrayList New472() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TIdentifier tidentifierNode3 = (TIdentifier)nodeArrayList4[0]; AStructFieldLvalue plvalueNode2 = new AStructFieldLvalue ( tidentifierNode3 ); TMinusMinus tminusminusNode5 = (TMinusMinus)nodeArrayList1[0]; APreDecIncDecOp pincdecopNode4 = new APreDecIncDecOp ( tminusminusNode5 ); AIncDecExp pexpNode1 = new AIncDecExp ( plvalueNode2, pincdecopNode4 ); nodeList.Add(pexpNode1); return nodeList; }
ArrayList New511() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TAssign tassignNode2 = (TAssign)nodeArrayList4[0]; TIdentifier tidentifierNode4 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode3 = new AStructFieldLvalue ( tidentifierNode4 ); PExp pexpNode5 = (PExp)nodeArrayList5[0]; AAssignmentExp pexpNode1 = new AAssignmentExp ( tassignNode2, plvalueNode3, pexpNode5 ); nodeList.Add(pexpNode1); return nodeList; }
ArrayList New437() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TIdentifier tidentifierNode3 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode2 = new AStructFieldLvalue ( tidentifierNode3 ); TPlusPlus tplusplusNode5 = (TPlusPlus)nodeArrayList4[0]; APostIncIncDecOp pincdecopNode4 = new APostIncIncDecOp ( tplusplusNode5 ); AIncDecExp pexpNode1 = new AIncDecExp ( plvalueNode2, pincdecopNode4 ); nodeList.Add(pexpNode1); return nodeList; }
ArrayList New425() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TIdentifier tidentifierNode3 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode2 = new AStructFieldLvalue ( tidentifierNode3 ); ALvalueExp pexpNode1 = new ALvalueExp ( plvalueNode2 ); nodeList.Add(pexpNode1); return nodeList; }
ArrayList New387() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList8 = (ArrayList) Pop(); ArrayList nodeArrayList7 = (ArrayList) Pop(); ArrayList nodeArrayList6 = (ArrayList) Pop(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TypedList listNode9 = new TypedList(); TIdentifier tidentifierNode4 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode3 = new AStructFieldLvalue ( tidentifierNode4 ); ALvalueExp pexpNode2 = new ALvalueExp ( plvalueNode3 ); TArrow tarrowNode6 = (TArrow)nodeArrayList4[0]; AArrowDotType pdottypeNode5 = new AArrowDotType ( tarrowNode6 ); TIdentifier tidentifierNode7 = (TIdentifier)nodeArrayList5[0]; TypedList listNode8 = (TypedList)nodeArrayList7[0]; if ( listNode8 != null ) { listNode9.AddAll(listNode8); } ANonstaticInvokeExp pexpNode1 = new ANonstaticInvokeExp ( pexpNode2, pdottypeNode5, tidentifierNode7, listNode9 ); nodeList.Add(pexpNode1); return nodeList; }
public override void CaseAStructFieldLvalue(AStructFieldLvalue node) { InAStructFieldLvalue(node); if (node.GetName() != null) { node.GetName().Apply(this); } OutAStructFieldLvalue(node); }
ArrayList New538() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList9 = (ArrayList) Pop(); ArrayList nodeArrayList8 = (ArrayList) Pop(); ArrayList nodeArrayList7 = (ArrayList) Pop(); ArrayList nodeArrayList6 = (ArrayList) Pop(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TypedList listNode3 = new TypedList(); TypedList listNode8 = new TypedList(); TypedList listNode10 = new TypedList(); TypedList listNode12 = new TypedList(); TConst tconstNode2 = (TConst)nodeArrayList1[0]; TIdentifier tidentifierNode5 = (TIdentifier)nodeArrayList4[0]; AStructFieldLvalue plvalueNode4 = new AStructFieldLvalue ( tidentifierNode5 ); TLt tltNode6 = (TLt)nodeArrayList5[0]; TypedList listNode7 = (TypedList)nodeArrayList6[0]; if ( listNode7 != null ) { listNode8.AddAll(listNode7); } TypedList listNode9 = (TypedList)nodeArrayList8[0]; if ( listNode9 != null ) { listNode10.AddAll(listNode9); } TypedList listNode11 = (TypedList)nodeArrayList9[0]; if ( listNode11 != null ) { listNode12.AddAll(listNode11); } AShadySAssignmentExp pexpNode1 = new AShadySAssignmentExp ( tconstNode2, listNode3, plvalueNode4, tltNode6, listNode8, listNode10, listNode12 ); nodeList.Add(pexpNode1); return nodeList; }
public virtual void InAStructFieldLvalue(AStructFieldLvalue node) { DefaultIn(node); }
ArrayList New586() { ArrayList nodeList = new ArrayList(); ArrayList nodeArrayList5 = (ArrayList) Pop(); ArrayList nodeArrayList4 = (ArrayList) Pop(); ArrayList nodeArrayList3 = (ArrayList) Pop(); ArrayList nodeArrayList2 = (ArrayList) Pop(); ArrayList nodeArrayList1 = (ArrayList) Pop(); TIdentifier tidentifierNode4 = (TIdentifier)nodeArrayList3[0]; AStructFieldLvalue plvalueNode3 = new AStructFieldLvalue ( tidentifierNode4 ); ALvalueExp pexpNode2 = new ALvalueExp ( plvalueNode3 ); TArrow tarrowNode6 = (TArrow)nodeArrayList4[0]; AArrowDotType pdottypeNode5 = new AArrowDotType ( tarrowNode6 ); TIdentifier tidentifierNode7 = (TIdentifier)nodeArrayList5[0]; AStructLvalue plvalueNode1 = new AStructLvalue ( pexpNode2, pdottypeNode5, tidentifierNode7 ); nodeList.Add(plvalueNode1); return nodeList; }
public override void OutAStructFieldLvalue(AStructFieldLvalue node) { if (folding) { if (data.StructMethodPropertyLinks.ContainsKey(node)) { errors.Add( new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText61"), false, new ErrorCollection.Error( data.StructMethodPropertyLinks[node].GetName(), LocRM.GetString("ErrorText62"))), true); throw new ParserException(node.GetName(), "TypeLinking.OutAStructFieldLvalue"); } AALocalDecl field = data.StructMethodFieldLinks[node]; if (!(field.GetType() is ANamedType && ((ANamedType)field.GetType()).IsPrimitive("int"))) { errors.Add( new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText59"), false, new ErrorCollection.Error(field.GetName(), LocRM.GetString("ErrorText60"))), true); throw new ParserException(node.GetName(), "TypeLinking.OutAStructFieldLvalue"); } if (field.GetConst() == null) { if (!isANewExp) { errors.Add( new ErrorCollection.Error(node.GetName(), LocRM.GetString("ErrorText62"), false, new ErrorCollection.Error(field.GetName(), LocRM.GetString("ErrorText60"))), true); throw new ParserException(node.GetName(), "TypeLinking.OutAFieldLvalue"); } } if (field.GetInit() == null)//An error will be given earlier - constant fields must have an initializer { throw new ParserException(node.GetName(), "TypeLinking.OutAFieldLvalue"); } field.GetInit().Apply(this); } }
public override void CaseAStructFieldLvalue(AStructFieldLvalue node) { //replace strField1 //with <structFormal>.strField1 AStructDecl str = finalTrans.data.StructTypeLinks[(ANamedType)structFormal.GetType()]; ALocalLvalue parameterRefference = new ALocalLvalue(new TIdentifier("tempName")); finalTrans.data.LocalLinks[parameterRefference] = structFormal; finalTrans.data.LvalueTypes[parameterRefference] = structFormal.GetType(); ALvalueExp exp = new ALvalueExp(parameterRefference); finalTrans.data.ExpTypes[exp] = structFormal.GetType(); AStructLvalue replacer = new AStructLvalue(exp, new ADotDotType(new TDot(".")), node.GetName()); foreach (AALocalDecl structField in finalTrans.data.StructFields[str]) { if (structField.GetName().Text == replacer.GetName().Text) { finalTrans.data.StructFieldLinks[replacer] = structField; finalTrans.data.LvalueTypes[replacer] = structField.GetType(); break; } } foreach (APropertyDecl property in finalTrans.data.StructProperties[str]) { if (property.GetName().Text == replacer.GetName().Text) { finalTrans.data.StructPropertyLinks[replacer] = property; finalTrans.data.LvalueTypes[replacer] = property.GetType(); break; } } node.ReplaceBy(replacer); }