Delphi 2009 se queja con un error E2283: [Error DCC] outputcode.pas (466): E2283 Demasiadas constantes locales. Use procedimientos más cortos¿Por qué aparece el error "Demasiadas constantes locales"?
Delphi 2007 compila muy bien. No puedo encontrar una gran cantidad de constantes locales, es una unidad corta (500 líneas). ¿Ves alguna abundancia de constantes o literales que pueda abordar?
procedure TOutputCodeForm.FormCreate(Sender: TObject);
var
poParser : TStringStream;
begin
if (IsWindowsVista()) then
begin
SetVistaFonts(self);
end;
poParser := TStringStream.Create(gstrSQLParser);
SQLParser := TSyntaxMemoParser.Create(self);
SQLParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
SQLParser.UseRegistry := True;
SQLParser.CompileFromStream(poParser);
FreeAndNil(poParser);
poParser := TStringStream.Create(gstrCPPParser);
cppParser := TSyntaxMemoParser.Create(self);
cppParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
cppParser.UseRegistry := True;
cppParser.CompileFromStream(poParser);
FreeAndNil(poParser);
poParser := TStringStream.Create(gstrPasParser);
pasParser := TSyntaxMemoParser.Create(self);
pasParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
pasParser.Script := ExtractFilePath(Application.ExeName) + 'pasScript.txt';
pasParser.CompileFromStream(poParser);
{* Free the stream since we are finished with it. *}
FreeAndNil(poParser);
poCodeOutput := TSyntaxMemo.Create(self);
poCodeOutput.Parent := Panel1;
poCodeOutput.Left := 8;
poCodeOutput.Top := 8;
poCodeOutput.Width := Panel1.Width - 16;
poCodeOutput.Height := Panel1.Height - 16;
poCodeOutput.ClipCopyFormats := [smTEXT, smRTF];
poCodeOutput.Font.Charset := ANSI_CHARSET;
poCodeOutput.Font.Color := clWindowText;
poCodeOutput.Font.Height := -11;
poCodeOutput.Font.Name := 'Courier New';
poCodeOutput.Font.Style := [];
poCodeOutput.GutterFont.Charset := DEFAULT_CHARSET;
poCodeOutput.GutterFont.Color := clWindowText;
poCodeOutput.GutterFont.Height := -11;
poCodeOutput.GutterFont.Name := 'MS Sans Serif';
poCodeOutput.GutterFont.Style := [];
poCodeOutput.HyperCursor := crDefault;
poCodeOutput.IndentStep := 1;
poCodeOutput.Margin := 2;
poCodeOutput.Modified := False;
poCodeOutput.MonoPrint := True;
poCodeOutput.Options := [smoSyntaxHighlight, smoPrintWrap, smoPrintLineNos, smoPrintFilename, smoPrintDate, smoPrintPageNos, smoAutoIndent, smoTabToColumn, smoWordSelect, smoShowRMargin, smoShowGutter, smoShowWrapColumn, smoTitleAsFilename, smoProcessDroppedFiles, smoBlockOverwriteCursor, smoShowWrapGlyph, smoColumnTrack, smoUseTAB, smoSmartFill, smoOLEDragSource];
poCodeOutput.ReadOnly := False;
poCodeOutput.RightMargin := 80;
poCodeOutput.SaveFormat := sfTEXT;
poCodeOutput.ScrollBars := ssBoth;
poCodeOutput.SelLineStyle := lsCRLF;
poCodeOutput.SelStart := 3;
poCodeOutput.SelLength := 0;
poCodeOutput.SelTextColor := clWhite;
poCodeOutput.SelTextBack := clBlack;
poCodeOutput.TabDefault := 4;
poCodeOutput.TabOrder := 0;
poCodeOutput.VisiblePropEdPages := [ppOPTIONS, ppHIGHLIGHTING, ppKEYS, ppAUTOCORRECT, ppTEMPLATES];
poCodeOutput.WrapAtColumn := 0;
poCodeOutput.OnKeyDown := FormKeyDown;
poCodeOutput.ActiveParser := 3;
poCodeOutput.Anchors := [akLeft, akTop, akRight, akBottom];
poCodeOutput.Parser1 := pasParser;
poCodeOutput.Parser2 := cppParser;
poCodeOutput.Parser3 := SQLParser;
SQLParser.AttachEditor(poCodeOutput);
cppParser.AttachEditor(poCodeOutput);
pasParser.AttachEditor(poCodeOutput);
poCodeOutput.Lines.AddStrings(poCode);
if (CodeType = ctCPP) then
poCodeOutput.ActiveParser := 2
else if (CodeType = ctPascal) then
poCodeOutput.ActiveParser := 1
else
poCodeOutput.ActiveParser := 3;
MainForm.AdjustFormSize(self, 0.95, 0.75);
end;
Encontré el problema. La referencia a gstrCPPParser. Esa cadena global es un monstruo de una cadena. –
y en cuanto a la memoria, las cadenas simplemente se duplicaron con Delphi 2009 (: ¿qué tan grande fue? –