diff options
Diffstat (limited to 'compiler/symdef.pas')
-rw-r--r-- | compiler/symdef.pas | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/compiler/symdef.pas b/compiler/symdef.pas index 8be9fc6e5c..f1de801fd8 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -76,6 +76,7 @@ interface function is_publishable : boolean;override; function needs_inittable : boolean;override; function rtti_mangledname(rt:trttitype):string;override; + function OwnerHierarchyName: string; override; function in_currentunit: boolean; { regvars } function is_intregable : boolean; @@ -550,6 +551,8 @@ interface interfacedef : boolean; { true if the procedure has a forward declaration } hasforward : boolean; + { interrupt vector } + interruptvector : longint; constructor create(level:byte); constructor ppuload(ppufile:tcompilerppufile); destructor destroy;override; @@ -1029,6 +1032,22 @@ implementation end; + function tstoreddef.OwnerHierarchyName: string; + var + tmp: tdef; + begin + tmp:=self; + result:=''; + repeat + if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then + tmp:=tdef(tmp.owner.defowner) + else + break; + result:=tabstractrecorddef(tmp).objrealname^+'.'+result; + until tmp=nil; + end; + + function tstoreddef.in_currentunit: boolean; var st: tsymtable; @@ -2684,15 +2703,7 @@ implementation var tmp: tabstractrecorddef; begin - Result:=objrealname^; - tmp:=self; - repeat - if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then - tmp:=tabstractrecorddef(tmp.owner.defowner) - else - break; - Result:=tmp.objrealname^+'.'+Result; - until tmp=nil; + Result:=OwnerHierarchyName+objrealname^; end; function tabstractrecorddef.search_enumerator_get: tprocdef; @@ -3322,6 +3333,7 @@ implementation {$ifdef i386} fpu_used:=maxfpuregs; {$endif i386} + interruptvector:=-1; end; @@ -3360,6 +3372,8 @@ implementation else import_name:=nil; import_nr:=ppufile.getword; + if target_info.system in systems_interrupt_table then + interruptvector:=ppufile.getlongint; if (po_msgint in procoptions) then messageinf.i:=ppufile.getlongint; if (po_msgstr in procoptions) then @@ -3496,6 +3510,8 @@ implementation if po_has_importname in procoptions then ppufile.putstring(import_name^); ppufile.putword(import_nr); + if target_info.system in systems_interrupt_table then + ppufile.putlongint(interruptvector); if (po_msgint in procoptions) then ppufile.putlongint(messageinf.i); if (po_msgstr in procoptions) then |