Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Christopher F Clark Newsgroups: comp.compilers Subject: Implementing built-in functions with LLVM, help needed Date: Fri, 7 Oct 2022 08:56:19 +0300 Organization: Compilers Central Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <22-10-022@comp.compilers> References: <22-10-019@comp.compilers> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="59827"; mail-complaints-to="abuse@iecc.com" Keywords: Pascal, design Posted-Date: 07 Oct 2022 13:05:51 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:3193 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. 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"). Still, the ability to call functions is the key thing you need to do. Once, you have that, you implement the "builtin" functions as functions. If your Pascal code is complete enough you can do it in Pascal, but quite often you do it in another (often lower level language like C). You don't actually generate the code directly from LLVM, other than doing a function call. Of perhaps a set of function calls, e.g. writeln might be call the "to_string" function for each parameter and then passing all those parameters to a function that writes a series of strings. But, both of those are simply functions that you call, not generally inline code sequences. -- ****************************************************************************** Chris Clark email: christopher.f.clark@compiler-resources.com Compiler Resources, Inc. Web Site: http://world.std.com/~compres 23 Bailey Rd voice: (508) 435-5016 Berlin, MA 01503 USA twitter: @intel_chris ------------------------------------------------------------------------------