123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- unit jsbase;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils;
- Type
- TJSType = (jstUNDEFINED,jstNull,jstBoolean,jstNumber,jstString,jstObject,jstReference,JSTCompletion);
- TJSString = WideString;
- TJSNumber = Double;
- { TJSValue }
- TJSValue = Class(TObject)
- private
- FValueType: TJSType;
- FValue : Record
- Case Integer of
- 0 : (P : Pointer);
- 1 : (F : TJSNumber);
- 2 : (I : Integer);
- end;
- procedure ClearValue(ANewValue: TJSType);
- function GetAsBoolean: Boolean;
- function GetAsCompletion: TObject;
- function GetAsNumber: TJSNumber;
- function GetAsObject: TObject;
- function GetAsReference: TObject;
- function GetAsString: TJSString;
- function GetIsNull: Boolean;
- function GetIsUndefined: Boolean;
- procedure SetAsBoolean(const AValue: Boolean);
- procedure SetAsCompletion(const AValue: TObject);
- procedure SetAsNumber(const AValue: TJSNumber);
- procedure SetAsObject(const AValue: TObject);
- procedure SetAsReference(const AValue: TObject);
- procedure SetAsString(const AValue: TJSString);
- procedure SetIsNull(const AValue: Boolean);
- procedure SetIsUndefined(const AValue: Boolean);
- Public
- Constructor Create;
- Constructor CreateNull;
- Constructor Create(ANumber : TJSNumber);
- Constructor Create(ABoolean : Boolean);
- Constructor Create(AString: TJSString);
- Destructor Destroy; override;
- Property ValueType : TJSType Read FValueType;
- Property IsUndefined : Boolean Read GetIsUndefined Write SetIsUndefined;
- Property IsNull : Boolean Read GetIsNull Write SetIsNull;
- Property AsNumber : TJSNumber Read GetAsNumber Write SetAsNumber;
- Property AsBoolean : Boolean Read GetAsBoolean Write SetAsBoolean;
- Property AsObject : TObject Read GetAsObject Write SetAsObject;
- Property AsString : TJSString Read GetAsString Write SetAsString;
- Property AsReference : TObject Read GetAsReference Write SetAsReference;
- Property AsCompletion : TObject Read GetAsCompletion Write SetAsCompletion;
- end;
- implementation
- { TJSValue }
- function TJSValue.GetAsBoolean: Boolean;
- begin
- If (ValueType=jstBoolean) then
- Result:=(FValue.I<>0)
- else
- Result:=False;
- end;
- function TJSValue.GetAsCompletion: TObject;
- begin
- Result:=TObject(FValue.P);
- end;
- function TJSValue.GetAsNumber: TJSNumber;
- begin
- If (ValueType=jstNumber) then
- Result:=FValue.F
- else
- Result:=0.0;
- end;
- function TJSValue.GetAsObject: TObject;
- begin
- If (ValueType=jstObject) then
- Result:=TObject(FValue.P)
- else
- Result:=nil;
- end;
- function TJSValue.GetAsReference: TObject;
- begin
- If (ValueType=jstReference) then
- Result:=TObject(FValue.P)
- else
- Result:=nil;
- end;
- function TJSValue.GetAsString: TJSString;
- begin
- If (ValueType=jstString) then
- Result:=TJSString(FValue.P)
- else
- Result:='';
- end;
- function TJSValue.GetIsNull: Boolean;
- begin
- Result:=(ValueType=jstNull);
- end;
- function TJSValue.GetIsUndefined: Boolean;
- begin
- Result:=(fValueType=jstUndefined);
- end;
- procedure TJSValue.ClearValue(ANewValue : TJSType);
- begin
- Case FValueType of
- jstString : String(FValue.P):='';
- jstNumber : FValue.F:=0;
- else
- FValue.I:=0;
- end;
- FValueType:=ANewValue;
- end;
- procedure TJSValue.SetAsBoolean(const AValue: Boolean);
- begin
- ClearValue(jstBoolean);
- FValue.I:=Ord(AValue);
- end;
- procedure TJSValue.SetAsCompletion(const AValue: TObject);
- begin
- ClearValue(jstBoolean);
- FValue.P:=AValue;
- end;
- procedure TJSValue.SetAsNumber(const AValue: TJSNumber);
- begin
- ClearValue(jstNumber);
- FValue.F:=AValue;
- end;
- procedure TJSValue.SetAsObject(const AValue: TObject);
- begin
- ClearValue(jstObject);
- FValue.P:=AVAlue;
- end;
- procedure TJSValue.SetAsReference(const AValue: TObject);
- begin
- ClearValue(jstReference);
- FValue.P:=AVAlue;
- end;
- procedure TJSValue.SetAsString(const AValue: TJSString);
- begin
- ClearValue(jstString);
- TJSString(FValue.P):=AValue;
- end;
- procedure TJSValue.SetIsNull(const AValue: Boolean);
- begin
- ClearValue(jstNull);
- end;
- procedure TJSValue.SetIsUndefined(const AValue: Boolean);
- begin
- ClearValue(jstUndefined);
- end;
- Constructor TJSValue.CreateNull;
- begin
- IsNull:=True;
- end;
- Constructor TJSValue.Create;
- begin
- IsUndefined:=True;
- end;
- Constructor TJSValue.Create(ANumber: TJSNumber);
- begin
- AsNumber:=ANumber;
- end;
- Constructor TJSValue.Create(ABoolean: Boolean);
- begin
- AsBoolean:=ABoolean;
- end;
- Constructor TJSValue.Create(AString: TJSString);
- begin
- AsString:=AString;
- end;
- Destructor TJSValue.Destroy;
- begin
- ClearValue(jstUndefined);
- inherited Destroy;
- end;
- end.
|