I added support for arrays inside of Blaise. Instead of modifying the grammar I modified the compiler to look for foreign function interface constructs. Since Blaise compiles to C I have to make sure all Blaise code compiles to compliable C. Supporting arrays in Blaise wasn’t too hard, but there was one obstacle I didn’t expect to run into. Due to little experience with C I found out that creating arrays dynamically in C isn’t as easy as I first thought.
For example, the following createArray function does not work in C:
void* createArray(int length, void* initialValueForEachElement){ void* arr[length]; int i; for(i = 0;i< length; i++){ arr[i] =Â initialValueForEachElement; } }
I did come up with a solution to my problem. Anytime I call the createArray function I know the length of an array specified by the Blaise programmer so I declare the array before the function call and pass it in.
void* createArray(void* arr[], int length, void* initialValueForEachElement){ int i; for(i = 0;i< length; i++){ arr[i] =Â initialValueForEachElement; } } int main(){ int length = 5; void* arr[length]; createArray(arr, length, 3); // arr was successfully created }
After talking to a postdoc I discovered an even better solution so I don’t have to declare the array before the call.
void **Array_make(int size) { void **arr = malloc(size*sizeof(void *)); return arr; }