;;; Bytecode ;; Copyright (C) 2013, 2017, 2018, 2020, 2025 Free Software Foundation, Inc. ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public ;;;; License as published by the Free Software Foundation; either ;;;; version 3 of the License, or (at your option) any later version. ;;;; ;;;; This library is distributed in the hope that it will be useful, ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;;; Lesser General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU Lesser General Public ;;;; License along with this library; if not, write to the Free Software ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;;; Code: (define-module (language bytecode) #:use-module (ice-9 match) #:use-module ((srfi srfi-1) #:select (fold)) #:export (instruction-list builtin-name->index builtin-index->name intrinsic-name->index intrinsic-index->name)) (load-extension (string-append "libguile-" (effective-version)) "scm_init_instructions") (load-extension (string-append "libguile-" (effective-version)) "scm_init_vm_builtins") (load-extension (string-append "libguile-" (effective-version)) "scm_init_intrinsics") (define *intrinsic-codes* (delay (let ((tab (make-hash-table))) (for-each (lambda (pair) (hashv-set! tab (car pair) (cdr pair))) (intrinsic-list)) tab))) (define *intrinsic-names* (delay (let ((tab (make-hash-table))) (hash-for-each (lambda (k v) (hashq-set! tab v k)) (force *intrinsic-codes*)) tab))) (define (intrinsic-name->index name) (hashq-ref (force *intrinsic-codes*) name)) (define (intrinsic-index->name index) (hashv-ref (force *intrinsic-names*) index))