function GetMethod: Boolean; var I: Integer; JvInterpreterMethod: TJvInterpreterMethod; B : boolean; // Alex Vulpe begin Result := GetValueRTTI(Identifier, Value, Args); if Result then Exit; // Alex Vulpe - looking for our specific class if Args.ObjTyp = varObject then B := FGetList.Find(Identifier, i, Args.Obj.ClassName) else B := FGetList.Find(Identifier, i); // Alex Vulpe if FGetList.Find(Identifier, I) then if B then for I := I to FGetList.Count - 1 do begin JvInterpreterMethod := TJvInterpreterMethod(FGetList[I]); if not Cmp(JvInterpreterMethod.Identifier, Identifier) then // ivan_ra Break; if Assigned(JvInterpreterMethod.Func) and (((Args.ObjTyp = varObject) and (Args.Obj is JvInterpreterMethod.FClassType)) or ((Args.ObjTyp = varClass) and (TClass(Args.Obj) = JvInterpreterMethod.FClassType))) {?!} then begin Args.Identifier := Identifier; CheckAction(Expression, Args, JvInterpreterMethod.Data); CheckArgs(Args, JvInterpreterMethod.ParamCount, JvInterpreterMethod.ParamTypes); TJvInterpreterAdapterGetValue(JvInterpreterMethod.Func)(Value, Args); Result := True; Exit; end; end; if Cmp(Identifier, 'Free') then begin Result := True; Args.Obj.Free; Args.Obj := nil; Value := Null; Exit; end; end; ---------------------------------------------------------------------------------- function TJvInterpreterIdentifierList.Find(const Identifier: string; var Index: Integer; const ClassName : string = ''): Boolean; // Alex Vulpe var L, H, I, C: Integer; begin Result := False; L := 0; H := Count - 1; while L <= H do begin I := (L + H) shr 1; C := AnsiStrIComp(PChar(TJvInterpreterIdentifier(List[I]).Identifier), PChar(Identifier)); if C < 0 then L := I + 1 else begin H := I - 1; if C = 0 then begin Result := True; if Duplicates <> dupAccept then L := I; end; end; end; Index := L; if not Result or (ClassName = '') then exit; // Looking for our specific class I := Index; while (I <= Count - 1) and (AnsiStrIComp(PChar(TJvInterpreterIdentifier(List[I]).Identifier), PChar(Identifier)) = 0) do if SameText(TJvInterpreterMethod(List[I]).FClassType.ClassName, ClassName) then begin Index := I; exit; end else inc(I); end;