From 4a490323e157220cc55c996091d189ffa8073418 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Thu, 4 Jan 2018 19:59:12 +0000 Subject: [PATCH] pastojs: error on record variant git-svn-id: trunk@37910 - --- packages/pastojs/src/fppas2js.pp | 18 +++++++++++++----- packages/pastojs/tests/tcmodules.pas | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp index 7c4bf8112c..97da365b1d 100644 --- a/packages/pastojs/src/fppas2js.pp +++ b/packages/pastojs/src/fppas2js.pp @@ -260,11 +260,11 @@ Works: - set of int/enum/char range, in - array[rg], low(array), high(array), length(array) - enumeration for..in..do - - enum, enum range, set of enum, set of enum range - - int, int range, set of int, set of int range - - char, char range, set of char, set of char range - - array - - class + - enum, enum range, set of enum, set of enum range + - int, int range, set of int, set of int range + - char, char range, set of char, set of char range + - array + - class ToDos: - remove hasOwnProperty from rtl set functions @@ -921,6 +921,7 @@ type Access: TResolvedRefAccess); override; procedure FinishModule(CurModule: TPasModule); override; procedure FinishSetType(El: TPasSetType); override; + procedure FinishRecordType(El: TPasRecordType); override; procedure FinishClassType(El: TPasClassType); override; procedure FinishVariable(El: TPasVariable); override; procedure FinishProcedureType(El: TPasProcedureType); override; @@ -2128,6 +2129,13 @@ begin RaiseMsg(20170415182320,nNotSupportedX,sNotSupportedX,['set of '+TypeEl.Name],El); end; +procedure TPas2JSResolver.FinishRecordType(El: TPasRecordType); +begin + if (El.Variants<>nil) and (El.Variants.Count>0) then + RaiseMsg(20180104205309,nXIsNotSupported,sXIsNotSupported,['variant record'],TPasElement(El.Variants[0])); + inherited FinishRecordType(El); +end; + procedure TPas2JSResolver.FinishClassType(El: TPasClassType); begin inherited FinishClassType(El); diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas index b5f2b43491..10767a445c 100644 --- a/packages/pastojs/tests/tcmodules.pas +++ b/packages/pastojs/tests/tcmodules.pas @@ -347,6 +347,7 @@ type Procedure TestRecordElementFromWith_AsParams; Procedure TestRecord_Equal; Procedure TestRecord_TypeCastJSValueToRecord; + Procedure TestRecord_VariantFail; // ToDo: const record // classes @@ -6944,6 +6945,22 @@ begin ''])); end; +procedure TTestModule.TestRecord_VariantFail; +begin + StartProgram(false); + Add([ + 'type', + ' TRec = record', + ' case word of', + ' 0: (b0, b1: Byte);', + ' 1: (i: word);', + ' end;', + 'begin']); + SetExpectedPasResolverError('variant record is not supported', + nXIsNotSupported); + ConvertProgram; +end; + procedure TTestModule.TestClass_TObjectDefaultConstructor; begin StartProgram(false);