//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- #pragma once #ifdef IR_VIEWER class IRtoJSObjectBuilder { private: static const int BUFFER_LEN = 256; private: /* CreateOpnd helper functions */ static Js::DynamicObject * CreateIntConstOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateFloatConstOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateHelperCallOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateSymOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateRegOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateAddrOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd, Func *func); static Js::DynamicObject * CreateIndirOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); static Js::DynamicObject * CreateLabelOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd); // TODO (doilij) memref // TODO (doilij) regbv public: /* create operands */ static Js::DynamicObject * CreateOpnd(Js::ScriptContext *scriptContext, IR::Opnd *opnd, Func *func); /* utility functions */ static Js::PropertyId CreateProperty(Js::ScriptContext *scriptContext, const char16 *propertyName); static void SetProperty(Js::DynamicObject *obj, const char16 *propertyName, Js::Var value); static void SetProperty(Js::DynamicObject *obj, Js::PropertyId id, Js::Var value); static void GetStatementSourceString(__out_ecount(len) char16 *buffer, LPCUTF8 sourceBegin, LPCUTF8 sourceEnd, const size_t len); /* create instructions */ static void CreateLabelInstruction(Js::ScriptContext *scriptContext, IR::LabelInstr *inst, Js::DynamicObject *currObject); static void CreateBranchInstruction(Js::ScriptContext *scriptContext, IR::BranchInstr *inst, Js::DynamicObject *currObject); static void CreatePragmaInstruction(Js::ScriptContext *scriptContext, IR::PragmaInstr *inst, Js::DynamicObject *currObject, Func *func); static void CreateDefaultInstruction(Js::ScriptContext *scriptContext, IR::Instr *inst, Js::DynamicObject *currObject, Func *func); static Js::DynamicObject * GetMetadata(Js::ScriptContext *scriptContext); static Js::DynamicObject * DumpIRtoJSObject(Func *func, Js::Phase phase); static void DumpIRtoGlobalObject(Func *func, Js::Phase phase); }; #endif /* IR_VIEWER */