(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) (* Last modified on Fri Sep 9 09:51:49 PDT 1994 by heydon *) (* modified on Sat Aug 22 23:32:17 PDT 1992 by myers *) <* PRAGMA LL *> MODULE JunoBuild; IMPORT JunoAST, JunoScope, JunoCompile, JunoCompileErr, JunoChkBNF; IMPORT Atom; VAR (* CONST *) ccmd_proc := Atom.FromText("Current Command"); (* The name of this procedure is printed in run-time error messages. Since it contains a space character, there is no possibility that the user could declare a procedure with the same name. *) PROCEDURE Cmd(cmd: JunoAST.Cmd; scp: JunoScope.T): CARDINAL RAISES {JunoCompileErr.Error} = VAR proc_head := NEW(JunoAST.ProcHeader, name := ccmd_proc, outs := JunoAST.EmptyIdList, inouts := JunoAST.EmptyIdList, ins := JunoAST.EmptyIdList, bp := JunoAST.End); proc_decl := NEW(JunoAST.ProcDecl, bp := JunoAST.End, header := proc_head, body := cmd); proc := JunoScope.NewProc(proc_decl, mod := NIL); BEGIN EVAL JunoCompile.ProcDecl(ccmd_proc, proc, scp); RETURN proc.index END Cmd; VAR if := NEW(JunoAST.If, bp := JunoAST.End); seq := NEW(JunoAST.Seq, bp := JunoAST.End, c1 := if, c2 := JunoAST.HaltVal); PROCEDURE CurrCmd( cmd: JunoAST.Cmd; scp: JunoScope.T; checkTotal := FALSE): CARDINAL RAISES {JunoCompileErr.Error} = BEGIN if.body := cmd; IF checkTotal THEN JunoChkBNF.TotalCmd(if) END; RETURN Cmd(seq, scp) END CurrCmd; BEGIN END JunoBuild.