diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-01-20 22:56:30 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-01-20 22:56:30 +0100 |
| commit | 914bc87fd0525ce042d279bff6a4c97477bfeb61 (patch) | |
| tree | a867955a6f3797c2d3798d9afd0f7af0404c7100 /src | |
| parent | 9b8c64e6e9713441c1aa573cbdf137d5e4a424a8 (diff) | |
| download | sylt-914bc87fd0525ce042d279bff6a4c97477bfeb61.tar.gz | |
allow empty functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index ad97783..727f177 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -559,9 +559,8 @@ impl Compiler { // so we know from where to copy them. }); - let mut prev = function_block.ops.len() - 1; - loop { - match function_block.ops[prev] { + for op in function_block.ops.iter().rev() { + match op { Op::Pop | Op::PopUpvalue => {} Op::Return => { break; } , _ => { @@ -570,7 +569,11 @@ impl Compiler { break; } } - prev -= 1; + } + + if function_block.ops.is_empty() { + function_block.add(Op::Constant(Value::Nil), self.line()); + function_block.add(Op::Return, self.line()); } function_block.ty = Type::Function(args, Box::new(return_type)); |
