| 2945 | |
| 2946 | |
| 2947 | Object *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}, |
nothing calls this directly
no test coverage detected