mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 09:30:56 +02:00
* Patch from Mattias Gaertner for pas2js:
jsbase: Changed TJSString from WideString to UnicodeString to use ref counting on Windows. jsbase: Added TJSValue.CustomValue. fppas2js: Changed context from pas to js context. The pas context is already in the resolver values. fppas2js: Support for type alias fppas2js: Built in functions inc/dec for integers git-svn-id: trunk@34851 -
This commit is contained in:
parent
ff02b2dfb5
commit
8bbc792a4f
@ -25,7 +25,7 @@ uses
|
|||||||
Type
|
Type
|
||||||
TJSType = (jstUNDEFINED,jstNull,jstBoolean,jstNumber,jstString,jstObject,jstReference,JSTCompletion);
|
TJSType = (jstUNDEFINED,jstNull,jstBoolean,jstNumber,jstString,jstObject,jstReference,JSTCompletion);
|
||||||
|
|
||||||
TJSString = WideString;
|
TJSString = UnicodeString;
|
||||||
TJSNumber = Double;
|
TJSNumber = Double;
|
||||||
|
|
||||||
{ TJSValue }
|
{ TJSValue }
|
||||||
@ -39,6 +39,7 @@ Type
|
|||||||
1 : (F : TJSNumber);
|
1 : (F : TJSNumber);
|
||||||
2 : (I : Integer);
|
2 : (I : Integer);
|
||||||
end;
|
end;
|
||||||
|
FCustomValue: TJSString;
|
||||||
procedure ClearValue(ANewValue: TJSType);
|
procedure ClearValue(ANewValue: TJSType);
|
||||||
function GetAsBoolean: Boolean;
|
function GetAsBoolean: Boolean;
|
||||||
function GetAsCompletion: TObject;
|
function GetAsCompletion: TObject;
|
||||||
@ -64,6 +65,7 @@ Type
|
|||||||
Constructor Create(AString: TJSString);
|
Constructor Create(AString: TJSString);
|
||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Property ValueType : TJSType Read FValueType;
|
Property ValueType : TJSType Read FValueType;
|
||||||
|
Property CustomValue: TJSString Read FCustomValue Write FCustomValue;
|
||||||
Property IsUndefined : Boolean Read GetIsUndefined Write SetIsUndefined;
|
Property IsUndefined : Boolean Read GetIsUndefined Write SetIsUndefined;
|
||||||
Property IsNull : Boolean Read GetIsNull Write SetIsNull;
|
Property IsNull : Boolean Read GetIsNull Write SetIsNull;
|
||||||
Property AsNumber : TJSNumber Read GetAsNumber Write SetAsNumber;
|
Property AsNumber : TJSNumber Read GetAsNumber Write SetAsNumber;
|
||||||
@ -144,6 +146,7 @@ begin
|
|||||||
FValue.I:=0;
|
FValue.I:=0;
|
||||||
end;
|
end;
|
||||||
FValueType:=ANewValue;
|
FValueType:=ANewValue;
|
||||||
|
FCustomValue:='';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TJSValue.SetAsBoolean(const AValue: Boolean);
|
procedure TJSValue.SetAsBoolean(const AValue: Boolean);
|
||||||
@ -184,40 +187,46 @@ end;
|
|||||||
|
|
||||||
procedure TJSValue.SetIsNull(const AValue: Boolean);
|
procedure TJSValue.SetIsNull(const AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
ClearValue(jstNull);
|
if AValue then
|
||||||
|
ClearValue(jstNull)
|
||||||
|
else if IsNull then
|
||||||
|
ClearValue(jstUNDEFINED);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TJSValue.SetIsUndefined(const AValue: Boolean);
|
procedure TJSValue.SetIsUndefined(const AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
ClearValue(jstUndefined);
|
if AValue then
|
||||||
|
ClearValue(jstUndefined)
|
||||||
|
else if IsUndefined then
|
||||||
|
ClearValue(jstNull);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Constructor TJSValue.CreateNull;
|
constructor TJSValue.CreateNull;
|
||||||
begin
|
begin
|
||||||
IsNull:=True;
|
IsNull:=True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Constructor TJSValue.Create;
|
constructor TJSValue.Create;
|
||||||
begin
|
begin
|
||||||
IsUndefined:=True;
|
IsUndefined:=True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Constructor TJSValue.Create(ANumber: TJSNumber);
|
constructor TJSValue.Create(ANumber: TJSNumber);
|
||||||
begin
|
begin
|
||||||
AsNumber:=ANumber;
|
AsNumber:=ANumber;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Constructor TJSValue.Create(ABoolean: Boolean);
|
constructor TJSValue.Create(ABoolean: Boolean);
|
||||||
begin
|
begin
|
||||||
AsBoolean:=ABoolean;
|
AsBoolean:=ABoolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Constructor TJSValue.Create(AString: TJSString);
|
constructor TJSValue.Create(AString: TJSString);
|
||||||
begin
|
begin
|
||||||
AsString:=AString;
|
AsString:=AString;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Destructor TJSValue.Destroy;
|
destructor TJSValue.Destroy;
|
||||||
begin
|
begin
|
||||||
ClearValue(jstUndefined);
|
ClearValue(jstUndefined);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
|
@ -425,6 +425,9 @@ procedure TJSWriter.WriteValue(V: TJSValue);
|
|||||||
Var
|
Var
|
||||||
S : String;
|
S : String;
|
||||||
begin
|
begin
|
||||||
|
if V.CustomValue<>'' then
|
||||||
|
S:=V.CustomValue
|
||||||
|
else
|
||||||
Case V.ValueType of
|
Case V.ValueType of
|
||||||
jstUNDEFINED : S:='undefined';
|
jstUNDEFINED : S:='undefined';
|
||||||
jstNull : s:='null';
|
jstNull : s:='null';
|
||||||
|
@ -91,10 +91,10 @@
|
|||||||
- arrays TPasArrayType
|
- arrays TPasArrayType
|
||||||
- check if var initexpr fits vartype: var a: type = expr;
|
- check if var initexpr fits vartype: var a: type = expr;
|
||||||
- built-in functions high, low for range type and arrays
|
- built-in functions high, low for range type and arrays
|
||||||
|
|
||||||
ToDo:
|
|
||||||
- procedure type
|
- procedure type
|
||||||
- method type
|
- method type
|
||||||
|
|
||||||
|
ToDo:
|
||||||
- char constant #0, #10, #13, UTF-8 char
|
- char constant #0, #10, #13, UTF-8 char
|
||||||
- const TArrayValues
|
- const TArrayValues
|
||||||
- classes - TPasClassType
|
- classes - TPasClassType
|
||||||
@ -370,6 +370,7 @@ const
|
|||||||
|
|
||||||
type
|
type
|
||||||
TResolverBuiltInProc = (
|
TResolverBuiltInProc = (
|
||||||
|
bfCustom,
|
||||||
bfLength,
|
bfLength,
|
||||||
bfSetLength,
|
bfSetLength,
|
||||||
bfInclude,
|
bfInclude,
|
||||||
@ -385,6 +386,7 @@ type
|
|||||||
TResolverBuiltInProcs = set of TResolverBuiltInProc;
|
TResolverBuiltInProcs = set of TResolverBuiltInProc;
|
||||||
const
|
const
|
||||||
ResolverBuiltInProcNames: array[TResolverBuiltInProc] of shortstring = (
|
ResolverBuiltInProcNames: array[TResolverBuiltInProc] of shortstring = (
|
||||||
|
'Custom',
|
||||||
'Length',
|
'Length',
|
||||||
'SetLength',
|
'SetLength',
|
||||||
'Include',
|
'Include',
|
||||||
@ -397,7 +399,7 @@ const
|
|||||||
'Low',
|
'Low',
|
||||||
'High'
|
'High'
|
||||||
);
|
);
|
||||||
bfAllStandardProcs = [low(TResolverBuiltInProc)..high(TResolverBuiltInProc)];
|
bfAllStandardProcs = [Succ(bfCustom)..high(TResolverBuiltInProc)];
|
||||||
|
|
||||||
const
|
const
|
||||||
ResolverResultVar = 'Result';
|
ResolverResultVar = 'Result';
|
||||||
@ -766,12 +768,13 @@ type
|
|||||||
TOnGetCallResult = procedure(Proc: TResElDataBuiltInProc; Params: TParamsExpr;
|
TOnGetCallResult = procedure(Proc: TResElDataBuiltInProc; Params: TParamsExpr;
|
||||||
out ResolvedEl: TPasResolverResult) of object;
|
out ResolvedEl: TPasResolverResult) of object;
|
||||||
|
|
||||||
{ TResElDataBuiltInProc - CustomData for compiler built-in procs like 'length' }
|
{ TResElDataBuiltInProc - TPasUnresolvedSymbolRef(aType).CustomData for compiler built-in procs like 'length' }
|
||||||
|
|
||||||
TResElDataBuiltInProc = Class(TResElDataBuiltInSymbol)
|
TResElDataBuiltInProc = Class(TResElDataBuiltInSymbol)
|
||||||
public
|
public
|
||||||
Proc: TPasUnresolvedSymbolRef;
|
Proc: TPasUnresolvedSymbolRef;
|
||||||
Signature: string;
|
Signature: string;
|
||||||
|
BuiltIn: TResolverBuiltInProc;
|
||||||
GetCallCompatibility: TOnGetCallCompatibility;
|
GetCallCompatibility: TOnGetCallCompatibility;
|
||||||
GetCallResult: TOnGetCallResult;
|
GetCallResult: TOnGetCallResult;
|
||||||
end;
|
end;
|
||||||
@ -982,7 +985,8 @@ type
|
|||||||
function IsBaseType(aType: TPasType; BaseType: TResolverBaseType): boolean;
|
function IsBaseType(aType: TPasType; BaseType: TResolverBaseType): boolean;
|
||||||
function AddBuiltInProc(aName: shortstring; Signature: string;
|
function AddBuiltInProc(aName: shortstring; Signature: string;
|
||||||
const GetCallCompatibility: TOnGetCallCompatibility;
|
const GetCallCompatibility: TOnGetCallCompatibility;
|
||||||
const GetCallResult: TOnGetCallResult): TResElDataBuiltInProc;
|
const GetCallResult: TOnGetCallResult;
|
||||||
|
BuiltIn: TResolverBuiltInProc = bfCustom): TResElDataBuiltInProc;
|
||||||
// add extra TResolveData (E.CustomData) to free list
|
// add extra TResolveData (E.CustomData) to free list
|
||||||
procedure AddResolveData(El: TPasElement; Data: TResolveData;
|
procedure AddResolveData(El: TPasElement; Data: TResolveData;
|
||||||
Kind: TResolveDataListKind);
|
Kind: TResolveDataListKind);
|
||||||
@ -6214,37 +6218,37 @@ begin
|
|||||||
AddBaseType(BaseTypeNames[bt],bt);
|
AddBaseType(BaseTypeNames[bt],bt);
|
||||||
if bfLength in BaseProcs then
|
if bfLength in BaseProcs then
|
||||||
AddBuiltInProc('Length','function Length(const String or Array): sizeint',
|
AddBuiltInProc('Length','function Length(const String or Array): sizeint',
|
||||||
@OnGetCallCompatibility_Length,@OnGetCallResult_Length);
|
@OnGetCallCompatibility_Length,@OnGetCallResult_Length,bfLength);
|
||||||
if bfSetLength in BaseProcs then
|
if bfSetLength in BaseProcs then
|
||||||
AddBuiltInProc('SetLength','procedure SetLength(var String or Array; NewLength: sizeint)',
|
AddBuiltInProc('SetLength','procedure SetLength(var String or Array; NewLength: sizeint)',
|
||||||
@OnGetCallCompatibility_SetLength,nil);
|
@OnGetCallCompatibility_SetLength,nil,bfSetLength);
|
||||||
if bfInclude in BaseProcs then
|
if bfInclude in BaseProcs then
|
||||||
AddBuiltInProc('Include','procedure Include(var Set of Enum; const Enum)',
|
AddBuiltInProc('Include','procedure Include(var Set of Enum; const Enum)',
|
||||||
@OnGetCallCompatibility_InExclude,nil);
|
@OnGetCallCompatibility_InExclude,nil,bfInclude);
|
||||||
if bfExclude in BaseProcs then
|
if bfExclude in BaseProcs then
|
||||||
AddBuiltInProc('Exclude','procedure Exclude(var Set of Enum; const Enum)',
|
AddBuiltInProc('Exclude','procedure Exclude(var Set of Enum; const Enum)',
|
||||||
@OnGetCallCompatibility_InExclude,nil);
|
@OnGetCallCompatibility_InExclude,nil,bfExclude);
|
||||||
if bfOrd in BaseProcs then
|
if bfOrd in BaseProcs then
|
||||||
AddBuiltInProc('Ord','function Ord(const Enum or Char): integer',
|
AddBuiltInProc('Ord','function Ord(const Enum or Char): integer',
|
||||||
@OnGetCallCompatibility_Ord,@OnGetCallResult_Ord);
|
@OnGetCallCompatibility_Ord,@OnGetCallResult_Ord,bfOrd);
|
||||||
if bfExit in BaseProcs then
|
if bfExit in BaseProcs then
|
||||||
AddBuiltInProc('Exit','procedure Exit(result)',
|
AddBuiltInProc('Exit','procedure Exit(result)',
|
||||||
@OnGetCallCompatibility_Exit,nil);
|
@OnGetCallCompatibility_Exit,nil,bfExit);
|
||||||
if bfInc in BaseProcs then
|
if bfInc in BaseProcs then
|
||||||
AddBuiltInProc('Inc','procedure Inc(var Integer; const Incr: Integer = 1)',
|
AddBuiltInProc('Inc','procedure Inc(var Integer; const Incr: Integer = 1)',
|
||||||
@OnGetCallCompatibility_IncDec,nil);
|
@OnGetCallCompatibility_IncDec,nil,bfInc);
|
||||||
if bfDec in BaseProcs then
|
if bfDec in BaseProcs then
|
||||||
AddBuiltInProc('Dec','procedure Dec(var Integer; const Decr: Integer = 1)',
|
AddBuiltInProc('Dec','procedure Dec(var Integer; const Decr: Integer = 1)',
|
||||||
@OnGetCallCompatibility_IncDec,nil);
|
@OnGetCallCompatibility_IncDec,nil,bfDec);
|
||||||
if bfAssigned in BaseProcs then
|
if bfAssigned in BaseProcs then
|
||||||
AddBuiltInProc('Assigned','function Assigned(const Pointer or Class or Class-of): boolean',
|
AddBuiltInProc('Assigned','function Assigned(const Pointer or Class or Class-of): boolean',
|
||||||
@OnGetCallCompatibility_Assigned,@OnGetCallResult_Assigned);
|
@OnGetCallCompatibility_Assigned,@OnGetCallResult_Assigned,bfAssigned);
|
||||||
if bfLow in BaseProcs then
|
if bfLow in BaseProcs then
|
||||||
AddBuiltInProc('Low','function Low(const array or ordinal): ordinal or integer',
|
AddBuiltInProc('Low','function Low(const array or ordinal): ordinal or integer',
|
||||||
@OnGetCallCompatibility_LowHigh,@OnGetCallResult_LowHigh);
|
@OnGetCallCompatibility_LowHigh,@OnGetCallResult_LowHigh,bfLow);
|
||||||
if bfHigh in BaseProcs then
|
if bfHigh in BaseProcs then
|
||||||
AddBuiltInProc('High','function High(const array or ordinal): ordinal or integer',
|
AddBuiltInProc('High','function High(const array or ordinal): ordinal or integer',
|
||||||
@OnGetCallCompatibility_LowHigh,@OnGetCallResult_LowHigh);
|
@OnGetCallCompatibility_LowHigh,@OnGetCallResult_LowHigh,bfHigh);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasResolver.AddBaseType(aName: shortstring; Typ: TResolverBaseType
|
function TPasResolver.AddBaseType(aName: shortstring; Typ: TResolverBaseType
|
||||||
@ -6272,7 +6276,8 @@ end;
|
|||||||
|
|
||||||
function TPasResolver.AddBuiltInProc(aName: shortstring; Signature: string;
|
function TPasResolver.AddBuiltInProc(aName: shortstring; Signature: string;
|
||||||
const GetCallCompatibility: TOnGetCallCompatibility;
|
const GetCallCompatibility: TOnGetCallCompatibility;
|
||||||
const GetCallResult: TOnGetCallResult): TResElDataBuiltInProc;
|
const GetCallResult: TOnGetCallResult; BuiltIn: TResolverBuiltInProc
|
||||||
|
): TResElDataBuiltInProc;
|
||||||
var
|
var
|
||||||
El: TPasUnresolvedSymbolRef;
|
El: TPasUnresolvedSymbolRef;
|
||||||
begin
|
begin
|
||||||
@ -6280,6 +6285,7 @@ begin
|
|||||||
Result:=TResElDataBuiltInProc.Create;
|
Result:=TResElDataBuiltInProc.Create;
|
||||||
Result.Proc:=El;
|
Result.Proc:=El;
|
||||||
Result.Signature:=Signature;
|
Result.Signature:=Signature;
|
||||||
|
Result.BuiltIn:=BuiltIn;
|
||||||
Result.GetCallCompatibility:=GetCallCompatibility;
|
Result.GetCallCompatibility:=GetCallCompatibility;
|
||||||
Result.GetCallResult:=GetCallResult;
|
Result.GetCallResult:=GetCallResult;
|
||||||
AddResolveData(El,Result,lkBuiltIn);
|
AddResolveData(El,Result,lkBuiltIn);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -611,7 +611,7 @@ begin
|
|||||||
AssertNull('No second statement',L.B);
|
AssertNull('No second statement',L.B);
|
||||||
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
||||||
AssertAssignStatement('Correct assignment in except..end block',L.A,'b','c');
|
AssertAssignStatement('Correct assignment in except..end block',L.A,'b','c');
|
||||||
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),El.Ident);
|
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),String(El.Ident));
|
||||||
AssertNull('No second statement',L.B);
|
AssertNull('No second statement',L.B);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -648,7 +648,7 @@ begin
|
|||||||
O.Body:=CreateAssignStatement('b','c');
|
O.Body:=CreateAssignStatement('b','c');
|
||||||
// Convert
|
// Convert
|
||||||
El:=TJSTryFinallyStatement(Convert(T,TJSTryCatchStatement));
|
El:=TJSTryFinallyStatement(Convert(T,TJSTryCatchStatement));
|
||||||
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),EL.Ident);
|
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),String(El.Ident));
|
||||||
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
||||||
AssertNull('No second statement',L.B);
|
AssertNull('No second statement',L.B);
|
||||||
I:=TJSIfStatement(AssertElement('On block is if',TJSIfStatement,L.A));
|
I:=TJSIfStatement(AssertElement('On block is if',TJSIfStatement,L.A));
|
||||||
@ -696,7 +696,7 @@ begin
|
|||||||
O.Body:=TPasImplRaise.Create('',Nil);
|
O.Body:=TPasImplRaise.Create('',Nil);
|
||||||
// Convert
|
// Convert
|
||||||
El:=TJSTryFinallyStatement(Convert(T,TJSTryCatchStatement));
|
El:=TJSTryFinallyStatement(Convert(T,TJSTryCatchStatement));
|
||||||
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),EL.Ident);
|
AssertEquals('Correct exception object name',lowercase(DefaultJSExceptionObject),String(El.Ident));
|
||||||
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
L:=AssertListStatement('try..except block is statement list',El.BCatch);
|
||||||
AssertNull('No second statement',L.B);
|
AssertNull('No second statement',L.B);
|
||||||
I:=TJSIfStatement(AssertElement('On block is if',TJSIfStatement,L.A));
|
I:=TJSIfStatement(AssertElement('On block is if',TJSIfStatement,L.A));
|
||||||
@ -782,7 +782,7 @@ begin
|
|||||||
S:=TPrimitiveExpr.Create(Nil,pekString,'''me''');
|
S:=TPrimitiveExpr.Create(Nil,pekString,'''me''');
|
||||||
E:=TestLiteralExpression(S,TJSLiteral);
|
E:=TestLiteralExpression(S,TJSLiteral);
|
||||||
AssertEquals('Correct literal type',jstString,E.Value.ValueType);
|
AssertEquals('Correct literal type',jstString,E.Value.ValueType);
|
||||||
AssertEquals('Correct literal value','me',E.Value.AsString);
|
AssertEquals('Correct literal value','me',String(E.Value.AsString));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TTestExpressionConverter.TestPrimitiveNumber;
|
Procedure TTestExpressionConverter.TestPrimitiveNumber;
|
||||||
@ -843,7 +843,7 @@ Var
|
|||||||
begin
|
begin
|
||||||
Id:=TPrimitiveExpr.Create(Nil,pekIdent,'a');
|
Id:=TPrimitiveExpr.Create(Nil,pekIdent,'a');
|
||||||
Res:=TJSPrimaryExpressionIdent(Convert(Id,TJSPrimaryExpressionIdent));
|
Res:=TJSPrimaryExpressionIdent(Convert(Id,TJSPrimaryExpressionIdent));
|
||||||
AssertEquals('Correct identifier name','a',Res.Name);
|
AssertEquals('Correct identifier name','a',String(Res.Name));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TTestExpressionConverter.TestUnaryMinus;
|
Procedure TTestExpressionConverter.TestUnaryMinus;
|
||||||
@ -1203,7 +1203,7 @@ begin
|
|||||||
Uni:=TJSUnary(AssertElement('Sl.A is TJSUnary',TJSUnary,Sl.A));
|
Uni:=TJSUnary(AssertElement('Sl.A is TJSUnary',TJSUnary,Sl.A));
|
||||||
Asi:=TJSSimpleAssignStatement(AssertElement('Sl.A is TJSUnary',TJSSimpleAssignStatement,Uni.A));
|
Asi:=TJSSimpleAssignStatement(AssertElement('Sl.A is TJSUnary',TJSSimpleAssignStatement,Uni.A));
|
||||||
pex:=TJSPrimaryExpressionIdent(AssertElement('Asi.LHS is TJSPrimaryExpressionIdent',TJSPrimaryExpressionIdent,Asi.LHS));
|
pex:=TJSPrimaryExpressionIdent(AssertElement('Asi.LHS is TJSPrimaryExpressionIdent',TJSPrimaryExpressionIdent,Asi.LHS));
|
||||||
AssertEquals('Correct name','myclass',pex.Name);
|
AssertEquals('Correct name','myclass',String(pex.Name));
|
||||||
Call:=TJSCallExpression(AssertElement('Asi.Expr is TJSCallExpression',TJSCallExpression,Asi.Expr));
|
Call:=TJSCallExpression(AssertElement('Asi.Expr is TJSCallExpression',TJSCallExpression,Asi.Expr));
|
||||||
if Call=nil then ;
|
if Call=nil then ;
|
||||||
end;
|
end;
|
||||||
@ -1264,7 +1264,7 @@ end;
|
|||||||
Class procedure TTestConverter.AssertLiteral(Const Msg : String; Lit: TJSElement; AValue: TJSString);
|
Class procedure TTestConverter.AssertLiteral(Const Msg : String; Lit: TJSElement; AValue: TJSString);
|
||||||
begin
|
begin
|
||||||
AssertLiteral(Msg,Lit,jstString);
|
AssertLiteral(Msg,Lit,jstString);
|
||||||
AssertEquals(Msg+': Correct value',AValue,TJSLiteral(Lit).Value.AsString);
|
AssertEquals(Msg+': Correct value',String(AValue),String(TJSLiteral(Lit).Value.AsString));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Class procedure TTestConverter.AssertLiteral(Const Msg : String; Lit: TJSElement; AValue: TJSNumber);
|
Class procedure TTestConverter.AssertLiteral(Const Msg : String; Lit: TJSElement; AValue: TJSNumber);
|
||||||
@ -1278,12 +1278,12 @@ Class procedure TTestConverter.AssertIdentifier(Const Msg: String;
|
|||||||
begin
|
begin
|
||||||
AssertNotNull(Msg+': Have instance',Ident);
|
AssertNotNull(Msg+': Have instance',Ident);
|
||||||
AssertEquals(Msg+': Correct class',TJSPrimaryExpressionIdent,Ident.ClassType);
|
AssertEquals(Msg+': Correct class',TJSPrimaryExpressionIdent,Ident.ClassType);
|
||||||
AssertEquals(Msg+': Correct name',AName,TJSPrimaryExpressionIdent(Ident).Name);
|
AssertEquals(Msg+': Correct name',AName,String(TJSPrimaryExpressionIdent(Ident).Name));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Class Function TTestConverter.CreateLiteral(AValue: String): TPasExpr;
|
Class Function TTestConverter.CreateLiteral(AValue: String): TPasExpr;
|
||||||
begin
|
begin
|
||||||
Result:=TPrimitiveExpr.Create(Nil,pekString,'me');
|
Result:=TPrimitiveExpr.Create(Nil,pekString,AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Class Function TTestConverter.CreateLiteral(AValue: Double): TPasExpr;
|
Class Function TTestConverter.CreateLiteral(AValue: Double): TPasExpr;
|
||||||
@ -1293,7 +1293,7 @@ Var
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
Str(AValue,S);
|
Str(AValue,S);
|
||||||
Result:=TPrimitiveExpr.Create(Nil,pekNumber,S);
|
Result:=TPrimitiveExpr.Create(Nil,pekNumber,Trim(S));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Class Function TTestConverter.CreateIdent(AName: String): TPrimitiveExpr;
|
Class Function TTestConverter.CreateIdent(AName: String): TPrimitiveExpr;
|
||||||
|
Loading…
Reference in New Issue
Block a user