From 04333c87ebd05ef7236628b4a934c8e05819cdfb Mon Sep 17 00:00:00 2001 From: maorun1 Date: Thu, 6 Jun 2024 17:08:14 +0800 Subject: [PATCH] add ArktsCollections.Map code generator --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 71b94d9..6308c32 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -32,16 +32,29 @@ fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstan b.construct(constructor) } +/// ArkTS collections Generators +fileprivate let ArkTSCollectionsObjectInstanceGenerator = ValueGenerator("ArkTSCollectionsObjectInstanceGenerator") { b, n in + let builtin = chooseUniform(from: ["SharedMap"]) + let constructor = b.loadBuiltin(builtin) + b.construct(constructor) +} + /// Type of a ArkTS Stack object. fileprivate let arkTSStack = ILType.iterable + ILType.object(ofGroup: "Stack", withProperties: ["length"], withMethods: ["push", "pop", "peek", "locate", "forEach", "isEmpty"]) /// Type of a ArkTS HashMap object. fileprivate let arkTSHashMap = ILType.iterable + ILType.object(ofGroup: "HashMap", withProperties: ["length"], withMethods: ["isEmpty", "hasKey", "hasValue", "get", "setAll", "set", "remove", "clear", "keys", "values", "replace", "forEach", "entries"]) +/// Tpye of a ArkTS CollectionsMap object +fileprivate let collectionsMap = ILType.iterable + ILType.object(ofGroup: "SharedMap", withProperties: ["size"], withMethods: ["entries", "keys", "values", "clear", "delete", "forEach", "get", "has", "set"]) + /// Type of the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) /// Type of the ArkTS HashMap constructor builtin. fileprivate let arkTSHashMapConstructor = ILType.constructor([] => arkTSHashMap) +/// Type of the ArkTs Map constructor builtin. +fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) + /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( name: "Stack", @@ -83,6 +96,26 @@ fileprivate let arkTSHashMaps = ObjectGroup( ] ) +///ObjectGroup modelling ArkTs Map objects +fileprivate let collectionsMaps = ObjectGroup( + name: "SharedMap", + instanceType: collectionsMap, + properties: [ + "size" : .integer + ], + methods: [ + "entries" : [] => .object(), + "keys" : [] => .object(), + "values" : [] => .object(), + "clear" : [] => .undefined, + "delete" : [.anything] => .boolean, + "forEach" : [.function(), .opt(.object())] => .undefined, + "get" : [.anything] => .anything, + "has" : [.anything] => .boolean, + "set" : [.anything, .anything] => collectionsMap, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -102,7 +135,7 @@ let arkProfile = Profile( let arkPrivate = globalThis.ArkPrivate; arkPrivate.Load(arkPrivate.Stack); arkPrivate.Load(arkPrivate.HashMap); - + let myMap = new SharedMap(); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} let a = new Array(0x10000); @@ -125,6 +158,7 @@ let arkProfile = Profile( (PrintGenerator, 40), (RunNearStackLimitGenerator, 5), (ArkTSObjectInstanceGenerator, 20), + (ArkTSCollectionsObjectInstanceGenerator, 50), ], additionalProgramTemplates: WeightedList([]), @@ -146,11 +180,13 @@ let arkProfile = Profile( "bgc" : .function([] => .undefined), "Stack" : arkTSStackConstructor, "HashMap" : arkTSHashMapConstructor, + "SharedMap" : collectionsMapConstructor, ], additionalObjectGroups: [ arkTSStacks, arkTSHashMaps, + collectionsMaps, ], optionalPostProcessor: nil -- Gitee