|
@@ -245,7 +245,6 @@ Works:
|
|
- use 0o for octal literals
|
|
- use 0o for octal literals
|
|
|
|
|
|
ToDos:
|
|
ToDos:
|
|
-- if jsvalue then
|
|
|
|
- constant evaluation
|
|
- constant evaluation
|
|
- integer ranges
|
|
- integer ranges
|
|
- static arrays
|
|
- static arrays
|
|
@@ -1089,13 +1088,6 @@ type
|
|
end;
|
|
end;
|
|
PForLoopFindData = ^TForLoopFindData;
|
|
PForLoopFindData = ^TForLoopFindData;
|
|
procedure ForLoop_OnProcBodyElement(El: TPasElement; arg: pointer);
|
|
procedure ForLoop_OnProcBodyElement(El: TPasElement; arg: pointer);
|
|
- private
|
|
|
|
- type
|
|
|
|
- TTryExceptFindData = record
|
|
|
|
- HasRaiseWithoutObject: boolean;
|
|
|
|
- end;
|
|
|
|
- PTryExceptFindData = ^TTryExceptFindData;
|
|
|
|
- procedure TryExcept_OnElement(El: TPasElement; arg: pointer);
|
|
|
|
private
|
|
private
|
|
FBuiltInNames: array[TPas2JSBuiltInName] of string;
|
|
FBuiltInNames: array[TPas2JSBuiltInName] of string;
|
|
FOnIsElementUsed: TPas2JSIsElementUsedEvent;
|
|
FOnIsElementUsed: TPas2JSIsElementUsedEvent;
|
|
@@ -7997,14 +7989,6 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TPasToJSConverter.TryExcept_OnElement(El: TPasElement; arg: pointer);
|
|
|
|
-var
|
|
|
|
- Data: PTryExceptFindData absolute arg;
|
|
|
|
-begin
|
|
|
|
- if (El is TPasImplRaise) and (TPasImplRaise(El).ExceptObject=nil) then
|
|
|
|
- Data^.HasRaiseWithoutObject:=true;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
procedure TPasToJSConverter.SetUseEnumNumbers(const AValue: boolean);
|
|
procedure TPasToJSConverter.SetUseEnumNumbers(const AValue: boolean);
|
|
begin
|
|
begin
|
|
if AValue then
|
|
if AValue then
|
|
@@ -8257,20 +8241,6 @@ end;
|
|
|
|
|
|
function TPasToJSConverter.ConvertTryStatement(El: TPasImplTry;
|
|
function TPasToJSConverter.ConvertTryStatement(El: TPasImplTry;
|
|
AContext: TConvertContext): TJSElement;
|
|
AContext: TConvertContext): TJSElement;
|
|
-
|
|
|
|
- function NeedExceptObject: boolean;
|
|
|
|
- var
|
|
|
|
- Data: TTryExceptFindData;
|
|
|
|
- begin
|
|
|
|
- Result:=false;
|
|
|
|
- if El.FinallyExcept.Elements.Count=0 then exit;
|
|
|
|
- if TPasElement(El.FinallyExcept.Elements[0]) is TPasImplExceptOn then
|
|
|
|
- exit(true);
|
|
|
|
- Data:=Default(TTryExceptFindData);
|
|
|
|
- El.FinallyExcept.ForEachCall(@TryExcept_OnElement,@Data);
|
|
|
|
- Result:=Data.HasRaiseWithoutObject;
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
Var
|
|
Var
|
|
T : TJSTryStatement;
|
|
T : TJSTryStatement;
|
|
ExceptBlock: TPasImplTryHandler;
|
|
ExceptBlock: TPasImplTryHandler;
|
|
@@ -8292,9 +8262,8 @@ begin
|
|
begin
|
|
begin
|
|
T:=TJSTryCatchStatement(CreateElement(TJSTryCatchStatement,El));
|
|
T:=TJSTryCatchStatement(CreateElement(TJSTryCatchStatement,El));
|
|
T.Block:=ConvertImplBlockElements(El,AContext,true);
|
|
T.Block:=ConvertImplBlockElements(El,AContext,true);
|
|
- if NeedExceptObject then
|
|
|
|
- T.Ident:=TJSString(FBuiltInNames[pbivnExceptObject]);
|
|
|
|
- //T.BCatch:=ConvertElement(El.FinallyExcept,AContext);
|
|
|
|
|
|
+ // always set the catch except object, needed by nodejs
|
|
|
|
+ T.Ident:=TJSString(FBuiltInNames[pbivnExceptObject]);
|
|
ExceptBlock:=El.FinallyExcept;
|
|
ExceptBlock:=El.FinallyExcept;
|
|
if (ExceptBlock.Elements.Count>0)
|
|
if (ExceptBlock.Elements.Count>0)
|
|
and (TPasImplElement(ExceptBlock.Elements[0]) is TPasImplExceptOn) then
|
|
and (TPasImplElement(ExceptBlock.Elements[0]) is TPasImplExceptOn) then
|