Changeset 18 for branches/Void/UModel.pas
- Timestamp:
- Nov 10, 2009, 3:38:32 PM (15 years ago)
- Location:
- branches/Void
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Void
- Property svn:ignore
-
old new 11 11 Output.dpr 12 12 Output.exe 13 Output.asm
-
- Property svn:ignore
-
branches/Void/UModel.pas
r16 r18 6 6 7 7 uses 8 Classes, SysUtils ;8 Classes, SysUtils, fgl; 9 9 10 10 type … … 16 16 end; 17 17 18 TTypeList = specialize TFPGObjectList<TType>; 19 18 20 TVariable = class 19 21 Name: string; 20 22 VarType: TType; 21 23 end; 24 25 TVariableList = specialize TFPGObjectList<TVariable>; 22 26 23 27 TVariableValue = class … … 30 34 end; 31 35 36 TVariableValueList = specialize TFPGObjectList<TVariableValue>; 37 38 TExpression = class 39 40 end; 41 32 42 TCommand = class 33 43 Name: string; 34 Parameters: TList; 35 constructor Create; 36 destructor Destroy; override; 37 end; 44 Parameters: TVariableValueList; 45 constructor Create; 46 destructor Destroy; override; 47 end; 48 49 TCommandList = specialize TFPGObjectList<TCommand>; 38 50 39 51 TBeginEnd = class 40 Commands: T List;52 Commands: TCommandList; 41 53 constructor Create; 42 54 destructor Destroy; override; … … 46 58 TProcedure = class 47 59 Name: string; 48 Parameters: T List;60 Parameters: TVariableList; 49 61 BeginEnd: TBeginEnd; 50 62 constructor Create; 51 63 destructor Destroy; override; 52 64 end; 65 66 TProcedureList = specialize TFPGObjectList<TProcedure>; 53 67 54 68 TModuleType = (mtUnit, mtProgram); … … 58 72 Name: string; 59 73 ModuleType: TModuleType; 60 Types: T List;61 Variables: T List;62 Procedures: T List;74 Types: TTypeList; 75 Variables: TVariableList; 76 Procedures: TProcedureList; 63 77 BeginEnd: TBeginEnd; 64 78 constructor Create; … … 105 119 constructor TBeginEnd.Create; 106 120 begin 107 Commands := T List.Create;121 Commands := TCommandList.Create; 108 122 end; 109 123 110 124 destructor TBeginEnd.Destroy; 125 begin 126 Commands.Destroy; 127 inherited Destroy; 128 end; 129 130 procedure TBeginEnd.Clear; 111 131 var 112 132 I: Integer; 113 133 begin 114 134 for I := 0 to Commands.Count - 1 do 115 TCommand(Commands[I]).Destroy; 116 Commands.Destroy; 117 inherited Destroy; 118 end; 119 120 procedure TBeginEnd.Clear; 121 var 122 I: Integer; 123 begin 124 for I := 0 to Commands.Count - 1 do 125 TCommand(Commands[I]).Destroy; 135 Commands[I].Destroy; 126 136 Commands.Clear; 127 137 end; … … 131 141 constructor TCommand.Create; 132 142 begin 133 Parameters := T List.Create;143 Parameters := TVariableValueList.Create; 134 144 end; 135 145 136 146 destructor TCommand.Destroy; 137 var 138 I: Integer; 139 begin 140 for I := 0 to Parameters.Count - 1 do 141 TVariableValue(Parameters[I]).Destroy; 147 begin 142 148 Parameters.Destroy; 143 149 inherited Destroy; … … 147 153 begin 148 154 BeginEnd := TBeginEnd.Create; 149 Parameters := T List.Create;155 Parameters := TVariableList.Create; 150 156 end; 151 157 152 158 destructor TProcedure.Destroy; 153 var 154 I: Integer; 155 begin 156 for I := 0 to Parameters.Count - 1 do 157 TVariableValue(Parameters[I]).Destroy; 159 begin 158 160 Parameters.Destroy; 159 161 BeginEnd.Destroy; … … 165 167 constructor TModule.Create; 166 168 begin 167 Types := T List.Create;168 Variables := T List.Create;169 Types := TTypeList.Create; 170 Variables := TVariableList.Create; 169 171 BeginEnd := TBeginEnd.Create; 170 Procedures := T List.Create;172 Procedures := TProcedureList.Create; 171 173 end; 172 174 173 175 destructor TModule.Destroy; 174 var 175 I: Integer; 176 begin 177 for I := 0 to Types.Count - 1 do 178 TType(Types[I]).Destroy; 176 begin 179 177 Types.Destroy; 180 for I := 0 to Variables.Count - 1 do181 TVariable(Variables[I]).Destroy;182 178 Variables.Destroy; 183 for I := 0 to Procedures.Count - 1 do184 TProcedure(Procedures[I]).Destroy;185 179 Procedures.Destroy; 186 180 BeginEnd.Destroy; … … 193 187 begin 194 188 I := 0; 195 while (I < Variables.Count) and (LowerCase( TVariable(Variables[I]).Name) <> LowerCase(AName)) do189 while (I < Variables.Count) and (LowerCase(Variables[I].Name) <> LowerCase(AName)) do 196 190 Inc(I); 197 191 if I < Variables.Count then Result := Variables[I] else Result := nil; … … 203 197 begin 204 198 I := 0; 205 while (I < Procedures.Count) and (LowerCase( TProcedure(Procedures[I]).Name) <> LowerCase(AName)) do199 while (I < Procedures.Count) and (LowerCase(Procedures[I].Name) <> LowerCase(AName)) do 206 200 Inc(I); 207 201 if I < Procedures.Count then Result := Procedures[I] else Result := nil; … … 212 206 begin 213 207 // System types 214 with T Type(Types[Types.Add(TType.Create)])do begin208 with Types[Types.Add(TType.Create)] do begin 215 209 Name := 'Integer'; 216 210 end; 217 with T Type(Types[Types.Add(TType.Create)])do begin211 with Types[Types.Add(TType.Create)] do begin 218 212 Name := 'String'; 219 213 end; 220 with T Type(Types[Types.Add(TType.Create)])do begin214 with Types[Types.Add(TType.Create)] do begin 221 215 Name := 'Char'; 222 216 end; 223 with T Type(Types[Types.Add(TType.Create)])do begin217 with Types[Types.Add(TType.Create)] do begin 224 218 Name := 'Byte'; 225 219 end; 226 with T Type(Types[Types.Add(TType.Create)])do begin220 with Types[Types.Add(TType.Create)] do begin 227 221 Name := 'Word'; 228 222 end; 229 223 230 224 // System procedures 231 with TProcedure(Procedures[Procedures.Add(TProcedure.Create)])do begin225 with Procedures[Procedures.Add(TProcedure.Create)] do begin 232 226 Name := 'WriteLn'; 233 with TVariable(Parameters[Parameters.Add(TVariable.Create)])do begin227 with Parameters[Parameters.Add(TVariable.Create)] do begin 234 228 Name := 'Text'; 235 229 VarType := FindTypeByName('String'); 236 230 end; 237 231 end; 238 with TProcedure(Procedures[Procedures.Add(TProcedure.Create)])do begin232 with Procedures[Procedures.Add(TProcedure.Create)] do begin 239 233 Name := 'Exit'; 240 234 end; 241 with TProcedure(Procedures[Procedures.Add(TProcedure.Create)])do begin235 with Procedures[Procedures.Add(TProcedure.Create)] do begin 242 236 Name := 'ReadLn'; 243 237 end; … … 249 243 begin 250 244 for I := 0 to Variables.Count - 1 do 251 TVariable(Variables[I]).Destroy;245 Variables[I].Destroy; 252 246 Variables.Clear; 253 247 BeginEnd.Clear; … … 260 254 begin 261 255 I := 0; 262 while (I < Types.Count) and (LowerCase(T Type(Types[I]).Name) <> LowerCase(AName)) do256 while (I < Types.Count) and (LowerCase(Types[I].Name) <> LowerCase(AName)) do 263 257 Inc(I); 264 258 if I < Types.Count then Result := Types[I] else Result := nil;
Note:
See TracChangeset
for help on using the changeset viewer.