public override void Compile(CompilerBase state) { var cid = Guid.NewGuid(); var end = $"{cid}-function-end"; state.InsertJMP(end); state.FunctionDefine(Name, Parameters.Length, 0); state.EnterFunction(Name); state.InsertLabel($"<{Name}>"); var iadstk = state.InsertALLOCDSTK(); foreach (var p in Parameters) { state.VariableDefine(p); } foreach (var p in Parameters) { state.InsertSD(p); } mBlockStatement.Compile(state); state.InsertLC(new BooleanValue(false)); state.InsertRET(); iadstk.Size = state.CurrentScopeVariableCount; state.ExitFunction(); state.InsertLabel(end); }