|
@@ -245,13 +245,14 @@ Works:
|
|
- use 0o for octal literals
|
|
- use 0o for octal literals
|
|
|
|
|
|
ToDos:
|
|
ToDos:
|
|
|
|
+- jsinteger (pasresolver: btIntDouble)
|
|
|
|
+- bark if there is an overload in the same unit with same signature
|
|
- RTTI
|
|
- RTTI
|
|
- - jsinteger (pasresolver: btIntDouble)
|
|
|
|
|
|
+ - stored false/true
|
|
- class property
|
|
- class property
|
|
- defaultvalue
|
|
- defaultvalue
|
|
- type alias type
|
|
- type alias type
|
|
- documentation
|
|
- documentation
|
|
-- warn int64
|
|
|
|
- move local types to unit scope
|
|
- move local types to unit scope
|
|
- local var absolute
|
|
- local var absolute
|
|
- make -Jirtl.js default for -Jc and -Tnodejs, needs #IFDEF in cfg
|
|
- make -Jirtl.js default for -Jc and -Tnodejs, needs #IFDEF in cfg
|
|
@@ -1129,7 +1130,8 @@ type
|
|
Function ComputeConstString(Expr: TPasExpr; AContext: TConvertContext; NotEmpty: boolean): String; virtual;
|
|
Function ComputeConstString(Expr: TPasExpr; AContext: TConvertContext; NotEmpty: boolean): String; virtual;
|
|
Function IsExternalClassConstructor(El: TPasElement): boolean;
|
|
Function IsExternalClassConstructor(El: TPasElement): boolean;
|
|
Procedure ComputeRange(const RangeResolved: TPasResolverResult;
|
|
Procedure ComputeRange(const RangeResolved: TPasResolverResult;
|
|
- out MinValue, MaxValue: int64; ErrorEl: TPasElement); virtual;
|
|
|
|
|
|
+ AContext: TConvertContext; out MinValue, MaxValue: int64;
|
|
|
|
+ ErrorEl: TPasElement); virtual;
|
|
// Name mangling
|
|
// Name mangling
|
|
Function TransformVariableName(El: TPasElement; Const AName: String; AContext : TConvertContext): String; virtual;
|
|
Function TransformVariableName(El: TPasElement; Const AName: String; AContext : TConvertContext): String; virtual;
|
|
Function TransformVariableName(El: TPasElement; AContext : TConvertContext) : String; virtual;
|
|
Function TransformVariableName(El: TPasElement; AContext : TConvertContext) : String; virtual;
|
|
@@ -3750,8 +3752,8 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TPasToJSConverter.ComputeRange(
|
|
procedure TPasToJSConverter.ComputeRange(
|
|
- const RangeResolved: TPasResolverResult; out MinValue, MaxValue: int64;
|
|
|
|
- ErrorEl: TPasElement);
|
|
|
|
|
|
+ const RangeResolved: TPasResolverResult; AContext: TConvertContext; out
|
|
|
|
+ MinValue, MaxValue: int64; ErrorEl: TPasElement);
|
|
var
|
|
var
|
|
EnumType: TPasEnumType;
|
|
EnumType: TPasEnumType;
|
|
begin
|
|
begin
|
|
@@ -3806,7 +3808,7 @@ begin
|
|
end
|
|
end
|
|
else
|
|
else
|
|
DoError(20170411224022,nPasElementNotSupported,sPasElementNotSupported,
|
|
DoError(20170411224022,nPasElementNotSupported,sPasElementNotSupported,
|
|
- [BaseTypeNames[RangeResolved.BaseType]],ErrorEl);
|
|
|
|
|
|
+ [AContext.Resolver.BaseTypeNames[RangeResolved.BaseType]],ErrorEl);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBinaryExpression(El: TBinaryExpr;
|
|
function TPasToJSConverter.ConvertBinaryExpression(El: TBinaryExpr;
|
|
@@ -4691,7 +4693,7 @@ begin
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
{$IFDEF VerbosePas2JS}
|
|
{$IFDEF VerbosePas2JS}
|
|
- writeln('TPasToJSConverter.ConvertInheritedExpression Parent=',GetTreeDesc(El.Parent,2));
|
|
|
|
|
|
+ writeln('TPasToJSConverter.ConvertInheritedExpression Parent=',GetTreeDbg(El.Parent,2));
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
DoError(20170418205955,nXExpectedButYFound,sXExpectedButYFound,
|
|
DoError(20170418205955,nXExpectedButYFound,sXExpectedButYFound,
|
|
['inherited name()',Right.ElementTypeName],Right);
|
|
['inherited name()',Right.ElementTypeName],Right);
|
|
@@ -5692,7 +5694,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
{$IFDEF VerbosePas2JS}
|
|
{$IFDEF VerbosePas2JS}
|
|
- writeln('TPasToJSConverter.ConvertTypeCastToBaseType BaseTypeData=',BaseTypeNames[to_bt],' ParamResolved=',GetResolverResultDbg(ParamResolved));
|
|
|
|
|
|
+ writeln('TPasToJSConverter.ConvertTypeCastToBaseType BaseTypeData=',AContext.Resolver.BaseTypeNames[to_bt],' ParamResolved=',GetResolverResultDbg(ParamResolved));
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
RaiseNotSupported(El,AContext,20170325161150);
|
|
RaiseNotSupported(El,AContext,20170325161150);
|
|
end;
|
|
end;
|
|
@@ -5812,7 +5814,7 @@ begin
|
|
RaiseNotSupported(El,AContext,20170223131042);
|
|
RaiseNotSupported(El,AContext,20170223131042);
|
|
RangeEl:=Ranges[0];
|
|
RangeEl:=Ranges[0];
|
|
AContext.Resolver.ComputeElement(RangeEl,RangeResolved,[rcType]);
|
|
AContext.Resolver.ComputeElement(RangeEl,RangeResolved,[rcType]);
|
|
- ComputeRange(RangeResolved,aMinValue,aMaxValue,RangeEl);
|
|
|
|
|
|
+ ComputeRange(RangeResolved,AContext,aMinValue,aMaxValue,RangeEl);
|
|
Result:=CreateLiteralNumber(El,aMaxValue-aMinValue+1);
|
|
Result:=CreateLiteralNumber(El,aMaxValue-aMinValue+1);
|
|
exit;
|
|
exit;
|
|
end
|
|
end
|
|
@@ -6094,7 +6096,8 @@ begin
|
|
Result:=Call;
|
|
Result:=Call;
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
- DoError(20170325185906,nExpectedXButFoundY,sExpectedXButFoundY,['integer',GetResolverResultDescription(ParamResolved)],Param);
|
|
|
|
|
|
+ DoError(20170325185906,nExpectedXButFoundY,sExpectedXButFoundY,['integer',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ParamResolved)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_Ord(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_Ord(El: TParamsExpr;
|
|
@@ -6163,7 +6166,8 @@ begin
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
- DoError(20170210105339,nExpectedXButFoundY,sExpectedXButFoundY,['enum',GetResolverResultDescription(ParamResolved)],Param);
|
|
|
|
|
|
+ DoError(20170210105339,nExpectedXButFoundY,sExpectedXButFoundY,['enum',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ParamResolved)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_Low(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_Low(El: TParamsExpr;
|
|
@@ -6260,7 +6264,8 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
- DoError(20170210110717,nExpectedXButFoundY,sExpectedXButFoundY,['enum or array',GetResolverResultDescription(ResolvedEl)],Param);
|
|
|
|
|
|
+ DoError(20170210110717,nExpectedXButFoundY,sExpectedXButFoundY,['enum or array',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ResolvedEl)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_High(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_High(El: TParamsExpr;
|
|
@@ -6346,7 +6351,7 @@ begin
|
|
end
|
|
end
|
|
else if RangeResolved.BaseType in btAllJSInteger then
|
|
else if RangeResolved.BaseType in btAllJSInteger then
|
|
begin
|
|
begin
|
|
- ComputeRange(RangeResolved,aMinValue,aMaxValue,Range);
|
|
|
|
|
|
+ ComputeRange(RangeResolved,AContext,aMinValue,aMaxValue,Range);
|
|
Result:=CreateLiteralNumber(Param,aMaxValue);
|
|
Result:=CreateLiteralNumber(Param,aMaxValue);
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
@@ -6369,7 +6374,8 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
- DoError(20170210114139,nExpectedXButFoundY,sExpectedXButFoundY,['enum or array',GetResolverResultDescription(ResolvedEl)],Param);
|
|
|
|
|
|
+ DoError(20170210114139,nExpectedXButFoundY,sExpectedXButFoundY,['enum or array',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ResolvedEl)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_Pred(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_Pred(El: TParamsExpr;
|
|
@@ -6396,7 +6402,8 @@ begin
|
|
Result:=Expr;
|
|
Result:=Expr;
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
- DoError(20170210120039,nExpectedXButFoundY,sExpectedXButFoundY,['enum',GetResolverResultDescription(ResolvedEl)],Param);
|
|
|
|
|
|
+ DoError(20170210120039,nExpectedXButFoundY,sExpectedXButFoundY,['enum',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ResolvedEl)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_Succ(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_Succ(El: TParamsExpr;
|
|
@@ -6423,7 +6430,8 @@ begin
|
|
Result:=Expr;
|
|
Result:=Expr;
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
- DoError(20170210120626,nExpectedXButFoundY,sExpectedXButFoundY,['enum',GetResolverResultDescription(ResolvedEl)],Param);
|
|
|
|
|
|
+ DoError(20170210120626,nExpectedXButFoundY,sExpectedXButFoundY,['enum',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ResolvedEl)],Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertBuiltIn_StrProc(El: TParamsExpr;
|
|
function TPasToJSConverter.ConvertBuiltIn_StrProc(El: TParamsExpr;
|
|
@@ -7885,7 +7893,7 @@ begin
|
|
repeat
|
|
repeat
|
|
RangeEl:=Arr.Ranges[Index];
|
|
RangeEl:=Arr.Ranges[Index];
|
|
AContext.Resolver.ComputeElement(RangeEl,RangeResolved,[rcType]);
|
|
AContext.Resolver.ComputeElement(RangeEl,RangeResolved,[rcType]);
|
|
- ComputeRange(RangeResolved,aMinValue,aMaxValue,RangeEl);
|
|
|
|
|
|
+ ComputeRange(RangeResolved,AContext,aMinValue,aMaxValue,RangeEl);
|
|
ArrLit.AddElement(CreateLiteralNumber(RangeEl,aMaxValue-aMinValue+1));
|
|
ArrLit.AddElement(CreateLiteralNumber(RangeEl,aMaxValue-aMinValue+1));
|
|
inc(Index);
|
|
inc(Index);
|
|
if Index=length(Arr.Ranges) then
|
|
if Index=length(Arr.Ranges) then
|
|
@@ -8801,7 +8809,8 @@ begin
|
|
btPointer:
|
|
btPointer:
|
|
begin
|
|
begin
|
|
// create rtl.basename
|
|
// create rtl.basename
|
|
- Result:=CreateMemberExpression([FBuiltInNames[pbivnRTL],lowercase(BaseTypeNames[bt])]);
|
|
|
|
|
|
+ Result:=CreateMemberExpression([FBuiltInNames[pbivnRTL],lowercase(
|
|
|
|
+ AContext.Resolver.BaseTypeNames[bt])]);
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
btCustom:
|
|
btCustom:
|
|
@@ -8824,12 +8833,12 @@ begin
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
{$IFDEF VerbosePas2JS}
|
|
{$IFDEF VerbosePas2JS}
|
|
- writeln('TPasToJSConverter.CreateTypeInfoRef [20170409174645] El=',GetObjName(El),' El.CustomData=',GetObjName(El.CustomData),' bt=',BaseTypeNames[bt]);
|
|
|
|
|
|
+ writeln('TPasToJSConverter.CreateTypeInfoRef [20170409174645] El=',GetObjName(El),' El.CustomData=',GetObjName(El.CustomData),' bt=',AContext.Resolver.BaseTypeNames[bt]);
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
end
|
|
end
|
|
else
|
|
else
|
|
{$IFDEF VerbosePas2JS}
|
|
{$IFDEF VerbosePas2JS}
|
|
- writeln('TPasToJSConverter.CreateTypeInfoRef [20170409173746] El=',GetObjName(El),' El.CustomData=',GetObjName(El.CustomData),' bt=',BaseTypeNames[bt]);
|
|
|
|
|
|
+ writeln('TPasToJSConverter.CreateTypeInfoRef [20170409173746] El=',GetObjName(El),' El.CustomData=',GetObjName(El.CustomData),' bt=',AContext.Resolver.BaseTypeNames[bt]);
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
end;
|
|
end;
|
|
end
|
|
end
|
|
@@ -9640,7 +9649,8 @@ begin
|
|
begin
|
|
begin
|
|
AContext.Resolver.ComputeElement(El.VariableName,ResolvedVar,[rcNoImplicitProc]);
|
|
AContext.Resolver.ComputeElement(El.VariableName,ResolvedVar,[rcNoImplicitProc]);
|
|
if not (ResolvedVar.IdentEl is TPasVariable) then
|
|
if not (ResolvedVar.IdentEl is TPasVariable) then
|
|
- DoError(20170213214404,nExpectedXButFoundY,sExpectedXButFoundY,['var',GetResolverResultDescription(ResolvedVar)],El);
|
|
|
|
|
|
+ DoError(20170213214404,nExpectedXButFoundY,sExpectedXButFoundY,['var',
|
|
|
|
+ AContext.Resolver.GetResolverResultDescription(ResolvedVar)],El);
|
|
end;
|
|
end;
|
|
SimpleAss.LHS:=ConvertElement(El.VariableName,AContext);
|
|
SimpleAss.LHS:=ConvertElement(El.VariableName,AContext);
|
|
SimpleAss.Expr:=ConvertElement(El.StartExpr,AContext);
|
|
SimpleAss.Expr:=ConvertElement(El.StartExpr,AContext);
|
|
@@ -10069,7 +10079,7 @@ begin
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
{$IFDEF VerbosePas2JS}
|
|
{$IFDEF VerbosePas2JS}
|
|
- writeln('TPasToJSConverter.CreateVarInit unknown PasType T=',GetObjName(T),' basetype=',BaseTypeNames[bt]);
|
|
|
|
|
|
+ writeln('TPasToJSConverter.CreateVarInit unknown PasType T=',GetObjName(T),' basetype=',AContext.Resolver.BaseTypeNames[bt]);
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
RaiseNotSupported(PasType,AContext,20170208162121);
|
|
RaiseNotSupported(PasType,AContext,20170208162121);
|
|
end;
|
|
end;
|