ObjectScript API, C ++ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдгред рднрд╛рдЧ 1: рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, C ++ рд╕реЗ OS рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

ObjectScript рдПрдХ рдирдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИред ObjectScript рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд▓реБрдЖ рдФрд░ PHP рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рд╣рдм рдкрд░ рд╣реБрдИ рдФрд░ рдкрд╛рдардХреЛрдВ рдХреЗ рдмреАрдЪ рд░реБрдЪрд┐ рдФрд░ рдЧрд░реНрдордЬреЛрд╢реА рд╕реЗ рдЪрд░реНрдЪрд╛ рд╣реБрдИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдиреЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдореИрдВ рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдХрд░ рд▓реЗрдЦреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЫреЛрдЯрд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рднрд╛рдЧ 1: рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, C ++ рд╕реЗ OS рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛


OS (ObjectScript) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

#include "objectscript.h" using namespace ObjectScript; int main() { OS * os = OS::create(); // TODO: main code here os->release(); return 0; } 

рдпрд╛рдиреА рдПрдХ рдУрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рдЯрд╛рдПрдВ, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ delete рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ release рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗред

рдУрдПрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд╡рд╛рдВрдЫрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдЖрдЧреЗ, рдореИрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдЬреЛ TODO рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП : рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреЛрдб ред

рддреЛ, рдЪрд▓рд┐рдП C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд OS рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ:

 print("10 * (3+2) = ", 10 * (3+2)) 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ: рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓, рдкрд╣рд▓рд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рджреВрд╕рд░рд╛ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рджреЛ рдорд╛рди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЦреБрдж рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдереИрддрд┐рдХ рдлрд╝рдВрдХреНрд╢рди, рддреЛ null рдХреЛ this рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ:

  os->getGlobal("print"); // #1 -     os->pushNull(); // #2 

рдЕрдм рд╣рдо рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  os->pushString("10 * (3+2) = "); // #3 -   

рдЕрдм рд╣рдо рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рддреАрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ:

  os->pushNumber(10); // #4 os->pushNumber(3); // #5 os->pushNumber(2); // #6 os->runOp(OP_ADD); // #5 - 3+2 os->runOp(OP_MUL); // #4 - 10 * (3+2) 

рд╣реЛ рдЧрдпрд╛! runOp рд╡рд┐рдзрд┐ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдЧрдгрд┐рддреАрдп, рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрдЧрд╛, рдЖрджрд┐ ... OP_ADD рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджреЛ рдорд╛рдиреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд╛рд░ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ (рдпрд╛рдиреА, рд╕реНрдЯреИрдХ рд╕реЗ рджреЛ рдорд╛рди рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛)ред OP_MUL - рдЧреБрдгрд╛ рдХреЗ рд╕рдорд╛рдиред

рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдкрд░ 4 рдорд╛рди рд╣реЛрдВрдЧреЗ: 1 - рдлрд╝рдВрдХреНрд╢рди, 2 - рдирд▓, 3 - рд╕реНрдЯреНрд░рд┐рдВрдЧ, 4 - рд╕рдВрдЦреНрдпрд╛ред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЖрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  os->call(2); //    2  

рдпрд╣реА рд╣реИ, рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рдХрдВрд╕реЛрд▓ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ), рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 10 * (3+2) = 50 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ 4 рдорд╛рди рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг 2


рд╣рдо OS рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:

 bar = {firsname="James", lastname="Bond"} bar.profession = "actor" print bar 

рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ:

 os->newObject(); // #1 

рдкрд╣рд▓рд╛ рдЧреБрдг firsname="James" рд╕реЗрдЯ рдХрд░реЗрдВ:

 os->pushStackValue(-1); // #2 

-1, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)ред

 os->pushString("firsname"); // #3 -   os->pushString("James"); // #4 -    os->setProperty(); // #1 

setProperty рд╡рд┐рдзрд┐ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддреА рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рддреАрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдФрд░ рдореВрд▓реНрдп)ред

рд╣рдо рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЫреЛрдЯреЗ рддрд░реАрдХреЗ рд╕реЗ:

 os->pushString("Bond"); // #2 -  os->setProperty(-2, "lastname"); // #1 

-2, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рджреВрд╕рд░реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрдХреЗрддрдХ рд╣реИ (рдпрд╣ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рд╣реИ), рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ "Bond" рдЕрдм рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИред

рдЕрдм рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрд╛рд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

 os->setGlobal("bar"); // #0 

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЕрдм рдХреЛрдб bar.profession = "actor" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред bar.profession = "actor" :

 os->getGlobal("bar"); // #1 -      bar os->pushString("actor"); // #2 os->setProperty(-2, "profession"); // #1 os->pop(); // #0 -    bar   

рд╣реЛ рдЧрдпрд╛, рдЕрдм print bar :

 os->getGlobal("print"); // #1 os->pushNull(); // #2 os->getGlobal("bar"); // #3 os->call(1); // #0 

рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦреЛ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 {"firsname":"James","lastname":"Bond","profession":"actor"} 

рдЙрджрд╛рд╣рд░рдг 3


рд╣рдо OS рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:

 print(concat(5, " big differences")) 

рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 os->getGlobal("print"); // #1 -      print os->pushNull(); // #2 -  this   print os->getGlobal("concat"); // #3 -      concat os->pushNull(); // #4 -  this   concat os->pushNumber(5); // #5 -    concat os->pushString(" big differences"); // #6 -    concat os->call(2, 1); // #3 -   concat 

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдордиреЗ 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ 1 рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ (concat 1 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╣рдо 0 рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╣рдореЗрдВ 2 рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ) рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЙрдирдХрдЯ рдлрдВрдХреНрд╢рди рд╕реЗ рд╣реЛрдЧрд╛, рдФрд░ рдмрд╛рдХреА рдирд▓ рд╕реЗ рдкреВрд░рдХ рд╣реЛрдЧрд╛)ред

рдЕрдм рдХреЙрд▓ print :

 os->call(1); // #0 

рдХрдВрд╕реЛрд▓ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 5 big differences 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда:

 #include "objectscript.h" using namespace ObjectScript; int main() { OS * os = OS::create(); /* print("10 * (3+2) = ", 10 * (3+2)) */ os->getGlobal("print"); // #1 - stack values, it's print function from standart library os->pushNull(); // #2 - null, it's function this, each call of function must have this // push the first argument os->pushString("10 * (3+2) = "); // #3 - we have 3 stack values here // prepare second argument os->pushNumber(10); // #4 os->pushNumber(3); // #5 os->pushNumber(2); // #6 os->runOp(OP_ADD); // #5 - 3+2 os->runOp(OP_MUL); // #4 - 10 * (3+2) os->call(2); // call function with 2 arguments /* bar = {firsname="James", lastname="Bond"} bar.profession = "actor" print bar */ os->newObject(); // #1 - new object os->pushStackValue(-1); // #2 - the same object, -1 - is relative pointer to the top stack value os->pushString("firsname"); // #3 - property key os->pushString("James"); // #4 - property value os->setProperty(); // #1 - setProperty uses 3 stack values and pop them // second way of same functionality os->pushString("Bond"); // #2 - property value os->setProperty(-2, "lastname"); // #1 os->setGlobal("bar"); // #0 - assign object value to global bar variable, pop value // let's do bar.profession = "actor" os->getGlobal("bar"); // #1 - our global a variable os->pushString("actor"); // #2 - property value os->setProperty(-2, "profession"); // #1 os->pop(); // #0 // let's do print bar os->getGlobal("print"); // #1 os->pushNull(); // #2 os->getGlobal("bar"); // #3 os->call(1); // #0 /* print(concat(5, " big differences")) */ os->getGlobal("print"); // #1 - print function os->pushNull(); // #2 - this for print os->getGlobal("concat"); // #3 - concat function os->pushNull(); // #4 - this for concat os->pushNumber(5); // #5 os->pushString(" big differences"); // #6 os->call(2, 1); // #3 - result is already at the top of stack os->call(1); // #0 os->release(); return 0; } 

рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , proj.win32 \ example.sln , stack_usage рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ ред

Source: https://habr.com/ru/post/In152797/


All Articles