JavascriptGeneratorFunction.h 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class GeneratorVirtualScriptFunction;
  9. class JavascriptGeneratorFunction : public ScriptFunctionBase
  10. {
  11. private:
  12. static FunctionInfo functionInfo;
  13. GeneratorVirtualScriptFunction* scriptFunction;
  14. DEFINE_VTABLE_CTOR(JavascriptGeneratorFunction, ScriptFunctionBase);
  15. DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptGeneratorFunction);
  16. bool GetPropertyBuiltIns(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext, BOOL* result);
  17. bool SetPropertyBuiltIns(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info, BOOL* result);
  18. protected:
  19. JavascriptGeneratorFunction(DynamicType* type);
  20. public:
  21. JavascriptGeneratorFunction(DynamicType* type, GeneratorVirtualScriptFunction* scriptFunction);
  22. virtual JavascriptString* GetDisplayNameImpl() const override;
  23. GeneratorVirtualScriptFunction* GetGeneratorVirtualScriptFunction() { return scriptFunction; }
  24. static JavascriptGeneratorFunction* FromVar(Var var);
  25. static bool Is(Var var);
  26. static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionProxy** proxyRef);
  27. static Var EntryGeneratorFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...);
  28. static DWORD GetOffsetOfScriptFunction() { return offsetof(JavascriptGeneratorFunction, scriptFunction); }
  29. virtual Var GetHomeObj() const override;
  30. virtual void SetHomeObj(Var homeObj) override;
  31. virtual void SetComputedNameVar(Var computedNameVar) override;
  32. virtual Var GetComputedNameVar() const override;
  33. virtual bool IsAnonymousFunction() const override;
  34. virtual Var GetSourceString() const;
  35. virtual Var EnsureSourceString();
  36. virtual BOOL HasProperty(PropertyId propertyId) override;
  37. virtual BOOL GetProperty(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  38. virtual BOOL GetProperty(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  39. virtual BOOL GetPropertyReference(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  40. virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override;
  41. virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override;
  42. virtual BOOL GetAccessors(PropertyId propertyId, Var *getter, Var *setter, ScriptContext * requestContext) override;
  43. virtual DescriptorFlags GetSetter(PropertyId propertyId, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override;
  44. virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override;
  45. virtual BOOL InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags = PropertyOperation_None, PropertyValueInfo* info = NULL) override;
  46. virtual BOOL DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) override;
  47. virtual BOOL IsWritable(PropertyId propertyId) override;
  48. virtual BOOL IsEnumerable(PropertyId propertyId) override;
  49. virtual bool IsGeneratorFunction() const { return true; };
  50. class EntryInfo
  51. {
  52. public:
  53. static FunctionInfo NewInstance;
  54. };
  55. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  56. };
  57. class GeneratorVirtualScriptFunction : public ScriptFunction
  58. {
  59. private:
  60. friend class JavascriptGeneratorFunction;
  61. friend Var Js::JavascriptFunction::NewInstanceHelper(ScriptContext*, RecyclableObject*, CallInfo, ArgumentReader&, Js::JavascriptFunction::FunctionKind);
  62. JavascriptGeneratorFunction* realFunction;
  63. void SetRealGeneratorFunction(JavascriptGeneratorFunction* realFunction) { this->realFunction = realFunction; }
  64. public:
  65. GeneratorVirtualScriptFunction(FunctionProxy* proxy, ScriptFunctionType* deferredPrototypeType) : ScriptFunction(proxy, deferredPrototypeType) { }
  66. static uint32 GetRealFunctionOffset() { return offsetof(GeneratorVirtualScriptFunction, realFunction); }
  67. virtual JavascriptFunction* GetRealFunctionObject() override { return realFunction; }
  68. };
  69. }