private void DeclareAndPopulateGlobalSourceUnit(CompilationUnit unit) { SourceUnit globalUnit = new SourceUnit(unit, "<global>"); TypeDefinitionStatement globalType = new TypeDefinitionStatement( AccessLevel.Public, "RookGlobal" ); globalUnit.Statements.Add( globalType ); MethodDefinitionStatement entryPoint = new MethodDefinitionStatement( AccessLevel.Public ); entryPoint.Name = "self.main"; foreach(SourceUnit sunit in unit.SourceUnits) { foreach(IStatement stmt in sunit.Statements) { if (stmt.StatementType == StatementType.TypeDefinition) continue; stmt.Parent.RemoveChild( stmt ); if (stmt.StatementType == StatementType.MethodDef) { (stmt as MethodDefinitionStatement).IsStatic = true; } if (stmt.StatementType == StatementType.MultipleVarDeclaration) { // TODO: Ensure no instance vars defined } if (stmt.StatementType == StatementType.ExpressionStmt || stmt.StatementType == StatementType.MultipleVarDeclaration ) { entryPoint.Statements.Add( stmt ); } else { globalType.Statements.Add( stmt ); } } } if (entryPoint.Statements.Count != 0) { globalType.Statements.Add( entryPoint ); // Might be necessary // unit.EntryPointMethod = entryPoint; } unit.SourceUnits.Add(globalUnit); }
public void AddMethod(MethodDefinitionStatement methodDef) { if (methodDef == null) throw new ArgumentNullException("methodDef"); String name = methodDef.Name; IList list = null; if (!methodMap.Contains(name)) { list = new ArrayList(); methodMap[name] = list; } else { list = (IList) methodMap[name]; } list.Add(methodDef); }
public void AddMethod(MethodDefinitionStatement methodDef) { if (methodDef == null) { throw new ArgumentNullException("methodDef"); } String name = methodDef.Name; IList list = null; if (!methodMap.Contains(name)) { list = new ArrayList(); methodMap[name] = list; } else { list = (IList)methodMap[name]; } list.Add(methodDef); }
public override bool VisitMethodDefinitionStatement(MethodDefinitionStatement methodDef) { methodDef.DefiningSymbolTable.Parent.AddMethod( methodDef ); return base.VisitMethodDefinitionStatement(methodDef); }
public override bool VisitEnter(MethodDefinitionStatement methodDef) { return false; }
public virtual bool VisitLeave(MethodDefinitionStatement methodDef) { return true; }
public virtual bool VisitMethodDefinitionStatement(MethodDefinitionStatement methodDef) { if (VisitEnter(methodDef)) { VisitNodes(methodDef.Arguments); VisitNodes(methodDef.Statements); return VisitLeave(methodDef); } return false; }
public override bool VisitMethodDefinitionStatement(MethodDefinitionStatement methodDef) { if (!identifierService.IsValidMethodName(methodDef.Name)) { errorReport.Error( "TODOFILENAME", methodDef.Position, "'{0}' is an invalid method name.", methodDef.Name ); return false; } TransientType owner = methodDef.SymbolTable.CurrentTypeDefinition; System.Diagnostics.Debug.Assert( owner != null ); try { owner.AddMethod(methodDef); } catch(Exception ex) { errorReport.Error( "TODOFILENAME", methodDef.Position, ex.Message, methodDef.Name ); return false; } return base.VisitMethodDefinitionStatement(methodDef); }
public override bool VisitLeave(MethodDefinitionStatement methodDef) { nowQueue = false; return base.VisitLeave(methodDef); }
public override bool VisitEnter(MethodDefinitionStatement methodDef) { nowQueue = true; return base.VisitEnter(methodDef); }
protected void modifier( MethodDefinitionStatement mdstmt ) //throws RecognitionException, TokenStreamException { switch ( LA(1) ) { case LITERAL_override: { match(LITERAL_override); if (0==inputState.guessing) { mdstmt.IsOverride = true; } break; } case LITERAL_new: { match(LITERAL_new); if (0==inputState.guessing) { mdstmt.IsNewSlot = true; } break; } case LITERAL_abstract: { match(LITERAL_abstract); if (0==inputState.guessing) { mdstmt.IsAbstract = true; } break; } case LITERAL_final: { match(LITERAL_final); if (0==inputState.guessing) { mdstmt.IsFinal = true; } break; } default: if (((LA(1)==IDENT) && (tokenSet_11_.member(LA(2))))&&( withinOverride )) { if (0==inputState.guessing) { mdstmt.IsOverride = true; } } else if (((LA(1)==IDENT) && (tokenSet_11_.member(LA(2))))&&( withinNew )) { if (0==inputState.guessing) { mdstmt.IsNewSlot = true; } } else if (((LA(1)==IDENT) && (tokenSet_11_.member(LA(2))))&&( withinAbstract )) { if (0==inputState.guessing) { mdstmt.IsAbstract = true; } } else if (((LA(1)==IDENT) && (tokenSet_11_.member(LA(2))))&&( withinFinal )) { if (0==inputState.guessing) { mdstmt.IsFinal = true; } } else if (((LA(1)==IDENT) && (tokenSet_11_.member(LA(2))))&&( withinStatic )) { if (0==inputState.guessing) { mdstmt.IsStatic = true; } } else if ((LA(1)==IDENT) && (tokenSet_11_.member(LA(2)))) { } else { throw new NoViableAltException(LT(1), getFilename()); } break; } }
public MethodDefinitionStatement method_def_statement() //throws RecognitionException, TokenStreamException { MethodDefinitionStatement mdstmt; mdstmt = new MethodDefinitionStatement( currentAccessLevel ); String qn = null; TypeReference retType = null; match(DEF); modifier(mdstmt); qn=qualified_name(); if (0==inputState.guessing) { if (qn.StartsWith("self.")) { mdstmt.IsStatic = true; mdstmt.Name = qn.Substring( "self.".Length ); } else { mdstmt.Name = qn; } PushScope(mdstmt, ScopeType.Method); } { switch ( LA(1) ) { case LPAREN: { match(LPAREN); { switch ( LA(1) ) { case IDENT: case STATICIDENT: case INSTIDENT: case STAR: case BAND: { methodParams(mdstmt); break; } case RPAREN: { break; } default: { throw new NoViableAltException(LT(1), getFilename()); } } } match(RPAREN); { switch ( LA(1) ) { case COLON: { retType=type(); break; } case EOF: case STATEMENT_END: case SEMI: { break; } default: { throw new NoViableAltException(LT(1), getFilename()); } } } break; } case EOF: case STATEMENT_END: case SEMI: { break; } default: { throw new NoViableAltException(LT(1), getFilename()); } } } statement_term(); if (0==inputState.guessing) { mdstmt.ReturnType = retType; } suite(mdstmt.Statements); match(END); if (0==inputState.guessing) { PopScope(); } return mdstmt; }
public void methodParams( MethodDefinitionStatement mdstmt ) //throws RecognitionException, TokenStreamException { ParameterVarIdentifier param = null; param=methodParam(); if (0==inputState.guessing) { mdstmt.AddFormalParameter( param ); } { // ( ... )* for (;;) { if ((LA(1)==COMMA)) { match(COMMA); param=methodParam(); if (0==inputState.guessing) { mdstmt.AddFormalParameter( param ); } } else { goto _loop63_breakloop; } } _loop63_breakloop: ; } // ( ... )* }
public override bool VisitMethodDefinitionStatement(MethodDefinitionStatement methodDef) { nodeStack.Push( CurrentNode.Nodes.Add("Method " + methodDef.Name + "[ret " + methodDef.ReturnType + "]" )); CurrentNode.Tag = methodDef; CurrentNode.EnsureVisible(); base.VisitMethodDefinitionStatement(methodDef); nodeStack.Pop(); return true; }