-- SaffronScopeImpl.mesa
 -- Copyright س 1987 by Xerox Corporation.  All rights reserved.
 -- Generated by Rauen.pa at September 1, 1988 2:49:41 pm PDT
 --  using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT

DIRECTORY
	SaffronAG7aDef,
	SaffronAG7bDef,
	SaffronAG9Def,
	SaffronAG5Def,
	SaffronAG4Def,
	Rope,
	ThreeC4Support,
	SaffronBaseDef,
	SaffronATDef;

SaffronScopeImpl: CEDAR PROGRAM IMPORTS ThreeC4Support, SaffronBaseDef, SaffronATDef EXPORTS SaffronAG7aDef, SaffronAG7bDef, SaffronAG9Def, SaffronAG5Def, SaffronAG4Def= 
BEGIN
OPEN SaffronAG7aDef, SaffronAG7bDef, SaffronAG9Def, SaffronAG5Def, SaffronAG4Def, Rope, ThreeC4Support, SaffronBaseDef, SaffronATDef;
OptDecListabsentProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

OptDecListabsentProdUpdateLocalContext:	PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: LocalContextNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContext[localContext];
END
END;

OptDecListabsentProdAddDeclarationsToFieldList:	PUBLIC PROC[ref: REF ANY, fieldList: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp1 _ FakeDamageContext[localContext];
temp0 _ FakeDamageFieldList[fieldList];
END
END;

OptDecListpresentProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	OptDecListpresentProdData _ NARROW[tree.data];
temp0 _ treeData.DecList.procs.HangContextsFromContextTree[treeData.DecList, contextTree, rib, paintRecords, cs];
END
END;

OptDecListpresentProdUpdateLocalContext:	PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: LocalContextNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	OptDecListpresentProdData _ NARROW[tree.data];
temp0 _ treeData.DecList.procs.UpdateLocalContext[treeData.DecList, localContext, paintRecords, cs];
END
END;

OptDecListpresentProdAddDeclarationsToFieldList:	PUBLIC PROC[ref: REF ANY, fieldList: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	OptDecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	OptDecListpresentProdData _ NARROW[tree.data];
[temp0, temp1] _ treeData.DecList.procs.AddDeclarationsToFieldList[treeData.DecList, fieldList, localContext, cs];
END
END;

DecListmanyProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListmanyProdData _ NARROW[tree.data];
BEGIN
contextTree1:	ContextTreeNode;
contextTree1 _ treeData.DecListhead.procs.HangContextsFromContextTree[treeData.DecListhead, contextTree, rib, paintRecords, cs];
temp0 _ treeData.DecListtail.procs.HangContextsFromContextTree[treeData.DecListtail, contextTree1, rib, paintRecords, cs];
END;
END
END;

DecListmanyProdAddDeclarationsToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListmanyProdData _ NARROW[tree.data];
BEGIN
fl2:	FieldListNode;
lc2:	LocalContextNode;
fl1:	FieldListNode;
lc1:	LocalContextNode;
[fl1, lc1] _ treeData.DecListhead.procs.AddDeclarationsToFieldList[treeData.DecListhead, fl, localContext, cs];
[fl2, lc2] _ treeData.DecListtail.procs.AddDeclarationsToFieldList[treeData.DecListtail, fl1, lc1, cs];
temp1 _ lc2;
temp0 _ fl2;
END;
END
END;

DecListmanyProdUpdateLocalContext:	PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: LocalContextNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListmanyProdData _ NARROW[tree.data];
BEGIN
lc1:	LocalContextNode;
lc1 _ FakeDamageContext[localContext];
temp0 _ lc1;
END;
END
END;

DecListoneProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListoneProdData _ NARROW[tree.data];
temp0 _ treeData.Declaration.procs.HangContextsFromContextTree[treeData.Declaration, contextTree, rib, paintRecords, cs];
END
END;

DecListoneProdAddDeclarationsToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListoneProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
lc1:	LocalContextNode;
[fl1, lc1] _ treeData.Declaration.procs.AddDeclarationToFieldList[treeData.Declaration, fl, localContext, cs];
temp1 _ lc1;
temp0 _ fl1;
END;
END
END;

DecListoneProdUpdateLocalContext:	PUBLIC PROC[ref: REF ANY, localContext: LocalContextNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: LocalContextNode] =
BEGIN
tree:	DecListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DecListoneProdData _ NARROW[tree.data];
BEGIN
lc1:	LocalContextNode;
lc1 _ FakeDamageContext[localContext];
temp0 _ lc1;
END;
END
END;

DeclarationopaquetypeProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationopaquetypeProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

DeclarationopaquetypeProdAddDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationopaquetypeProdData _ NARROW[tree.data];
BEGIN
idAccess:	AccessValNode;
typeAccess:	AccessValNode;
typeExp:	TypeExpPTreeNode;
default:	DefaultExpNode;
lc2:	LocalContextNode;
tgn:	TypeGraphNodeNode;
lc1:	LocalContextNode;
paint:	PaintNode;
sizeExp:	ValueNode;
sizeExp _ treeData.OptSize.procs.GetExpVal[treeData.OptSize];
[lc1, paint] _ GetUniquePaint[localContext];
[lc2, tgn] _ CreateOpaqueTGN[lc1, paint, sizeExp];
default _ NullDefaultVal[];
typeExp _ BogusTypeExpPTree[];
typeAccess _ NullAccessVal[];
idAccess _ treeData.Access.procs.GetAccessVal[treeData.Access, GetDefaultAccess[cs]];
[temp0, temp1] _ treeData.IdentList.procs.AddTypeDeclarationToFieldList[treeData.IdentList, fl, lc2, cs, idAccess, typeAccess, tgn, typeExp, default];
END;
END
END;

DeclarationtypeProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationtypeProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

DeclarationtypeProdAddDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationtypeProdData _ NARROW[tree.data];
BEGIN
idAccess:	AccessValNode;
typeAccess:	AccessValNode;
typeExp:	TypeExpPTreeNode;
default:	DefaultExpNode;
lc2:	LocalContextNode;
tgn:	TypeGraphNodeNode;
paintRecords:	BOOLEAN;
lc1:	LocalContextNode;
paint:	PaintNode;
[lc1, paint] _ GetUniquePaint[localContext];
paintRecords _ True[];
[lc2, tgn] _ treeData.TypeExp.procs.MakeType[treeData.TypeExp, lc1, paintRecords, cs];
default _ treeData.Default.procs.GetDefaultExpVal[treeData.Default];
typeExp _ TypeExpPTreeVal[treeData.TypeExp];
typeAccess _ treeData.Accesstype.procs.GetAccessVal[treeData.Accesstype, GetDefaultAccess[cs]];
idAccess _ treeData.Accessid.procs.GetAccessVal[treeData.Accessid, GetDefaultAccess[cs]];
[temp0, temp1] _ treeData.IdentList.procs.AddTypeDeclarationToFieldList[treeData.IdentList, fl, lc2, cs, idAccess, typeAccess, tgn, typeExp, default];
END;
END
END;

DeclarationvalueProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationvalueProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

DeclarationvalueProdAddDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, localContext: LocalContextNode, cs: CompilerStateNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	DeclarationNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	DeclarationvalueProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
parseTree:	DeclarationPTreeNode;
init:	InitializationPTreeNode;
access:	AccessValNode;
lc1:	LocalContextNode;
tgn:	TypeGraphNodeNode;
paintRecords:	BOOLEAN;
paintRecords _ True[];
[lc1, tgn] _ treeData.TypeExp.procs.MakeType[treeData.TypeExp, localContext, paintRecords, cs];
access _ treeData.Access.procs.GetAccessVal[treeData.Access, GetDefaultAccess[cs]];
init _ InitializationPTreeVal[treeData.Initialization];
parseTree _ DeclarationPTreeVal[tree];
fl1 _ treeData.IdentList.procs.AddValueDeclarationToFieldList[treeData.IdentList, fl, cs, parseTree, access, tgn, init];
temp1 _ lc1;
temp0 _ fl1;
END;
END
END;

IdentListmanyProdAddTypeDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, lc: LocalContextNode, cs: CompilerStateNode, idAccess: AccessValNode, typeAccess: AccessValNode, tgn: TypeGraphNodeNode, typeExp: TypeExpPTreeNode, default: DefaultExpNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	IdentListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentListmanyProdData _ NARROW[tree.data];
BEGIN
fl2:	FieldListNode;
lc2:	LocalContextNode;
fl1:	FieldListNode;
lc1:	LocalContextNode;
[fl1, lc1] _ treeData.IdentListhead.procs.AddTypeDeclarationToFieldList[treeData.IdentListhead, fl, lc, cs, idAccess, typeAccess, tgn, typeExp, default];
[fl2, lc2] _ treeData.IdentListtail.procs.AddTypeDeclarationToFieldList[treeData.IdentListtail, fl1, lc1, cs, idAccess, typeAccess, tgn, typeExp, default];
temp1 _ lc2;
temp0 _ fl2;
END;
END
END;

IdentListmanyProdAddValueDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, cs: CompilerStateNode, parseTree: DeclarationPTreeNode, access: AccessValNode, tgn: TypeGraphNodeNode, init: InitializationPTreeNode] RETURNS[temp0: FieldListNode] =
BEGIN
tree:	IdentListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentListmanyProdData _ NARROW[tree.data];
BEGIN
fl2:	FieldListNode;
fl1:	FieldListNode;
fl1 _ treeData.IdentListhead.procs.AddValueDeclarationToFieldList[treeData.IdentListhead, fl, cs, parseTree, access, tgn, init];
fl2 _ treeData.IdentListtail.procs.AddValueDeclarationToFieldList[treeData.IdentListtail, fl1, cs, parseTree, access, tgn, init];
temp0 _ fl2;
END;
END
END;

IdentListoneProdAddTypeDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, lc: LocalContextNode, cs: CompilerStateNode, idAccess: AccessValNode, typeAccess: AccessValNode, tgn: TypeGraphNodeNode, typeExp: TypeExpPTreeNode, default: DefaultExpNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	IdentListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentListoneProdData _ NARROW[tree.data];
[temp0, temp1] _ treeData.Ident.procs.AddTypeDeclarationToFieldList[treeData.Ident, fl, lc, cs, idAccess, typeAccess, tgn, typeExp, default];
END
END;

IdentListoneProdAddValueDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, cs: CompilerStateNode, access: DeclarationPTreeNode, parseTree: AccessValNode, tgn: TypeGraphNodeNode, init: InitializationPTreeNode] RETURNS[temp0: FieldListNode] =
BEGIN
tree:	IdentListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentListoneProdData _ NARROW[tree.data];
temp0 _ treeData.Ident.procs.AddValueDeclarationToFieldList[treeData.Ident, fl, cs, access, parseTree, tgn, init];
END
END;

IdentidProdAddTypeDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, lc: LocalContextNode, cs: CompilerStateNode, idAccess: AccessValNode, typeAccess: AccessValNode, tgn: TypeGraphNodeNode, typeExp: TypeExpPTreeNode, default: DefaultExpNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	IdentNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentidProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
field:	FieldNode;
lc1:	LocalContextNode;
namedTGN:	TypeGraphNodeNode;
position:	PositionValNode;
position _ NullPosition[];
[lc1, namedTGN] _ CreateNamedTGN[lc, treeData.Id, position, typeAccess, tgn, default];
field _ CreateNamedTypeField[treeData.Id, position, idAccess, namedTGN, typeExp];
fl1 _ AppendFieldToFieldList[fl, field];
temp1 _ lc1;
temp0 _ fl1;
END;
END
END;

IdentidProdAddValueDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, cs: CompilerStateNode, parseTree: DeclarationPTreeNode, access: AccessValNode, tgn: TypeGraphNodeNode, init: InitializationPTreeNode] RETURNS[temp0: FieldListNode] =
BEGIN
tree:	IdentNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentidProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
field:	FieldNode;
temp1: InitializationNode;
position:	PositionValNode;
position _ NullPosition[];
temp1 _ InitializationVal[init];
IF temp1.procs.InitializationIsBinding[temp1] THEN {field _ CreateConstantField[treeData.Id, position, parseTree, access, tgn, init];
} ELSE {field _ CreateVariableField[treeData.Id, position, parseTree, access, tgn, init];
};
fl1 _ AppendFieldToFieldList[fl, field];
temp0 _ fl1;
END;
END
END;

IdentidpositionProdAddTypeDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, lc: LocalContextNode, cs: CompilerStateNode, idAccess: AccessValNode, typeAccess: AccessValNode, tgn: TypeGraphNodeNode, typeExp: TypeExpPTreeNode, default: DefaultExpNode] RETURNS[temp0: FieldListNode, temp1: LocalContextNode] =
BEGIN
tree:	IdentNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentidpositionProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
field:	FieldNode;
lc1:	LocalContextNode;
namedTGN:	TypeGraphNodeNode;
position:	PositionValNode;
position _ treeData.Position.procs.GetPositionVal[treeData.Position];
[lc1, namedTGN] _ CreateNamedTGN[lc, treeData.Id, position, typeAccess, tgn, default];
field _ CreateNamedTypeField[treeData.Id, position, idAccess, namedTGN, typeExp];
fl1 _ AppendFieldToFieldList[fl, field];
temp1 _ lc1;
temp0 _ fl1;
END;
END
END;

IdentidpositionProdAddValueDeclarationToFieldList:	PUBLIC PROC[ref: REF ANY, fl: FieldListNode, cs: CompilerStateNode, parseTree: DeclarationPTreeNode, access: AccessValNode, tgn: TypeGraphNodeNode, init: InitializationPTreeNode] RETURNS[temp0: FieldListNode] =
BEGIN
tree:	IdentNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdentidpositionProdData _ NARROW[tree.data];
BEGIN
fl1:	FieldListNode;
field:	FieldNode;
temp1: InitializationNode;
position:	PositionValNode;
position _ treeData.Position.procs.GetPositionVal[treeData.Position];
temp1 _ InitializationVal[init];
IF temp1.procs.InitializationIsBinding[temp1] THEN {field _ CreateConstantField[treeData.Id, position, parseTree, access, tgn, init];
} ELSE {field _ CreateVariableField[treeData.Id, position, parseTree, access, tgn, init];
};
fl1 _ AppendFieldToFieldList[fl, field];
temp0 _ fl1;
END;
END
END;

OptSizeabsentProdGetExpVal:	PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ValueNode] =
BEGIN
tree:	OptSizeNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ MakeUnparsedNullValue[];
END
END;

OptSizepresentProdGetExpVal:	PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ValueNode] =
BEGIN
tree:	OptSizeNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	OptSizepresentProdData _ NARROW[tree.data];
temp0 _ MakeUnparsedValue[treeData.Exp];
END
END;

StatementListemptyProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementListmoreProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementListNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementListmoreProdData _ NARROW[tree.data];
BEGIN
contextTree1:	ContextTreeNode;
contextTree1 _ treeData.StatementList.procs.HangContextsFromContextTree[treeData.StatementList, contextTree, rib, paintRecords, cs];
temp0 _ treeData.Statement.procs.HangContextsFromContextTree[treeData.Statement, contextTree1, rib, paintRecords, cs];
END;
END
END;

StatementifthenProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementifthenProdData _ NARROW[tree.data];
temp0 _ treeData.Statement.procs.HangContextsFromContextTree[treeData.Statement, contextTree, rib, paintRecords, cs];
END
END;

StatementifthenelseProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementifthenelseProdData _ NARROW[tree.data];
BEGIN
contextTree1:	ContextTreeNode;
contextTree1 _ treeData.Statementthenpart.procs.HangContextsFromContextTree[treeData.Statementthenpart, contextTree, rib, paintRecords, cs];
temp0 _ treeData.Statementelsepart.procs.HangContextsFromContextTree[treeData.Statementelsepart, contextTree1, rib, paintRecords, cs];
END;
END
END;

StatementselectProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementselectProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementexpProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementexpProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementassignProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementassignProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementmultiassignProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementmultiassignProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementblockProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementblockProdData _ NARROW[tree.data];
temp0 _ treeData.Block.procs.HangContextsFromContextTree[treeData.Block, contextTree, rib, paintRecords, cs];
END
END;

StatementloopcontrolProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementloopcontrolProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementexitProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementloopProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementgotoProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementgotoProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementreturnProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementreturnProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementtransferProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementtransferProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementfreeProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementfreeProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementwaitProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementwaitProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementerrorProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementstopProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementnullProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementresumeProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementresumeProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementrejectProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementcontinueProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementretryProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementgetstateProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementgetstateProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

StatementsetstateProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	StatementNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	StatementsetstateProdData _ NARROW[tree.data];
temp0 _ FakeDamageContextTree[contextTree];
END
END;

BlockProdMakeContextTree:	PUBLIC PROC[ref: REF ANY, parentRib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	BlockNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	BlockProdData _ NARROW[tree.data];
BEGIN
err:	BOOLEAN;
err _ Error["should not be here"];
temp0 _ EmptyContextTree[parentRib];
END;
END
END;

BlockProdHangContextsFromContextTree:	PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, rib: ContextRibNode, paintRecords: BOOLEAN, cs: CompilerStateNode] RETURNS[temp0: ContextTreeNode] =
BEGIN
tree:	BlockNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	BlockProdData _ NARROW[tree.data];
BEGIN
err:	BOOLEAN;
err _ Error["should not be here"];
temp0 _ FakeDamageContextTree[contextTree];
END;
END
END;

IdOrStringidProdRopeFromIdOrString:	PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ROPE] =
BEGIN
tree:	IdOrStringNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdOrStringidProdData _ NARROW[tree.data];
temp0 _ RopeFromId[treeData.Id];
END
END;

IdOrStringstringProdRopeFromIdOrString:	PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ROPE] =
BEGIN
tree:	IdOrStringNode_ NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData:	IdOrStringstringProdData _ NARROW[tree.data];
temp0 _ RopeFromString[treeData.String];
END
END;

END..