-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Next level! #25
Next level! #25
Conversation
Упс... fatal: unable to connect to github.com. |
Terror.create = function (name, codes) { | ||
var Inheritor = new Function('Terror', sPrintF(SOURCE_CONSTRUCTOR, { | ||
name: name | ||
}))(Terror); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я правильно понимаю, что единственный смысл этого — иметь именованный конструктор от name
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Функционально - да.
Так же есть небольшой профит в производительности, поскольку нет необходимости рекурсивно вызывать все конструкторы в цепочке наследования. Сейчас вызывается только текущий конструктор и Terror. Этого можно было бы добиться и с замыканием, но я их не люблю.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так же есть небольшой профит в производительности, поскольку нет необходимости рекурсивно вызывать все конструкторы в цепочке наследования
Ты правда смог это воспроизвести на benchmark'ах? Или это видно по IR? Я конечно не копался очень детально, но разницы вообще никакой не увидел
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это очевидно, поскольку конструкторы неинлайновые и будут вызываться всегда. Профит стремится к нулю, зато префекционизм не страдает.
@B-Vladi squash commits, pls. I'll merge PR into temporary |
ed3f4db
to
d3ada9c
Compare
Done |
@an9eldust as I can remember, you was interested in Terror implementation for client-side. This PR provides some support, except IE. Are you still interested in it? |
Fixes for old IE |
merged manually into branch v1.2 |
Предпосылки для изменений:
Changelog:
Terror
теперь может принимать вторым аргументом объектerror
.originalError
. Существуют сторонние обертки над ошибками, использующие значение из этого свойства. Если в нем содержится что-то отличное отerror
, возникало исключение при работе сterror.originalError.stack
.Terror#message
содержит только оригинальное сообщение текущего объекта.Terror.stackTraceLimit
позволяет ограничивать глубину формируемого стека ошибки (если поддерживается интерпретатором). Может быть переопределено для любого конструктора, наследуемого отTerror
. С помощью данного свойства можно сильно снизить нагрузку на процессор, если устанавить его значение в 0 на высоких уровнях приложения.Terror.isTerror
теперь не падает, если передатьnull
илиundefined
.Terror#log
теперь логирует стеки всех обернутых ошибок.Terror#getFullMessage
возвращает полное сообщение об ошибке, включая сообщения обернутых экземпляров. Сообщение каждого объекта ошибки воспринимается как предложение. Формат возвращаемого значения:ERR_CODE Can not create page. Can not instance widget. a is no a function.
Terror#getFullStack
возвращает стеки всех обернутых экземпляров. Каждый последующий стек отбивается четыремя пробелами слева (стандартный отступ стека). К каждому сообщению об ошибке добавляется код.Terror#setMessage
теперь не меняет сообщение в сформированном стеке.MyError.name
).cd benchmark; npm test
.Terror
теперь не зависит от NodeJS и может выполняться в любом окружении (Issuse #1).Что нужно сделать:
Terror#getFullStack
, так как он сейчас жестко зашит в метод. Я бы оставил и так, ничего криминального в этом нет.Terror#logMultilineError
тоже этим грешит.README.md
и JSDoc. Мой английский не позволяет это сделать грамотно.