-- SaffronCG2Impl.mesa -- Copyright Ó 1987 by Xerox Corporation. All rights reserved. -- Generated by hederman.pa at August 17, 1987 3:57:16 pm PDT -- using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT DIRECTORY SaffronAG2Def, SaffronAG8Def, SaffronAG1Def, SaffronAG7Def, SaffronAG3Def, SaffronAG6Def, ThreeC4Support, SaffronCG2Def USING[], SaffronATDef; SaffronCG2Impl: CEDAR PROGRAM IMPORTS SaffronAG2Def, SaffronAG8Def, SaffronAG1Def, SaffronAG7Def, SaffronAG3Def, SaffronAG6Def EXPORTS SaffronCG2Def= BEGIN OPEN SaffronAG2Def, SaffronAG8Def, SaffronAG1Def, SaffronAG7Def, SaffronAG3Def, SaffronAG6Def, ThreeC4Support, SaffronATDef; SaffronCG2LinkProc: PUBLIC PROC[prodLinkArray: SeeProdLinkArray, tknLinkArray: TokenLinkArray] = BEGIN prodLinkArray[50] _ Seebounds; prodLinkArray[51] _ Seecheckedempty; prodLinkArray[52] _ Seecheckedchecked; prodLinkArray[53] _ Seecheckedtrusted; prodLinkArray[54] _ Seecheckedunchecked; prodLinkArray[55] _ Seedefaulta; prodLinkArray[56] _ Seedefaultempty; prodLinkArray[57] _ SeepositionP; prodLinkArray[58] _ Seeoptbitspresent; prodLinkArray[59] _ Seeoptbitsabsent; prodLinkArray[60] _ Seesumsum; prodLinkArray[61] _ Seesumproduct; prodLinkArray[62] _ Seeproductproduct; prodLinkArray[63] _ Seeproductfactor; prodLinkArray[64] _ Seemultoptimes; prodLinkArray[65] _ Seemultopdivide; prodLinkArray[66] _ Seemultopmod; prodLinkArray[67] _ Seefactorunarysum; prodLinkArray[68] _ Seefactorprimary; prodLinkArray[69] _ Seeaddopplus; prodLinkArray[70] _ Seeaddopminus; prodLinkArray[71] _ Seereadonlyyes; prodLinkArray[72] _ Seereadonlyno; prodLinkArray[73] _ Seecatchany; prodLinkArray[74] _ Seeintervalcc; prodLinkArray[75] _ Seeintervaloc; prodLinkArray[76] _ Seeintervalco; prodLinkArray[77] _ Seeintervaloo; prodLinkArray[78] _ Seeexpifthenelse; prodLinkArray[79] _ Seeexpselect; prodLinkArray[80] _ Seeexpassign; prodLinkArray[81] _ Seeexpmultiassign; prodLinkArray[82] _ Seeexperror; prodLinkArray[83] _ Seeexptransfer; prodLinkArray[84] _ Seeexpdisjunct; prodLinkArray[85] _ Seecaseexplistempty; prodLinkArray[86] _ Seecaseexplistb; prodLinkArray[87] _ Seecaseexplistc; prodLinkArray[88] _ SeecaseexplistPa; prodLinkArray[89] _ SeecaseexplistPb; prodLinkArray[90] _ Seecaseexpitem; END; Seebounds: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; explower: ExpNode; expupper: ExpNode; expupper _ NARROW[stack.first]; stack _ stack.rest; explower _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildBoundsProdNode[position, length, explower, expupper], stack]; RETURN [stack] END; Seecheckedempty: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildCheckedemptyProdNode[position, length], stack]; RETURN [stack] END; Seecheckedchecked: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildCheckedcheckedProdNode[position, length], stack]; RETURN [stack] END; Seecheckedtrusted: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildCheckedtrustedProdNode[position, length], stack]; RETURN [stack] END; Seecheckedunchecked: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildCheckeduncheckedProdNode[position, length], stack]; RETURN [stack] END; Seedefaulta: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; defaultopt: DefaultNode; defaultopt _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[defaultopt, stack]; RETURN [stack] END; Seedefaultempty: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildDefaultemptyProdNode[position, length], stack]; RETURN [stack] END; SeepositionP: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; exp: ExpNode; optbits: OptBitsNode; optbits _ NARROW[stack.first]; stack _ stack.rest; exp _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildPositionProdNode[position, length, exp, optbits], stack]; RETURN [stack] END; Seeoptbitspresent: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; bounds: BoundsNode; bounds _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildOptBitspresentProdNode[position, length, bounds], stack]; RETURN [stack] END; Seeoptbitsabsent: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildOptBitsabsentProdNode[position, length], stack]; RETURN [stack] END; Seesumsum: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; sum: ExpNode; addop: AddOpNode; product: ExpNode; product _ NARROW[stack.first]; stack _ stack.rest; addop _ NARROW[stack.first]; stack _ stack.rest; sum _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpsumProdNode[position, length, sum, addop, product], stack]; RETURN [stack] END; Seesumproduct: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; product: ExpNode; product _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[product, stack]; RETURN [stack] END; Seeproductproduct: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; product: ExpNode; multop: MultOpNode; factor: ExpNode; factor _ NARROW[stack.first]; stack _ stack.rest; multop _ NARROW[stack.first]; stack _ stack.rest; product _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpproductProdNode[position, length, product, multop, factor], stack]; RETURN [stack] END; Seeproductfactor: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; factor: ExpNode; factor _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[factor, stack]; RETURN [stack] END; Seemultoptimes: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildMultOptimesProdNode[position, length], stack]; RETURN [stack] END; Seemultopdivide: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildMultOpdivideProdNode[position, length], stack]; RETURN [stack] END; Seemultopmod: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildMultOpmodProdNode[position, length], stack]; RETURN [stack] END; Seefactorunarysum: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; addop: AddOpNode; primary: ExpNode; primary _ NARROW[stack.first]; stack _ stack.rest; addop _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpunarysumProdNode[position, length, addop, primary], stack]; RETURN [stack] END; Seefactorprimary: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; primary: ExpNode; primary _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[primary, stack]; RETURN [stack] END; Seeaddopplus: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildAddOpplusProdNode[position, length], stack]; RETURN [stack] END; Seeaddopminus: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildAddOpminusProdNode[position, length], stack]; RETURN [stack] END; Seereadonlyyes: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildReadOnlyyesProdNode[position, length], stack]; RETURN [stack] END; Seereadonlyno: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildReadOnlynoProdNode[position, length], stack]; RETURN [stack] END; Seecatchany: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; statement: StatementNode; statement _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildCatchAnypresentProdNode[position, length, statement], stack]; RETURN [stack] END; Seeintervalcc: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; bounds: BoundsNode; bounds _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildIntervalccProdNode[position, length, bounds], stack]; RETURN [stack] END; Seeintervaloc: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; bounds: BoundsNode; bounds _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildIntervalocProdNode[position, length, bounds], stack]; RETURN [stack] END; Seeintervalco: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; bounds: BoundsNode; bounds _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildIntervalcoProdNode[position, length, bounds], stack]; RETURN [stack] END; Seeintervaloo: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; bounds: BoundsNode; bounds _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildIntervalooProdNode[position, length, bounds], stack]; RETURN [stack] END; Seeexpifthenelse: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; expcond: ExpNode; expthenpart: ExpNode; expelsepart: ExpNode; expelsepart _ NARROW[stack.first]; stack _ stack.rest; expthenpart _ NARROW[stack.first]; stack _ stack.rest; expcond _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpifthenelseProdNode[position, length, expcond, expthenpart, expelsepart], stack]; RETURN [stack] END; Seeexpselect: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; casehead: SelectHeadNode; caseexplist: SelectExpListNode; exp: ExpNode; exp _ NARROW[stack.first]; stack _ stack.rest; caseexplist _ NARROW[stack.first]; stack _ stack.rest; casehead _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpselectProdNode[position, length, casehead, caseexplist, exp], stack]; RETURN [stack] END; Seeexpassign: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; lhs: ExpNode; exp: ExpNode; exp _ NARROW[stack.first]; stack _ stack.rest; lhs _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpassignProdNode[position, length, lhs, exp], stack]; RETURN [stack] END; Seeexpmultiassign: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; explist: ExpListNode; exp: ExpNode; exp _ NARROW[stack.first]; stack _ stack.rest; explist _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExpmultiassignProdNode[position, length, explist, exp], stack]; RETURN [stack] END; Seeexperror: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildExperrorProdNode[position, length], stack]; RETURN [stack] END; Seeexptransfer: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; transferop: TransferOpNode; lhs: ExpNode; lhs _ NARROW[stack.first]; stack _ stack.rest; transferop _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildExptransferProdNode[position, length, transferop, lhs], stack]; RETURN [stack] END; Seeexpdisjunct: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; disjunct: ExpNode; disjunct _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[disjunct, stack]; RETURN [stack] END; Seecaseexplistempty: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; stack _ CONS[BuildSelectExpListemptyProdNode[position, length], stack]; RETURN [stack] END; Seecaseexplistb: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; caseexplistP: SelectExpListNode; caseexplistP _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[caseexplistP, stack]; RETURN [stack] END; Seecaseexplistc: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; caseexplistP: SelectExpListNode; caseexplistP _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[caseexplistP, stack]; RETURN [stack] END; SeecaseexplistPa: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; caseexpitem: SelectExpItemNode; caseexpitem _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildSelectExpListmoreProdNode[position, length, BuildSelectExpListemptyProdNode[caseexpitem.position, caseexpitem.position - caseexpitem.length], caseexpitem], stack]; RETURN [stack] END; SeecaseexplistPb: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; caseexplistP: SelectExpListNode; caseexpitem: SelectExpItemNode; caseexpitem _ NARROW[stack.first]; stack _ stack.rest; caseexplistP _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildSelectExpListmoreProdNode[position, length, caseexplistP, caseexpitem], stack]; RETURN [stack] END; Seecaseexpitem: PROC [nodes: LIST OF REF ANY, position: INT, length: INT] RETURNS [LIST OF REF ANY] = BEGIN stack: LIST OF REF ANY _ nodes; caselabel: SelectLabelNode; exp: ExpNode; exp _ NARROW[stack.first]; stack _ stack.rest; caselabel _ NARROW[stack.first]; stack _ stack.rest; stack _ CONS[BuildSelectExpItemProdNode[position, length, caselabel, exp], stack]; RETURN [stack] END; END..