public void BeginClass() { exe.BeginClass(io.GetClassname(), TypeAttributes.Public); if (io.getGenList()) { io.Out(".assembly '" + io.GetClassname() + "'\r\n"); io.Out("{\r\n"); io.Out("\t.ver 0:0:0:0\r\n"); io.Out("}\r\n\r\n"); io.Out(".class " + io.GetClassname() + "{\r\n"); } }
void proc_decl(VarList curtree, String label) { Var procvar = new Var(); procvar.setName(label); procvar.setType(Var.VAR_BLOCK); procvar.setTypeId(Tok.TOK_VOID); if (label == null) { io.Abort("PL0116: PROC declaration needs LABEL"); } io.Message(tok + "[PROC]"); tok.scan(); procvar.nodes = new VarList(); if (tok.getId() == Tok.TOK_1_LBRACKET) { param(procvar.nodes); procvar.setNodesType(Var.VAR_PARAM); } switch (tok.getId()) { case Tok.TOK_RETURNS: io.Message(tok + "[RETURNS]"); tok.scan(); if (tok.getId() != Tok.TOK_1_LBRACKET) { io.Abort("PL0104: ')' expected."); } io.Message(tok + "[(]"); tok.scan(); switch (tok.getId()) { case Tok.TOK_FIXED: case Tok.TOK_FLOAT: case Tok.TOK_COMPLEX: case Tok.TOK_REAL: case Tok.TOK_BINARY: case Tok.TOK_DECIMAL: io.Message(tok + "[Type]"); procvar.setTypeId(tok.getId()); break; default: io.Abort("PL0115: type specifier expected"); break; } tok.scan(); if (tok.getId() != Tok.TOK_1_RBRACKET) { io.Abort("PL0114: ')' expected"); } io.Message(tok + "[)]"); tok.scan(); break; case Tok.TOK_RECURSIVE: io.Message(tok + "[RECURSIVE]"); if (label.ToUpper() == "MAIN") { io.Abort("PL0146: MAIN can not be RECURSIVE"); } tok.scan(); break; } null_stmt(); emit.FuncBegin(procvar); declarations(procvar.nodes); VarList prms = procvar.getParams(); if (prms != null) { for (int i = 0; i < prms.Length(); i++) { if (prms.FindByIndex(i).getTypeId() == 0) { io.Abort("PL0117: undeclared parameter"); } } } if (procvar.getLocals() != null) { emit.LocalVars(procvar.getLocals()); } try { curtree.add(procvar); } catch { io.Abort("PL0120: invalid procedure declaration"); } do { stmt(procvar.nodes, label, null); } while (tok.getId() != Tok.TOK_END); if (tok.getId() != Tok.TOK_END) { io.Abort("PL0118: END expected"); } io.Message(tok + "[END]"); tok.scan(); if (tok.getValue() != label) { io.Abort("PL0119: unclosed PROC"); } io.Message(tok + "[Label]"); tok.scan(); emit.Ret(); emit.FuncEnd(); if (io.getGenList()) { emit.LIST(); } emit.IL(); emit.Finish(); }