Frame
A frame (frequently also referred to as block) is a language construct grouping a (possibly empty) sequence of statements (or instructions in the case of asm frames).
available types
All frames but repeat … until are terminated by the word end. Frame types are distinguished by their corresponding opening words.
-
Pascal: These frames expect Pascal statements or may contain other frames. begin
This frame begins a (possibly empty) sequence of statements. In the context of routine definitions or a program it can delimit a scope.else/
otherwise
This frame surrounds a “catch-all”-alternative as part of a case statement.repeat … until
repeatin conjunction withuntilis used to surround the loop body of a tail-controlled loop. It is the only frame type not ending with anend.exception treatment
If exceptions are supported in the current compiler mode, the following frames are available as well. These frames are in fact “double”-frames: They group two sequences at once. Neither of them can be used independently (e. g. writingfinally … end;without a propertryis illegal).try … except …
Use this to install exception handlers.try… finally …
Use this to ensure a certain code fragment is executed despite any thrown exceptions.unit overhead
:; initialization … finalization
This double-frame designates code being executed when the corresponding unit is loaded or unloaded. Either part of this frame is optional. This frame may also delimit a scope.
-
Assembly language: Frames beginning with asm expect assembly language. In pure assembly routines, this kind of frame may delimit a scope, too. Note, you cannot nest other frames in
asmframes.
style
Although not mandatory, it is customary to indent all code surrounded by frame markers by one level.
try
openJar;
except
throwATantrum;
end;Some styles add another indentation level for nested or subordinate frame markers per se.
if apples = oranges then
begin
protest;
halt(123);
end;As you can see from the examples above, it is customary to put frame delimiters isolated in their own line. Exempt of this guideline are of course frames accepting or requiring additional clauses to be syntactically complete:
repeat
write('Enter a non-negative integer: ');
readLn(i);
until i >= 0;asm
rdrand eax
mov n, eax
END ['eax'];technical background
Frames frequently, but not always, turn up to be (conditional) jmp targets. Some compile-time optimizations require code to be structured in a certain way, frames setting boundaries for that.
From the Free Pascal wiki, page "Frame", as it stood on 2021-02-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
