Я экспериментирование с двигателем V8, я не программист на С, и это очень трудно для меня .Но мне нужна эта вещь для себяTYPEOF в двигателе V8
меняю функция RUNTIME_FUNCTION (Runtime_Typeof); (Runtime-object.cc) И теперь, если создать прокси в JS:
prx = Proxy.create({
get:function(k,v){
if(v == '%type_of%'){
return 'string'
}
.......
}
})
typeof prx -> "string"
Хорошо, я хочу этот эффект
НО если попытаться сделать сравнения:
typeof prx == 'string' -> false =(
typeof prx == 'object' -> true
(x = typeof prx) == 'string' -> true
После многих часов я нашел это: В V8 (full-codegen-x64.cc) существует этот func void FullCodeGenerator :: EmitLiteralCompareType из
Он выглядит как Оптимизатор для выражения
typeof prx == "string" || "number" || "object" and etc..
if (String::Equals(check, factory->number_string())) {
...
} else if (String::Equals(check, factory->string_string())) {
and etc...
это не называют Runtime_Typeof и
typeof prx -> "string"
typeof prx == 'string' -> false =(
Как я могу проверить, если TypeOf ргх это прокси-сервер, то v8 необходимо позвонить по телефону Runtime_Typeof ..
если typeof prx -> string, then typeof == 'string' must be true!
Помогите мне пожалуйста
Да, я знаю, что это плохая идея, потому что прокси должен быть объектом С другой стороны, когда я изменил Runtime_Typeof и скомпилировать .. он работает правильно На самом деле я не могу понять, что здесь происходит .. * * аннулируются FullCodeGenerator :: EmitLiteralCompareTypeof (выражение, sub_expr, чек) ** ** sub_expr -> это мой [TypeOf ргх] ** ** {AccumulatorValueContext контекст (это); VisitForTypeofValue (sub_expr); ** _ <- wtf? это означает, что v8 проверяет тип?_ **} ** –
Ralo
Тот факт, что он скомпилирован и не сработал сразу, не означает, что он работал «правильно». Возможно, я мог бы создать программу, которая сработала бы под этим изменением с небольшими усилиями. (Я не уверен, что конкретно ваш вопрос выше, но он генерирует код, специально предназначенный для случая, когда RHS является строковым литералом.) –
Андреас Россберг, о том, что вы правы Большое вам спасибо, но мне это действительно нужно: \ – Ralo