HTTP/1.1 -1 Read error in cache disk data: SuccessContent-Type: text/plain; charset="utf-8" Last-Modified: Sat, 22 Jan 2022 07:04:32 GMT Content-length: 2233 Connection: Close Proxy-Connection: Close X-Cache: HIT from web1.osuosl.org Server: ProxyTrack 0.5 (HTTrack 3.49.2) = General Issues = * Until case mangling issues in Parrot are fixed, you must use an all-lowercase HLL name (someone plz add TT#) * Due to current bugs in Parrot, the 'load_language' opcode *must* be called from the 'parrot' HLL = Library Loading = To provide other languages access to libraries written in your language, you must add a 'load_library' method to your compiler object. This method must accept one positional parameter, a list (or ::-delimited string?) representing the name of the library to load, and an arbitrary quantity of other named parameters (:named :slurpy), which it is (currently) free to ignore. This method should return a hash containing the following attributes: {{{ symbols: # The only required attribute DEFAULT: # a map of names to symbols ALL: # a map of names to symbols # other named sets of symbols can go here... # the only required items are DEFAULT and ALL # You can include other additional information filename: "/path/to/filename.ext" version: "v1.0.1" author: "adent" }}} For existing implementations of this, look at runtime/parrot/languages/parrot/parrot.pir in the Parrot repository and perl6.pir in the rakudo repository. An example implementation of a 'foreign_load' function: {{{ .sub 'foreign_load' .param string lang .param string module .local pmc compiler, name, library, imports, callerns, foreignlibns $P0 = getinterp callerns = $P0['namespace';1] 'load-language'(lang) # This sub just calls the load_language opcode, but from the 'parrot' HLL, to avoid a parrot bug compiler = compreg lang name = split '::', module library = compiler.'load_library'(name) imports = library['symbols'] imports = imports['DEFAULT'] .local pmc iter, item iter = new 'Iterator', imports import_loop: unless iter goto import_loop_end $S0 = shift iter $P0 = imports[$S0] callerns[$S0] = $P0 goto import_loop import_loop_end: foreignlibns = library['namespace'] if null foreignlibns goto no_foreign_ns $S0 = pop name set_hll_global name, $S0, foreignlibns no_foreign_ns: .return (library) .end }}}out Trac