| 112 | |
| 113 | |
| 114 | def emit_default(out: CWriter, uop: Uop, stack: Stack) -> None: |
| 115 | null = CWriter.null() |
| 116 | for var in reversed(uop.stack.inputs): |
| 117 | stack.pop(var, null) |
| 118 | offset = stack.base_offset - stack.physical_sp |
| 119 | for var in uop.stack.outputs: |
| 120 | if var.is_array() and not var.peek and not var.name == "unused": |
| 121 | c_offset = offset.to_c() |
| 122 | out.emit(f"{var.name} = &stack_pointer[{c_offset}];\n") |
| 123 | offset = offset.push(var) |
| 124 | for var in uop.stack.outputs: |
| 125 | local = Local.undefined(var) |
| 126 | stack.push(local) |
| 127 | if var.name != "unused" and not var.peek: |
| 128 | local.in_local = True |
| 129 | if var.is_array(): |
| 130 | if var.size == "1": |
| 131 | out.emit(f"{var.name}[0] = sym_new_not_null(ctx);\n") |
| 132 | else: |
| 133 | out.emit(f"for (int _i = {var.size}; --_i >= 0;) {{\n") |
| 134 | out.emit(f"{var.name}[_i] = sym_new_not_null(ctx);\n") |
| 135 | out.emit("}\n") |
| 136 | elif var.name == "null": |
| 137 | out.emit(f"{var.name} = sym_new_null(ctx);\n") |
| 138 | else: |
| 139 | out.emit(f"{var.name} = sym_new_not_null(ctx);\n") |
| 140 | |
| 141 | |
| 142 | class OptimizerEmitter(Emitter): |