|
@@ -1561,7 +1561,7 @@ TYPE
|
|
IF backend.cooperative THEN
|
|
IF backend.cooperative THEN
|
|
IF (procedure # NIL) & (HasPointers (procedure.procedureScope) OR HasVariableParameters (procedure.procedureScope) OR IsNested (procedure)) THEN
|
|
IF (procedure # NIL) & (HasPointers (procedure.procedureScope) OR HasVariableParameters (procedure.procedureScope) OR IsNested (procedure)) THEN
|
|
GetCodeSectionNameForSymbol(procedure, name);
|
|
GetCodeSectionNameForSymbol(procedure, name);
|
|
- Basic.SuffixSegmentedName (name, Basic.MakeString ("@Descriptor"));
|
|
|
|
|
|
+ Basic.SuffixSegmentedName (name, Basic.MakeString ("@StackDescriptor"));
|
|
ELSE
|
|
ELSE
|
|
Basic.ToSegmentedName ("BaseTypes.StackFrame",name);
|
|
Basic.ToSegmentedName ("BaseTypes.StackFrame",name);
|
|
END;
|
|
END;
|
|
@@ -2956,7 +2956,7 @@ TYPE
|
|
BEGIN
|
|
BEGIN
|
|
previousSection := section;
|
|
previousSection := section;
|
|
GetCodeSectionNameForSymbol(procedure, name);
|
|
GetCodeSectionNameForSymbol(procedure, name);
|
|
- Basic.SuffixSegmentedName (name, Basic.MakeString ("@Descriptor"));
|
|
|
|
|
|
+ Basic.SuffixSegmentedName (name, Basic.MakeString ("@StackDescriptor"));
|
|
context := SwitchContext(NewSection(module.allSections, Sections.ConstSection, name,NIL,dump # NIL));
|
|
context := SwitchContext(NewSection(module.allSections, Sections.ConstSection, name,NIL,dump # NIL));
|
|
IF dump # NIL THEN dump := section.comments END;
|
|
IF dump # NIL THEN dump := section.comments END;
|
|
Basic.ToSegmentedName ("BaseTypes.StackFrame",name);
|
|
Basic.ToSegmentedName ("BaseTypes.StackFrame",name);
|
|
@@ -12722,7 +12722,14 @@ TYPE
|
|
BEGIN
|
|
BEGIN
|
|
name := procedureSection.name;
|
|
name := procedureSection.name;
|
|
Basic.SuffixSegmentedName(name, Basic.MakeString("@Descriptor"));
|
|
Basic.SuffixSegmentedName(name, Basic.MakeString("@Descriptor"));
|
|
- IF CreateProcedureDescInfo THEN
|
|
|
|
|
|
+ IF implementationVisitor.backend.cooperative THEN
|
|
|
|
+ dest := IntermediateCode.NewSection(module.allSections, Sections.ConstSection, name, NIL, declarationVisitor.dump);
|
|
|
|
+ Info(section, "TypeDescriptor");
|
|
|
|
+ Basic.ToSegmentedName("BaseTypes.Pointer", name);
|
|
|
|
+ NamedSymbol(dest, name,NIL, 0, 0);
|
|
|
|
+ BaseRecord(dest);
|
|
|
|
+ offset := 0;
|
|
|
|
+ ELSIF CreateProcedureDescInfo THEN
|
|
dest := implementationVisitor.NewSection(module.allSections, Sections.ConstSection, name, NIL, declarationVisitor.dump);
|
|
dest := implementationVisitor.NewSection(module.allSections, Sections.ConstSection, name, NIL, declarationVisitor.dump);
|
|
Address(dest,0);
|
|
Address(dest,0);
|
|
Symbol(dest, MakeProcedureDescriptorTag(procedureSection),2,0);
|
|
Symbol(dest, MakeProcedureDescriptorTag(procedureSection),2,0);
|
|
@@ -12796,6 +12803,15 @@ TYPE
|
|
Info(section, "monitor");
|
|
Info(section, "monitor");
|
|
Address(section,0);
|
|
Address(section,0);
|
|
END BaseObject;
|
|
END BaseObject;
|
|
|
|
+
|
|
|
|
+ PROCEDURE BaseRecord (section: IntermediateCode.Section);
|
|
|
|
+ BEGIN
|
|
|
|
+ BasePointer(section);
|
|
|
|
+ Info(section, "action");
|
|
|
|
+ Address(section,0);
|
|
|
|
+ Info(section, "monitor");
|
|
|
|
+ Address(section,0);
|
|
|
|
+ END BaseRecord;
|
|
|
|
|
|
PROCEDURE ModuleDescriptor(section: IntermediateCode.Section);
|
|
PROCEDURE ModuleDescriptor(section: IntermediateCode.Section);
|
|
VAR descriptorSection: IntermediateCode.Section; name: ARRAY 128 OF CHAR;
|
|
VAR descriptorSection: IntermediateCode.Section; name: ARRAY 128 OF CHAR;
|