|
@@ -1511,7 +1511,7 @@ type
|
|
Function GetExpressionValueType(El: TPasExpr; AContext: TConvertContext ): TJSType; virtual;
|
|
Function GetExpressionValueType(El: TPasExpr; AContext: TConvertContext ): TJSType; virtual;
|
|
Function GetPasIdentValueType(AName: String; AContext: TConvertContext): TJSType; virtual;
|
|
Function GetPasIdentValueType(AName: String; AContext: TConvertContext): TJSType; virtual;
|
|
Function ComputeConstString(Expr: TPasExpr; AContext: TConvertContext; NotEmpty: boolean): String; virtual;
|
|
Function ComputeConstString(Expr: TPasExpr; AContext: TConvertContext; NotEmpty: boolean): String; virtual;
|
|
- Function IsLiteralInteger(El: TJSElement; out Number: MaxPrecInt): boolean;
|
|
|
|
|
|
+ Function IsLiteralInteger(El: TJSElement; out Number: TMaxPrecInt): boolean;
|
|
Function IsLiteralNumber(El: TJSElement; out n: TJSNumber): boolean;
|
|
Function IsLiteralNumber(El: TJSElement; out n: TJSNumber): boolean;
|
|
// Name mangling
|
|
// Name mangling
|
|
Function GetOverloadName(El: TPasElement; AContext: TConvertContext): string;
|
|
Function GetOverloadName(El: TPasElement; AContext: TConvertContext): string;
|
|
@@ -1577,8 +1577,8 @@ type
|
|
Procedure ConvertCharLiteralToInt(Lit: TJSLiteral; ErrorEl: TPasElement; AContext: TConvertContext); virtual;
|
|
Procedure ConvertCharLiteralToInt(Lit: TJSLiteral; ErrorEl: TPasElement; AContext: TConvertContext); virtual;
|
|
Function ClonePrimaryExpression(El: TJSPrimaryExpression; Src: TPasElement): TJSPrimaryExpression;
|
|
Function ClonePrimaryExpression(El: TJSPrimaryExpression; Src: TPasElement): TJSPrimaryExpression;
|
|
// simple JS expressions
|
|
// simple JS expressions
|
|
- Function CreateMulNumber(El: TPasElement; JS: TJSElement; n: MaxPrecInt): TJSElement; virtual;
|
|
|
|
- Function CreateDivideNumber(El: TPasElement; JS: TJSElement; n: MaxPrecInt): TJSElement; virtual;
|
|
|
|
|
|
+ Function CreateMulNumber(El: TPasElement; JS: TJSElement; n: TMaxPrecInt): TJSElement; virtual;
|
|
|
|
+ Function CreateDivideNumber(El: TPasElement; JS: TJSElement; n: TMaxPrecInt): TJSElement; virtual;
|
|
Function CreateMathFloor(El: TPasElement; JS: TJSElement): TJSElement; virtual;
|
|
Function CreateMathFloor(El: TPasElement; JS: TJSElement): TJSElement; virtual;
|
|
Function CreateDotExpression(aParent: TPasElement; Left, Right: TJSElement;
|
|
Function CreateDotExpression(aParent: TPasElement; Left, Right: TJSElement;
|
|
CheckRightIntfRef: boolean = false): TJSElement; virtual;
|
|
CheckRightIntfRef: boolean = false): TJSElement; virtual;
|
|
@@ -1786,7 +1786,7 @@ type
|
|
otSIntDouble, // 6 NativeInt
|
|
otSIntDouble, // 6 NativeInt
|
|
otUIntDouble // 7 NativeUInt
|
|
otUIntDouble // 7 NativeUInt
|
|
);
|
|
);
|
|
- Function GetOrdType(MinValue, MaxValue: MaxPrecInt; ErrorEl: TPasElement): TOrdType; virtual;
|
|
|
|
|
|
+ Function GetOrdType(MinValue, MaxValue: TMaxPrecInt; ErrorEl: TPasElement): TOrdType; virtual;
|
|
Public
|
|
Public
|
|
Constructor Create;
|
|
Constructor Create;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -5588,7 +5588,7 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.IsLiteralInteger(El: TJSElement; out
|
|
function TPasToJSConverter.IsLiteralInteger(El: TJSElement; out
|
|
- Number: MaxPrecInt): boolean;
|
|
|
|
|
|
+ Number: TMaxPrecInt): boolean;
|
|
var
|
|
var
|
|
Value: TJSValue;
|
|
Value: TJSValue;
|
|
begin
|
|
begin
|
|
@@ -7353,7 +7353,7 @@ var
|
|
Arg, ArrJS: TJSElement;
|
|
Arg, ArrJS: TJSElement;
|
|
OldAccess: TCtxAccess;
|
|
OldAccess: TCtxAccess;
|
|
Ranges: TPasExprArray;
|
|
Ranges: TPasExprArray;
|
|
- Int: MaxPrecInt;
|
|
|
|
|
|
+ Int: TMaxPrecInt;
|
|
Param: TPasExpr;
|
|
Param: TPasExpr;
|
|
JSAdd: TJSAdditiveExpression;
|
|
JSAdd: TJSAdditiveExpression;
|
|
LowRg: TResEvalValue;
|
|
LowRg: TResEvalValue;
|
|
@@ -8522,7 +8522,7 @@ var
|
|
JSBaseType:=JSBaseTypeData.JSBaseType;
|
|
JSBaseType:=JSBaseTypeData.JSBaseType;
|
|
end;
|
|
end;
|
|
|
|
|
|
- function CreateBitWiseAnd(Value: TJSElement; const Mask: MaxPrecInt; Shift: integer): TJSElement;
|
|
|
|
|
|
+ function CreateBitWiseAnd(Value: TJSElement; const Mask: TMaxPrecInt; Shift: integer): TJSElement;
|
|
// ig sign=false: Value & Mask
|
|
// ig sign=false: Value & Mask
|
|
// if sign=true: Value & Mask << ZeroBits >> ZeroBits
|
|
// if sign=true: Value & Mask << ZeroBits >> ZeroBits
|
|
var
|
|
var
|
|
@@ -8570,7 +8570,7 @@ var
|
|
AddExpr: TJSAdditiveExpressionPlus;
|
|
AddExpr: TJSAdditiveExpressionPlus;
|
|
TypeEl: TPasType;
|
|
TypeEl: TPasType;
|
|
C: TClass;
|
|
C: TClass;
|
|
- Int, MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ Int, MinVal, MaxVal: TMaxPrecInt;
|
|
aResolver: TPas2JSResolver;
|
|
aResolver: TPas2JSResolver;
|
|
ShiftEx: TJSURShiftExpression;
|
|
ShiftEx: TJSURShiftExpression;
|
|
begin
|
|
begin
|
|
@@ -8954,7 +8954,7 @@ var
|
|
ParamResolved: TPasResolverResult;
|
|
ParamResolved: TPasResolverResult;
|
|
Ranges: TPasExprArray;
|
|
Ranges: TPasExprArray;
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
- RgLen: MaxPrecInt;
|
|
|
|
|
|
+ RgLen: TMaxPrecInt;
|
|
begin
|
|
begin
|
|
Result:=nil;
|
|
Result:=nil;
|
|
Param:=El.Params[0];
|
|
Param:=El.Params[0];
|
|
@@ -9477,7 +9477,7 @@ var
|
|
Value: TResEvalValue;
|
|
Value: TResEvalValue;
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
MinusExpr: TJSAdditiveExpressionMinus;
|
|
MinusExpr: TJSAdditiveExpressionMinus;
|
|
- MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ MinVal, MaxVal: TMaxPrecInt;
|
|
begin
|
|
begin
|
|
Result:=nil;
|
|
Result:=nil;
|
|
if AContext.Resolver=nil then
|
|
if AContext.Resolver=nil then
|
|
@@ -10376,7 +10376,7 @@ var
|
|
Param: TPasExpr;
|
|
Param: TPasExpr;
|
|
TypeEl: TPasType;
|
|
TypeEl: TPasType;
|
|
Value: TResEvalValue;
|
|
Value: TResEvalValue;
|
|
- MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ MinVal, MaxVal: TMaxPrecInt;
|
|
C: TClass;
|
|
C: TClass;
|
|
begin
|
|
begin
|
|
Result:=nil;
|
|
Result:=nil;
|
|
@@ -11889,7 +11889,7 @@ var
|
|
TIObj: TJSObjectLiteral;
|
|
TIObj: TJSObjectLiteral;
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
MinVal, MaxVal: TResEvalValue;
|
|
MinVal, MaxVal: TResEvalValue;
|
|
- MinInt, MaxInt: MaxPrecInt;
|
|
|
|
|
|
+ MinInt, MaxInt: TMaxPrecInt;
|
|
OrdType: TOrdType;
|
|
OrdType: TOrdType;
|
|
TIProp: TJSObjectLiteralElement;
|
|
TIProp: TJSObjectLiteralElement;
|
|
fn: TPas2JSBuiltInName;
|
|
fn: TPas2JSBuiltInName;
|
|
@@ -12109,7 +12109,7 @@ var
|
|
ElType: TPasType;
|
|
ElType: TPasType;
|
|
RangeEl: TPasExpr;
|
|
RangeEl: TPasExpr;
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
- RgLen, RangeEnd: MaxPrecInt;
|
|
|
|
|
|
+ RgLen, RangeEnd: TMaxPrecInt;
|
|
List: TJSStatementList;
|
|
List: TJSStatementList;
|
|
Func: TJSFunctionDeclarationStatement;
|
|
Func: TJSFunctionDeclarationStatement;
|
|
Src: TJSSourceElements;
|
|
Src: TJSSourceElements;
|
|
@@ -12264,10 +12264,10 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TPasToJSConverter.GetOrdType(MinValue, MaxValue: MaxPrecInt;
|
|
|
|
|
|
+function TPasToJSConverter.GetOrdType(MinValue, MaxValue: TMaxPrecInt;
|
|
ErrorEl: TPasElement): TOrdType;
|
|
ErrorEl: TPasElement): TOrdType;
|
|
var
|
|
var
|
|
- V: MaxPrecInt;
|
|
|
|
|
|
+ V: TMaxPrecInt;
|
|
begin
|
|
begin
|
|
if MinValue<0 then
|
|
if MinValue<0 then
|
|
begin
|
|
begin
|
|
@@ -12373,7 +12373,7 @@ var
|
|
BodyJS.A:=FirstSt;
|
|
BodyJS.A:=FirstSt;
|
|
end;
|
|
end;
|
|
|
|
|
|
- procedure AddRangeCheck(Arg: TPasArgument; MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ procedure AddRangeCheck(Arg: TPasArgument; MinVal, MaxVal: TMaxPrecInt;
|
|
RTLFunc: TPas2JSBuiltInName);
|
|
RTLFunc: TPas2JSBuiltInName);
|
|
var
|
|
var
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
@@ -12431,7 +12431,7 @@ Var
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
ClassPath: String;
|
|
ClassPath: String;
|
|
ArgResolved: TPasResolverResult;
|
|
ArgResolved: TPasResolverResult;
|
|
- MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ MinVal, MaxVal: TMaxPrecInt;
|
|
Lit: TJSLiteral;
|
|
Lit: TJSLiteral;
|
|
ConstSrcElems: TJSSourceElements;
|
|
ConstSrcElems: TJSSourceElements;
|
|
ArgTypeEl: TPasType;
|
|
ArgTypeEl: TPasType;
|
|
@@ -13986,7 +13986,7 @@ var
|
|
Path: String;
|
|
Path: String;
|
|
FuncContext: TFunctionContext;
|
|
FuncContext: TFunctionContext;
|
|
DotExpr: TJSDotMemberExpression;
|
|
DotExpr: TJSDotMemberExpression;
|
|
- i: MaxPrecInt;
|
|
|
|
|
|
+ i: TMaxPrecInt;
|
|
JSExpr: TJSElement;
|
|
JSExpr: TJSElement;
|
|
begin
|
|
begin
|
|
if ArrayExpr is TJSArrayLiteral then
|
|
if ArrayExpr is TJSArrayLiteral then
|
|
@@ -15105,7 +15105,7 @@ function TPasToJSConverter.ConvertAssignStatement(El: TPasImplAssign;
|
|
end;
|
|
end;
|
|
|
|
|
|
function CreateRangeCheck(AssignSt: TJSElement;
|
|
function CreateRangeCheck(AssignSt: TJSElement;
|
|
- MinVal, MaxVal: MaxPrecInt; RTLFunc: TPas2JSBuiltInName): TJSElement;
|
|
|
|
|
|
+ MinVal, MaxVal: TMaxPrecInt; RTLFunc: TPas2JSBuiltInName): TJSElement;
|
|
var
|
|
var
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
begin
|
|
begin
|
|
@@ -15165,7 +15165,7 @@ Var
|
|
Flags: TPasResolverComputeFlags;
|
|
Flags: TPasResolverComputeFlags;
|
|
LeftIsProcType, NeedClone: Boolean;
|
|
LeftIsProcType, NeedClone: Boolean;
|
|
Call: TJSCallExpression;
|
|
Call: TJSCallExpression;
|
|
- MinVal, MaxVal: MaxPrecInt;
|
|
|
|
|
|
+ MinVal, MaxVal: TMaxPrecInt;
|
|
RightTypeEl, LeftTypeEl: TPasType;
|
|
RightTypeEl, LeftTypeEl: TPasType;
|
|
aResolver: TPas2JSResolver;
|
|
aResolver: TPas2JSResolver;
|
|
NewMemE, NewME: TJSNewMemberExpression;
|
|
NewMemE, NewME: TJSNewMemberExpression;
|
|
@@ -15651,7 +15651,7 @@ var
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
- function GetOrd(Value: TResEvalValue; ErrorEl: TPasElement): MaxPrecInt; overload;
|
|
|
|
|
|
+ function GetOrd(Value: TResEvalValue; ErrorEl: TPasElement): TMaxPrecInt; overload;
|
|
var
|
|
var
|
|
OrdValue: TResEvalValue;
|
|
OrdValue: TResEvalValue;
|
|
begin
|
|
begin
|
|
@@ -15667,7 +15667,7 @@ var
|
|
ReleaseEvalValue(OrdValue);
|
|
ReleaseEvalValue(OrdValue);
|
|
end;
|
|
end;
|
|
|
|
|
|
- function GetEnumValue(EnumType: TPasEnumType; Int: MaxPrecInt): TResEvalValue; overload;
|
|
|
|
|
|
+ function GetEnumValue(EnumType: TPasEnumType; Int: TMaxPrecInt): TResEvalValue; overload;
|
|
begin
|
|
begin
|
|
if (coEnumNumbers in Options) or (Int<0) or (Int>=EnumType.Values.Count) then
|
|
if (coEnumNumbers in Options) or (Int<0) or (Int>=EnumType.Values.Count) then
|
|
Result:=TResEvalInt.CreateValue(Int)
|
|
Result:=TResEvalInt.CreateValue(Int)
|
|
@@ -15679,7 +15679,7 @@ var
|
|
FuncContext: TConvertContext;
|
|
FuncContext: TConvertContext;
|
|
VarResolved, InResolved: TPasResolverResult;
|
|
VarResolved, InResolved: TPasResolverResult;
|
|
StartValue, EndValue, InValue: TResEvalValue;
|
|
StartValue, EndValue, InValue: TResEvalValue;
|
|
- StartInt, EndInt: MaxPrecInt;
|
|
|
|
|
|
+ StartInt, EndInt: TMaxPrecInt;
|
|
HasLoopVar, HasEndVar, HasInVar: Boolean;
|
|
HasLoopVar, HasEndVar, HasInVar: Boolean;
|
|
InKind: TInKind;
|
|
InKind: TInKind;
|
|
ForScope: TPasForLoopScope;
|
|
ForScope: TPasForLoopScope;
|
|
@@ -17094,7 +17094,7 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.CreateMulNumber(El: TPasElement; JS: TJSElement;
|
|
function TPasToJSConverter.CreateMulNumber(El: TPasElement; JS: TJSElement;
|
|
- n: MaxPrecInt): TJSElement;
|
|
|
|
|
|
+ n: TMaxPrecInt): TJSElement;
|
|
// create JS*n
|
|
// create JS*n
|
|
var
|
|
var
|
|
Mul: TJSMultiplicativeExpressionMul;
|
|
Mul: TJSMultiplicativeExpressionMul;
|
|
@@ -17141,7 +17141,7 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.CreateDivideNumber(El: TPasElement; JS: TJSElement;
|
|
function TPasToJSConverter.CreateDivideNumber(El: TPasElement; JS: TJSElement;
|
|
- n: MaxPrecInt): TJSElement;
|
|
|
|
|
|
+ n: TMaxPrecInt): TJSElement;
|
|
// create JS/n
|
|
// create JS/n
|
|
var
|
|
var
|
|
Mul: TJSMultiplicativeExpressionDiv;
|
|
Mul: TJSMultiplicativeExpressionDiv;
|