MCPcopy Create free account
hub / github.com/AutoHotkey/AutoHotkey / CreateRootPrototypes

Method CreateRootPrototypes

source/script_object.cpp:2947–3057  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2945
2946
2947Object *Object::CreateRootPrototypes()
2948{
2949 // Create the root prototypes before defining any members, since
2950 // each member relies on Func::sPrototype having been initialized.
2951 sAnyPrototype = CreatePrototype(_T("Any"), nullptr);
2952 sPrototype = CreatePrototype(_T("Object"), sAnyPrototype);
2953 Func::sPrototype = CreatePrototype(_T("Func"), Object::sPrototype);
2954
2955 // These methods correspond to global functions, as BuiltInMethod
2956 // only handles Objects, and these must handle primitive values.
2957 static const LPTSTR sFuncs[] = { _T("GetMethod"), _T("HasBase"), _T("HasMethod"), _T("HasProp") };
2958 for (int i = 0; i < _countof(sFuncs); ++i)
2959 sAnyPrototype->DefineMethod(sFuncs[i], g_script.FindFunc(sFuncs[i]));
2960 auto prop = sAnyPrototype->DefineProperty(_T("Base"));
2961 prop->MinParams = 0;
2962 prop->MaxParams = 0;
2963 prop->SetGetter(g_script.FindFunc(_T("ObjGetBase")));
2964 prop->SetSetter(g_script.FindFunc(_T("ObjSetBase")));
2965
2966 // Define __Init so that Script::DefineClassInit can add an unconditional super.__Init().
2967 static auto __Init = new BuiltInFunc { _T(""), Any___Init, 1, 1 };
2968 sAnyPrototype->DefineMethod(_T("__Init"), __Init);
2969
2970 DefineMembers(sPrototype, _T("Object"), sMembers, _countof(sMembers));
2971 DefineMembers(Func::sPrototype, _T("Func"), Func::sMembers, _countof(Func::sMembers));
2972
2973 // Create classes.
2974 //
2975
2976 sClassPrototype = Object::CreatePrototype(_T("Class"), Object::sPrototype);
2977 auto anyClass = CreateClass(_T("Any"), sClassPrototype, sAnyPrototype, nullptr);
2978 Object::sClass = CreateClass(_T("Object"), anyClass, Object::sPrototype, NewObject<Object>);
2979
2980 ObjectCtor no_ctor = nullptr;
2981 ObjectMember *no_members = nullptr;
2982
2983 DefineClasses(Object::sClass, Object::sPrototype, {
2984 {_T("Array"), &Array::sPrototype, NewObject<Array>
2985 , Array::sMembers, _countof(Array::sMembers)},
2986 {_T("Buffer"), &BufferObject::sPrototype, NewObject<BufferObject>, BufferObject::sMembers, _countof(BufferObject::sMembers), {
2987 {_T("ClipboardAll"), &ClipboardAll::sPrototype, NewObject<ClipboardAll>
2988 , ClipboardAll::sMembers, _countof(ClipboardAll::sMembers)}
2989 }},
2990 {_T("Class"), &Object::sClassPrototype},
2991 {_T("Error"), &ErrorPrototype::Error, no_ctor, sErrorMembers, _countof(sErrorMembers), {
2992 {_T("IndexError"), &ErrorPrototype::Index, no_ctor, no_members, 0, {
2993 {_T("KeyError"), &ErrorPrototype::Key}
2994 }},
2995 {_T("MemberError"), &ErrorPrototype::Member, no_ctor, no_members, 0, {
2996 {_T("PropertyError"), &ErrorPrototype::Property},
2997 {_T("MethodError"), &ErrorPrototype::Method}
2998 }},
2999 {_T("MemoryError"), &ErrorPrototype::Memory},
3000 {_T("OSError"), &ErrorPrototype::OS, no_ctor, sOSErrorMembers, _countof(sOSErrorMembers)},
3001 {_T("TargetError"), &ErrorPrototype::Target},
3002 {_T("TimeoutError"), &ErrorPrototype::Timeout},
3003 {_T("TypeError"), &ErrorPrototype::Type},
3004 {_T("ValueError"), &ErrorPrototype::Value},

Callers

nothing calls this directly

Calls 8

DefineClassesFunction · 0.85
DefineFileClassFunction · 0.85
DefineMethodMethod · 0.80
FindFuncMethod · 0.80
DefinePropertyMethod · 0.80
SetGetterMethod · 0.80
SetSetterMethod · 0.80

Tested by

no test coverage detected