From e615308b928585013461482f879f536527c5acc2 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Wed, 20 Jul 2022 15:39:23 -0700 Subject: Perform argument conversion. The point of argument conversion is to validate on each function call that the right number of arguments were passed, and to ensure that no function has more than 1 argument. This second condition makes CPS slightly simpler, and ensures that the arguments will all fit in locals. We take the strategy of allocating a vector for each function call. Ideally we would optimize away most of these allocations, but for now I just want it to work. --- csc/encoding.csc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'csc/encoding.csc') diff --git a/csc/encoding.csc b/csc/encoding.csc index 21ee88f..5c06bec 100644 --- a/csc/encoding.csc +++ b/csc/encoding.csc @@ -3,6 +3,14 @@ (import (scheme base) (only (csc match) match)) (begin + ; I'm only going to say this once, so pay attention. + ; The format of unboxed constants is described in bytecocde/src/data.rs. + ; Boxed values are represented by a pointer to an array on the heap. The + ; first position in the array is an integer code indicating what type the + ; object is. Vectors have code 0, codes for other types are not stable. + ; Vectors are represented as an array, the first element of which is the + ; integer 0 (the type code), the second element is the vector length, and + ; the remaining slots hold the array values. (define (right-shift n1 n2) -- cgit v1.3.1