Path: csiph.com!tncsrv06.tnetconsulting.net!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: antispam@math.uni.wroc.pl Newsgroups: comp.compilers Subject: Re: Implementing built-in functions with LLVM, help needed Date: Thu, 13 Oct 2022 14:08:15 -0000 (UTC) Organization: Aioe.org NNTP Server Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <22-10-027@comp.compilers> References: <22-10-019@comp.compilers> <22-10-022@comp.compilers> Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="75194"; mail-complaints-to="abuse@iecc.com" Keywords: Pascal, history Posted-Date: 13 Oct 2022 10:19:32 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:3197 Christopher F Clark wrote: > I'm surprised no one has chimed in yet, so I will. > > > How should I implement functions like writeln, read, etc? > > I presume you have a design for "user defined" functions and > procedures. If not, you need that first. That is roughly how you pass > in parameters and receive return values. Usually there is a convention > (often defined by the OS or these days the C compiler) that one > follows to do that. > > But once you have that, you can call functions. And, if it is a > convention suitable for C, it specifies how you handle variadic > functions, functions that take a variable number of arguments like > writeln. Treating writeln via variable argument call is wrong. Compiler is supposed to split writeln into separate simpler statements. This leads to subtle difference, folks trying to implement Pascal via C-like approach at some moment learn the difference and fix their compilers, but it is better to get it right the first time. > Now, you may need some Pascal specific wrinkles because the > Pascal language supports things like variables from the parent scope > (a subset of the closure concept) and for writeln knowing the type of > the variable passed so that you can format it properly > ("descriptors"). Syntax of buitins is different that normal calls, that is easy to handle in parser but must be done before call. And builtins are overloaded, in dialects with many builtins handling of overloading may take most of implementation. > Still, the ability to call functions is the key thing you need to do. Sure. -- Waldek Hebisch