SLIDE 1
<? <?php php $ret = $ret = foo foo($a ($a); ); // C++ - - PowerPoint PPT Presentation
<? <?php php $ret = $ret = foo foo($a ($a); ); // C++ - - PowerPoint PPT Presentation
<? <?php php $ret = $ret = foo foo($a ($a); ); // C++ // C++ Variant v_ret Variant v_ret; ; Variant Variant v_a v_a; ; v_ret v_ret = = f_foo f_foo(v_a (v_a); ); Facebook 2010 (confidential) <?php <?
SLIDE 2
SLIDE 3
Facebook ¡2010 ¡(confidential) ¡
Variant Variant invoke(CStrRef invoke(CStrRef func func, , CArrRef CArrRef params params) { ) { int64 hash = int64 hash = hash_string(func hash_string(func); ); switch (hash) { switch (hash) { case 1234: case 1234: if ( if (func func == “ == “foo foo”) return foo(params[0]) ”) return foo(params[0]) } } throw throw FatalError(“function FatalError(“function not found”); not found”); } }
SLIDE 4
Facebook ¡2010 ¡(confidential) ¡
<? <?php php if ($condition) { if ($condition) { function function foo foo($a ($a) { return $a + 1;} ) { return $a + 1;} } else { } else { function function foo foo($a ($a) { return $a + 2;} ) { return $a + 2;} } } $ret = $ret = foo foo($a ($a); ); // C++ // C++ if ( if (v_condition v_condition) { ) { g->
- >i_foo
i_foo = i_foo$$0; = i_foo$$0; } else { } else { g->
- >i_foo
i_foo = i_foo$$1; = i_foo$$1; } } g-> g->i_foo i_foo(v_a (v_a); );
SLIDE 5
Facebook ¡2010 ¡(confidential) ¡
<? <?php php if (! if (!function_exists(‘foo function_exists(‘foo’)) { ’)) { bar($a bar($a); ); } else { } else { foo($a foo($a); ); } } function function foo($a foo($a) {} ) {} // C++ // C++ if ( if (f_function_exists(“foo f_function_exists(“foo”)) { ”)) { f_bar(v_a f_bar(v_a); ); } else { } else { f_foo(v_a f_foo(v_a); ); } } g->
- >declareFunction(“foo
declareFunction(“foo”); ”);
SLIDE 6
Facebook ¡2010 ¡(confidential) ¡
<? <?php php $foo foo = ‘hello’; = ‘hello’; function function foo($a foo($a) { ) { global $ global $foo foo; ; $bar = $ $bar = $foo foo . $a; . $a; return $bar; return $bar; } } // C++ // C++ String String f_foo(CStrRef f_foo(CStrRef v_a v_a) { ) { Variant & Variant &gv_foo gv_foo = = g->
- >GV(foo
GV(foo); ; String String v_bar v_bar; ; v_bar v_bar = = concat(toString(gv_foo concat(toString(gv_foo), ), v_a v_a); ); return return v_bar v_bar; ; } }
SLIDE 7
Facebook ¡2010 ¡(confidential) ¡
class class GlobalVariables GlobalVariables : public : public SystemGlobals SystemGlobals { { public: public: // Direct Global Variables // Direct Global Variables Variant Variant gv_foo gv_foo; ; // Indirect Global Variables for large compilation // Indirect Global Variables for large compilation enum enum _ _gv_enums gv_enums { { gv_foo gv_foo, , } } Variant gv[1]; Variant gv[1]; }; };
SLIDE 8
Facebook ¡2010 ¡(confidential) ¡ <? <?php php function function foo foo() { () { $ $b = 10; = 10; $a = ' $a = 'b'; '; echo( echo($$a $$a); ); } } void void f_foo f_foo() { () { class class VariableTable VariableTable : public : public RVariableTable RVariableTable { { public: public: int64 & int64 &v_b v_b; String & ; String &v_a v_a; ; VariableTable(int64 & VariableTable(int64 &r_b r_b, String & , String &r_a r_a) : ) : v_b(r_b v_b(r_b), ), v_a(r_a v_a(r_a) {} ) {} virtual Variant virtual Variant getImpl(const getImpl(const char * char *s) { ) { // hash – switch – // hash – switch – strcmp strcmp } } } } variableTable(v_b variableTable(v_b, , v_a v_a); ); echo( echo(variableTable.get("b variableTable.get("b”) ”)); ); } }
SLIDE 9
Facebook ¡2010 ¡(confidential) ¡
<? <?php php define(‘FOO define(‘FOO’, ‘hello’); ’, ‘hello’); echo FOO; echo FOO; // C++ // C++ echo(“hello echo(“hello” /* FOO */); ” /* FOO */);
SLIDE 10
Facebook ¡2010 ¡(confidential) ¡
<? <?php php if ($condition) { if ($condition) { define(‘FOO define(‘FOO’, ‘hello’); ’, ‘hello’); } else { } else { define(‘FOO define(‘FOO’, ‘world’); ’, ‘world’); } } echo FOO; echo FOO; // C++ // C++ if ( if (v_condition v_condition) { ) { g->
- >declareConstant("FOO
declareConstant("FOO", ", g->
- >k_FOO
k_FOO, "hello”); , "hello”); } else { } else { g->
- >declareConstant("FOO
declareConstant("FOO", ", g->
- >k_FOO
k_FOO, "world”); , "world”); } } echo(toString(g echo(toString(g->
- >k_FOO
k_FOO)); ));
SLIDE 11
Facebook ¡2010 ¡(confidential) ¡
SLIDE 12