File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -326,6 +326,42 @@ class BackendLua : CompilerBackend {
326326 words[node.name] = Word(WordType.Callisto, false );
327327
328328 output ~= format(" function func__%s()\n " , node.name.Sanitise());
329+
330+ // allocate parameters
331+ size_t paramSize;
332+ foreach (ref type ; node.paramTypes) {
333+ if (! TypeExists(type)) {
334+ Error(node.error, " Type '%s' doesn't exist" , type);
335+ }
336+
337+ paramSize += GetType(type).size;
338+ }
339+ if (paramSize > 0 ) {
340+ output ~= format(" vsp = vsp - %d\n " , paramSize);
341+ foreach (ref var ; variables) {
342+ var.offset += paramSize;
343+ }
344+
345+ size_t offset;
346+ foreach (i, ref type ; node.paramTypes) {
347+ auto param = node.params[i];
348+ Variable var;
349+
350+ var.name = param;
351+ var.type = GetType(type);
352+ var.offset = cast (uint ) offset;
353+ offset += var.Size();
354+ variables ~= var;
355+ }
356+
357+ // copy data to parameters
358+ output ~= format("
359+ for i = 1, %d do
360+ mem[vsp + (i - 1)] = mem[(dsp - %d) + (i - 1)]
361+ end
362+ " , paramSize, paramSize);
363+ }
364+
329365 foreach (ref inode ; node.nodes) {
330366 compiler.CompileNode(inode);
331367 }
You can’t perform that action at this time.
0 commit comments