mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 09:06:02 +02:00
webidl: wasmjob: object attribute
This commit is contained in:
parent
c50ef1efcf
commit
6aaa92680c
@ -602,8 +602,9 @@ end;
|
|||||||
function TWebIDLToPasWasmJob.WritePrivateGetter(Attr: TIDLAttributeDefinition
|
function TWebIDLToPasWasmJob.WritePrivateGetter(Attr: TIDLAttributeDefinition
|
||||||
): boolean;
|
): boolean;
|
||||||
var
|
var
|
||||||
FuncName, TypeName, aClassName, Code, ReadFuncName: String;
|
FuncName, TypeName, aClassName, Code, ReadFuncName, Call: String;
|
||||||
Data: TPasDataWasmJob;
|
Data: TPasDataWasmJob;
|
||||||
|
TypeDef: TIDLDefinition;
|
||||||
begin
|
begin
|
||||||
Result:=true;
|
Result:=true;
|
||||||
if Attr.AttributeType=nil then
|
if Attr.AttributeType=nil then
|
||||||
@ -612,11 +613,16 @@ begin
|
|||||||
|
|
||||||
FuncName:=GetterPrefix+GetName(Attr);
|
FuncName:=GetterPrefix+GetName(Attr);
|
||||||
TypeName:=GetTypeName(Attr.AttributeType);
|
TypeName:=GetTypeName(Attr.AttributeType);
|
||||||
|
TypeDef:=FindGlobalDef(Attr.AttributeType.TypeName);
|
||||||
|
if TypeDef is TIDLInterfaceDefinition then
|
||||||
|
TypeName:=ClassToPasIntfName(TypeName);
|
||||||
|
|
||||||
AddLn('function '+FuncName+': '+TypeName+';');
|
AddLn('function '+FuncName+': '+TypeName+';');
|
||||||
|
|
||||||
if Data.GetterBody<>'' then exit;
|
if Data.GetterBody<>'' then exit;
|
||||||
|
|
||||||
aClassName:=GetName(Attr.Parent);
|
aClassName:=GetName(Attr.Parent);
|
||||||
|
Call:='';
|
||||||
|
|
||||||
case TypeName of
|
case TypeName of
|
||||||
'Boolean': ReadFuncName:='ReadJSPropertyBoolean';
|
'Boolean': ReadFuncName:='ReadJSPropertyBoolean';
|
||||||
@ -633,12 +639,15 @@ begin
|
|||||||
'UnicodeString': ReadFuncName:='ReadJSPropertyUnicodeString';
|
'UnicodeString': ReadFuncName:='ReadJSPropertyUnicodeString';
|
||||||
'TJOB_JSValue': ReadFuncName:='ReadJSPropertyValue';
|
'TJOB_JSValue': ReadFuncName:='ReadJSPropertyValue';
|
||||||
else
|
else
|
||||||
raise EWebIDLParser.Create('not yet implemented: Getter '+Typename);
|
Call:='ReadJSPropertyObject('+Attr.Name+','''+GetTypeName(Attr.AttributeType)+''')';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if Call='' then
|
||||||
|
Call:=ReadFuncName+'('''+Attr.Name+''')';
|
||||||
|
|
||||||
Code:='function '+aClassName+'.'+FuncName+': '+TypeName+';'+sLineBreak;
|
Code:='function '+aClassName+'.'+FuncName+': '+TypeName+';'+sLineBreak;
|
||||||
Code:=Code+'begin'+sLineBreak;
|
Code:=Code+'begin'+sLineBreak;
|
||||||
Code:=Code+' Result:='+ReadFuncName+'('''+Attr.Name+''');'+sLineBreak;
|
Code:=Code+' Result:='+Call+';'+sLineBreak;
|
||||||
Code:=Code+'end;'+sLineBreak;
|
Code:=Code+'end;'+sLineBreak;
|
||||||
|
|
||||||
Data.GetterBody:=Code;
|
Data.GetterBody:=Code;
|
||||||
@ -648,8 +657,9 @@ end;
|
|||||||
function TWebIDLToPasWasmJob.WritePrivateSetter(Attr: TIDLAttributeDefinition
|
function TWebIDLToPasWasmJob.WritePrivateSetter(Attr: TIDLAttributeDefinition
|
||||||
): boolean;
|
): boolean;
|
||||||
var
|
var
|
||||||
FuncName, TypeName, aClassName, WriteFuncName, Code: String;
|
FuncName, TypeName, aClassName, WriteFuncName, Code, Call: String;
|
||||||
Data: TPasDataWasmJob;
|
Data: TPasDataWasmJob;
|
||||||
|
TypeDef: TIDLDefinition;
|
||||||
begin
|
begin
|
||||||
if aoReadOnly in Attr.Options then
|
if aoReadOnly in Attr.Options then
|
||||||
exit(false);
|
exit(false);
|
||||||
@ -660,11 +670,15 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
FuncName:=SetterPrefix+GetName(Attr);
|
FuncName:=SetterPrefix+GetName(Attr);
|
||||||
TypeName:=GetTypeName(Attr.AttributeType);
|
TypeName:=GetTypeName(Attr.AttributeType);
|
||||||
|
TypeDef:=FindGlobalDef(Attr.AttributeType.TypeName);
|
||||||
|
if TypeDef is TIDLInterfaceDefinition then
|
||||||
|
TypeName:=ClassToPasIntfName(TypeName);
|
||||||
AddLn('Procedure '+FuncName+'(const aValue: '+TypeName+');');
|
AddLn('Procedure '+FuncName+'(const aValue: '+TypeName+');');
|
||||||
|
|
||||||
if Data.SetterBody<>'' then exit;
|
if Data.SetterBody<>'' then exit;
|
||||||
|
|
||||||
aClassName:=GetName(Attr.Parent);
|
aClassName:=GetName(Attr.Parent);
|
||||||
|
Call:='';
|
||||||
|
|
||||||
case TypeName of
|
case TypeName of
|
||||||
'Boolean': WriteFuncName:='WriteJSPropertyBoolean';
|
'Boolean': WriteFuncName:='WriteJSPropertyBoolean';
|
||||||
@ -681,12 +695,15 @@ begin
|
|||||||
'UnicodeString': WriteFuncName:='WriteJSPropertyUnicodeString';
|
'UnicodeString': WriteFuncName:='WriteJSPropertyUnicodeString';
|
||||||
'TJOB_JSValue': WriteFuncName:='WriteJSPropertyValue';
|
'TJOB_JSValue': WriteFuncName:='WriteJSPropertyValue';
|
||||||
else
|
else
|
||||||
raise EConvertError.Create('not yet implemented: Setter '+Typename);
|
WriteFuncName:='WriteJSPropertyObject';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if Call='' then
|
||||||
|
Call:=WriteFuncName+'('''+Attr.Name+''',aValue)';
|
||||||
|
|
||||||
Code:='Procedure '+aClassName+'.'+FuncName+'(const aValue: '+TypeName+');'+sLineBreak;
|
Code:='Procedure '+aClassName+'.'+FuncName+'(const aValue: '+TypeName+');'+sLineBreak;
|
||||||
Code:=Code+'begin'+sLineBreak;
|
Code:=Code+'begin'+sLineBreak;
|
||||||
Code:=Code+' '+WriteFuncName+'('''+Attr.Name+''',aValue);'+sLineBreak;
|
Code:=Code+' '+Call+';'+sLineBreak;
|
||||||
Code:=Code+'end;'+sLineBreak;
|
Code:=Code+'end;'+sLineBreak;
|
||||||
|
|
||||||
Data.SetterBody:=Code;
|
Data.SetterBody:=Code;
|
||||||
@ -697,6 +714,7 @@ function TWebIDLToPasWasmJob.WriteProperty(Attr: TIDLAttributeDefinition
|
|||||||
): boolean;
|
): boolean;
|
||||||
var
|
var
|
||||||
PropName, TypeName, Code: String;
|
PropName, TypeName, Code: String;
|
||||||
|
TypeDef: TIDLDefinition;
|
||||||
begin
|
begin
|
||||||
if Attr.AttributeType=nil then
|
if Attr.AttributeType=nil then
|
||||||
begin
|
begin
|
||||||
@ -705,6 +723,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
PropName:=GetName(Attr);
|
PropName:=GetName(Attr);
|
||||||
TypeName:=GetTypeName(Attr.AttributeType);
|
TypeName:=GetTypeName(Attr.AttributeType);
|
||||||
|
TypeDef:=FindGlobalDef(Attr.AttributeType.TypeName);
|
||||||
|
if TypeDef is TIDLInterfaceDefinition then
|
||||||
|
TypeName:=ClassToPasIntfName(TypeName);
|
||||||
Code:='Property '+PropName+': '+TypeName+' read '+GetterPrefix+PropName;
|
Code:='Property '+PropName+': '+TypeName+' read '+GetterPrefix+PropName;
|
||||||
if not (aoReadOnly in Attr.Options) then
|
if not (aoReadOnly in Attr.Options) then
|
||||||
Code:=Code+' write '+SetterPrefix+PropName;
|
Code:=Code+' write '+SetterPrefix+PropName;
|
||||||
|
Loading…
Reference in New Issue
Block a user