public static void rExist() { SAR top_sar = SAS.Pop(); SAR LHS = SAS.Peek(); bool this_ = false; string scope = top_sar.scope; if (SAS.Count > 0) { if (SAS.Peek().value != "this") { top_sar.classType = SAS.Pop().dataType; } else { this_ = true; string[] temp = top_sar.scope.Split('.'); top_sar.classType = temp[temp.Length - 1]; SAS.Pop(); } } else { SemanticError(top_sar); } Symbol symbol; if ((symbol = SymbolTable.rExists(top_sar)) == null) { SemanticError(top_sar); } if (symbol.data != null) //not a class { if ((symbol.data[symbol.data.Length - 1] == "accessMod:public") || this_) //member is public { top_sar.dataType = symbol.data[0].Split(':')[1]; top_sar.dataType.Trim(); top_sar.sarType = SAR.SARtype.Ref; top_sar.symid = "t" + uniqueCounter++; top_sar.scope = "t"; string[] data = { "returnType:" + top_sar.dataType, "accessMod:private" }; if (symbol.kind == "method") { ICode.FRAME(symbol.symid, LHS.symid); if (symbol.parameters != null && symbol.parameters != "") { for (int i = 0; i < top_sar.argList.Count; ++i) { ICode.PUSH(top_sar.argList[i]); } } ICode.CALL(symbol.symid); ICode.PEEK(top_sar.symid); } else { top_sar.symid += "r"; if (LHS.value == "this") { LHS.symid = "this"; } ICode.REF(LHS.symid, symbol.symid, top_sar.symid); } Symbol temp = new Symbol(top_sar.scope, top_sar.symid, "t" + top_sar.value, "tvar", data); SymbolTable.Add(temp); SAS.Push(top_sar); return; } else { SemanticPrivateError(top_sar); } } /*if (SymbolTable.ContainsValue(scope + "." + top_sar.value)) * { * Symbol symbol = SymbolTable.GetValue(SymbolTable.GetSymid(scope + "." + top_sar.value)); * if (symbol.data != null) //not a class * { * if (symbol.data[symbol.data.Length - 1]=="accessMod:public") //member is public * { * top_sar.dataType = symbol.data[0].Split(':')[1]; * top_sar.dataType.Trim(); * if (symbol.data.Length == 3) * { * top_sar.paramType = symbol.data[1]; * } * top_sar.sarType = SAR.SARtype.Ref; * SAS.Push(top_sar); * return; * } * } * }*/ SemanticError(top_sar); }